'use client'; import { useState } from 'react'; import { Bookmark, Check, Plus, Trash2 } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { useSavedViews } from '@/hooks/use-saved-views'; interface SavedViewsDropdownProps { entityType: string; currentFilters: Record; currentSort?: { field: string; direction: 'asc' | 'desc' }; onApplyView: (filters: Record, sort?: { field: string; direction: string }) => void; } export function SavedViewsDropdown({ entityType, currentFilters, currentSort, onApplyView, }: SavedViewsDropdownProps) { const { views, activeViewId, saveCurrentView, deleteView, applyView } = useSavedViews(entityType); const [saveOpen, setSaveOpen] = useState(false); const [viewName, setViewName] = useState(''); const [isSaving, setIsSaving] = useState(false); async function handleSave() { if (!viewName.trim()) return; setIsSaving(true); try { await saveCurrentView(viewName.trim(), currentFilters, currentSort); setSaveOpen(false); setViewName(''); } finally { setIsSaving(false); } } return ( <> {views.length === 0 ? (
No saved views yet
) : ( views.map((view) => ( { applyView(view.id); onApplyView( view.filters as Record, view.sortConfig as { field: string; direction: string } | undefined, ); }} > {view.name}
{activeViewId === view.id && ( )}
)) )} setSaveOpen(true)}> Save current view
Save View
setViewName(e.target.value)} placeholder="My custom view" onKeyDown={(e) => e.key === 'Enter' && handleSave()} />
); }