import { useState, useEffect } from 'react' import { Modal } from './components/ui/Modal.tsx' import { Button } from './components/ui/Button.tsx' import { TicketTable } from './components/tickets/TicketTable.tsx' import { NewTicketForm } from './components/tickets/NewTicketForm.tsx' import { useModal } from './hooks/useModal.ts' import { useStorageMode } from './hooks/useStorageMode.ts' import { getStorage } from './lib/storage.ts' import type { Ticket } from './lib/types.ts' import { Layout } from './components/ui/Layout.tsx' import { PlusIcon } from './components/icons/plus.tsx' function TicketApp({ storageMode }: { storageMode: 'local' | 'remote' }) { const storage = getStorage(storageMode) const [tickets, setTickets] = useState([]) const newTicketModal = useModal() // load tickets — handles both sync (local) and async (remote) useEffect(() => { const result = storage.getTickets() if (result instanceof Promise) { result.then(setTickets) } else { setTickets(result) } }, [storageMode]) const handleCreateTicket = async (form: Pick) => { const result = storage.createTicket(form) const ticket = result instanceof Promise ? await result : result setTickets(prev => [ticket, ...prev]) newTicketModal.close() } const handleDeleteTicket = async (id: string) => { const result = storage.deleteTicket(id) if (result instanceof Promise) await result setTickets(prev => prev.filter(t => t.id !== id)) } return (

Support Tickets

{tickets.length} {tickets.length === 1 ? 'ticket' : 'tickets'} total

) } export default function App() { const storageMode = useStorageMode() if (storageMode === 'pending') { return (

Loading...

) } return }