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;