handleStopDragging()

in modules/edit-modes/src/lib/extrude-mode.ts [105:145]


  handleStopDragging(event: StopDraggingEvent, props: ModeProps<FeatureCollection>) {
    const selectedFeatureIndexes = props.selectedIndexes;
    const editHandle = getPickedEditHandle(event.pointerDownPicks);
    if (selectedFeatureIndexes.length && editHandle) {
      const { featureIndex } = editHandle.properties;
      let { positionIndexes } = editHandle.properties;

      const size = this.coordinatesSize(positionIndexes, featureIndex, props.data);
      positionIndexes = this.isPointAdded
        ? this.nextPositionIndexes(positionIndexes, size)
        : positionIndexes;
      // p1 and p1 are end points for edge
      const p1 = this.getPointForPositionIndexes(
        this.prevPositionIndexes(positionIndexes, size),
        featureIndex,
        props.data
      );
      const p2 = this.getPointForPositionIndexes(positionIndexes, featureIndex, props.data);

      if (p1 && p2) {
        // p3 and p4 are end points for new moved (extruded) edge
        const [p3, p4] = generatePointsParallelToLinePoints(p1, p2, event.mapCoords);

        const updatedData = new ImmutableFeatureCollection(props.data)
          .replacePosition(featureIndex, this.prevPositionIndexes(positionIndexes, size), p4)
          .replacePosition(featureIndex, positionIndexes, p3)
          .getObject();

        props.onEdit({
          updatedData,
          editType: 'extruded',
          editContext: {
            featureIndexes: [featureIndex],
            positionIndexes,
            position: p3,
          },
        });
      }
    }
    this.isPointAdded = false;
  }