import { Accordion, AccordionButton, AccordionItem, AccordionPanel, Box, HStack, IconButton, Table, TableProps, Tbody, Td, Text, Th, Thead, Tooltip, Tr, useBreakpointValue, VStack, } from '@chakra-ui/react'; import classNames from 'classnames'; import { statusColors } from 'constants/Settings'; import { FC, Fragment, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { OnlineBadge } from 'components/online-badge'; import { OnlineStatus } from 'components/online-status'; import { StatusBadge } from 'components/status-badge'; import { Pagination, EmptySection, AccordionArrowIcon, handleSort, EditIcon, StatusSortSelect, Sort, } from 'components/table'; import { UsageSlider, UsageSliderCompact } from './usage-slider'; import { fetchUsers, useUsers } from 'stores'; import { ActionButtons } from './action-buttons'; import { pageSizeManagers } from 'utils/userPreferenceStorage'; import { useQuery } from 'react-query'; import { User } from 'types'; import { queryIds } from 'constants/query-ids'; type ExpandedIndex = number | number[]; type UsersTableProps = {} & TableProps; export const UsersTable: FC = (props) => { const { usersFilters: filters, onEditingUser, onCreateUser, onFilterChange, } = useUsers(); const { data } = useQuery({ queryKey: queryIds.users, queryFn: () => { return fetchUsers(filters) }, initialData: { total: 0, users: [] }, }); const { t } = useTranslation(); const [selectedRow, setSelectedRow] = useState( undefined ); const useTable = useBreakpointValue({ base: false, md: true }); const handleStatusFilter = (e: any) => { onFilterChange({ status: e.target.value.length > 0 ? e.target.value : undefined, }); }; const isFiltered = data?.total !== data?.users.length; const toggleAccordion = (index: number) => { setSelectedRow(index === selectedRow ? undefined : index); }; return ( {!useTable && data?.users.map((user, i) => { return ( ); })}
{t('users')} {t('usersTable.status')} {filters.status ? ': ' + filters.status : ''} {t('usersTable.dataUsage')}
{user.username}
{t('usersTable.dataUsage')} { e.stopPropagation(); onEditingUser(user); }} >
{useTable && data?.users.map((user: User, i) => { return ( onEditingUser(user)} > ); })} {data?.users.length == 0 && ( )}
{t('username')} {t('usersTable.status')} {filters.status ? ': ' + filters.status : ''} {t('usersTable.dataUsage')}
{user.username}
); };