update: use better effect pattern for sorted wishlist in edit page
This commit is contained in:
@@ -23,22 +23,24 @@
|
||||
let editFormElement = $state<HTMLElement | null>(null);
|
||||
let searchQuery = $state("");
|
||||
|
||||
let sortedItems = $state<Item[]>([]);
|
||||
let items = $state<Item[]>([]);
|
||||
|
||||
$effect.pre(() => {
|
||||
const sorted = [...data.wishlist.items].sort(
|
||||
(a, b) => Number(a.order) - Number(b.order),
|
||||
);
|
||||
items = sorted;
|
||||
});
|
||||
|
||||
let filteredItems = $derived(
|
||||
searchQuery.trim()
|
||||
? sortedItems.filter(item =>
|
||||
? items.filter(item =>
|
||||
item.title.toLowerCase().includes(searchQuery.toLowerCase()) ||
|
||||
item.description?.toLowerCase().includes(searchQuery.toLowerCase())
|
||||
)
|
||||
: sortedItems
|
||||
: items
|
||||
);
|
||||
|
||||
$effect(() => {
|
||||
sortedItems = [...data.wishlist.items].sort(
|
||||
(a, b) => Number(a.order) - Number(b.order),
|
||||
);
|
||||
});
|
||||
|
||||
function handleItemAdded() {
|
||||
showAddForm = false;
|
||||
}
|
||||
@@ -59,7 +61,7 @@
|
||||
}
|
||||
|
||||
function handleColorChange(itemId: string, newColor: string) {
|
||||
sortedItems = sortedItems.map((item) =>
|
||||
items = items.map((item) =>
|
||||
item.id === itemId ? { ...item, color: newColor } : item,
|
||||
);
|
||||
}
|
||||
@@ -91,17 +93,16 @@
|
||||
async function handlePositionChange(newPosition: number) {
|
||||
if (!editingItem) return;
|
||||
|
||||
const currentIndex = sortedItems.findIndex(item => item.id === editingItem.id);
|
||||
const currentIndex = items.findIndex(item => item.id === editingItem.id);
|
||||
if (currentIndex === -1) return;
|
||||
|
||||
const newIndex = newPosition - 1; // Convert to 0-based index
|
||||
|
||||
// Reorder the array
|
||||
const newItems = [...sortedItems];
|
||||
const newItems = [...items];
|
||||
const [movedItem] = newItems.splice(currentIndex, 1);
|
||||
newItems.splice(newIndex, 0, movedItem);
|
||||
|
||||
sortedItems = newItems;
|
||||
items = newItems;
|
||||
await handleReorder(newItems);
|
||||
}
|
||||
</script>
|
||||
@@ -150,14 +151,14 @@
|
||||
onSuccess={handleItemUpdated}
|
||||
onCancel={cancelEditing}
|
||||
onColorChange={handleColorChange}
|
||||
currentPosition={sortedItems.findIndex(item => item.id === editingItem.id) + 1}
|
||||
totalItems={sortedItems.length}
|
||||
currentPosition={items.findIndex(item => item.id === editingItem.id) + 1}
|
||||
totalItems={items.length}
|
||||
onPositionChange={handlePositionChange}
|
||||
/>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{#if sortedItems.length > 5}
|
||||
{#if items.length > 5}
|
||||
<SearchBar bind:value={searchQuery} />
|
||||
{/if}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user