import { Pagination } from '@rocket.chat/fuselage'; import { useDebouncedValue, useMediaQuery, useStableCallback } from '@rocket.chat/fuselage-hooks'; import { GenericTable, GenericTableBody, GenericTableHeader, GenericTableHeaderCell, GenericTableLoadingTable, usePagination, useSort, } from '@rocket.chat/ui-client'; import { hashKey } from '@tanstack/react-query'; import { useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import AddAgent from './AddAgent'; import AgentsTableRow from './AgentsTableRow'; import FilterByText from '../../../../components/FilterByText'; import GenericError from '../../../../components/GenericError'; import GenericNoResults from '../../../../components/GenericNoResults/GenericNoResults'; import { links } from '../../../../lib/links'; import { useAgentsQuery } from '../hooks/useAgentsQuery'; import { useQuery } from '../hooks/useQuery'; const AgentsTable = () => { const { t } = useTranslation(); const { sortBy, sortDirection, setSort } = useSort<'name' | 'username' | 'emails.address' | 'statusLivechat'>('name'); const [text, setText] = useState(''); const debouncedSort = useDebouncedValue( useMemo(() => [sortBy, sortDirection], [sortBy, sortDirection]), 500, ) as ['name' | 'username' | 'emails.address' | 'statusLivechat', 'asc' | 'desc']; const { current, itemsPerPage, setItemsPerPage, setCurrent, ...paginationProps } = usePagination(); const query = useQuery({ text, current, itemsPerPage }, debouncedSort); const { data, isSuccess, isLoading, isError, refetch } = useAgentsQuery(query); const [defaultQuery] = useState(hashKey([query])); const queryHasChanged = defaultQuery !== hashKey([query]); const onHeaderClick = useStableCallback((id: 'name' | 'username' | 'emails.address' | 'statusLivechat') => { if (sortBy === id) { setSort(id, sortDirection === 'asc' ? 'desc' : 'asc'); return; } setSort(id, 'asc'); }); const mediaQuery = useMediaQuery('(min-width: 1024px)'); const headers = ( <> {t('Name')} {mediaQuery && ( {t('Username')} )} {t('Email')} {t('Livechat_status')} {t('Remove')} ); return ( <> {((isSuccess && data?.users.length > 0) || queryHasChanged) && ( setText(event.target.value)} /> )} {isLoading && ( {headers} )} {isSuccess && data?.users.length === 0 && queryHasChanged && } {isSuccess && data.users.length === 0 && !queryHasChanged && ( )} {isSuccess && data?.users.length > 0 && ( <> {headers} {data?.users.map((user) => ( ))} )} {isError && } ); }; export default AgentsTable;