import { IconButton, Pagination } from '@rocket.chat/fuselage'; import { useDebouncedValue, useStableCallback } from '@rocket.chat/fuselage-hooks'; import { GenericTable, GenericTableHeader, GenericTableHeaderCell, GenericTableRow, GenericTableCell, GenericTableBody, GenericTableLoadingTable, usePagination, useSort, } from '@rocket.chat/ui-client'; import { useTranslation, useRouter } from '@rocket.chat/ui-contexts'; import { hashKey } from '@tanstack/react-query'; import { useMemo, useState } from 'react'; import { useRemoveCustomField } from './useRemoveCustomField'; import FilterByText from '../../../components/FilterByText'; import GenericNoResults from '../../../components/GenericNoResults'; import { links } from '../../../lib/links'; import { useCustomFieldsQuery } from '../hooks/useCustomFieldsQuery'; const CustomFieldsTable = () => { const t = useTranslation(); const router = useRouter(); const [text, setText] = useState(''); const { current, itemsPerPage, setItemsPerPage: onSetItemsPerPage, setCurrent: onSetCurrent, ...paginationProps } = usePagination(); const { sortBy, sortDirection, setSort } = useSort<'_id' | 'label' | 'scope' | 'visibility'>('_id'); const handleAddNew = useStableCallback(() => router.navigate('/omnichannel/customfields/new')); const onRowClick = useStableCallback((id: string) => () => router.navigate(`/omnichannel/customfields/edit/${id}`)); const handleDelete = useRemoveCustomField(); const query = useDebouncedValue( useMemo( () => ({ text, sort: `{ "${sortBy}": ${sortDirection === 'asc' ? 1 : -1} }`, ...(itemsPerPage && { count: itemsPerPage }), ...(current && { offset: current }), }), [text, itemsPerPage, current, sortBy, sortDirection], ), 500, ); const { data, isSuccess, isLoading } = useCustomFieldsQuery(); const [defaultQuery] = useState(hashKey([query])); const queryHasChanged = defaultQuery !== hashKey([query]); const headers = ( <> {t('Field')} {t('Label')} {t('Scope')} {t('Visibility')} ); return ( <> {((isSuccess && data?.customFields.length > 0) || queryHasChanged) && ( setText(event.target.value)} /> )} {isLoading && ( {headers} )} {isSuccess && data.customFields.length === 0 && queryHasChanged && } {isSuccess && data.customFields.length === 0 && !queryHasChanged && ( )} {isSuccess && data.customFields.length > 0 && ( <> {headers} {data.customFields.map(({ label, _id, scope, visibility }) => ( {_id} {label} {scope === 'visitor' ? t('Visitor') : t('Room')} {visibility === 'visible' ? t('Visible') : t('Hidden')} { e.stopPropagation(); handleDelete(_id); }} /> ))} )} ); }; export default CustomFieldsTable;