@thaitype/reorder
v0.3.0
Published
Downloads
3
Readme
@thaitype/reorder
Pure reorder function for consistent and testable item ordering based on the
orderfield.
✨ Features
- ⚙️ Pure function – works without DB or side effects.
- 🧪 100% unit-testable – ideal for CI pipelines and logic isolation.
- 📐 Order-aware – operates strictly on the
orderfield, not array position. - 🔄 Auto-renumbering – handles tight gaps and invalid values intelligently.
- ✅ Robust edge case handling – including missing/duplicate/invalid orders.
📦 Installation
npm install @thaitype/reorder
# or
pnpm add @thaitype/reorder🧠 Use Case
Designed for reordering structures like chapters, lessons, or sublessons where the data model includes an { id, order? } field.
🔧 API
function reorderItems(
items: OrderableItem[],
moveId: string,
targetIndex: number
): {
changes: { id: string; order: number }[];
orderedItems: OrderableItem[];
}Types
export interface OrderableItem {
id: string;
order?: number;
}📊 Algorithm Overview
Sort
itemsbyorderascending.Remove the
moveIditem.Insert it at
targetIndexin the sorted array.Recompute its
order:- Between neighbors → use midpoint
- Before first → next - 1
- After last → previous + 1
- Only item → assign 1
If new order too close → renumber all with step gaps (e.g. 10, 20, 30…).
Return:
changes[]for DB updateorderedItems[]for UI reference
🧪 Example
const items = [
{ id: 'A', order: 700 },
{ id: 'B', order: 200 },
{ id: 'C', order: 300 },
{ id: 'D', order: 100 },
{ id: 'E', order: 400 }
];
const result = reorderItems(items, 'A', 1);Output:
{
changes: [{ id: 'A', order: 150 }],
orderedItems: [
{ id: 'D', order: 100 },
{ id: 'A', order: 150 },
{ id: 'B', order: 200 },
{ id: 'C', order: 300 },
{ id: 'E', order: 400 }
]
}🧼 Edge Case Support
- ✅ Unsorted input
- ✅ Missing or
undefinedorders - ✅ Duplicate or zero orders
- ✅ Insert at start, middle, end
- ✅ Auto-renumber when necessary
🧪 Tests
Run test suite with coverage:
pnpm test
pnpm test:coverage📁 Exports
reorderItems()— main reorder functionsortItemsByOrder()— utility function to sort items
🧑💻 Development
pnpm install
pnpm build
pnpm testTo release:
pnpm release📄 License
MIT © Thada Wangthammang
