'use client'; import { useQuery } from '@tanstack/react-query'; import { useState, type FormEvent } from 'react'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { EmptyState } from '@/components/ui/empty-state'; import { Skeleton } from '@/components/ui/skeleton'; import { Table, Td, Th, Tr } from '@/components/ui/table'; import { Link } from '@/i18n/navigation'; import { useT } from '@/i18n/t'; import { api } from '@/lib/api'; /** Two characters is the shortest thing the server treats as a search. */ const MIN_LENGTH = 2; /** Flow H: search by email, RUC or name, then open one account. */ export function UsersScreen() { const t = useT(); const [draft, setDraft] = useState(''); const [term, setTerm] = useState(''); const results = useQuery({ queryKey: ['admin', 'users', term], queryFn: ({ signal }) => api.searchUsers(term, signal), enabled: term.length >= MIN_LENGTH, }); function submit(event: FormEvent) { event.preventDefault(); setTerm(draft.trim()); } return (
{t('common.error.generic')}
| {t('admin.users.col.email')} | {t('admin.users.col.name')} | {t('admin.users.col.doc')} | {t('admin.users.col.role')} | {t('admin.users.col.created')} |
|---|---|---|---|---|
| {user.email} | {user.fullName} | {user.doc ?? t('common.none')} | {t(`admin.role.${user.role}` as const)} | {user.createdAt.slice(0, 10)} |