import { Box, Pagination } from '@rocket.chat/fuselage';
import { useDebouncedValue } from '@rocket.chat/fuselage-hooks';
import { UserAvatar } from '@rocket.chat/ui-avatar';
import {
GenericTable,
GenericTableBody,
GenericTableCell,
GenericTableHeader,
GenericTableHeaderCell,
GenericTableLoadingTable,
GenericTableRow,
usePagination,
useSort,
} from '@rocket.chat/ui-client';
import { useTranslation, useEndpoint } from '@rocket.chat/ui-contexts';
import { hashKey, useQuery } from '@tanstack/react-query';
import { useMemo, useState } from 'react';
import AddManager from './AddManager';
import RemoveManagerButton from './RemoveManagerButton';
import FilterByText from '../../../components/FilterByText';
import GenericError from '../../../components/GenericError';
import GenericNoResults from '../../../components/GenericNoResults/GenericNoResults';
import { links } from '../../../lib/links';
import { omnichannelQueryKeys } from '../../../lib/queryKeys';
const ManagersTable = () => {
const t = useTranslation();
const [text, setText] = useState('');
const { sortBy, sortDirection, setSort } = useSort<'name' | 'username' | 'emails.address'>('name');
const { current, itemsPerPage, setItemsPerPage: onSetItemsPerPage, setCurrent: onSetCurrent, ...paginationProps } = usePagination();
const query = useDebouncedValue(
useMemo(
() => ({
text,
sort: `{ "${sortBy}": ${sortDirection === 'asc' ? 1 : -1} }`,
count: itemsPerPage,
offset: current,
}),
[text, sortBy, sortDirection, itemsPerPage, current],
),
500,
);
const getManagers = useEndpoint('GET', '/v1/livechat/users/manager');
const { data, isLoading, isSuccess, isError, refetch } = useQuery({
queryKey: omnichannelQueryKeys.managers(query),
queryFn: async () => getManagers(query),
});
const [defaultQuery] = useState(hashKey([query]));
const queryHasChanged = defaultQuery !== hashKey([query]);
const headers = (
<>
{t('Name')}
{t('Username')}
{t('Email')}
{t('Remove')}
>
);
return (
<>
{((isSuccess && data?.users.length > 0) || queryHasChanged) && (
setText(event.target.value)} />
)}
{isLoading && (
{headers}
)}
{isSuccess && data.users.length === 0 && (
)}
{isSuccess && data.users.length > 0 && (
<>
{headers}
{data.users.map((user) => (
{user.name || user.username}
{user.username}
{user.emails?.length && user.emails[0].address}
))}
>
)}
{isError && }
>
);
};
export default ManagersTable;