import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { Title, TextInput, Button, Group, Text, Loader, Center, Select, Pagination, Stack, ActionIcon, Tooltip, Box, Paper, } from '@mantine/core'; import { useTranslation } from 'react-i18next'; import { useQuery } from '@tanstack/react-query'; import { IconSearch } from '@tabler/icons-react'; import { apiClient } from '../../api/client'; import { EmployeeDrawer } from './components/EmployeeDrawer'; type EmployeeStatus = 'activ' | 'concediat' | 'suspendat'; interface EmployeeRow { id: string; idnp: string; nume: string; prenume: string; sex: 'F' | 'M'; status: EmployeeStatus; telefonPersonal: string; contracts: { functiaOrganigrama: string | null; department: { name: string }; }[]; } const STATUS_CONFIG: Record = { activ: { color: '#008286', bg: '#e6f4f4', label_ro: 'Activ' }, concediat: { color: '#b11116', bg: '#ffeaea', label_ro: 'Concediat' }, suspendat: { color: '#f15a31', bg: '#fff3ee', label_ro: 'Suspendat' }, }; const font = "'Montserrat', Arial, sans-serif"; const charcoal = '#58595b'; const teal = '#008286'; const border = '#e9ecef'; export function EmployeesPage() { const { t } = useTranslation(); const navigate = useNavigate(); const [search, setSearch] = useState(''); const [status, setStatus] = useState(null); const [drawerOpen, setDrawerOpen] = useState(false); const [page, setPage] = useState(1); const { data, isLoading } = useQuery({ queryKey: ['employees', search, status, page], queryFn: () => apiClient .get<{ total: number; items: EmployeeRow[] }>('/employees', { params: { search: search || undefined, status: status || undefined, page }, }) .then((r) => r.data), }); const totalPages = Math.ceil((data?.total ?? 0) / 20); return ( {/* ── Page header ── */} {t('employees.title')} {/* Teal accent underline */} {/* ── Filters ── */} { setSearch(e.currentTarget.value); setPage(1); }} style={{ flex: 1 }} styles={{ input: { fontFamily: font, fontWeight: 300, fontSize: '0.875rem', color: charcoal, borderColor: border, '&:focus': { borderColor: teal }, }, }} leftSection={} />