import { useEffect, useReducer, useState } from "react"; import { Alert, AlertIcon } from "@chakra-ui/react"; import { EmptyList, PrettyButton, SpinnerPage, tableEventReducer, } from "src/components"; import { useHosts } from "src/hooks"; import { intl } from "src/locale"; import Table from "./Table"; const initialState = { offset: 0, limit: 10, sortBy: [ { id: "name", desc: false, }, ], filters: [], }; interface TableWrapperProps { onCreateClick?: () => void; } function TableWrapper({ onCreateClick }: TableWrapperProps) { const [{ offset, limit, sortBy, filters }, dispatch] = useReducer( tableEventReducer, initialState, ); const [tableData, setTableData] = useState(null); const { isFetching, isLoading, isError, error, data } = useHosts( offset, limit, sortBy, filters, ); useEffect(() => { setTableData(data as any); }, [data]); if (isFetching || isLoading || !tableData) { return ; } if (isError) { 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 ( ); } export default TableWrapper;