"use client" import { useState, useCallback } from "react" import { useTimeline } from "@/hooks/use-timeline" import { PhotoCard } from "./photo-card" import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Button } from "@/components/ui/button" import { ScrollArea } from "@/components/ui/scroll-area" import { Spinner } from "@/components/ui/spinner" interface AssetPickerDialogProps { open: boolean onOpenChange: (open: boolean) => void excludeIds?: Set onConfirm: (assetIds: string[]) => void } export function AssetPickerDialog({ open, onOpenChange, excludeIds, onConfirm, }: AssetPickerDialogProps) { const { assets, isLoading, hasMore, loadMore } = useTimeline() const [selected, setSelected] = useState>(new Set()) const toggle = useCallback((id: string, sel: boolean) => { setSelected((prev) => { const next = new Set(prev) if (sel) next.add(id) else next.delete(id) return next }) }, []) const filtered = excludeIds ? assets.filter((a) => !excludeIds.has(a.id)) : assets const handleConfirm = () => { onConfirm(Array.from(selected)) setSelected(new Set()) onOpenChange(false) } return ( { if (!o) setSelected(new Set()) onOpenChange(o) }} > Select Photos
{filtered.map((asset) => ( toggle(asset.id, sel)} /> ))}
{hasMore && (
)}
{selected.size} selected
) }