| 
									
										
										
										
											2022-01-14 01:41:19 +01:00
										 |  |  | import Combine from "../Base/Combine"; | 
					
						
							|  |  |  | import {UIEventSource} from "../../Logic/UIEventSource"; | 
					
						
							|  |  |  | import {OsmConnection} from "../../Logic/Osm/OsmConnection"; | 
					
						
							|  |  |  | import Translations from "../i18n/Translations"; | 
					
						
							|  |  |  | import Title from "../Base/Title"; | 
					
						
							|  |  |  | import ValidatedTextField from "../Input/ValidatedTextField"; | 
					
						
							|  |  |  | import {SubtleButton} from "../Base/SubtleButton"; | 
					
						
							|  |  |  | import Svg from "../../Svg"; | 
					
						
							|  |  |  | import {LocalStorageSource} from "../../Logic/Web/LocalStorageSource"; | 
					
						
							|  |  |  | import Toggle from "../Input/Toggle"; | 
					
						
							|  |  |  | import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; | 
					
						
							|  |  |  | import FeaturePipeline from "../../Logic/FeatureSource/FeaturePipeline"; | 
					
						
							| 
									
										
										
										
											2022-01-14 02:40:55 +01:00
										 |  |  | import FilteredLayer from "../../Models/FilteredLayer"; | 
					
						
							| 
									
										
										
										
											2022-01-14 01:41:19 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | export default class NewNoteUi extends Toggle { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-14 02:40:55 +01:00
										 |  |  |     constructor(noteLayer: FilteredLayer, | 
					
						
							|  |  |  |                 isShown: UIEventSource<boolean>, | 
					
						
							|  |  |  |                 state: { | 
					
						
							|  |  |  |                     LastClickLocation: UIEventSource<{ lat: number, lon: number }>, | 
					
						
							| 
									
										
										
										
											2022-02-04 00:44:51 +01:00
										 |  |  |                     osmConnection: OsmConnection,  | 
					
						
							|  |  |  |                     layoutToUse: LayoutConfig,  | 
					
						
							|  |  |  |                     featurePipeline: FeaturePipeline, | 
					
						
							|  |  |  |                     selectedElement: UIEventSource<any> | 
					
						
							| 
									
										
										
										
											2022-01-14 02:40:55 +01:00
										 |  |  |                 }) { | 
					
						
							| 
									
										
										
										
											2022-01-14 01:41:19 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         const t = Translations.t.notes; | 
					
						
							|  |  |  |         const isCreated = new UIEventSource(false); | 
					
						
							| 
									
										
										
										
											2022-01-14 02:40:55 +01:00
										 |  |  |         state.LastClickLocation.addCallbackAndRun(_ => isCreated.setData(false)) // Reset 'isCreated' on every click
 | 
					
						
							| 
									
										
										
										
											2022-01-14 01:41:19 +01:00
										 |  |  |         const text = ValidatedTextField.InputForType("text", { | 
					
						
							|  |  |  |             value: LocalStorageSource.Get("note-text") | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |         text.SetClass("border rounded-sm border-grey-500") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const postNote = new SubtleButton(Svg.addSmall_svg().SetClass("max-h-7"), t.createNote) | 
					
						
							|  |  |  |         postNote.onClick(async () => { | 
					
						
							|  |  |  |             let txt = text.GetValue().data | 
					
						
							|  |  |  |             if (txt === undefined || txt === "") { | 
					
						
							|  |  |  |                 return; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             txt += "\n\n #MapComplete #" + state?.layoutToUse?.id | 
					
						
							| 
									
										
										
										
											2022-01-14 02:40:55 +01:00
										 |  |  |             const loc = state.LastClickLocation.data; | 
					
						
							| 
									
										
										
										
											2022-02-04 00:44:51 +01:00
										 |  |  |             const id = await state?.osmConnection?.openNote(loc.lat, loc.lon, txt) | 
					
						
							|  |  |  |             const feature = { | 
					
						
							|  |  |  |                 type:"Feature", | 
					
						
							|  |  |  |                 geometry:{ | 
					
						
							|  |  |  |                     type:"Point", | 
					
						
							|  |  |  |                     coordinates: [loc.lon, loc.lat] | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |                 properties: { | 
					
						
							|  |  |  |                     id: ""+id.id, | 
					
						
							|  |  |  |                     date_created: new Date().toISOString(), | 
					
						
							|  |  |  |                     _first_comment : txt, | 
					
						
							|  |  |  |                     comments:JSON.stringify( [{ | 
					
						
							|  |  |  |                         text: txt, | 
					
						
							|  |  |  |                         html: txt, | 
					
						
							|  |  |  |                         user: state.osmConnection?.userDetails?.data?.name, | 
					
						
							|  |  |  |                         uid: state.osmConnection?.userDetails?.data?.uid | 
					
						
							|  |  |  |                     }]), | 
					
						
							|  |  |  |                 }, | 
					
						
							|  |  |  |             }; | 
					
						
							|  |  |  |             state?.featurePipeline?.InjectNewPoint(feature) | 
					
						
							|  |  |  |             state.selectedElement?.setData(feature) | 
					
						
							| 
									
										
										
										
											2022-01-14 01:41:19 +01:00
										 |  |  |             text.GetValue().setData("") | 
					
						
							|  |  |  |             isCreated.setData(true) | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |         const createNoteDialog = new Combine([ | 
					
						
							|  |  |  |             new Title(t.createNoteTitle), | 
					
						
							|  |  |  |             t.createNoteIntro, | 
					
						
							|  |  |  |             text, | 
					
						
							| 
									
										
										
										
											2022-02-04 00:44:51 +01:00
										 |  |  |             new Combine([new Toggle(undefined, t.warnAnonymous.SetClass("alert"), state?.osmConnection?.isLoggedIn),  | 
					
						
							|  |  |  |                 new Toggle(postNote, | 
					
						
							|  |  |  |                     t.textNeeded.SetClass("alert"), | 
					
						
							|  |  |  |                     text.GetValue().map(txt => txt.length > 3) | 
					
						
							|  |  |  |                     ) | 
					
						
							|  |  |  |              | 
					
						
							|  |  |  |             ]).SetClass("flex justify-end items-center") | 
					
						
							| 
									
										
										
										
											2022-01-14 01:41:19 +01:00
										 |  |  |         ]).SetClass("flex flex-col border-2 border-black rounded-xl p-4"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-14 02:40:55 +01:00
										 |  |  |         const newNoteUi = new Toggle( | 
					
						
							| 
									
										
										
										
											2022-01-14 01:41:19 +01:00
										 |  |  |             new Toggle(t.isCreated.SetClass("thanks"), | 
					
						
							|  |  |  |                 createNoteDialog, | 
					
						
							|  |  |  |                 isCreated | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             undefined, | 
					
						
							|  |  |  |             new UIEventSource<boolean>(true) | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2022-01-14 02:40:55 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         super( | 
					
						
							|  |  |  |             new Toggle( | 
					
						
							|  |  |  |                 new Combine( | 
					
						
							|  |  |  |                     [ | 
					
						
							|  |  |  |                         t.noteLayerHasFilters.SetClass("alert"), | 
					
						
							|  |  |  |                         new SubtleButton(Svg.filter_svg(), t.disableAllNoteFilters).onClick(() => { | 
					
						
							|  |  |  |                             const filters = noteLayer.appliedFilters.data; | 
					
						
							|  |  |  |                             for (const key of Array.from(filters.keys())) { | 
					
						
							|  |  |  |                                 filters.set(key, undefined) | 
					
						
							|  |  |  |                             } | 
					
						
							|  |  |  |                             noteLayer.appliedFilters.ping() | 
					
						
							|  |  |  |                             isShown.setData(false); | 
					
						
							|  |  |  |                         }) | 
					
						
							|  |  |  |                     ] | 
					
						
							|  |  |  |                 ).SetClass("flex flex-col"), | 
					
						
							|  |  |  |                 newNoteUi, | 
					
						
							|  |  |  |                 noteLayer.appliedFilters.map(filters => Array.from(filters.values()).some(v => v !== undefined)) | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             new Combine([ | 
					
						
							|  |  |  |                 t.noteLayerNotEnabled.SetClass("alert"), | 
					
						
							|  |  |  |                 new SubtleButton(Svg.layers_svg(), t.noteLayerDoEnable).onClick(() => { | 
					
						
							|  |  |  |                     noteLayer.isDisplayed.setData(true); | 
					
						
							|  |  |  |                     isShown.setData(false); | 
					
						
							|  |  |  |                 }) | 
					
						
							|  |  |  |             ]).SetClass("flex flex-col"), | 
					
						
							|  |  |  |             noteLayer.isDisplayed | 
					
						
							|  |  |  |         ); | 
					
						
							| 
									
										
										
										
											2022-01-14 01:41:19 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |