import { AriaTable, AriaTbody, AriaTd, AriaTfoot, AriaThead, AriaTr, Box, Flex } from '@traefiklabs/faency' import { useMemo } from 'react' import { Helmet } from 'react-helmet-async' import { FiShield } from 'react-icons/fi' import useInfiniteScroll from 'react-infinite-scroll-hook' import { useSearchParams } from 'react-router-dom' import ClickableRow from 'components/ClickableRow' import ProviderIcon from 'components/icons/providers' import { Chips } from 'components/resources/DetailSections' import { ResourceStatus } from 'components/resources/ResourceStatus' import { ScrollTopButton } from 'components/ScrollTopButton' import { SpinnerLoader } from 'components/SpinnerLoader' import { searchParamsToState, TableFilter } from 'components/TableFilter' import SortableTh from 'components/tables/SortableTh' import Tooltip from 'components/Tooltip' import TooltipText from 'components/TooltipText' import useFetchWithPagination, { pagesResponseInterface, RenderRowType } from 'hooks/use-fetch-with-pagination' import { EmptyPlaceholder } from 'layout/EmptyPlaceholder' export const makeRowRender = (protocol = 'http'): RenderRowType => { const HttpRoutersRenderRow = (row) => ( {protocol !== 'udp' && ( <> {row.tls && ( )} )} {row.using && row.using.length > 0 && } ) return HttpRoutersRenderRow } export const HttpRoutersRender = ({ error, isEmpty, isLoadingMore, isReachingEnd, loadMore, pageCount, pages, }: pagesResponseInterface) => { const [infiniteRef] = useInfiniteScroll({ loading: isLoadingMore, hasNextPage: !isReachingEnd && !error, onLoadMore: loadMore, }) return ( <> {pages} {(isEmpty || !!error) && ( )} {isLoadingMore ? : isReachingEnd && pageCount > 1 && } ) } export const HttpRouters = () => { const renderRow = makeRowRender() const [searchParams] = useSearchParams() const query = useMemo(() => searchParamsToState(searchParams), [searchParams]) const { pages, pageCount, isLoadingMore, isReachingEnd, loadMore, error, isEmpty } = useFetchWithPagination( '/http/routers', { listContextKey: JSON.stringify(query), renderRow, renderLoader: () => null, query, }, ) return ( <> HTTP Routers - Traefik Proxy ) }