diff --git a/src/components/PDiskPopup/PDiskPopup.tsx b/src/components/PDiskPopup/PDiskPopup.tsx index 8fc8322fff..c73f4e5a9c 100644 --- a/src/components/PDiskPopup/PDiskPopup.tsx +++ b/src/components/PDiskPopup/PDiskPopup.tsx @@ -3,12 +3,14 @@ import React from 'react'; import type {PopupProps} from '@gravity-ui/uikit'; import {Popup} from '@gravity-ui/uikit'; +import {selectNodeHostsMap} from '../../store/reducers/nodesList'; import {EFlag} from '../../types/api/enums'; -import type {NodesMap} from '../../types/store/nodesList'; +import {valueIsDefined} from '../../utils'; import {cn} from '../../utils/cn'; import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants'; import {getPDiskId} from '../../utils/disks/helpers'; import type {PreparedPDisk} from '../../utils/disks/types'; +import {useTypedSelector} from '../../utils/hooks'; import {bytesToGB} from '../../utils/utils'; import type {InfoViewerItem} from '../InfoViewer'; import {InfoViewer} from '../InfoViewer'; @@ -19,7 +21,7 @@ const b = cn('pdisk-storage-popup'); const errorColors = [EFlag.Orange, EFlag.Red, EFlag.Yellow]; -export const preparePDiskData = (data: PreparedPDisk, nodes?: NodesMap) => { +export const preparePDiskData = (data: PreparedPDisk, nodeHost?: string) => { const {AvailableSize, TotalSize, State, PDiskId, NodeId, Path, Realtime, Type, Device} = data; const pdiskData: InfoViewerItem[] = [ @@ -35,8 +37,8 @@ export const preparePDiskData = (data: PreparedPDisk, nodes?: NodesMap) => { pdiskData.push({label: 'Node Id', value: NodeId}); } - if (nodes && NodeId && nodes.get(NodeId)) { - pdiskData.push({label: 'Host', value: nodes.get(NodeId)}); + if (nodeHost) { + pdiskData.push({label: 'Host', value: nodeHost}); } if (Path) { @@ -61,11 +63,12 @@ export const preparePDiskData = (data: PreparedPDisk, nodes?: NodesMap) => { interface PDiskPopupProps extends PopupProps { data: PreparedPDisk; - nodes?: NodesMap; } -export const PDiskPopup = ({data, nodes, ...props}: PDiskPopupProps) => { - const info = React.useMemo(() => preparePDiskData(data, nodes), [data, nodes]); +export const PDiskPopup = ({data, ...props}: PDiskPopupProps) => { + const nodeHostsMap = useTypedSelector(selectNodeHostsMap); + const nodeHost = valueIsDefined(data.NodeId) ? nodeHostsMap?.get(data.NodeId) : undefined; + const info = React.useMemo(() => preparePDiskData(data, nodeHost), [data, nodeHost]); return ( - + ); }; diff --git a/src/components/VDiskPopup/VDiskPopup.tsx b/src/components/VDiskPopup/VDiskPopup.tsx index 86488c7f30..a5185581f7 100644 --- a/src/components/VDiskPopup/VDiskPopup.tsx +++ b/src/components/VDiskPopup/VDiskPopup.tsx @@ -3,14 +3,16 @@ import React from 'react'; import type {PopupProps} from '@gravity-ui/uikit'; import {Label, Popup} from '@gravity-ui/uikit'; +import {selectNodeHostsMap} from '../../store/reducers/nodesList'; import {EFlag} from '../../types/api/enums'; import type {TVDiskStateInfo} from '../../types/api/vdisk'; -import type {NodesMap} from '../../types/store/nodesList'; +import {valueIsDefined} from '../../utils'; import {cn} from '../../utils/cn'; import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants'; import {stringifyVdiskId} from '../../utils/dataFormatters/dataFormatters'; import {isFullVDiskData} from '../../utils/disks/helpers'; import type {UnavailableDonor} from '../../utils/disks/types'; +import {useTypedSelector} from '../../utils/hooks'; import {bytesToGB, bytesToSpeed} from '../../utils/utils'; import type {InfoViewerItem} from '../InfoViewer'; import {InfoViewer} from '../InfoViewer'; @@ -129,19 +131,21 @@ const prepareVDiskData = (data: TVDiskStateInfo) => { interface VDiskPopupProps extends PopupProps { data: TVDiskStateInfo | UnavailableDonor; - nodes?: NodesMap; } -export const VDiskPopup = ({data, nodes, ...props}: VDiskPopupProps) => { +export const VDiskPopup = ({data, ...props}: VDiskPopupProps) => { const isFullData = isFullVDiskData(data); const vdiskInfo = React.useMemo( () => (isFullData ? prepareVDiskData(data) : prepareUnavailableVDiskData(data)), [data, isFullData], ); + + const nodeHostsMap = useTypedSelector(selectNodeHostsMap); + const nodeHost = valueIsDefined(data.NodeId) ? nodeHostsMap?.get(data.NodeId) : undefined; const pdiskInfo = React.useMemo( - () => isFullData && data.PDisk && preparePDiskData(data.PDisk, nodes), - [data, nodes, isFullData], + () => isFullData && data.PDisk && preparePDiskData(data.PDisk, nodeHost), + [data, nodeHost, isFullData], ); return ( diff --git a/src/containers/Storage/Disks/Disks.tsx b/src/containers/Storage/Disks/Disks.tsx index e4b93d821f..0994f24881 100644 --- a/src/containers/Storage/Disks/Disks.tsx +++ b/src/containers/Storage/Disks/Disks.tsx @@ -1,12 +1,13 @@ import React from 'react'; import {VDiskWithDonorsStack} from '../../../components/VDisk/VDiskWithDonorsStack'; -import type {NodesMap} from '../../../types/store/nodesList'; import {cn} from '../../../utils/cn'; import {stringifyVdiskId} from '../../../utils/dataFormatters/dataFormatters'; import {getPDiskId} from '../../../utils/disks/helpers'; import type {PreparedVDisk} from '../../../utils/disks/types'; import {PDisk} from '../PDisk'; +import {isVdiskActive} from '../utils'; +import type {VDiskViewContext} from '../utils'; import './Disks.scss'; @@ -14,10 +15,10 @@ const b = cn('ydb-storage-disks'); interface DisksProps { vDisks?: PreparedVDisk[]; - nodes?: NodesMap; + viewContext?: VDiskViewContext; } -export function Disks({vDisks = [], nodes}: DisksProps) { +export function Disks({vDisks = [], viewContext}: DisksProps) { const [highlightedVDisk, setHighlightedVDisk] = React.useState(); if (!vDisks.length) { @@ -27,44 +28,39 @@ export function Disks({vDisks = [], nodes}: DisksProps) { return (
- {vDisks?.map((vDisk) => { - return ( - - ); - })} + {vDisks?.map((vDisk) => ( + + ))}
- {vDisks?.map((vDisk) => { - return ( - - ); - })} + {vDisks?.map((vDisk) => ( + + ))}
); } interface DisksItemProps { - nodes?: NodesMap; vDisk: PreparedVDisk; + inactive?: boolean; highlightedVDisk: string | undefined; setHighlightedVDisk: (id: string | undefined) => void; } -function VDiskItem({nodes, vDisk, highlightedVDisk, setHighlightedVDisk}: DisksItemProps) { +function VDiskItem({vDisk, highlightedVDisk, inactive, setHighlightedVDisk}: DisksItemProps) { // Do not show PDisk popup for VDisk const vDiskToShow = {...vDisk, PDisk: undefined}; @@ -79,8 +75,8 @@ function VDiskItem({nodes, vDisk, highlightedVDisk, setHighlightedVDisk}: DisksI > setHighlightedVDisk(vDiskId)} onHidePopup={() => setHighlightedVDisk(undefined)} diff --git a/src/containers/Storage/PDisk/PDisk.tsx b/src/containers/Storage/PDisk/PDisk.tsx index 90e0bc3a4b..43150e261f 100644 --- a/src/containers/Storage/PDisk/PDisk.tsx +++ b/src/containers/Storage/PDisk/PDisk.tsx @@ -6,13 +6,13 @@ import {PDiskPopup} from '../../../components/PDiskPopup/PDiskPopup'; import {VDiskWithDonorsStack} from '../../../components/VDisk/VDiskWithDonorsStack'; import routes, {createHref, getPDiskPagePath} from '../../../routes'; import {useDiskPagesAvailable} from '../../../store/reducers/capabilities/hooks'; -import {selectNodesMap} from '../../../store/reducers/nodesList'; import {valueIsDefined} from '../../../utils'; import {cn} from '../../../utils/cn'; import {stringifyVdiskId} from '../../../utils/dataFormatters/dataFormatters'; import type {PreparedPDisk, PreparedVDisk} from '../../../utils/disks/types'; -import {useTypedSelector} from '../../../utils/hooks'; import {STRUCTURE} from '../../Node/NodePages'; +import {isVdiskActive} from '../utils'; +import type {VDiskViewContext} from '../utils'; import './PDisk.scss'; @@ -21,27 +21,26 @@ const b = cn('pdisk-storage'); interface PDiskProps { data?: PreparedPDisk; vDisks?: PreparedVDisk[]; - inactiveVdisks?: PreparedVDisk[]; showPopup?: boolean; onShowPopup?: VoidFunction; onHidePopup?: VoidFunction; className?: string; progressBarClassName?: string; + viewContext?: VDiskViewContext; } export const PDisk = ({ data = {}, vDisks, - inactiveVdisks, showPopup, onShowPopup, onHidePopup, className, progressBarClassName, + viewContext, }: PDiskProps) => { const [isPopupVisible, setIsPopupVisible] = React.useState(false); - const nodes = useTypedSelector(selectNodesMap); const diskPagesAvailable = useDiskPagesAvailable(); const anchor = React.useRef(null); @@ -79,7 +78,7 @@ export const PDisk = ({ > @@ -118,12 +117,7 @@ export const PDisk = ({
{data.Type}
- + ); }; diff --git a/src/containers/Storage/PaginatedStorageGroups.tsx b/src/containers/Storage/PaginatedStorageGroups.tsx index 44f550faaf..8ff4d46dc1 100644 --- a/src/containers/Storage/PaginatedStorageGroups.tsx +++ b/src/containers/Storage/PaginatedStorageGroups.tsx @@ -52,8 +52,10 @@ export function PaginatedStorageGroups(props: PaginatedStorageProps) { function StorageGroupsComponent({database, nodeId, parentContainer}: PaginatedStorageProps) { const {searchValue, visibleEntities, handleShowAllGroups} = useStorageQueryParams(); - const {columnsToShow, columnsToSelect, setColumns} = - useStorageGroupsSelectedColumns(visibleEntities); + const {columnsToShow, columnsToSelect, setColumns} = useStorageGroupsSelectedColumns({ + visibleEntities, + nodeId, + }); const renderControls: RenderControls = ({totalEntities, foundEntities, inited}) => { return ( @@ -89,8 +91,10 @@ function GroupedStorageGroupsComponent({database, groupId, nodeId}: PaginatedSto const {searchValue, storageGroupsGroupByParam, visibleEntities, handleShowAllGroups} = useStorageQueryParams(); - const {columnsToShow, columnsToSelect, setColumns} = - useStorageGroupsSelectedColumns(visibleEntities); + const {columnsToShow, columnsToSelect, setColumns} = useStorageGroupsSelectedColumns({ + visibleEntities, + nodeId, + }); const {currentData, isFetching, error} = storageApi.useGetStorageGroupsInfoQuery( { diff --git a/src/containers/Storage/Storage.tsx b/src/containers/Storage/Storage.tsx index ea0fd16f67..15953cc68b 100644 --- a/src/containers/Storage/Storage.tsx +++ b/src/containers/Storage/Storage.tsx @@ -83,7 +83,7 @@ export const Storage = ({database, nodeId, groupId, pDiskId}: StorageProps) => { columnsToShow: storageGroupsColumnsToShow, columnsToSelect: storageGroupsColumnsToSelect, setColumns: setStorageGroupsSelectedColumns, - } = useStorageGroupsSelectedColumns(visibleEntities); + } = useStorageGroupsSelectedColumns({visibleEntities, nodeId: nodeId?.toString()}); const nodesQuery = storageApi.useGetStorageNodesInfoQuery( { diff --git a/src/containers/Storage/StorageGroups/columns/columns.tsx b/src/containers/Storage/StorageGroups/columns/columns.tsx index 12fa9b8cd7..39cf8dc64b 100644 --- a/src/containers/Storage/StorageGroups/columns/columns.tsx +++ b/src/containers/Storage/StorageGroups/columns/columns.tsx @@ -10,17 +10,16 @@ import {InternalLink} from '../../../../components/InternalLink'; import {UsageLabel} from '../../../../components/UsageLabel/UsageLabel'; import {VDiskWithDonorsStack} from '../../../../components/VDisk/VDiskWithDonorsStack'; import {getStorageGroupPath} from '../../../../routes'; -import type {NodesMap} from '../../../../types/store/nodesList'; import {cn} from '../../../../utils/cn'; import {stringifyVdiskId} from '../../../../utils/dataFormatters/dataFormatters'; import {isSortableStorageProperty} from '../../../../utils/storage'; import {bytesToGB, bytesToSpeed} from '../../../../utils/utils'; import {Disks} from '../../Disks/Disks'; -import {getDegradedSeverity, getUsageSeverityForStorageGroup} from '../../utils'; +import {getDegradedSeverity, getUsageSeverityForStorageGroup, isVdiskActive} from '../../utils'; import i18n from '../i18n'; import {STORAGE_GROUPS_COLUMNS_IDS, STORAGE_GROUPS_COLUMNS_TITLES} from './constants'; -import type {StorageColumnsGetter, StorageGroupsColumn} from './types'; +import type {GetStorageColumnsData, StorageColumnsGetter, StorageGroupsColumn} from './types'; import './StorageGroupsColumns.scss'; @@ -184,22 +183,20 @@ const writeColumn: StorageGroupsColumn = { align: DataTable.RIGHT, }; -const getVDisksColumn = (nodes?: NodesMap): StorageGroupsColumn => ({ +const getVDisksColumn = (data?: GetStorageColumnsData): StorageGroupsColumn => ({ name: STORAGE_GROUPS_COLUMNS_IDS.VDisks, header: STORAGE_GROUPS_COLUMNS_TITLES.VDisks, className: b('vdisks-column'), render: ({row}) => (
- {row.VDisks?.map((vDisk) => { - return ( - - ); - })} + {row.VDisks?.map((vDisk) => ( + + ))}
), align: DataTable.CENTER, @@ -208,12 +205,12 @@ const getVDisksColumn = (nodes?: NodesMap): StorageGroupsColumn => ({ sortable: false, }); -const getDisksColumn = (nodes?: NodesMap): StorageGroupsColumn => ({ +const getDisksColumn = (data?: GetStorageColumnsData): StorageGroupsColumn => ({ name: STORAGE_GROUPS_COLUMNS_IDS.VDisksPDisks, header: STORAGE_GROUPS_COLUMNS_TITLES.VDisksPDisks, className: b('disks-column'), render: ({row}) => { - return ; + return ; }, align: DataTable.CENTER, width: 900, @@ -239,7 +236,7 @@ export const getStorageTopGroupsColumns: StorageColumnsGetter = () => { }); }; -export const getStorageGroupsColumns: StorageColumnsGetter = (data) => { +export const getStorageGroupsColumns: StorageColumnsGetter = (data?: GetStorageColumnsData) => { const columns = [ groupIdColumn, poolNameColumn, @@ -252,8 +249,8 @@ export const getStorageGroupsColumns: StorageColumnsGetter = (data) => { usedSpaceFlagColumn, readColumn, writeColumn, - getVDisksColumn(data?.nodes), - getDisksColumn(data?.nodes), + getVDisksColumn(data), + getDisksColumn(data), ]; return columns.map((column) => ({ diff --git a/src/containers/Storage/StorageGroups/columns/hooks.ts b/src/containers/Storage/StorageGroups/columns/hooks.ts index 0b3e809dff..d58d716bad 100644 --- a/src/containers/Storage/StorageGroups/columns/hooks.ts +++ b/src/containers/Storage/StorageGroups/columns/hooks.ts @@ -1,9 +1,6 @@ import React from 'react'; -import {selectNodesMap} from '../../../../store/reducers/nodesList'; import {VISIBLE_ENTITIES} from '../../../../store/reducers/storage/constants'; -import type {VisibleEntities} from '../../../../store/reducers/storage/types'; -import {useTypedSelector} from '../../../../utils/hooks'; import {useSelectedColumns} from '../../../../utils/hooks/useSelectedColumns'; import {getStorageGroupsColumns} from './columns'; @@ -14,17 +11,19 @@ import { STORAGE_GROUPS_COLUMNS_TITLES, STORAGE_GROUPS_SELECTED_COLUMNS_LS_KEY, } from './constants'; +import type {GetStorageGroupsColumnsParams} from './types'; -export function useGetStorageGroupsColumns() { - const nodes = useTypedSelector(selectNodesMap); - +export function useGetStorageGroupsColumns(nodeId?: string) { return React.useMemo(() => { - return getStorageGroupsColumns({nodes}); - }, [nodes]); + return getStorageGroupsColumns({nodeId}); + }, [nodeId]); } -export function useStorageGroupsSelectedColumns(visibleEntities?: VisibleEntities) { - const columns = useGetStorageGroupsColumns(); +export function useStorageGroupsSelectedColumns({ + visibleEntities, + nodeId, +}: GetStorageGroupsColumnsParams) { + const columns = useGetStorageGroupsColumns(nodeId); const requiredColumns = React.useMemo(() => { if (visibleEntities === VISIBLE_ENTITIES.missing) { diff --git a/src/containers/Storage/StorageGroups/columns/types.ts b/src/containers/Storage/StorageGroups/columns/types.ts index 88beb92d71..dccb9affaa 100644 --- a/src/containers/Storage/StorageGroups/columns/types.ts +++ b/src/containers/Storage/StorageGroups/columns/types.ts @@ -1,14 +1,18 @@ import type {Column as DataTableColumn} from '@gravity-ui/react-data-table'; import type {Column as PaginatedTableColumn} from '../../../../components/PaginatedTable'; -import type {PreparedStorageGroup} from '../../../../store/reducers/storage/types'; -import type {NodesMap} from '../../../../types/store/nodesList'; +import type {PreparedStorageGroup, VisibleEntities} from '../../../../store/reducers/storage/types'; export type StorageGroupsColumn = PaginatedTableColumn & DataTableColumn; -interface GetStorageColumnsData { - nodes?: NodesMap; +export interface GetStorageColumnsData { + nodeId?: string; +} + +export interface GetStorageGroupsColumnsParams { + visibleEntities?: VisibleEntities; + nodeId?: string; } export type StorageColumnsGetter = (data?: GetStorageColumnsData) => StorageGroupsColumn[]; diff --git a/src/containers/Storage/StorageNodes/columns/columns.tsx b/src/containers/Storage/StorageNodes/columns/columns.tsx index 2e95b27031..303b89e070 100644 --- a/src/containers/Storage/StorageNodes/columns/columns.tsx +++ b/src/containers/Storage/StorageNodes/columns/columns.tsx @@ -79,17 +79,9 @@ const getStorageNodesColumns = ({ (vdisk) => vdisk.PDiskId === pDisk.PDiskId, ); - const inactiveVdisks = vDisks?.filter( - (vdisk) => groupId && vdisk.VDiskId?.GroupID !== Number(groupId), - ); - return (
- +
); })} diff --git a/src/containers/Storage/utils/index.ts b/src/containers/Storage/utils/index.ts index 3d51f6772b..a8dad2d3f3 100644 --- a/src/containers/Storage/utils/index.ts +++ b/src/containers/Storage/utils/index.ts @@ -7,6 +7,8 @@ import type { StorageSortParams, VisibleEntities, } from '../../../store/reducers/storage/types'; +import {valueIsDefined} from '../../../utils'; +import type {PreparedVDisk} from '../../../utils/disks/types'; import {generateEvaluator} from '../../../utils/generateEvaluator'; import {NODES_COLUMNS_IDS} from '../../Nodes/columns/constants'; import {STORAGE_GROUPS_COLUMNS_IDS} from '../StorageGroups/columns/constants'; @@ -64,3 +66,20 @@ export function getDefaultSortGroup(visibleEntities: VisibleEntities) { } return defaultSortGroup; } + +export type VDiskViewContext = { + groupId?: string; + nodeId?: string; +}; + +export function isVdiskActive(vDisk: PreparedVDisk, viewContext?: VDiskViewContext) { + if (valueIsDefined(vDisk.VDiskId?.GroupID) && viewContext?.groupId) { + return String(vDisk.VDiskId.GroupID) === viewContext.groupId; + } + + if (valueIsDefined(vDisk.NodeId) && viewContext?.nodeId) { + return String(vDisk.NodeId) === viewContext.nodeId; + } + + return true; +} diff --git a/src/containers/Tenant/Diagnostics/Partitions/Partitions.tsx b/src/containers/Tenant/Diagnostics/Partitions/Partitions.tsx index 172197be0c..2244500748 100644 --- a/src/containers/Tenant/Diagnostics/Partitions/Partitions.tsx +++ b/src/containers/Tenant/Diagnostics/Partitions/Partitions.tsx @@ -5,7 +5,7 @@ import {skipToken} from '@reduxjs/toolkit/query'; import {ResponseError} from '../../../../components/Errors/ResponseError'; import {ResizeableDataTable} from '../../../../components/ResizeableDataTable/ResizeableDataTable'; import {TableSkeleton} from '../../../../components/TableSkeleton/TableSkeleton'; -import {nodesListApi, selectNodesMap} from '../../../../store/reducers/nodesList'; +import {nodesListApi, selectNodeHostsMap} from '../../../../store/reducers/nodesList'; import {partitionsApi, setSelectedConsumer} from '../../../../store/reducers/partitions/partitions'; import {selectConsumersNames, topicApi} from '../../../../store/reducers/topic'; import {cn} from '../../../../utils/cn'; @@ -55,7 +55,7 @@ export const Partitions = ({path, database}: PartitionsProps) => { error: nodesError, } = nodesListApi.useGetNodesListQuery(undefined); const nodesLoading = nodesIsFetching && nodesData === undefined; - const nodesMap = useTypedSelector(selectNodesMap); + const nodeHostsMap = useTypedSelector(selectNodeHostsMap); const [hiddenColumns, setHiddenColumns] = useSetting(PARTITIONS_HIDDEN_COLUMNS_KEY); @@ -71,8 +71,8 @@ export const Partitions = ({path, database}: PartitionsProps) => { const rawPartitions = partitionsData; const partitionsWithHosts = React.useMemo(() => { - return addHostToPartitions(rawPartitions, nodesMap); - }, [rawPartitions, nodesMap]); + return addHostToPartitions(rawPartitions, nodeHostsMap); + }, [rawPartitions, nodeHostsMap]); // Wrong consumer could be passed in search query // Reset consumer if it doesn't exist for current topic diff --git a/src/containers/Tenant/Diagnostics/Partitions/utils/index.ts b/src/containers/Tenant/Diagnostics/Partitions/utils/index.ts index 982cb89a0d..07a3fbb327 100644 --- a/src/containers/Tenant/Diagnostics/Partitions/utils/index.ts +++ b/src/containers/Tenant/Diagnostics/Partitions/utils/index.ts @@ -1,21 +1,21 @@ import type {PreparedPartitionData} from '../../../../../store/reducers/partitions/types'; -import type {NodesMap} from '../../../../../types/store/nodesList'; +import type {NodeHostsMap} from '../../../../../types/store/nodesList'; import type {PreparedPartitionDataWithHosts} from './types'; export const addHostToPartitions = ( partitions: PreparedPartitionData[] = [], - nodesMap?: NodesMap, + nodeHosts?: NodeHostsMap, ): PreparedPartitionDataWithHosts[] => { return partitions?.map((partition) => { const partitionHost = - partition.partitionNodeId && nodesMap - ? nodesMap.get(partition.partitionNodeId) + partition.partitionNodeId && nodeHosts + ? nodeHosts.get(partition.partitionNodeId) : undefined; const connectionHost = - partition.connectionNodeId && nodesMap - ? nodesMap.get(partition.connectionNodeId) + partition.connectionNodeId && nodeHosts + ? nodeHosts.get(partition.connectionNodeId) : undefined; return { diff --git a/src/store/reducers/nodesList.ts b/src/store/reducers/nodesList.ts index a316f187a7..d7ee1725be 100644 --- a/src/store/reducers/nodesList.ts +++ b/src/store/reducers/nodesList.ts @@ -1,6 +1,6 @@ import {createSelector} from '@reduxjs/toolkit'; -import {prepareNodesMap} from '../../utils/nodes'; +import {prepareNodeHostsMap} from '../../utils/nodes'; import type {RootState} from '../defaultStore'; import {api} from './api'; @@ -24,7 +24,7 @@ export const nodesListApi = api.injectEndpoints({ const selectNodesList = nodesListApi.endpoints.getNodesList.select(undefined); -export const selectNodesMap = createSelector( +export const selectNodeHostsMap = createSelector( (state: RootState) => selectNodesList(state).data, - (data) => prepareNodesMap(data), + (data) => prepareNodeHostsMap(data), ); diff --git a/src/store/reducers/tablet.ts b/src/store/reducers/tablet.ts index f5ff994f4b..66ef46e9bf 100644 --- a/src/store/reducers/tablet.ts +++ b/src/store/reducers/tablet.ts @@ -1,6 +1,6 @@ import type {TDomainKey} from '../../types/api/tablet'; import type {ITabletPreparedHistoryItem} from '../../types/store/tablet'; -import {prepareNodesMap} from '../../utils/nodes'; +import {prepareNodeHostsMap} from '../../utils/nodes'; import {api} from './api'; @@ -17,7 +17,7 @@ export const tabletApi = api.injectEndpoints({ window.api.getTabletHistory({id, database, nodeId}, {signal}), window.api.getNodesList({signal}), ]); - const nodesMap = prepareNodesMap(nodesList); + const nodeHostsMap = prepareNodeHostsMap(nodesList); const historyData = Object.keys(historyResponseData).reduce< ITabletPreparedHistoryItem[] @@ -30,7 +30,9 @@ export const tabletApi = api.injectEndpoints({ leaderTablet; const fqdn = - nodesMap && nodeId ? nodesMap.get(Number(nodeId)) : undefined; + nodeHostsMap && nodeId + ? nodeHostsMap.get(Number(nodeId)) + : undefined; if (State !== 'Dead') { list.push({ diff --git a/src/store/reducers/tablets.ts b/src/store/reducers/tablets.ts index 4e97a10116..12d9017849 100644 --- a/src/store/reducers/tablets.ts +++ b/src/store/reducers/tablets.ts @@ -6,7 +6,7 @@ import type {TabletsApiRequestParams} from '../../types/store/tablets'; import type {RootState} from '../defaultStore'; import {api} from './api'; -import {selectNodesMap} from './nodesList'; +import {selectNodeHostsMap} from './nodesList'; export const tabletsApi = api.injectEndpoints({ endpoints: (build) => ({ @@ -42,16 +42,16 @@ export const selectGetTabletsInfo = createSelector( export const selectTabletsWithFqdn = createSelector( (state: RootState, params: TabletsApiRequestParams) => selectGetTabletsInfo(state, params), - (state: RootState) => selectNodesMap(state), - (data, nodesMap): (TTabletStateInfo & {fqdn?: string})[] => { + (state: RootState) => selectNodeHostsMap(state), + (data, nodeHostsMap): (TTabletStateInfo & {fqdn?: string})[] => { if (!data?.TabletStateInfo) { return []; } - if (!nodesMap) { + if (!nodeHostsMap) { return data.TabletStateInfo; } return data.TabletStateInfo.map((tablet) => { - const fqdn = tablet.NodeId === undefined ? undefined : nodesMap.get(tablet.NodeId); + const fqdn = tablet.NodeId === undefined ? undefined : nodeHostsMap.get(tablet.NodeId); return {...tablet, fqdn}; }); }, diff --git a/src/types/store/nodesList.ts b/src/types/store/nodesList.ts index ce28a71fce..91786397e9 100644 --- a/src/types/store/nodesList.ts +++ b/src/types/store/nodesList.ts @@ -1 +1 @@ -export type NodesMap = Map; +export type NodeHostsMap = Map; diff --git a/src/utils/nodes.ts b/src/utils/nodes.ts index 014e592390..5438da16b6 100644 --- a/src/utils/nodes.ts +++ b/src/utils/nodes.ts @@ -6,7 +6,7 @@ import type {ProblemFilterValue} from '../store/reducers/settings/types'; import {EFlag} from '../types/api/enums'; import type {NodesSortValue, TSystemStateInfo} from '../types/api/nodes'; import type {TNodeInfo} from '../types/api/nodesList'; -import type {NodesMap} from '../types/store/nodesList'; +import type {NodeHostsMap} from '../types/store/nodesList'; import {HOUR_IN_SECONDS} from './constants'; import {calcUptime} from './dataFormatters/dataFormatters'; @@ -30,12 +30,12 @@ export const NodesUptimeFilterTitles = { export const isUnavailableNode = (node: NodesPreparedEntity | TSystemStateInfo) => !node.SystemState || node.SystemState === EFlag.Grey; -export const prepareNodesMap = (nodesList?: TNodeInfo[]) => { - return nodesList?.reduce((nodesMap, node) => { +export const prepareNodeHostsMap = (nodesList?: TNodeInfo[]) => { + return nodesList?.reduce((nodeHosts, node) => { if (node.Id && node.Host) { - nodesMap.set(Number(node.Id), node.Host); + nodeHosts.set(Number(node.Id), node.Host); } - return nodesMap; + return nodeHosts; }, new Map()); };