export function sortByField(from, to, edges, fieldName, references) { if (from === to) { return edges; } let referenceIds = references.map((r) => r.id); let edgesTosort = edges?.filter( (ed) => ed.field === fieldName && ed.depth === 1 && referenceIds.includes(ed.target), ) ?? []; let remainingEdge = edges?.filter((ed) => !(ed.field === fieldName && ed.depth === 1)) ?? []; edgesTosort = array_move(edgesTosort, from, to); return [...remainingEdge, ...edgesTosort]; } export function array_move(arr, old_index, new_index) { if (new_index >= arr.length) { var k = new_index - arr.length + 1; while (k--) { arr.push(undefined); } } arr.splice(new_index, 0, arr.splice(old_index, 1)[0]); return arr; // for testing }