Skip to content

Commit

Permalink
apply polygo filter on multiple layers at once
Browse files Browse the repository at this point in the history
  • Loading branch information
lixun910 committed May 2, 2024
1 parent ddb4951 commit e99e9fd
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 6 deletions.
3 changes: 2 additions & 1 deletion src/components/src/map-container.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -711,7 +711,7 @@ export default function MapContainerFactory(

const editorFeatureSelectedIndex = this.selectedPolygonIndexSelector(this.props);

const {setFeatures, onLayerClick, setSelectedFeature} = visStateActions;
const {setFeatures, onLayerClick, setSelectedFeature, setPolygonFilterLayer} = visStateActions;

const generateDeckGLLayersMethod = generateDeckGLLayers ?? computeDeckLayers;
const deckGlLayers = generateDeckGLLayersMethod(
Expand All @@ -732,6 +732,7 @@ export default function MapContainerFactory(
editorMenuActive,
onSetFeatures: setFeatures,
setSelectedFeature,
setPolygonFilterLayer,
featureCollection: this.featureCollectionSelector(this.props),
selectedFeatureIndexes: this.selectedFeatureIndexArraySelector(
editorFeatureSelectedIndex
Expand Down
9 changes: 8 additions & 1 deletion src/layers/src/editor-layer/editor-layer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import {EDIT_TYPES} from './constants';
import {LINE_STYLE, FEATURE_STYLE, EDIT_HANDLE_STYLE} from './feature-styles';
import {ModifyModeExtended} from './modify-mode-extended';
import {isDrawingActive} from './editor-layer-utils';
import Layer from '../base-layer';

const DEFAULT_COMPOSITE_MODE = new CompositeMode([new TranslateMode(), new ModifyModeExtended()]);

Expand All @@ -33,6 +34,8 @@ export type GetEditorLayerProps = {
features: Feature[];
};
selectedFeatureIndexes: number[];
setPolygonFilterLayer?: (layer: Layer, feature: Feature) => any;
layers?: Layer[];
};

/**
Expand All @@ -53,7 +56,9 @@ export function getEditorLayer({
setSelectedFeature,
featureCollection,
selectedFeatureIndexes,
viewport
viewport,
setPolygonFilterLayer,
layers
}: GetEditorLayerProps): DeckLayer<DeckLayerProps> {
const {mode: editorMode} = editor;

Expand Down Expand Up @@ -97,6 +102,8 @@ export function getEditorLayer({
lastFeature.id = generateHashId(6);
onSetFeatures(updatedData.features);
setSelectedFeature(lastFeature);
// @ts-ignore set polygon filter for all layers
setPolygonFilterLayer?.(layers, lastFeature);
}
break;
case EDIT_TYPES.ADD_POSITION:
Expand Down
4 changes: 3 additions & 1 deletion src/reducers/src/layer-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,7 @@ export type ComputeDeckLayersProps = {
feature: Feature | null,
selectionContext?: FeatureSelectionContext
) => any;
setPolygonFilterLayer: (layer: Layer, feature: Feature) => void;
featureCollection: {
type: string;
features: Feature[];
Expand Down Expand Up @@ -423,7 +424,8 @@ export function computeDeckLayers(
if (editorInfo) {
editorLayer.push(
getEditorLayer({
...editorInfo
...editorInfo,
layers
})
);
}
Expand Down
17 changes: 14 additions & 3 deletions src/reducers/src/vis-state-updaters.ts
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ export const DEFAULT_ANIMATION_CONFIG: AnimationConfig = {
};

export const DEFAULT_EDITOR: Editor = {
mode: EDITOR_MODES.DRAW_POLYGON,
mode: EDITOR_MODES.DRAW_RECTANGLE,
features: [],
selectedFeature: null,
visible: true
Expand Down Expand Up @@ -2583,7 +2583,8 @@ export const setSelectedFeatureUpdater = (
{feature, selectionContext}: VisStateActions.SetSelectedFeatureUpdaterAction
): VisState => {
// add bbox for polygon filter to speed up filtering
if (feature && feature.properties) feature.properties.bbox = bbox(feature);
if (feature && feature.properties) feature.properties.bbox = bbox(feature);

return {
...state,
editor: {
Expand Down Expand Up @@ -2644,6 +2645,10 @@ export function setPolygonFilterLayerUpdater(
const {layer, feature} = payload;
const filterId = getFilterIdInFeature(feature);

// for applying polygon filter on multiple layers at once
const layers = Array.isArray(layer) ? layer : [layer];
let newLayerIds: string[] = [];

// let newFilter = null;
let filterIdx;
let newLayerId = [layer.id];
Expand Down Expand Up @@ -2681,6 +2686,9 @@ export function setPolygonFilterLayerUpdater(
? // if layer is included, remove it
layerId.filter(l => l !== layer.id)
: [...layerId, layer.id];

// for applying polygon filter on multiple layers at once
newLayerIds = layerId.filter(l => !layers.map(l => l.id).includes(l));
} else {
// if we haven't create the polygon filter, create it
const newFilter = generatePolygonFilter([], feature);
Expand All @@ -2696,12 +2704,15 @@ export function setPolygonFilterLayerUpdater(
selectedFeature: newFilter.value
}
};

// for applying polygon filters on multiple layers at once
newLayerIds = layers.map(l => l.id);
}

return setFilterUpdater(newState, {
idx: filterIdx,
prop: 'layerId',
value: newLayerId
value: newLayerIds
});
}

Expand Down

0 comments on commit e99e9fd

Please sign in to comment.