import React, { useMemo } from 'react'; import PageHeading from 'components/common/PageHeading/PageHeading'; import * as Metrics from 'components/common/Metrics'; import { Tag } from 'components/common/Tag/Tag.styled'; import Switch from 'components/common/Switch/Switch'; import { useClusters } from 'lib/hooks/api/clusters'; import { Cluster, ResourceType, ServerStatus } from 'generated-sources'; import { ColumnDef } from '@tanstack/react-table'; import Table, { SizeCell } from 'components/common/NewTable'; import useBoolean from 'lib/hooks/useBoolean'; import { clusterNewConfigPath } from 'lib/paths'; import { GlobalSettingsContext } from 'components/contexts/GlobalSettingsContext'; import { ActionCanButton } from 'components/common/ActionComponent'; import { useGetUserInfo } from 'lib/hooks/api/roles'; import * as S from './Dashboard.styled'; import ClusterName from './ClusterName'; import ClusterTableActionsCell from './ClusterTableActionsCell'; const Dashboard: React.FC = () => { const { data } = useGetUserInfo(); const clusters = useClusters(); const { value: showOfflineOnly, toggle } = useBoolean(false); const appInfo = React.useContext(GlobalSettingsContext); const config = React.useMemo(() => { const clusterList = clusters.data || []; const offlineClusters = clusterList.filter( ({ status }) => status === ServerStatus.OFFLINE ); return { list: showOfflineOnly ? offlineClusters : clusterList, online: clusterList.length - offlineClusters.length, offline: offlineClusters.length, }; }, [clusters, showOfflineOnly]); const columns = React.useMemo[]>(() => { const initialColumns: ColumnDef[] = [ { header: 'Cluster name', accessorKey: 'name', cell: ClusterName }, { header: 'Version', accessorKey: 'version' }, { header: 'Brokers count', accessorKey: 'brokerCount' }, { header: 'Partitions', accessorKey: 'onlinePartitionCount' }, { header: 'Topics', accessorKey: 'topicCount' }, { header: 'Production', accessorKey: 'bytesInPerSec', cell: SizeCell }, { header: 'Consumption', accessorKey: 'bytesOutPerSec', cell: SizeCell }, ]; if (appInfo.hasDynamicConfig) { initialColumns.push({ header: '', id: 'actions', cell: ClusterTableActionsCell, }); } return initialColumns; }, []); const isApplicationConfig = useMemo(() => { return !!data?.userInfo?.permissions.some( (permission) => permission.resource === ResourceType.APPLICATIONCONFIG ); }, [data]); return ( <> Online}> {config.online || 0}{' '} clusters Offline}> {config.offline || 0}{' '} clusters
{appInfo.hasDynamicConfig && ( Configure new cluster )}
); }; export default Dashboard;