FarmMapsLib/projects/common-map/src/fm-map/reducers/map.reducer.ts

637 lines
26 KiB
TypeScript
Raw Normal View History

2019-12-11 09:29:47 +00:00
import { tassign } from 'tassign';
import { IItem,Item } from '@farmmaps/common';
2020-02-27 20:41:52 +00:00
import { IItemLayer,ItemLayer,ITemporalItemLayer,TemporalItemLayer} from '../models/item.layer';
2019-12-11 09:29:47 +00:00
import { IMapState} from '../models/map.state';
import { IQueryState} from '@farmmaps/common';
2021-08-17 17:36:30 +00:00
import { IPeriodState } from '../models/period.state';
2020-02-12 20:33:28 +00:00
import { IStyles} from '../models/style.cache';
2021-03-05 16:19:30 +00:00
import { ILayervalue } from '../models/layer.value';
2019-12-11 09:29:47 +00:00
import * as mapActions from '../actions/map.actions';
import {commonActions} from '@farmmaps/common';
import { createSelector, createFeatureSelector } from '@ngrx/store';
import {Feature} from 'ol';
2021-10-05 11:46:10 +00:00
import {Geometry} from 'ol/geom';
2020-04-21 11:22:54 +00:00
2019-12-11 09:29:47 +00:00
import { ROUTER_NAVIGATION, RouterNavigationAction } from '@ngrx/router-store';
import { MODULE_NAME } from '../module-name';
const startDate:Date = new Date(new Date(Date.now()).getFullYear(), new Date(Date.now()).getMonth() - 3, 1);
const endDate:Date = new Date(Date.now());
export const initialQueryState: IQueryState = {
itemCode: null,
parentCode: null,
level: 1,
itemType: null,
bboxFilter: false,
query: null,
tags: null,
endDate: null,
startDate: null,
bbox: []
};
2021-07-29 10:52:26 +00:00
export interface IQuery {
querystate: IQueryState,
replace: boolean
}
2019-12-11 09:29:47 +00:00
export interface State {
period:IPeriodState,
mapState: IMapState,
viewExtent: number[],
queryState: IQueryState,
2021-07-29 10:52:26 +00:00
query:IQuery,
2019-12-11 09:29:47 +00:00
parentCode: string,
2021-10-05 11:46:10 +00:00
features: Array<Feature<Geometry>>,
2019-12-11 09:29:47 +00:00
panelVisible: boolean,
panelCollapsed: boolean,
2021-10-05 11:46:10 +00:00
selectedFeature: Feature<Geometry>,
2019-12-11 09:29:47 +00:00
selectedItem:IItem,
parentItem:IItem,
2019-12-11 09:29:47 +00:00
clearEnabled: boolean,
searchCollapsed: boolean,
searchMinified: boolean,
2019-12-11 09:29:47 +00:00
extent: number[],
baseLayers: Array<IItemLayer>
overlayLayers: Array<IItemLayer>,
selectedItemLayer: IItemLayer,
projection: string,
selectedBaseLayer: IItemLayer,
2020-02-12 19:38:14 +00:00
selectedOverlayLayer: IItemLayer,
2020-02-17 17:31:23 +00:00
styles:IStyles,
showLayerSwitcher:boolean,
inSearch:boolean,
2020-10-28 12:31:12 +00:00
inZoom:boolean,
2021-03-05 16:19:30 +00:00
replaceUrl:boolean,
layerValuesX:number,
layerValuesY:number,
2022-09-27 17:58:08 +00:00
layerValuesEnabled:boolean,
layerValues: Array<ILayervalue>
showDataLayerSlide:boolean,
2019-12-11 09:29:47 +00:00
}
export const initialState: State = {
period: {
startDate: startDate,
endDate: endDate
},
mapState: {
zoom: 8,
rotation: 0,
xCenter: 5.377554,
yCenter: 52.162422,
baseLayerCode: ""
},
viewExtent:[],
queryState: tassign(initialQueryState),
query: null,
2019-12-11 09:29:47 +00:00
parentCode: null,
features: [],
panelVisible: false,
panelCollapsed: false,
selectedFeature: null,
selectedItem: null,
2020-07-15 21:28:17 +00:00
parentItem: null,
2019-12-11 09:29:47 +00:00
clearEnabled: false,
searchCollapsed: true,
searchMinified:false,
extent: null,
baseLayers: [],
overlayLayers: [],
projection: "EPSG:3857",
selectedBaseLayer: null,
selectedOverlayLayer: null,
2020-02-12 19:38:14 +00:00
selectedItemLayer: null,
2020-02-17 17:31:23 +00:00
styles: {},
showLayerSwitcher: false,
inSearch:false,
2020-10-28 12:31:12 +00:00
inZoom:false,
2021-03-05 16:19:30 +00:00
replaceUrl:true,
layerValuesX:0,
layerValuesY:0,
layerValuesEnabled:false,
2022-09-27 17:58:08 +00:00
layerValues:[],
showDataLayerSlide:false
2019-12-11 09:29:47 +00:00
}
export function reducer(state = initialState, action: mapActions.Actions | commonActions.Actions | RouterNavigationAction): State {
2019-12-11 09:29:47 +00:00
switch (action.type) {
case ROUTER_NAVIGATION: {
let a = action as RouterNavigationAction;
return tassign(state);
}
case mapActions.SETMAPSTATE: {
let a = action as mapActions.SetMapState;
return tassign(state, {
2020-10-28 12:31:12 +00:00
mapState: a.mapState
2019-12-11 09:29:47 +00:00
});
}
case mapActions.SETQUERYSTATE: {
let a = action as mapActions.SetQueryState;
2020-10-28 12:31:12 +00:00
return tassign(state, { queryState: tassign(a.queryState ),replaceUrl:a.replaceUrl});
2019-12-11 09:29:47 +00:00
}
case mapActions.SETSTATE: {
let a = action as mapActions.SetState;
2020-10-28 12:31:12 +00:00
return tassign(state, { mapState: tassign(a.mapState), queryState: tassign(a.queryState)});
2019-12-11 09:29:47 +00:00
}
case mapActions.SETVIEWEXTENT: {
let a = action as mapActions.SetViewExtent;
return tassign(state, { viewExtent: a.extent });
}
case mapActions.SETPARENT: {
let a = action as mapActions.SetParent;
return tassign(state, {
2019-12-11 09:29:47 +00:00
parentCode : a.parentCode
});
}
case mapActions.STARTSEARCHSUCCESS: {
let a = action as mapActions.StartSearchSuccess;
return tassign(state, {
2020-02-20 16:38:05 +00:00
features: a.features,
inSearch:false
2019-12-11 09:29:47 +00:00
});
}
2020-12-11 12:35:51 +00:00
case mapActions.SETFEATURES: {
let a = action as mapActions.SetFeatures;
return tassign(state, {
features: a.features
});
}
2019-12-11 09:29:47 +00:00
case mapActions.SELECTFEATURE: {
let a = action as mapActions.SelectFeature;
return tassign(state, {
2020-04-17 06:01:39 +00:00
selectedFeature: state.selectedItem?state.selectedFeature: a.feature
2019-12-11 09:29:47 +00:00
});
}
case mapActions.SELECTITEM: {
let a = action as mapActions.SelectItem;
let itemCode = state.selectedItem ? state.selectedItem.code : "";
2020-10-28 12:31:12 +00:00
let inSearch = a.itemCode != itemCode;
2019-12-11 09:29:47 +00:00
return tassign(state, {
selectedItem: null,
selectedItemLayer: null,
2022-09-27 17:58:08 +00:00
showDataLayerSlide: false,
features:[],
inSearch:inSearch
2019-12-11 09:29:47 +00:00
});
}
case mapActions.SELECTITEMSUCCESS: {
let a = action as mapActions.SelectItemSuccess;
return tassign(state, {
inSearch:false,
2019-12-11 09:29:47 +00:00
selectedItem: a.item,
parentItem: a.parentItem,
2019-12-11 09:29:47 +00:00
panelVisible: a.item != null,
clearEnabled: a.item != null,
searchCollapsed: false,
searchMinified: true,
queryState: tassign(state.queryState, {itemCode:a.item ? a.item.code:null})
});
}
2020-12-16 17:04:39 +00:00
case mapActions.SETSELECTEDITEMLAYER: {
let a = action as mapActions.SetSelectedItemLayer;
var itemLayer = null;
if (a.item && "vnd.farmmaps.itemtype.layer,vnd.farmmaps.itemtype.shape.processed,vnd.farmmaps.itemtype.geotiff.processed".indexOf(a.item.itemType) >=0 ) {
itemLayer = new ItemLayer(a.item);
itemLayer.layerIndex = a.layerIndex>=0?a.layerIndex:a.item.data.layers?a.item.data.layers[0].index:-1;
} else if (a.item && a.item.itemType == "vnd.farmmaps.itemtype.temporal") {
itemLayer = new TemporalItemLayer(a.item);
}
return tassign(state, {
selectedItemLayer: itemLayer,
});
}
2020-02-27 20:41:52 +00:00
case mapActions.SELECTTEMPORALITEMSSUCCESS:{
let a = action as mapActions.SelectTemporalItemsSuccess;
let selectedItemLayer=tassign(state.selectedItemLayer) as TemporalItemLayer;
2020-03-03 18:24:01 +00:00
let layerIndex=-1;
2020-02-27 20:41:52 +00:00
selectedItemLayer.temporalItems = a.temporalItems;
2020-03-03 18:24:01 +00:00
if(a.temporalItems.length>0) {
let item = a.temporalItems[a.temporalItems.length-1];
layerIndex = item.data.layers[0].index;
selectedItemLayer.selectedItemLayer = new ItemLayer(item,1,true,layerIndex);
2020-03-03 18:24:01 +00:00
} else {
selectedItemLayer.selectedItemLayer = null;
}
selectedItemLayer.previousItemLayer = a.temporalItems.length>1?new ItemLayer(a.temporalItems[a.temporalItems.length-2],0,true,layerIndex):null;
2020-03-02 07:55:11 +00:00
selectedItemLayer.nextItemLayer = null;
2020-03-03 18:24:01 +00:00
if(selectedItemLayer.selectedItemLayer) {
let layerIndex = selectedItemLayer.selectedItemLayer.item.data.layers[0].index;
selectedItemLayer.layerIndex = layerIndex;
2020-03-03 18:24:01 +00:00
}
2020-02-27 20:41:52 +00:00
return tassign(state,{selectedItemLayer:tassign(state.selectedItemLayer,selectedItemLayer as ItemLayer)});
}
2020-03-02 08:22:16 +00:00
case mapActions.NEXTTEMPORAL: {
let temporalLayer = state.selectedItemLayer as ITemporalItemLayer;
if(temporalLayer.temporalItems && temporalLayer.temporalItems.length>0) {
let index = temporalLayer.temporalItems.indexOf(temporalLayer.selectedItemLayer.item);
if(index == (temporalLayer.temporalItems.length-1)) {
return state;
} else {
temporalLayer.previousItemLayer = temporalLayer.selectedItemLayer;
2020-03-03 18:24:01 +00:00
if( temporalLayer.previousItemLayer) {
temporalLayer.previousItemLayer.opacity=0;
temporalLayer.previousItemLayer.layerIndex = temporalLayer.layerIndex;
}
2020-03-02 08:22:16 +00:00
temporalLayer.selectedItemLayer = temporalLayer.nextItemLayer;
2020-03-03 18:24:01 +00:00
if( temporalLayer.selectedItemLayer) {
temporalLayer.selectedItemLayer.opacity=1;
temporalLayer.selectedItemLayer.layerIndex=temporalLayer.layerIndex;
}
temporalLayer.nextItemLayer = index+2 < temporalLayer.temporalItems.length ? new ItemLayer(temporalLayer.temporalItems[index+2],0,true,temporalLayer.layerIndex):null;
if( temporalLayer.nextItemLayer) {
temporalLayer.nextItemLayer.opacity=0;
temporalLayer.nextItemLayer.layerIndex = temporalLayer.layerIndex;
}
2020-03-02 08:22:16 +00:00
return tassign(state,{selectedItemLayer:tassign(state.selectedItemLayer,temporalLayer as ItemLayer)});
}
} else {
return state;
}
}
case mapActions.PREVIOUSTEMPORAL: {
let temporalLayer = state.selectedItemLayer as ITemporalItemLayer;
if(temporalLayer.temporalItems && temporalLayer.temporalItems.length>0) {
let index = temporalLayer.temporalItems.indexOf(temporalLayer.selectedItemLayer.item);
if(index == 0) {
return state;
} else {
temporalLayer.nextItemLayer = temporalLayer.selectedItemLayer;
2020-03-03 18:24:01 +00:00
if( temporalLayer.nextItemLayer) {
temporalLayer.nextItemLayer.opacity=0;
temporalLayer.nextItemLayer.layerIndex = temporalLayer.layerIndex;
}
temporalLayer.selectedItemLayer = temporalLayer.previousItemLayer;
2020-03-03 18:24:01 +00:00
if( temporalLayer.selectedItemLayer) {
temporalLayer.selectedItemLayer.opacity=1;
temporalLayer.selectedItemLayer.layerIndex = temporalLayer.layerIndex;
}
2020-03-03 18:24:01 +00:00
temporalLayer.previousItemLayer = index-2 >=0? new ItemLayer(temporalLayer.temporalItems[index-2],0,true,temporalLayer.layerIndex):null;
if( temporalLayer.previousItemLayer) {
temporalLayer.previousItemLayer.opacity=0;
temporalLayer.previousItemLayer.layerIndex = temporalLayer.layerIndex;
}
2020-03-02 08:22:16 +00:00
return tassign(state,{selectedItemLayer:tassign(state.selectedItemLayer,temporalLayer as ItemLayer)});
}
} else {
return state;
}
}
case mapActions.SELECTTEMPORAL:{
//todo implement
}
2019-12-11 09:29:47 +00:00
case mapActions.STARTSEARCH: {
let a = action as mapActions.StartSearch;
2020-04-22 07:25:10 +00:00
let panelVisible = a.queryState.itemCode!=null ||a.queryState.itemType!=null||a.queryState.parentCode!=null || a.queryState.query != null || a.queryState.tags != null;
2019-12-11 09:29:47 +00:00
return tassign(state, {
selectedItem: null,
2020-04-17 06:01:39 +00:00
features:[],
2019-12-11 09:29:47 +00:00
selectedItemLayer:null,
searchCollapsed: !panelVisible,
panelVisible: panelVisible,
clearEnabled: panelVisible,
searchMinified: panelVisible,
inSearch:panelVisible
2019-12-11 09:29:47 +00:00
});
}
case commonActions.FAIL:{
return tassign(state,{inSearch:false});
}
2019-12-11 09:29:47 +00:00
case mapActions.DOQUERY: {
let a = action as mapActions.DoQuery;
return tassign(state, {
2021-07-29 10:52:26 +00:00
query: tassign(state.query,
{
2021-08-17 17:36:30 +00:00
querystate: tassign(a.query, { bbox: a.query.bboxFilter ? state.viewExtent : [] }),
2021-07-29 10:52:26 +00:00
replace:a.replace
})
2021-08-17 17:36:30 +00:00
})
}
case mapActions.SETPERIOD: {
return tassign(state,{ period: action.period});
2019-12-11 09:29:47 +00:00
}
2021-07-29 10:52:26 +00:00
2019-12-11 09:29:47 +00:00
case mapActions.ADDFEATURESUCCESS: {
let a = action as mapActions.AddFeatureSuccess;
let features = state.features.slice();
features.push(a.feature);
return tassign(state, {
panelVisible: true,
selectedFeature: a.feature,
extent: a.feature.getGeometry().getExtent(),
searchCollapsed: false,
clearEnabled:true,
features:features
});
}
case mapActions.UPDATEFEATURESUCCESS: {
let a = action as mapActions.UpdateFeatureSuccess;
2019-12-11 09:29:47 +00:00
let features: any[] = [];
var index = -1;
for (var i = 0; i < state.features.length; i++) {
if (state.features[i].getId() == a.feature.getId()) {
features.push(a.feature);
} else {
features.push(state.features[i]);
}
}
return tassign(state, { features: features });
}
case mapActions.EXPANDSEARCH: {
return tassign(state, { searchCollapsed: false });
}
case mapActions.COLLAPSESEARCH: {
return tassign(state, { searchCollapsed: state.panelVisible ? false: true});
}
2021-03-05 16:19:30 +00:00
case commonActions.CLOSEALL: {
2020-06-26 06:49:35 +00:00
return tassign(state, { searchCollapsed: state.panelVisible ? false: true,showLayerSwitcher:false});
}
2019-12-11 09:29:47 +00:00
case mapActions.SETEXTENT: {
let a = action as mapActions.SetExtent;
2019-12-11 09:29:47 +00:00
return tassign(state, { extent: a.extent });
2020-12-16 22:01:59 +00:00
}
2019-12-11 09:29:47 +00:00
case mapActions.ADDLAYER: {
let a = action as mapActions.AddLayer;
let itemLayers = state.overlayLayers.slice(0);
let itemLayer = new ItemLayer(a.item);
itemLayer.layerIndex = a.layerIndex == -1 ? 0 : a.layerIndex;
2020-03-26 14:45:57 +00:00
let existing = itemLayers.filter(il => il.item.code == itemLayer.item.code && il.layerIndex == itemLayer.layerIndex);
if(existing.length==0) {
itemLayers.push(itemLayer);
return tassign(state, { overlayLayers: itemLayers, selectedOverlayLayer: itemLayer });
} else {
return state;
}
2019-12-11 09:29:47 +00:00
}
case mapActions.REMOVELAYER: {
let a = action as mapActions.RemoveLayer;
let newLayers = state.overlayLayers.slice(0);
let i = state.overlayLayers.indexOf(a.itemLayer);
var selectedOverlayLayer: IItemLayer = null;
if (i>0 && state.overlayLayers.length > 1)
selectedOverlayLayer = state.overlayLayers[i - 1];
else if (i == 0 && state.overlayLayers.length > 1)
selectedOverlayLayer = state.overlayLayers[i + 1];
newLayers.splice(i, 1);
return tassign(state, { overlayLayers: newLayers, selectedOverlayLayer: selectedOverlayLayer });
}
2020-12-16 22:01:59 +00:00
case mapActions.CLEARLAYERS: {
return tassign(state, {overlayLayers: [], selectedOverlayLayer: null});
}
2019-12-11 09:29:47 +00:00
case mapActions.SETVISIBILITY: {
let a = action as mapActions.SetVisibility;
2022-02-23 10:57:36 +00:00
if(state.selectedItemLayer == a.itemLayer) {
return tassign(state,{selectedItemLayer: tassign(state.selectedItemLayer,{visible:a.visibility})});
} else {
let newLayers = state.overlayLayers.slice(0);
let i = state.overlayLayers.indexOf(a.itemLayer);
newLayers[i].visible = a.visibility;
return tassign(state, { overlayLayers: newLayers });
}
2019-12-11 09:29:47 +00:00
}
case mapActions.SETOPACITY: {
let a = action as mapActions.SetOpacity;
2022-02-23 10:57:36 +00:00
if(state.selectedItemLayer == a.itemLayer) {
return tassign(state,{selectedItemLayer: tassign(state.selectedItemLayer,{opacity:a.opacity})});
} else {
let newLayers = state.overlayLayers.slice(0);
let i = state.overlayLayers.indexOf(a.itemLayer);
newLayers[i].opacity = a.opacity;
return tassign(state, { overlayLayers: newLayers });
}
2019-12-11 09:29:47 +00:00
}
case mapActions.SETLAYERINDEX: {
let a = action as mapActions.SetLayerIndex;
if (a.itemLayer == null) {
2020-03-03 18:24:01 +00:00
if(state.selectedItemLayer.item.itemType == "vnd.farmmaps.itemtype.temporal") {
var newItemlayer = tassign(state.selectedItemLayer,{layerIndex:a.layerIndex});
let tl = newItemlayer as ITemporalItemLayer;
if(tl.previousItemLayer) {
let nl = new ItemLayer(tl.previousItemLayer.item);
nl.opacity = tl.previousItemLayer.opacity;
nl.visible = tl.previousItemLayer.visible;
nl.layerIndex = a.layerIndex;
tl.previousItemLayer = nl;
}
if(tl.selectedItemLayer) {
let nl = new ItemLayer(tl.selectedItemLayer.item);
nl.opacity = tl.selectedItemLayer.opacity;
nl.visible = tl.selectedItemLayer.visible;
nl.layerIndex = a.layerIndex;
tl.selectedItemLayer = nl;
}
if(tl.nextItemLayer) {
let nl = new ItemLayer(tl.nextItemLayer.item);
nl.opacity = tl.nextItemLayer.opacity;
nl.visible = tl.nextItemLayer.visible;
nl.layerIndex = a.layerIndex;
tl.nextItemLayer = nl;
}
} else {
var newItemlayer = new ItemLayer(state.selectedItemLayer.item);
newItemlayer.layerIndex = a.layerIndex;
2020-03-03 18:24:01 +00:00
}
2019-12-11 09:29:47 +00:00
return tassign(state, { selectedItemLayer: newItemlayer})
} else {
let newLayers = state.overlayLayers.slice(0);
let i = state.overlayLayers.indexOf(a.itemLayer);
newLayers[i].layerIndex = a.layerIndex;
return tassign(state, { overlayLayers: newLayers });
}
}
case mapActions.LOADBASELAYERSSUCCESS: {
let a =action as mapActions.LoadBaseLayersSuccess;
let baseLayers:ItemLayer[] = [];
for (let item of a.items) {
var l = new ItemLayer(item);
l.visible = false;
baseLayers.push(l);
}
var selectedBaseLayer: IItemLayer = null;
var mapState = tassign(state.mapState);
2020-09-09 07:54:50 +00:00
let sb = baseLayers.filter(layer => layer.item.code === mapState.baseLayerCode);
let db = baseLayers.filter(layer => layer.item.data && layer.item.data.default === true);
if (baseLayers.length > 0 && mapState.baseLayerCode != "" && sb.length>0) {
selectedBaseLayer = sb[0];
selectedBaseLayer.visible = true;
} else if (baseLayers.length >0 && db.length>0){
selectedBaseLayer = db[0];
2019-12-11 09:29:47 +00:00
selectedBaseLayer.visible = true;
} else if (baseLayers.length > 0) {
selectedBaseLayer = baseLayers[0];
selectedBaseLayer.visible = true;
mapState.baseLayerCode = selectedBaseLayer.item.code;
}
return tassign(state, { mapState:mapState, baseLayers: baseLayers, selectedBaseLayer: selectedBaseLayer });
}
case mapActions.SELECTBASELAYER: {
let a = action as mapActions.SelectBaseLayer;
let baseLayers = state.baseLayers.slice(0);
baseLayers.forEach((l) => l.visible = false);
let i = state.baseLayers.indexOf(a.itemLayer);
baseLayers[i].visible = true;
var mapState = tassign(state.mapState);
mapState.baseLayerCode = a.itemLayer.item.code;
return tassign(state, {mapState:mapState, baseLayers:baseLayers,selectedBaseLayer:a.itemLayer });
}
case mapActions.SELECTOVERLAYLAYER: {
let a = action as mapActions.SelectOverlayLayer;
return tassign(state, { selectedOverlayLayer: a.itemLayer });
}
2020-12-16 22:01:59 +00:00
2020-10-28 12:31:12 +00:00
case mapActions.CLEAR: {
2019-12-11 09:29:47 +00:00
let newQueryState = tassign(state.queryState, { query: null, tags: null, itemCode: null, parentCode: null, itemType: null });
2020-10-28 12:31:12 +00:00
return tassign(state, {
panelVisible: false,
panelCollapsed:false,
selectedItem: null,
selectedItemLayer: null,
selectedFeature: null,
queryState: newQueryState,
clearEnabled: false,
2021-03-05 16:19:30 +00:00
layerValuesEnabled: false,
2020-10-28 12:31:12 +00:00
searchCollapsed: true,
searchMinified: false,
features: [],
query:initialState.query,
showLayerSwitcher: false,
2022-09-27 17:58:08 +00:00
extent: null,
showDataLayerSlide: false
2020-10-28 12:31:12 +00:00
});
2019-12-11 09:29:47 +00:00
}
2020-02-12 19:38:14 +00:00
case mapActions.SETSTYLE:{
let a = action as mapActions.SetStyle;
2020-02-12 20:33:28 +00:00
let styles = tassign(state.styles);
2020-02-12 19:38:14 +00:00
styles[a.itemType] = a.style;
2020-02-12 20:33:28 +00:00
return tassign(state,{styles:styles});
2020-02-12 19:38:14 +00:00
}
2020-02-17 17:31:23 +00:00
case mapActions.SHOWLAYERSWITCHER:{
let a = action as mapActions.ShowLayerSwitcher;
return tassign(state,{showLayerSwitcher:a.show});
}
2022-09-27 17:58:08 +00:00
case mapActions.TOGGLESHOWDATALAYERSLIDE:{
return tassign(state,{showDataLayerSlide:!state.showDataLayerSlide});
}
case mapActions.SETREPLACEURL: {
let a= action as mapActions.SetReplaceUrl;
return tassign(state,{replaceUrl:a.replaceUrl});
2020-12-16 22:01:59 +00:00
}
2021-03-05 16:19:30 +00:00
case mapActions.TOGGLELAYERVALUESENABLED: {
return tassign(state,{layerValuesEnabled:!state.layerValuesEnabled});
}
case mapActions.SETLAYERVALUESLOCATION: {
let a= action as mapActions.SetLayerValuesLocation;
return tassign(state,{layerValuesX: a.x, layerValuesY:a.y,layerValues:[]});
}
case mapActions.GETLAYERVALUESUCCESS:{
let a= action as mapActions.GetLayerValueSuccess;
let v = state.layerValues.slice(0);
v.push(a.layervalue);
return tassign(state,{layerValues:v});
}
2021-07-29 06:21:25 +00:00
case commonActions.ITEMDELETEDEVENT:{
let a= action as commonActions.ItemDeletedEvent;
if(state.selectedItem && state.selectedItem.code == a.itemCode) {
return tassign(state,{
selectedItem: null,
selectedItemLayer: null,
2022-09-27 17:58:08 +00:00
showDataLayerSlide: false,
2021-07-29 06:21:25 +00:00
features:[]
});
}
if(state.features.length>0) {
var index = -1;
for (var i = 0; i < state.features.length; i++) {
if (state.features[i].getId() == a.itemCode ) {
index=i;
}
}
if(index>=0) {
let newFeatures = state.features.slice(0);
newFeatures.splice(index,1);
return tassign(state,{features:newFeatures});
}
}
return state;
}
2019-12-11 09:29:47 +00:00
default: {
return state;
}
}
}
export const getMapState = (state: State) => state.mapState;
export const getParentCode = (state: State) => state.parentCode;
export const getFeatures = (state: State) => state.features;
export const getPanelVisible = (state: State) => state.panelVisible;
export const getPanelCollapsed = (state: State) => state.panelCollapsed;
export const getSelectedFeature = (state: State) => state.selectedFeature;
export const getSelectedItem = (state: State) => state.selectedItem;
export const getParentItem = (state: State) => state.parentItem;
2019-12-11 09:29:47 +00:00
export const getQueryState = (state: State) => state.queryState;
export const getClearEnabled = (state: State) => state.clearEnabled;
export const getSearchCollapsed = (state: State) => state.searchCollapsed;
export const getSearchMinified = (state: State) => state.searchMinified;
export const getExtent = (state: State) => state.extent;
export const getOverlayLayers = (state: State) => state.overlayLayers;
export const getBaseLayers = (state: State) => state.baseLayers;
export const getProjection = (state: State) => state.projection;
export const getSelectedBaseLayer = (state: State) => state.selectedBaseLayer;
export const getSelectedOverlayLayer = (state: State) => state.selectedOverlayLayer;
export const getQuery = (state: State) => state.query;
export const getSelectedItemLayer = (state: State) => state.selectedItemLayer;
export const getPeriod = (state:State) => state.period;
2020-02-12 20:33:28 +00:00
export const getStyles = (state:State) => state.styles;
2020-02-17 17:31:23 +00:00
export const getShowLayerSwitcher = (state:State) => state.showLayerSwitcher;
2022-09-27 17:58:08 +00:00
export const getShowDataLayerSlide = (state:State) => state.showDataLayerSlide;
export const getInSearch = (state:State) => state.inSearch;
2020-10-28 12:31:12 +00:00
export const getState = (state:State) => {return {mapState:state.mapState,queryState:state.queryState,replaceUrl:state.replaceUrl};}
2021-03-05 16:19:30 +00:00
export const getLayerValuesEnabled = (state:State) => state.layerValuesEnabled;
export const getLayerValues = (state:State) => state.layerValues;
export const getLayerValuesX = (state:State) => state.layerValuesX;
export const getLayerValuesY = (state:State) => state.layerValuesY;
2019-12-11 09:29:47 +00:00
export const selectMapState = createFeatureSelector<State>(MODULE_NAME);
export const selectGetMapState= createSelector(selectMapState, getMapState);
export const selectGetParentCode = createSelector(selectMapState, getParentCode);
export const selectGetFeatures = createSelector(selectMapState, getFeatures);
export const selectGetPanelVisible = createSelector(selectMapState, getPanelVisible);
export const selectGetPanelCollapsed = createSelector(selectMapState, getPanelCollapsed);
export const selectGetSelectedFeature = createSelector(selectMapState, getSelectedFeature);
export const selectGetSelectedItem = createSelector(selectMapState, getSelectedItem);
export const selectGetParentItem = createSelector(selectMapState, getParentItem);
2019-12-11 09:29:47 +00:00
export const selectGetQueryState = createSelector(selectMapState, getQueryState);
export const selectGetClearEnabled = createSelector(selectMapState, getClearEnabled);
export const selectGetSearchCollapsed = createSelector(selectMapState, getSearchCollapsed);
export const selectGetSearchMinified = createSelector(selectMapState, getSearchMinified);
export const selectGetExtent = createSelector(selectMapState, getExtent);
export const selectGetOverlayLayers = createSelector(selectMapState, getOverlayLayers);
export const selectGetBaseLayers = createSelector(selectMapState, getBaseLayers);
export const selectGetProjection = createSelector(selectMapState, getProjection);
export const selectGetSelectedBaseLayer = createSelector(selectMapState, getSelectedBaseLayer);
export const selectGetSelectedOverlayLayer = createSelector(selectMapState, getSelectedOverlayLayer);
export const selectGetQuery = createSelector(selectMapState, getQuery);
2019-12-11 09:29:47 +00:00
export const selectGetSelectedItemLayer = createSelector(selectMapState, getSelectedItemLayer);
export const selectGetPeriod = createSelector(selectMapState, getPeriod);
2020-02-12 20:33:28 +00:00
export const selectGetStyles = createSelector(selectMapState, getStyles);
2020-02-17 17:31:23 +00:00
export const selectGetShowLayerSwitcher = createSelector(selectMapState,getShowLayerSwitcher);
2022-09-27 17:58:08 +00:00
export const selectGetShowdataLayerSlide = createSelector(selectMapState,getShowDataLayerSlide);
export const selectGetInSearch = createSelector(selectMapState,getInSearch);
2020-04-21 10:31:20 +00:00
export const selectGetState = createSelector(selectMapState,getState);
2021-03-05 16:19:30 +00:00
export const selectGetLayerValuesEnabled = createSelector(selectMapState,getLayerValuesEnabled);
export const selectGetLayerValues = createSelector(selectMapState,getLayerValues);
export const selectGetLayerValuesX = createSelector(selectMapState,getLayerValuesX);
export const selectGetLayerValuesY = createSelector(selectMapState,getLayerValuesY);
2019-12-11 09:29:47 +00:00