import { Component, createResource, For, createSignal } from 'solid-js'; import { api } from '../api/client'; import type { User } from '../types'; import { Layout } from '../components/Layout'; export const Users: Component = () => { const [users, { refetch }] = createResource(() => api.users.getAll()); const [showModal, setShowModal] = createSignal(false); const [formData, setFormData] = createSignal({ name: '', email: '' }); const handleSubmit = async (e: Event) => { e.preventDefault(); const { name, email } = formData(); if (!name.trim()) return; await api.users.create({ name: name.trim(), email: email.trim() || undefined }); setFormData({ name: '', email: '' }); setShowModal(false); refetch(); }; const handleRegenerateApiKey = async (userId: number) => { await api.users.regenerateApiKey(userId); refetch(); }; const handleDelete = async (userId: number) => { if (!confirm('Are you sure you want to delete this user?')) return; await api.users.delete(userId); refetch(); }; return (

Users

{users.loading ? (

Loading...

) : ( {(user) => ( )}
ID Name Email API Key Status Actions
{user.id} {user.name} {user.email || '-'} {user.api_key.substring(0, 15)}... {user.is_active ? 'Active' : 'Inactive'}
)} {showModal() && (

Add New User

setFormData({ ...formData(), name: e.target.value })} style={{ width: '100%', padding: '8px', border: '1px solid #cbd5e1', 'border-radius': '4px', 'box-sizing': 'border-box' }} required />
setFormData({ ...formData(), email: e.target.value })} style={{ width: '100%', padding: '8px', border: '1px solid #cbd5e1', 'border-radius': '4px', 'box-sizing': 'border-box' }} />
)}
); };