import { useEffect, useReducer, useState } from "react"; import { Alert, AlertIcon, Heading, HStack } from "@chakra-ui/react"; import { EmptyList, PrettyButton, SpinnerPage, tableEventReducer, } from "components"; import { useUpstreams } from "hooks"; import { intl } from "locale"; import { UpstreamsTable } from "./UpstreamsTable"; const initialState = { offset: 0, limit: 10, sortBy: [ { id: "name", desc: false, }, ], filters: [], }; function Upstreams() { const [{ offset, limit, sortBy, filters }, dispatch] = useReducer( tableEventReducer, initialState, ); const [tableData, setTableData] = useState(null); const { isFetching, isLoading, error, data } = useUpstreams( offset, limit, sortBy, filters, ); useEffect(() => { setTableData(data as any); }, [data]); if (error || (!tableData && !isFetching && !isLoading)) { return ( {error?.message || "Unknown error"} ); } if (isFetching || isLoading || !tableData) { return ; } // When there are no items and no filters active, show the nicer empty view if (data?.total === 0 && filters?.length === 0) { return ( {intl.formatMessage({ id: "lets-go" })} } /> ); } const pagination = { offset: data?.offset || initialState.offset, limit: data?.limit || initialState.limit, total: data?.total || 0, }; return ( <> {intl.formatMessage({ id: "upstreams.title" })} {intl.formatMessage({ id: "create-upstream" })} ); } export default Upstreams;