forked from MapComplete/MapComplete
		
	Add enable/disable all button for layers, fix #1407
This commit is contained in:
		
							parent
							
								
									894c48520a
								
							
						
					
					
						commit
						5c11149085
					
				
					 3 changed files with 59 additions and 11 deletions
				
			
		|  | @ -223,6 +223,10 @@ | ||||||
|         "example": "Example", |         "example": "Example", | ||||||
|         "examples": "Examples", |         "examples": "Examples", | ||||||
|         "fewChangesBefore": "Please, answer a few questions of existing features before adding a new feature.", |         "fewChangesBefore": "Please, answer a few questions of existing features before adding a new feature.", | ||||||
|  |         "filterPanel": { | ||||||
|  |             "disableAll": "Disable all", | ||||||
|  |             "enableAll": "Enable all" | ||||||
|  |         }, | ||||||
|         "geopermissionDenied": "Using the geolocation was denied", |         "geopermissionDenied": "Using the geolocation was denied", | ||||||
|         "getStartedLogin": "Log in with OpenStreetMap to get started", |         "getStartedLogin": "Log in with OpenStreetMap to get started", | ||||||
|         "getStartedNewAccount": " or <a href='https://www.openstreetmap.org/user/new' target='_blank'>create a new account</a>", |         "getStartedNewAccount": " or <a href='https://www.openstreetmap.org/user/new' target='_blank'>create a new account</a>", | ||||||
|  |  | ||||||
|  | @ -8,6 +8,9 @@ | ||||||
|   let _c: boolean = selected.data ?? true |   let _c: boolean = selected.data ?? true | ||||||
|   let id = `checkbox-input-${Math.round(Math.random()*100000000)}` |   let id = `checkbox-input-${Math.round(Math.random()*100000000)}` | ||||||
|   $: selected.set(_c) |   $: selected.set(_c) | ||||||
|  |   selected.addCallbackD(s => { | ||||||
|  |       _c = s | ||||||
|  |   }) | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <label class="no-image-background flex items-center gap-1"> | <label class="no-image-background flex items-center gap-1"> | ||||||
|  |  | ||||||
|  | @ -1,17 +1,49 @@ | ||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
|   /** |     /** | ||||||
|    * THe panel containing all filter- and layerselection options |      * THe panel containing all filter- and layerselection options | ||||||
|    */ |      */ | ||||||
| 
 | 
 | ||||||
|   import OverlayToggle from "./OverlayToggle.svelte" |     import OverlayToggle from "./OverlayToggle.svelte" | ||||||
|   import Filterview from "./Filterview.svelte" |     import Filterview from "./Filterview.svelte" | ||||||
|   import ThemeViewState from "../../Models/ThemeViewState" |     import ThemeViewState from "../../Models/ThemeViewState" | ||||||
|   import Translations from "../i18n/Translations" |     import Translations from "../i18n/Translations" | ||||||
|   import Tr from "../Base/Tr.svelte" |     import Tr from "../Base/Tr.svelte" | ||||||
|   import Filter from "../../assets/svg/Filter.svelte" |     import Filter from "../../assets/svg/Filter.svelte" | ||||||
|  | 
 | ||||||
|  |     export let state: ThemeViewState | ||||||
|  |     let layout = state.layout | ||||||
|  |      | ||||||
|  |     let allEnabled : boolean | ||||||
|  |     let allDisabled: boolean | ||||||
|  |      | ||||||
|  |     function updateEnableState(){ | ||||||
|  |         allEnabled = true | ||||||
|  |         allDisabled = true | ||||||
|  |         state.layerState.filteredLayers.forEach((v) => { | ||||||
|  |             if(!v.layerDef.name){ | ||||||
|  |                 return | ||||||
|  |             } | ||||||
|  |             allEnabled &&= v.isDisplayed.data | ||||||
|  |             allDisabled &&= !v.isDisplayed.data | ||||||
|  |         }) | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     updateEnableState() | ||||||
|  |     state.layerState.filteredLayers.forEach((v) => { | ||||||
|  |         if(!v.layerDef.name){ | ||||||
|  |             return | ||||||
|  |         } | ||||||
|  |        v.isDisplayed.addCallbackD(_ => updateEnableState()) | ||||||
|  |     }) | ||||||
|  |     function enableAll(doEnable: boolean){ | ||||||
|  |         state.layerState.filteredLayers.forEach((v) => { | ||||||
|  |             if(!v.layerDef.name){ | ||||||
|  |                 return | ||||||
|  |             } | ||||||
|  |             v.isDisplayed.setData(doEnable) | ||||||
|  |         }) | ||||||
|  |     } | ||||||
|      |      | ||||||
|   export let state: ThemeViewState |  | ||||||
|   let layout = state.layout |  | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <div class="m-2 flex flex-col"> | <div class="m-2 flex flex-col"> | ||||||
|  | @ -27,6 +59,15 @@ | ||||||
|       highlightedLayer={state.guistate.highlightedLayerInFilters} |       highlightedLayer={state.guistate.highlightedLayerInFilters} | ||||||
|     /> |     /> | ||||||
|   {/each} |   {/each} | ||||||
|  |   <div class="flex self-end mt-1"> | ||||||
|  |     <button class="small" class:disabled={allEnabled} on:click={() => enableAll(true)}> | ||||||
|  |       <Tr t={Translations.t.general.filterPanel.enableAll}/> | ||||||
|  |     </button> | ||||||
|  |     <button class="small"  class:disabled={allDisabled} on:click={() => enableAll(false)}> | ||||||
|  |       <Tr t={Translations.t.general.filterPanel.disableAll}/> | ||||||
|  |     </button> | ||||||
|  |   </div> | ||||||
|  | 
 | ||||||
|   {#each layout.tileLayerSources as tilesource} |   {#each layout.tileLayerSources as tilesource} | ||||||
|     <OverlayToggle |     <OverlayToggle | ||||||
|       layerproperties={tilesource} |       layerproperties={tilesource} | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue