fix: menu drag-and-drop reorder using sorted array and correct sort_order

This commit is contained in:
2026-06-29 21:41:12 -05:00
parent 2dc949553e
commit d753a3713f
2 changed files with 10 additions and 6 deletions
+8 -4
View File
@@ -1365,11 +1365,13 @@ function MenuSection({ items, setItems, images, onToast }: any) {
const handleDragEnd = () => { const handleDragEnd = () => {
if (dragIdx !== null && overIdx !== null && dragIdx !== overIdx) { if (dragIdx !== null && overIdx !== null && dragIdx !== overIdx) {
const reordered = [...items]; // Use sorted array for correct index mapping
const reordered = [...sorted];
const [moved] = reordered.splice(dragIdx, 1); const [moved] = reordered.splice(dragIdx, 1);
reordered.splice(overIdx, 0, moved); reordered.splice(overIdx, 0, moved);
setItems(reordered); // Update sort_order based on new position
setItems(reordered); const updated = reordered.map((it: MenuItem, i: number) => ({ ...it, sort_order: i }));
setItems(updated);
} }
setDragIdx(null); setDragIdx(null);
setOverIdx(null); setOverIdx(null);
@@ -1377,10 +1379,12 @@ function MenuSection({ items, setItems, images, onToast }: any) {
const saveOrder = async () => { const saveOrder = async () => {
try { try {
// Use sorted order for consistency
const order = sorted.map((it: MenuItem, i: number) => ({ id: it.id, sort_order: i }));
await fetch('/api/menu/reorder', { await fetch('/api/menu/reorder', {
method: 'POST', method: 'POST',
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ order: items.map((it: MenuItem, i: number) => ({ id: it.id, sort_order: i })) }), body: JSON.stringify({ order }),
}); });
onToast('Order saved!', 'success'); onToast('Order saved!', 'success');
} catch { onToast('Error reordering', 'error'); } } catch { onToast('Error reordering', 'error'); }
+2 -2
View File
@@ -13,10 +13,10 @@ export async function POST(request: NextRequest) {
} }
// Each entry: { id: number, sort_order: number } // Each entry: { id: number, sort_order: number }
const updates = order.map((item: { id: number; sort_order: number }, index: number) => const updates = order.map((item: { id: number; sort_order: number }) =>
db.query( db.query(
'UPDATE menu_items SET sort_order = $1 WHERE id = $2', 'UPDATE menu_items SET sort_order = $1 WHERE id = $2',
[index, item.id] [item.sort_order, item.id]
) )
); );