import { AriaTable, AriaTbody, AriaTd, AriaTfoot, AriaThead, AriaTr, Box, Flex, Text } from '@traefiklabs/faency' import { useMemo } from 'react' 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 { 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' import Page from 'layout/Page' export const makeRowRender = (): RenderRowType => { const HttpServicesRenderRow = (row) => ( {row.loadBalancer?.servers?.length || 0} ) return HttpServicesRenderRow } export const HttpServicesRender = ({ 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 HttpServices = () => { const renderRow = makeRowRender() const [searchParams] = useSearchParams() const query = useMemo(() => searchParamsToState(searchParams), [searchParams]) const { pages, pageCount, isLoadingMore, isReachingEnd, loadMore, error, isEmpty } = useFetchWithPagination( '/http/services', { listContextKey: JSON.stringify(query), renderRow, renderLoader: () => null, query, }, ) return ( ) }