"use client"; import { useOptimistic, useTransition } from "react"; import type { ListShareData, ListShareItem } from "../server/share-queries"; import { toggleShareListItem } from "../server/share-actions"; export function ListSharedView({ data, canWrite, token, }: { data: ListShareData; canWrite: boolean; token: string; }) { const [optimisticItems, setOptimisticItems] = useOptimistic( data.items, (current: ListShareItem[], { id, done }: { id: string; done: boolean }) => current.map((item) => (item.id === id ? { ...item, done } : item)), ); const [, startTransition] = useTransition(); function toggle(item: ListShareItem) { if (!canWrite) return; const next = !item.done; startTransition(async () => { setOptimisticItems({ id: item.id, done: next }); await toggleShareListItem(token, item.id); }); } const open = optimisticItems.filter((i) => !i.done); const done = optimisticItems.filter((i) => i.done); return (
{data.type}
This list is empty.
) : (