From 63a4d4c801ce3f03536a8e6ed9d5efcae063c833 Mon Sep 17 00:00:00 2001 From: Michael Genson <71845777+michael-genson@users.noreply.github.com> Date: Thu, 10 Jul 2025 11:41:34 -0500 Subject: [PATCH] fix: Preserve "Completed On" Date In Checked Shopping List Items (#5665) --- frontend/pages/shopping-lists/[id].vue | 31 ++++++++++++++------------ 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/frontend/pages/shopping-lists/[id].vue b/frontend/pages/shopping-lists/[id].vue index 293c4b08d..8188e7326 100644 --- a/frontend/pages/shopping-lists/[id].vue +++ b/frontend/pages/shopping-lists/[id].vue @@ -707,7 +707,7 @@ export default defineNuxtComponent({ } }); if (hasChanged) { - updateListItems(); + updateUncheckedListItems(); } } @@ -727,7 +727,9 @@ export default defineNuxtComponent({ } }); if (hasChanged) { - updateListItems(); + listItems.unchecked = [...listItems.unchecked, ...listItems.checked]; + listItems.checked = []; + updateUncheckedListItems(); } } @@ -1051,8 +1053,13 @@ export default defineNuxtComponent({ .sort(sortCheckedItems); } + // Update the item if it's checked, otherwise updateUncheckedListItems will handle it + if (item.checked) { + shoppingListItemActions.updateItem(item); + } + updateListItemOrder(); - updateListItems(); + updateUncheckedListItems(); } function deleteListItem(item: ShoppingListItemOut) { @@ -1144,7 +1151,7 @@ export default defineNuxtComponent({ // since the user has manually reordered the list, we should preserve this order preserveItemOrder.value = true; - updateListItems(); + updateUncheckedListItems(); } function updateIndexUncheckedByLabel(labelName: string, labeledUncheckedItems: ShoppingListItemOut[]) { @@ -1167,7 +1174,7 @@ export default defineNuxtComponent({ // save changes listItems.unchecked = allUncheckedItems; listItems.checked = shoppingList.value?.listItems?.filter(item => item.checked) || []; - updateListItems(); + updateUncheckedListItems(); } function deleteListItems(items: ShoppingListItemOut[]) { @@ -1187,27 +1194,23 @@ export default defineNuxtComponent({ refresh(); } - function updateListItems() { + function updateUncheckedListItems() { if (!shoppingList.value?.listItems) { return; } - // Set Position - shoppingList.value.listItems = listItems.unchecked.concat(listItems.checked).map((itm: ShoppingListItemOut, idx: number) => { - itm.position = idx; - return itm; - }); - - shoppingList.value.listItems.forEach((item) => { + // Set position for unchecked items + listItems.unchecked.forEach((item: ShoppingListItemOut, idx: number) => { + item.position = idx; shoppingListItemActions.updateItem(item); }); + refresh(); } return { ...toRefs(state), addRecipeReferenceToList, - updateListItems, allLabels, contextMenu, contextMenuAction,