import { Box, Pagination, Table, Tile } from '@rocket.chat/fuselage'; import { useDebouncedValue } from '@rocket.chat/fuselage-hooks'; import React, { useState, useEffect, useCallback, forwardRef } from 'react'; import flattenChildren from 'react-keyed-flatten-children'; import { useTranslation } from '../../contexts/TranslationContext'; import HeaderCell from './HeaderCell'; import LoadingRow from './LoadingRow'; import ScrollableContentWrapper from '../ScrollableContentWrapper'; const GenericTable = ({ children, fixed = true, header, params: paramsDefault = '', renderFilter, renderRow: RenderRow, results, setParams = () => { }, total, ...props }, ref) => { const t = useTranslation(); const [filter, setFilter] = useState(paramsDefault); const [itemsPerPage, setItemsPerPage] = useState(25); const [current, setCurrent] = useState(0); const params = useDebouncedValue(filter, 500); useEffect(() => { setParams({ ...params, current, itemsPerPage }); }, [params, current, itemsPerPage, setParams]); const Loading = useCallback(() => { const headerCells = flattenChildren(header); return Array.from({ length: 10 }, (_, i) => ); }, [header]); const showingResultsLabel = useCallback(({ count, current, itemsPerPage }) => t('Showing results %s - %s of %s', current + 1, Math.min(current + itemsPerPage, count), count), [t]); const itemsPerPageLabel = useCallback(() => t('Items_per_page:'), [t]); return <> {typeof renderFilter === 'function' ? renderFilter({ onChange: setFilter, ...props }) : null} {results && !results.length ? {t('No_data_found')} : <> {header && {header} } {RenderRow && ( results ? results.map((props, index) => ) : )} {children && (results ? results.map(children) : )}
} ; }; export default Object.assign(forwardRef(GenericTable), { HeaderCell, });