commit 519a424eb10613eedd80322d2da390c45837a4a5
parent 1590676270e717c328366df0333c3335749db08b
Author: Sergej Orlov <wladimirych@gmail.com>
Date:   Fri, 13 May 2022 21:08:42 +0200
Add hash state parameter for overriding minimize/expand behaviour of controls
Diffstat:
| M | src/App.js | | | 55 | ++++++++++++++++++++++++++++++++++++++++++++++++------- | 
1 file changed, 48 insertions(+), 7 deletions(-)
diff --git a/src/App.js b/src/App.js
@@ -42,7 +42,11 @@ const locationErrorMessage = {
     2: 'Failed to acquire position for unknown reason.',
 };
 
-function setUp() {
+const minimizeStateAuto = 0;
+const minimizeStateMinimized = 1;
+const minimizeStateExpanded = 2;
+
+function setUp() { // eslint-disable-line complexity
     const startInfo = {
         href: window.location.href,
         localStorageKeys: Object.keys(safeLocalStorage),
@@ -50,6 +54,21 @@ function setUp() {
     };
     fixAll();
 
+    function validateMinimizeState(state) {
+        state = Number(state);
+        if (state === minimizeStateMinimized || state === minimizeStateExpanded) {
+            return state;
+        }
+        return minimizeStateAuto;
+    }
+    const minimizeState = hashState.getState('min') ?? [];
+    const minimizeControls = {
+        tracks: validateMinimizeState(minimizeState[0]),
+        layers: validateMinimizeState(minimizeState[1]),
+        print: validateMinimizeState(minimizeState[2]),
+        search: validateMinimizeState(minimizeState[3]),
+    };
+
     const map = new MapWithSidebars('map', {
             zoomControl: false,
             fadeAnimation: false,
@@ -71,7 +90,19 @@ function setUp() {
 
     new ZoomDisplay().addTo(map);
 
-    const searchControl = new SearchControl({position: 'topleft', stackHorizontally: true, maxMapWidthToMinimize: 620})
+    const searchOptions = {
+        position: 'topleft',
+        stackHorizontally: true,
+        maxMapWidthToMinimize: 620,
+    };
+    if (minimizeControls.search === minimizeStateMinimized) {
+        searchOptions.maxMapHeightToMinimize = Infinity;
+        searchOptions.maxMapWidthToMinimize = Infinity;
+    } else if (minimizeControls.search === minimizeStateExpanded) {
+        searchOptions.maxMapHeightToMinimize = 0;
+        searchOptions.maxMapWidthToMinimize = 0;
+    }
+    const searchControl = new SearchControl(searchOptions)
         .addTo(map)
         .enableHashState('q');
     map.getPlacemarkHashStateInterface().enableHashState('r');
@@ -142,7 +173,10 @@ function setUp() {
     const printControl = new L.Control.PrintPages({position: 'bottomleft'})
         .addTo(map)
         .enableHashState('p');
-    if (!printControl.hasPages()) {
+    if (
+        minimizeControls.print === minimizeStateMinimized ||
+        (minimizeControls.print === minimizeStateAuto && !printControl.hasPages())
+    ) {
         printControl.setMinimized();
     }
 
@@ -187,17 +221,24 @@ function setUp() {
 
     /* adaptive layout */
 
-    if (L.Browser.mobile) {
+    if (
+        minimizeControls.layers === minimizeStateAuto && L.Browser.mobile ||
+        minimizeControls.layers === minimizeStateMinimized
+    ) {
         layersControl.setMinimized();
-        if (!tracklist.hasTracks()) {
-            tracklist.setMinimized();
-        }
     }
 
     if (L.Browser.mobile) {
         map.on('mousedown dragstart', () => layersControl.setMinimized());
     }
 
+    if (
+        minimizeControls.tracks === minimizeStateAuto && L.Browser.mobile && !tracklist.hasTracks() ||
+        minimizeControls.tracks === minimizeStateMinimized
+    ) {
+        tracklist.setMinimized();
+    }
+
     raiseControlsOnFocus(map);
 
     /* save state at unload */