import React from 'react'; import {Select, Text} from '@gravity-ui/uikit'; import {EntitiesCount} from '../../../components/EntitiesCount'; import {HideUnavailableNodesSwitch} from '../../../components/HideUnavailableNodesSwitch/HideUnavailableNodesSwitch'; import {ProblemFilter} from '../../../components/ProblemFilter/ProblemFilter'; import {Search} from '../../../components/Search'; import {UptimeFilter} from '../../../components/UptimeFIlter'; import { useViewerNodesHandlerHasGroupingBySystemState, useViewerNodesHandlerHasNetworkStats, } from '../../../store/reducers/capabilities/hooks'; import type {NodesGroupByField} from '../../../types/api/nodes'; import {useIsViewerUser} from '../../../utils/hooks/useIsUserAllowedToMakeChanges'; import {PeerRoleFilter} from '../PeerRoleFilter/PeerRoleFilter'; import {getNodesGroupByOptions} from '../columns/constants'; import i18n from '../i18n'; import {b} from '../shared'; import {useNodesPageQueryParams} from '../useNodesPageQueryParams'; interface NodesControlsProps { withGroupBySelect?: boolean; groupByParams: NodesGroupByField[] | undefined; withPeerRoleFilter?: boolean; entitiesCountCurrent: number; entitiesCountTotal?: number; entitiesLoading: boolean; } export function NodesControls({ withGroupBySelect, groupByParams = [], withPeerRoleFilter, entitiesCountCurrent, entitiesCountTotal, entitiesLoading, }: NodesControlsProps) { const { searchValue, uptimeFilter, peerRoleFilter, groupByParam, withProblems, handleSearchQueryChange, handleUptimeFilterChange, handlePeerRoleFilterChange, handleGroupByParamChange, handleWithProblemsChange, } = useNodesPageQueryParams(groupByParams, withPeerRoleFilter); const isViewerUser = useIsViewerUser(); const systemStateGroupingAvailable = useViewerNodesHandlerHasGroupingBySystemState(); const groupByoptions = getNodesGroupByOptions(groupByParams, systemStateGroupingAvailable); const networStatsAvailable = useViewerNodesHandlerHasNetworkStats(); const shouldDisplayPeerRoleFilter = withPeerRoleFilter && networStatsAvailable && isViewerUser; const handleGroupBySelectUpdate = (value: string[]) => { handleGroupByParamChange(value[0]); }; return ( {systemStateGroupingAvailable && withGroupBySelect ? null : ( )} {withGroupBySelect ? null : ( )} {shouldDisplayPeerRoleFilter ? ( {i18n('controls_peer-role-label')} ) : null} {withGroupBySelect ? ( {i18n('controls_group-by-placeholder')}