import { JSX } from 'preact' import { type Signal, useSignal } from '@preact/signals' import { Todo, User } from '@homeman/models.ts' import { Button } from '@homeman/components/Button.tsx' import { Input } from '@homeman/components/Input.tsx' import { Label } from '@homeman/components/Label.tsx' import { Dialog } from '@homeman/components/Dialog.tsx' import { PencilSquareOutline, PlusOutline, PlusSolid, TrashOutline, } from 'preact-heroicons' import { Table } from '@homeman/components/Table.tsx' import { SectionHead } from '@homeman/components/SectionHead.tsx' import { Avatar } from '@homeman/components/Avatar.tsx' export interface Props { users: Record todos: Record } async function promptDeleteUser(id: string, name: string) { if (confirm(`Are you sure you want to delete '${name}' (${id})?`)) { await fetch(`/api/user?id=${id}`, { method: 'DELETE' }) location.reload() } } async function promptDeleteTodo(id: string, description: string) { if (confirm(`Are you sure you want to delete '${description}' (${id})?`)) { await fetch(`/api/todo`, { method: 'DELETE', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ id }), }) location.reload() } } interface UserFormProps extends JSX.HTMLAttributes { onCancelButtonClicked: JSX.MouseEventHandler userData: User | null } function UserForm( { onCancelButtonClicked, userData, ...props }: UserFormProps, ) { return (
{userData ? : <>}
) } export function Admin({ users, todos }: Props) { const showAddUserDialog = useSignal(false) const editUser: Signal = useSignal(null) return (

Administration Page

showAddUserDialog.value = false} > showAddUserDialog.value = false} userData={null} /> editUser.value = null} > editUser.value = null} userData={editUser.value} /> {Object.entries(users).map(([id, user]) => { const { name, avatarUrl, color } = user return ( ) })}
Name Avatar Color Actions
{name} {avatarUrl == null ? 'None' : } #{color}
{Object.entries(todos).map(( [_index, { id, emoji, doneAt, description, assigneeUserId }], ) => ( ))}
Description Assignee Done At Emoji Actions
{description} {assigneeUserId == null ? 'Unassigned' : users[assigneeUserId]?.name} {doneAt == null ? 'Not Done' : doneAt.toLocaleString()} {emoji || 'No Emoji'}
) }