import { Box, Pagination, States, StatesActions, StatesAction, StatesIcon, StatesTitle } from '@rocket.chat/fuselage'; import { useDebouncedValue } from '@rocket.chat/fuselage-hooks'; import { GenericTable, GenericTableBody, GenericTableCell, GenericTableHeader, GenericTableHeaderCell, GenericTableLoadingTable, GenericTableRow, usePagination, useSort, } from '@rocket.chat/ui-client'; import { useTranslation, useEndpoint } from '@rocket.chat/ui-contexts'; import { useQuery } from '@tanstack/react-query'; import type { MutableRefObject } from 'react'; import { useEffect, useMemo, useState } from 'react'; import FilterByText from '../../../components/FilterByText'; import GenericNoResults from '../../../components/GenericNoResults'; export type CustomEmojiProps = { reload: MutableRefObject<() => void>; onClick: (emoji: string) => () => void; }; const CustomEmoji = ({ onClick, reload }: CustomEmojiProps) => { const t = useTranslation(); const [text, setText] = useState(''); const { sortBy, sortDirection, setSort } = useSort<'name'>('name'); const { current, itemsPerPage, setItemsPerPage: onSetItemsPerPage, setCurrent: onSetCurrent, ...paginationProps } = usePagination(); const query = useDebouncedValue( useMemo( () => ({ name: text, sort: `{ "${sortBy}": ${sortDirection === 'asc' ? 1 : -1} }`, count: itemsPerPage, offset: current, }), [text, itemsPerPage, current, sortBy, sortDirection], ), 500, ); const headers = useMemo( () => [ {t('Name')} , {t('Aliases')} , ], [setSort, sortDirection, sortBy, t], ); const getEmojiList = useEndpoint('GET', '/v1/emoji-custom.all'); const { data, refetch, isSuccess, isLoading, isError } = useQuery({ queryKey: ['getEmojiList', query], queryFn: () => getEmojiList(query), }); useEffect(() => { reload.current = refetch; }, [reload, refetch]); return ( <> setText(event.target.value)} /> {isLoading && ( {headers} )} {isSuccess && data && data.emojis.length > 0 && ( <> {headers} {isSuccess && data?.emojis.map((emojis) => ( {emojis.name} {Array.isArray(emojis.aliases) ? emojis.aliases.join(', ') : emojis.aliases} ))} )} {isSuccess && data && data.emojis.length === 0 && } {isError && ( {t('Something_went_wrong')} refetch()}>{t('Reload_page')} )} ); }; export default CustomEmoji;