import { h, type FunctionComponent, type TargetedSubmitEvent } from 'preact' import { useCallback } from 'preact/hooks' import rek, { type FetchError } from 'rek' import serializeForm from '../../shared/utils/serialize_form.ts' import useRequestState from '../../shared/hooks/use_request_state.ts' import Button from './button.tsx' import Checkbox from './checkbox.tsx' import Input from './input.tsx' import Message from './message.tsx' const InviteForm: FunctionComponent<{ onCreate?: ANY; roles?: ANY[] }> = ({ onCreate, roles }) => { const [{ error, pending, success }, actions] = useRequestState() const create = useCallback(async (e: TargetedSubmitEvent) => { e.preventDefault() actions.pending() try { const form = e.currentTarget const result = await rek.post('/api/invites', serializeForm(form)) form.reset() actions.success() onCreate?.(result) } catch (err) { actions.error(err as FetchError) } }, []) return (
{success && Invite sent!} {error && ( {error.status || 500} {error.body?.message || error.message} )} {roles && (
{roles.map((role) => ( ))}
)}
) } export default InviteForm