From a7da5d65cf1e03976a7606edc22f9e2931d53e72 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Wed, 4 Jan 2023 18:52:49 +0100 Subject: [PATCH] Close popup after splitting; scroll popup into view --- Logic/Actors/SelectedFeatureHandler.ts | 14 -------------- Logic/State/ElementsState.ts | 3 +++ UI/Popup/SplitRoadWizard.ts | 13 ++++++++++--- UI/ShowDataLayer/ShowDataLayerImplementation.ts | 4 ++++ 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Logic/Actors/SelectedFeatureHandler.ts b/Logic/Actors/SelectedFeatureHandler.ts index 69816866b3..db6776fecc 100644 --- a/Logic/Actors/SelectedFeatureHandler.ts +++ b/Logic/Actors/SelectedFeatureHandler.ts @@ -45,20 +45,6 @@ export default class SelectedFeatureHandler { const self = this hash.addCallback(() => self.setSelectedElementFromHash()) - - state.featurePipeline?.newDataLoadedSignal?.addCallbackAndRunD((_) => { - // New data was loaded. In initial startup, the hash might be set (via the URL) but might not be selected yet - if (hash.data === undefined || SelectedFeatureHandler._no_trigger_on.has(hash.data)) { - // This is an invalid hash anyway - return - } - if (state.selectedElement.data !== undefined) { - // We already have something selected - return - } - self.setSelectedElementFromHash() - }) - this.initialLoad() } diff --git a/Logic/State/ElementsState.ts b/Logic/State/ElementsState.ts index cecb04009f..f4d0b12492 100644 --- a/Logic/State/ElementsState.ts +++ b/Logic/State/ElementsState.ts @@ -38,6 +38,9 @@ export default class ElementsState extends FeatureSwitchState { constructor(layoutToUse: LayoutConfig) { super(layoutToUse) + this.selectedElement.addCallbackAndRun((e) => { + console.trace("Selected element is now", e) + }) function localStorageSynced( key: string, deflt: number, diff --git a/UI/Popup/SplitRoadWizard.ts b/UI/Popup/SplitRoadWizard.ts index ab963a8f5e..dbdac314ce 100644 --- a/UI/Popup/SplitRoadWizard.ts +++ b/UI/Popup/SplitRoadWizard.ts @@ -24,6 +24,7 @@ import BaseLayer from "../../Models/BaseLayer" import FilteredLayer from "../../Models/FilteredLayer" import BaseUIElement from "../BaseUIElement" import { VariableUiElement } from "../Base/VariableUIElement" +import ScrollableFullScreen from "../Base/ScrollableFullScreen" export default class SplitRoadWizard extends Combine { // @ts-ignore @@ -54,6 +55,7 @@ export default class SplitRoadWizard extends Combine { changes: Changes layoutToUse: LayoutConfig allElements: ElementStorage + selectedElement: UIEventSource } ) { const t = Translations.t.split @@ -79,9 +81,6 @@ export default class SplitRoadWizard extends Combine { hasBeenSplit ) ) - splitButton.onClick(() => { - splitClicked.setData(true) - }) // Only show the splitButton if logged in, else show login prompt const loginBtn = t.loginToSplit @@ -110,6 +109,9 @@ export default class SplitRoadWizard extends Combine { // We throw away the old map and splitpoints, and create a new map from scratch splitPoints.setData([]) leafletMap.setData(SplitRoadWizard.setupMapComponent(id, splitPoints, state)) + + // Close the popup. The contributor has to select a segment again to make sure they continue editing the correct segment; see #1219 + ScrollableFullScreen.collapse() }) saveButton.SetClass("btn btn-primary mr-3") @@ -147,6 +149,11 @@ export default class SplitRoadWizard extends Combine { new Toggle(mapView, splitToggle, splitClicked), ]) this.dialogIsOpened = splitClicked + const self = this + splitButton.onClick(() => { + splitClicked.setData(true) + self.ScrollIntoView() + }) } private static setupMapComponent( diff --git a/UI/ShowDataLayer/ShowDataLayerImplementation.ts b/UI/ShowDataLayer/ShowDataLayerImplementation.ts index c168fbeabc..2db66af1cf 100644 --- a/UI/ShowDataLayer/ShowDataLayerImplementation.ts +++ b/UI/ShowDataLayer/ShowDataLayerImplementation.ts @@ -115,6 +115,10 @@ export default class ShowDataLayerImplementation { }) this._selectedElement?.addCallbackAndRunD((selected) => { + if (selected === undefined) { + ScrollableFullScreen.collapse() + return + } self.openPopupOfSelectedElement(selected) })