| 
									
										
										
										
											2022-11-02 14:44:06 +01:00
										 |  |  | import FeaturePipelineState from "../../Logic/State/FeaturePipelineState" | 
					
						
							|  |  |  | 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 } from "../SpecialVisualization" | 
					
						
							| 
									
										
										
										
											2022-10-28 04:33:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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: FeaturePipelineState, tags, args): BaseUIElement { | 
					
						
							|  |  |  |         const t = Translations.t.notes | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const params: { | 
					
						
							|  |  |  |             text: string | 
					
						
							|  |  |  |             icon: string | 
					
						
							|  |  |  |             idkey: string | 
					
						
							|  |  |  |             comment: string | 
					
						
							|  |  |  |             minZoom: string | 
					
						
							|  |  |  |             zoomButton: string | 
					
						
							|  |  |  |         } = 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.locationControl.map((l) => l.zoom >= Number(params.minZoom)) | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return new LoginToggle( | 
					
						
							|  |  |  |             new Toggle( | 
					
						
							|  |  |  |                 t.isClosed.SetClass("thanks"), | 
					
						
							|  |  |  |                 closeButton, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 isClosed | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             t.loginToClose, | 
					
						
							|  |  |  |             state | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |