From 1d33b1f7dce0a88e462766f462251101c468b373 Mon Sep 17 00:00:00 2001 From: Janpeter Visser Date: Fri, 24 Apr 2026 22:11:54 +0200 Subject: [PATCH] Add documentation for float sort_order pattern Document the float sort_order pattern with TypeScript examples for calculating sort order and reindexing when precision is low. --- patterns/sort-order.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 patterns/sort-order.md diff --git a/patterns/sort-order.md b/patterns/sort-order.md new file mode 100644 index 0000000..5fd6d94 --- /dev/null +++ b/patterns/sort-order.md @@ -0,0 +1,29 @@ +# Patroon: Float sort_order (drag-and-drop volgorde) + +## Berekening bij tussenvoeging + +```ts +function getSortOrder(before: number | null, after: number | null): number { + if (before === null && after === null) return 1.0 + if (before === null) return after! / 2 + if (after === null) return before + 1.0 + return (before + after) / 2 +} +``` + +## Herindexeer als precisie opraakt + +Trigger wanneer het kleinste verschil tussen twee opeenvolgende items < 0.001 is. + +```ts +async function reindexIfNeeded(items: { id: string; sort_order: number }[]) { + const minGap = Math.min(...items.slice(1).map((item, i) => + item.sort_order - items[i].sort_order + )) + if (minGap < 0.001) { + await Promise.all(items.map((item, i) => + prisma.pbi.update({ where: { id: item.id }, data: { sort_order: i + 1.0 } }) + )) + } +} +```