forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			100 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import BaseUIElement from "../BaseUIElement"
 | |
| import Translations from "../i18n/Translations"
 | |
| import { Utils } from "../../Utils"
 | |
| import Svg from "../../Svg"
 | |
| import Img from "../Base/Img"
 | |
| import { SubtleButton } from "../Base/SubtleButton"
 | |
| import Toggle from "../Input/Toggle"
 | |
| import { LoginToggle } from "./LoginButton"
 | |
| import { SpecialVisualization, SpecialVisualizationState } from "../SpecialVisualization"
 | |
| import { UIEventSource } from "../../Logic/UIEventSource"
 | |
| 
 | |
| export class CloseNoteButton implements SpecialVisualization {
 | |
|     public readonly funcName = "close_note"
 | |
|     public readonly docs =
 | |
|         "Button to close a note. A predifined text can be defined to close the note with. If the note is already closed, will show a small text."
 | |
|     public readonly args = [
 | |
|         {
 | |
|             name: "text",
 | |
|             doc: "Text to show on this button",
 | |
|             required: true,
 | |
|         },
 | |
|         {
 | |
|             name: "icon",
 | |
|             doc: "Icon to show",
 | |
|             defaultValue: "checkmark.svg",
 | |
|         },
 | |
|         {
 | |
|             name: "idkey",
 | |
|             doc: "The property name where the ID of the note to close can be found",
 | |
|             defaultValue: "id",
 | |
|         },
 | |
|         {
 | |
|             name: "comment",
 | |
|             doc: "Text to add onto the note when closing",
 | |
|         },
 | |
|         {
 | |
|             name: "minZoom",
 | |
|             doc: "If set, only show the closenote button if zoomed in enough",
 | |
|         },
 | |
|         {
 | |
|             name: "zoomButton",
 | |
|             doc: "Text to show if not zoomed in enough",
 | |
|         },
 | |
|     ]
 | |
| 
 | |
|     public constr(
 | |
|         state: SpecialVisualizationState,
 | |
|         tags: UIEventSource<Record<string, string>>,
 | |
|         args: string[]
 | |
|     ): BaseUIElement {
 | |
|         const t = Translations.t.notes
 | |
| 
 | |
|         const params: {
 | |
|             text: string
 | |
|             icon: string
 | |
|             idkey: string
 | |
|             comment: string
 | |
|             minZoom: string
 | |
|             zoomButton: string
 | |
|         } = <any>Utils.ParseVisArgs(this.args, args)
 | |
| 
 | |
|         let icon = Svg.checkmark_svg()
 | |
|         if (params.icon !== "checkmark.svg" && (args[2] ?? "") !== "") {
 | |
|             icon = new Img(args[1])
 | |
|         }
 | |
|         let textToShow = t.closeNote
 | |
|         if ((params.text ?? "") !== "") {
 | |
|             textToShow = Translations.T(args[0])
 | |
|         }
 | |
| 
 | |
|         let closeButton: BaseUIElement = new SubtleButton(icon, textToShow)
 | |
|         const isClosed = tags.map((tags) => (tags["closed_at"] ?? "") !== "")
 | |
|         closeButton.onClick(() => {
 | |
|             const id = tags.data[args[2] ?? "id"]
 | |
|             state.osmConnection.closeNote(id, args[3])?.then((_) => {
 | |
|                 tags.data["closed_at"] = new Date().toISOString()
 | |
|                 tags.ping()
 | |
|             })
 | |
|         })
 | |
| 
 | |
|         if ((params.minZoom ?? "") !== "" && !isNaN(Number(params.minZoom))) {
 | |
|             closeButton = new Toggle(
 | |
|                 closeButton,
 | |
|                 params.zoomButton ?? "",
 | |
|                 state.mapProperties.zoom.map((zoom) => zoom >= Number(params.minZoom))
 | |
|             )
 | |
|         }
 | |
| 
 | |
|         return new LoginToggle(
 | |
|             new Toggle(
 | |
|                 t.isClosed.SetClass("thanks"),
 | |
|                 closeButton,
 | |
| 
 | |
|                 isClosed
 | |
|             ),
 | |
|             t.loginToClose,
 | |
|             state
 | |
|         )
 | |
|     }
 | |
| }
 |