export function parseEventElement()

in modules/react-map-gl-draw/src/edit-modes/utils.ts [10:56]


export function parseEventElement(evt: MjolnirEvent, features: Feature[], guides: Feature[]) {
  const elem = evt.target;
  if (!elem || !elem.dataset || !elem.dataset.type) {
    return null;
  }

  let featureIndex = elem.dataset.featureIndex;
  // @ts-expect-error
  featureIndex = isNumeric(featureIndex) ? Number(featureIndex) : -1;

  let index = elem.dataset.index;
  // @ts-expect-error
  index = isNumeric(index) ? Number(index) : undefined;

  const type = elem.dataset.type;
  const tentativeFeature =
    guides && guides.find((g) => g.properties.guideType === GUIDE_TYPE.TENTATIVE);
  let object = null;
  let isGuide = false;

  switch (type) {
    case ELEMENT_TYPE.EDIT_HANDLE:
      object = guides.find((g) => {
        const indexes = g.properties.positionIndexes;
        if (indexes) {
          return indexes[indexes.length - 1] === index;
        }
        return false;
      });
      isGuide = true;
      break;
    case ELEMENT_TYPE.SEGMENT:
    case ELEMENT_TYPE.FEATURE:
    case ELEMENT_TYPE.FILL:
      object = features[featureIndex] || tentativeFeature;
      break;
    default:
  }

  return {
    object,
    isGuide,
    type,
    index,
    featureIndex,
  };
}