in modules/layers/src/layers/editable-geojson-layer.ts [357:405]
updateState({ props, oldProps, changeFlags, context }: UpdateParameters<this>) {
super.updateState({ oldProps, props, changeFlags, context });
if (changeFlags.propsOrDataChanged) {
const modePropChanged = Object.keys(oldProps).length === 0 || props.mode !== oldProps.mode;
if (modePropChanged) {
let mode: DrawPolygonMode;
if (typeof props.mode === 'function') {
// They passed a constructor/class, so new it up
const ModeConstructor = props.mode;
mode = new ModeConstructor();
} else if (typeof props.mode === 'string') {
// Lookup the mode based on its name (for backwards compatibility)
mode = modeNameMapping[props.mode];
// eslint-disable-next-line no-console
console.warn(
"Deprecated use of passing `mode` as a string. Pass the mode's class constructor instead."
);
} else {
// Should be an instance of EditMode in this case
mode = props.mode;
}
if (!mode) {
console.warn(`No mode configured for ${String(props.mode)}`); // eslint-disable-line no-console,no-undef
// Use default mode
mode = new DEFAULT_EDIT_MODE();
}
if (mode !== this.state.mode) {
this.setState({ mode, cursor: null });
}
}
}
let selectedFeatures = [];
if (
Array.isArray(props.selectedFeatureIndexes) &&
typeof props.data === 'object' &&
'features' in props.data
) {
// TODO: needs improved testing, i.e. checking for duplicates, NaNs, out of range numbers, ...
const propsData = props.data;
// @ts-ignore error TS2339: Property 'features' does not exist on type 'never'
selectedFeatures = props.selectedFeatureIndexes.map((elem) => propsData.features[elem]);
}
this.setState({ selectedFeatures });
}