forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			88 lines
		
	
	
		
			No EOL
		
	
	
		
			3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			No EOL
		
	
	
		
			3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import {State} from "../State";
 | |
| 
 | |
| export class CustomLayersState {
 | |
|     static RemoveFavouriteLayer(layer: string) {
 | |
| 
 | |
|         State.state.GetFilteredLayerFor(layer)?.isDisplayed?.setData(false);
 | |
|         
 | |
|         const favs = State.state.favourteLayers.data;
 | |
|         const ind = favs.indexOf(layer);
 | |
|         if (ind < 0) {
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         favs.splice(ind, 1);
 | |
|        
 | |
| 
 | |
|         const osmConnection = State.state.osmConnection;
 | |
|         const count = osmConnection.GetPreference("mapcomplete-custom-layer-count");
 | |
|         for (let i = 0; i < favs.length; i++) {
 | |
|             const layerIDescr = osmConnection.GetPreference("mapcomplete-custom-layer-" + i);
 | |
|             layerIDescr.setData(favs[i]);
 | |
|         }
 | |
|         count.setData("" + favs.length)
 | |
|     }
 | |
| 
 | |
|     static AddFavouriteLayer(layer: string) {
 | |
|         State.state.GetFilteredLayerFor(layer)?.isDisplayed?.setData(true);
 | |
|         
 | |
|         const favs = State.state.favourteLayers.data;
 | |
|         const ind = favs.indexOf(layer);
 | |
|         if (ind >= 0) {
 | |
|             return;
 | |
|         }
 | |
|         console.log("Adding fav layer", layer);
 | |
|         favs.push(layer);
 | |
| 
 | |
| 
 | |
|         const osmConnection = State.state.osmConnection;
 | |
|         const count = osmConnection.GetPreference("mapcomplete-custom-layer-count");
 | |
|         if (count.data === undefined || isNaN(Number(count.data))) {
 | |
|             count.data = "0";
 | |
|         }
 | |
|         const lastId = Number(count.data);
 | |
| 
 | |
|         for (let i = 0; i < lastId; i++) {
 | |
|             const layerIDescr = osmConnection.GetPreference("mapcomplete-custom-layer-" + i);
 | |
|             if (layerIDescr.data === undefined || layerIDescr.data === "") {
 | |
|                 // An earlier item was removed -> overwrite it
 | |
|                 layerIDescr.setData(layer);
 | |
|                 count.ping();
 | |
|                 return;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         // No empty slot found -> create a new one
 | |
|         const layerIDescr = osmConnection.GetPreference("mapcomplete-custom-layer-" + lastId);
 | |
|         layerIDescr.setData(layer);
 | |
|         count.setData((lastId + 1) + "");
 | |
|     }
 | |
| 
 | |
|     static InitFavouriteLayers(state: State) {
 | |
|         const osmConnection = state.osmConnection;
 | |
|         const count = osmConnection.GetPreference("mapcomplete-custom-layer-count");
 | |
|         const favs = state.favourteLayers.data;
 | |
|         let changed = false;
 | |
|         count.addCallback((countStr) => {
 | |
|             console.log("Updating favourites")
 | |
|             if (countStr === undefined) {
 | |
|                 return;
 | |
|             }
 | |
|             let countI = Number(countStr);
 | |
|             if (isNaN(countI)) {
 | |
|                 countI = 999;
 | |
|             }
 | |
|             for (let i = 0; i < countI; i++) {
 | |
|                 const layerId = osmConnection.GetPreference("mapcomplete-custom-layer-" + i).data;
 | |
|                 if (layerId !== undefined && layerId !== "" && favs.indexOf(layerId) < 0) {
 | |
|                     state.favourteLayers.data.push(layerId);
 | |
|                     changed = true;
 | |
|                 }
 | |
|             }
 | |
|             if (changed) {
 | |
|                 state.favourteLayers.ping();
 | |
|             }
 | |
|         })
 | |
|     }
 | |
| 
 | |
| } |