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;