import { CheckBox, Table, Tag, Pagination, TableHead, TableRow, TableCell, TableBody } from '@rocket.chat/fuselage'; import type { Dispatch, SetStateAction, ChangeEvent } from 'react'; import { useState, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import type { UserDescriptor } from './UserDescriptor'; export type PrepareUsersProps = { usersCount: number; users: UserDescriptor[]; setUsers: Dispatch>; }; // TODO: review inner logic const PrepareUsers = ({ usersCount, users, setUsers }: PrepareUsersProps) => { const { t } = useTranslation(); const [current, setCurrent] = useState(0); const [itemsPerPage, setItemsPerPage] = useState<25 | 50 | 100>(25); const showingResultsLabel = useCallback( ({ count, current, itemsPerPage }: { count: number; current: number; itemsPerPage: 25 | 50 | 100 }) => t('Showing_results_of', { from: current + 1, to: Math.min(current + itemsPerPage, count), total: count }), [t], ); const itemsPerPageLabel = useCallback(() => t('Items_per_page:'), [t]); return ( <> 0} indeterminate={usersCount > 0 && usersCount !== users.length} onChange={(): void => { setUsers((users) => { const hasCheckedDeletedUsers = users.some(({ is_deleted, do_import }) => is_deleted && do_import); const isChecking = usersCount === 0; if (isChecking) { return users.map((user) => ({ ...user, do_import: true })); } if (hasCheckedDeletedUsers) { return users.map((user) => (user.is_deleted ? { ...user, do_import: false } : user)); } return users.map((user) => ({ ...user, do_import: false })); }); }} /> {t('Username')} {t('Email')} {users.slice(current, current + itemsPerPage).map((user) => ( ): void => { const { checked } = event.currentTarget; setUsers((users) => users.map((_user) => (_user === user ? { ..._user, do_import: checked } : _user))); }} /> {user.username} {user.email} {user.is_deleted && {t('Deleted')}} ))}
); }; export default PrepareUsers;