updateState()

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 });
  }