From ff61a0e27e2c99d028e338f0b87bb61e40fb151a Mon Sep 17 00:00:00 2001 From: NiclasNorin Date: Thu, 6 Mar 2025 11:13:02 +0100 Subject: [PATCH] refactor: changed name for getStartPosition --- .../startPosition/optionSetStartPosition.ts | 28 ++++++++++++++++++- .../optionSetStartPositionInterface.d.ts | 2 +- .../startPosition/saveStartPosition.ts | 2 +- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/source/js/options/startPosition/optionSetStartPosition.ts b/source/js/options/startPosition/optionSetStartPosition.ts index bb2ddd3..86fe891 100644 --- a/source/js/options/startPosition/optionSetStartPosition.ts +++ b/source/js/options/startPosition/optionSetStartPosition.ts @@ -1,17 +1,23 @@ import { MapInterface, CreateMarkerInterface, MarkerInterface, LatLngObject } from "@helsingborg-stad/openstreetmap"; import { OptionSetStartPositionInterface } from "./optionSetStartPositionInterface"; import { OptionFeature } from "../optionFeature"; +import { createListItem } from "../../helper/createListItem"; class OptionSetStartPosition implements OptionFeature, OptionSetStartPositionInterface { protected condition: string = 'set_start_position'; private markerCssClass: string = 'marker-start-position'; private marker: undefined|MarkerInterface; + private list: HTMLUListElement|null; constructor( private mapInstance: MapInterface, + private container: HTMLElement, + private zoomInstance: Setting, private handleSelectedInstance: HandleSelectedInterface, private createMarkerInstance: CreateMarkerInterface ) { + this.list = this.container.querySelector('[data-js-start-position-list]'); + this.mapInstance.addListener('click', (e) => { if ( this.handleSelectedInstance.getCurrentSelectedValue() !== this.condition || @@ -29,16 +35,36 @@ class OptionSetStartPosition implements OptionFeature, OptionSetStartPositionInt } public addMarker(latlng: LatLngObject): void { + if (this.marker) { + return; + } + this.marker = this.createMarkerInstance.create({ position: latlng, icon: this.getMarkerMarkup(), draggable: true, }); + this.addListItem(); this.marker.addTo(this.mapInstance); } - public getStartPosition(): MarkerInterface|undefined { + private addListItem(): void { + if (!this.list) { + return; + } + + const listItem = createListItem('Start position'); + this.list.appendChild(listItem); + + listItem.addEventListener('click', () => { + if (this.marker) { + this.mapInstance.flyTo(this.marker.getPosition(), parseInt(this.zoomInstance.getValue())); + } + }); + } + + public getStartPositionMarker(): MarkerInterface|undefined { return this.marker; } diff --git a/source/js/options/startPosition/optionSetStartPositionInterface.d.ts b/source/js/options/startPosition/optionSetStartPositionInterface.d.ts index 14320b3..a4ab9f1 100644 --- a/source/js/options/startPosition/optionSetStartPositionInterface.d.ts +++ b/source/js/options/startPosition/optionSetStartPositionInterface.d.ts @@ -1,6 +1,6 @@ import { MapInterface, CreateMarkerInterface, MarkerInterface } from "@helsingborg-stad/openstreetmap"; interface OptionSetStartPositionInterface { - getStartPosition(): MarkerInterface|undefined; + getStartPositionMarker(): MarkerInterface|undefined; addMarker(latlng: LatLngObject): void; } \ No newline at end of file diff --git a/source/js/options/startPosition/saveStartPosition.ts b/source/js/options/startPosition/saveStartPosition.ts index 9cc0828..6eeae24 100644 --- a/source/js/options/startPosition/saveStartPosition.ts +++ b/source/js/options/startPosition/saveStartPosition.ts @@ -6,7 +6,7 @@ class SaveStartPostion implements SaveOptionDataInterface { constructor(private optionSetStartPositionInstance: OptionSetStartPositionInterface) {} public save(): SavedStartPosition { - return this.optionSetStartPositionInstance.getStartPosition()?.getPosition() ?? null; + return this.optionSetStartPositionInstance.getStartPositionMarker()?.getPosition() ?? null; } }