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;