ngx-explorer-dnd
Version:
## _Drag & Drop in Angular like in a desktop explorer!_
33 lines • 4.67 kB
JavaScript
// With help from cdkDrag: https://github.com/angular/components/blob/72547a41d4230cea0c6a5448e85bd60cfc26bd35/src/cdk/drag-drop/drag-utils.ts
/** Clamps a number between zero and a maximum. */
function clamp(value, max) {
return Math.max(0, Math.min(max, value));
}
export var DragRowPosition;
(function (DragRowPosition) {
DragRowPosition[DragRowPosition["SMALLER"] = 0] = "SMALLER";
DragRowPosition[DragRowPosition["GREATER"] = 1] = "GREATER";
DragRowPosition[DragRowPosition["SAME"] = 2] = "SAME";
DragRowPosition[DragRowPosition["UNDEFINED"] = 3] = "UNDEFINED";
})(DragRowPosition || (DragRowPosition = {}));
/**
* Moves an item one index in an array to another.
* @param array Array in which to move the item.
* @param fromIndex Starting index of the item.
* @param toIndex Index to which the item should be moved.
*/
export function moveItemInArray(array, fromIndex, toIndex) {
const from = clamp(fromIndex, array.length - 1);
const to = clamp(toIndex, array.length - 1);
console.log(from, to);
if (from === to) {
return;
}
const target = array[from];
const delta = to < from ? -1 : 1;
for (let i = from; i !== to; i += delta) {
array[i] = array[i + delta];
}
array[to] = target;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZXhwbG9yZXItZG5kL3NyYy9saWIvY29yZS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4SUFBOEk7QUFDOUksa0RBQWtEO0FBQ2xELFNBQVMsS0FBSyxDQUFDLEtBQWEsRUFBRSxHQUFXO0lBQ3ZDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBYUQsTUFBTSxDQUFOLElBQVksZUFLWDtBQUxELFdBQVksZUFBZTtJQUN6QiwyREFBTyxDQUFBO0lBQ1AsMkRBQU8sQ0FBQTtJQUNQLHFEQUFJLENBQUE7SUFDSiwrREFBUyxDQUFBO0FBQ1gsQ0FBQyxFQUxXLGVBQWUsS0FBZixlQUFlLFFBSzFCO0FBUUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUM3QixLQUFVLEVBQ1YsU0FBaUIsRUFDakIsT0FBZTtJQUVmLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEIsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO1FBQ2YsT0FBTztLQUNSO0lBRUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLE1BQU0sS0FBSyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFakMsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFO1FBQ3ZDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0tBQzdCO0lBRUQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gV2l0aCBoZWxwIGZyb20gY2RrRHJhZzogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9ibG9iLzcyNTQ3YTQxZDQyMzBjZWEwYzZhNTQ0OGU4NWJkNjBjZmMyNmJkMzUvc3JjL2Nkay9kcmFnLWRyb3AvZHJhZy11dGlscy50c1xuLyoqIENsYW1wcyBhIG51bWJlciBiZXR3ZWVuIHplcm8gYW5kIGEgbWF4aW11bS4gKi9cbmZ1bmN0aW9uIGNsYW1wKHZhbHVlOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKG1heCwgdmFsdWUpKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2xhdGUzRFBvc2l0aW9uIHtcbiAgc3RhcnRYOiBudW1iZXI7XG4gIHN0YXJ0WTogbnVtYmVyO1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGhhbGZXaWR0aFg6IG51bWJlcjtcbiAgaGFsZkhlaWdodFk6IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gRHJhZ1Jvd1Bvc2l0aW9uIHtcbiAgU01BTExFUixcbiAgR1JFQVRFUixcbiAgU0FNRSxcbiAgVU5ERUZJTkVELFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNhbWVEcmFnUm93IHtcbiAgc2FtZVJvdzogYm9vbGVhbjtcbiAgZHJhZ1Jvd1Bvc2l0aW9uOiBEcmFnUm93UG9zaXRpb247XG4gIHNhbWVMaW5lQXNNb3VzZTogRHJhZ1Jvd1Bvc2l0aW9uO1xufVxuXG4vKipcbiAqIE1vdmVzIGFuIGl0ZW0gb25lIGluZGV4IGluIGFuIGFycmF5IHRvIGFub3RoZXIuXG4gKiBAcGFyYW0gYXJyYXkgQXJyYXkgaW4gd2hpY2ggdG8gbW92ZSB0aGUgaXRlbS5cbiAqIEBwYXJhbSBmcm9tSW5kZXggU3RhcnRpbmcgaW5kZXggb2YgdGhlIGl0ZW0uXG4gKiBAcGFyYW0gdG9JbmRleCBJbmRleCB0byB3aGljaCB0aGUgaXRlbSBzaG91bGQgYmUgbW92ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSXRlbUluQXJyYXk8VCA9IGFueT4oXG4gIGFycmF5OiBUW10sXG4gIGZyb21JbmRleDogbnVtYmVyLFxuICB0b0luZGV4OiBudW1iZXJcbik6IHZvaWQge1xuICBjb25zdCBmcm9tID0gY2xhbXAoZnJvbUluZGV4LCBhcnJheS5sZW5ndGggLSAxKTtcbiAgY29uc3QgdG8gPSBjbGFtcCh0b0luZGV4LCBhcnJheS5sZW5ndGggLSAxKTtcblxuICBjb25zb2xlLmxvZyhmcm9tLCB0byk7XG4gIGlmIChmcm9tID09PSB0bykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHRhcmdldCA9IGFycmF5W2Zyb21dO1xuICBjb25zdCBkZWx0YSA9IHRvIDwgZnJvbSA/IC0xIDogMTtcblxuICBmb3IgKGxldCBpID0gZnJvbTsgaSAhPT0gdG87IGkgKz0gZGVsdGEpIHtcbiAgICBhcnJheVtpXSA9IGFycmF5W2kgKyBkZWx0YV07XG4gIH1cblxuICBhcnJheVt0b10gPSB0YXJnZXQ7XG59XG4iXX0=