in modules/edit-modes/src/lib/immutable-feature-collection.ts [268:312]
function immutablyRemovePosition(
coordinates: any,
positionIndexes: number[] | null | undefined,
isPolygonal: boolean
): any {
if (!positionIndexes) {
return coordinates;
}
if (positionIndexes.length === 0) {
throw Error('Must specify the index of the position to remove');
}
if (positionIndexes.length === 1) {
const updated = [
...coordinates.slice(0, positionIndexes[0]),
...coordinates.slice(positionIndexes[0] + 1),
];
if (
isPolygonal &&
(positionIndexes[0] === 0 || positionIndexes[0] === coordinates.length - 1)
) {
// for polygons, the first point is repeated at the end of the array
// so, if the first/last coordinate is to be removed, coordinates[1] will be the new first/last coordinate
if (positionIndexes[0] === 0) {
// change the last to be the same as the first
updated[updated.length - 1] = updated[0];
} else if (positionIndexes[0] === coordinates.length - 1) {
// change the first to be the same as the last
updated[0] = updated[updated.length - 1];
}
}
return updated;
}
// recursively update inner array
return [
...coordinates.slice(0, positionIndexes[0]),
immutablyRemovePosition(
coordinates[positionIndexes[0]],
positionIndexes.slice(1, positionIndexes.length),
isPolygonal
),
...coordinates.slice(positionIndexes[0] + 1),
];
}