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 { ActionButtons } from './action-buttons'; import { pageSizeManagers } from 'utils/userPreferenceStorage'; import { FC, Fragment, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { StatusBadge } from 'components/status-badge'; import { Pagination, EmptySection, AccordionArrowIcon, EditIcon, Sort, StatusSortSelect, handleSort, } from 'components/table'; import { fetchNodes, useNodes } from 'stores'; import { useQuery } from 'react-query'; import { queryIds } from 'constants/query-ids'; type ExpandedIndex = number | number[]; type NodesTableProps = {} & TableProps; export const NodesTable: FC = (props) => { const { nodesFilters: filters, onEditingNode, onAddingNode, onFilterChange, } = useNodes(); const { data: nodes } = useQuery(queryIds.nodes, () => { return fetchNodes() }) const total = nodes?.length || 0; const { t } = useTranslation(); const [selectedRow, setSelectedRow] = useState( undefined ); const useTable = useBreakpointValue({ base: false, md: true }); // TODO: Find a different mechancism to to detect ftiler // const isFiltered = users.length !== total; const handleStatusFilter = (e: any) => { onFilterChange({ status: e.target.value.length > 0 ? e.target.value : undefined, }); }; const toggleAccordion = (index: number) => { setSelectedRow(index === selectedRow ? undefined : index); }; const StatusSortSelectNodes = () => ( ); return ( {/* Action buttons (certificate, core settings)*/} {!useTable && nodes?.map((node, i) => { return ( ); })}
{t('name')} {t('nodesTable.status')} {filters.status ? ': ' + filters.status : ''} {t('nodesTable.xrayVersion')} {t('nodesTable.ipPort')}
{node.name} {node.xray_version}
{t('nodesTable.ipPort')} {node.address}:{node.port} { e.stopPropagation(); onEditingNode(node); }} >
{useTable && nodes?.map((node, i) => { return ( onEditingNode(node)} > ); })} {nodes?.length == 0 && ( )}
{t('name')} {t('nodesTable.status')} {filters.status ? ': ' + filters.status : ''} {t('nodesTable.xrayVersion')} {t('nodesTable.ipPort')}
{node.name}
{node.xray_version} {node.address}:{node.port}
); };