import { createResource, createSignal, For, Show } from 'solid-js'; import { deleteDemoPersonsById, type GetDemoPersonsResponse, getDemoPersons, patchDemoPersonsById, postDemoPersons, } from './api'; type Person = GetDemoPersonsResponse[number]; export function PersonCRUD() { const [editingId, setEditingId] = createSignal(null); const [isCreating, setIsCreating] = createSignal(false); // Fetch persons const [persons, { refetch }] = createResource(async () => { const response = await getDemoPersons(); return response.data ?? []; }); // Form state const [formData, setFormData] = createSignal({ first_name: '', last_name: '', gender: 'other' as 'man' | 'woman' | 'other', metadata: { login_at: new Date().toISOString(), ip: null as string | null, agent: null as string | null, plan: 'free' as 'free' | 'premium', }, }); const resetForm = () => { setFormData({ first_name: '', last_name: '', gender: 'other', metadata: { login_at: new Date().toISOString(), ip: null, agent: null, plan: 'free', }, }); setEditingId(null); setIsCreating(false); }; const handleCreate = async (e: Event) => { e.preventDefault(); try { await postDemoPersons({ body: formData(), }); resetForm(); refetch(); } catch (error) { console.error('Failed to create person:', error); } }; const handleUpdate = async (e: Event) => { e.preventDefault(); const id = editingId(); if (id === null) return; try { await patchDemoPersonsById({ path: { id }, body: formData(), }); resetForm(); refetch(); } catch (error) { console.error('Failed to update person:', error); } }; const handleDelete = async (id: number) => { if (!confirm('Are you sure you want to delete this person?')) return; try { await deleteDemoPersonsById({ path: { id }, }); refetch(); } catch (error) { console.error('Failed to delete person:', error); } }; const startEdit = (person: Person) => { setFormData({ first_name: person.first_name, last_name: person.last_name ?? '', gender: person.gender, metadata: person.metadata, }); setEditingId(person.id); setIsCreating(false); }; const startCreate = () => { resetForm(); setIsCreating(true); }; return (

Person Management

{/* Create/Edit Form */}

{editingId() !== null ? 'Edit Person' : 'Create Person'}

{/* Create Button */} {/* List */}

Loading persons...

Error loading persons: {persons.error.message}

{(person) => ( )}
ID First Name Last Name Gender Plan Created At Actions
{person.id} {person.first_name} {person.last_name ?? '-'} {person.gender} {person.metadata.plan} {new Date(person.created_at).toLocaleDateString()}
); }