/** * Items Page * * Demonstrates: * - useQuery for fetching records * - useMutations for CRUD operations * - useUser for current user * - Role-based UI elements */ import { useMemo, useState } from 'react' import { Archive, ArchiveRestore, Inbox, Plus, Trash2 } from 'lucide-react' import { ROLES, useMutations, useQuery, useUser, type Role } from 'deepspace' import { Badge, Button, ConfirmModal, EmptyState, Input, Label, Modal, Textarea, useToast, } from '@/components/ui' const ITEM_STATUS = { ACTIVE: 'active', ARCHIVED: 'archived', } as const interface Item { title: string description?: string status: string ownerId: string } type ItemRecord = { recordId: string data: Item createdAt: string } interface ItemsPageProps { className?: string } interface CreateItemModalProps { isOpen: boolean onClose: () => void onCreate: (title: string, description: string) => Promise } function CreateItemModal({ isOpen, onClose, onCreate }: CreateItemModalProps) { const [title, setTitle] = useState('') const [description, setDescription] = useState('') const [creating, setCreating] = useState(false) const handleSubmit = async () => { const nextTitle = title.trim() if (!nextTitle || creating) return setCreating(true) try { const created = await onCreate(nextTitle, description.trim()) if (!created) return setTitle('') setDescription('') onClose() } finally { setCreating(false) } } return ( undefined : onClose} size="sm"> Create Item
setTitle(event.target.value)} placeholder="Enter item title" autoFocus />