From 0be0a7e9a44946200ac42c7a3f766af7ec1b08da Mon Sep 17 00:00:00 2001 From: mufazalov Date: Tue, 30 Sep 2025 15:53:27 +0300 Subject: [PATCH] feat: remove additionalNodesProps --- .../FullNodeViewer/FullNodeViewer.tsx | 1 + src/components/NetworkTable/NetworkTable.tsx | 9 ++----- .../NodeHostWrapper/NodeHostWrapper.tsx | 26 +++---------------- .../NodeEndpointsTooltipContent.tsx | 18 +++++++------ src/components/nodesColumns/columns.tsx | 17 ++++-------- src/components/nodesColumns/types.ts | 2 -- .../ExtendedCluster/ExtendedCluster.tsx | 4 --- .../ExtendedTenant/ExtendedTenant.tsx | 9 +------ src/containers/Cluster/Cluster.tsx | 23 +++------------- src/containers/Nodes/Nodes.tsx | 10 +------ src/containers/Nodes/columns/hooks.ts | 10 ++----- .../useStorageNodesColumnsToSelect.ts | 3 --- .../columns/columns.tsx | 5 +--- .../columns/hooks.ts | 4 +-- .../columns/types.ts | 2 -- .../DetailedOverview/DetailedOverview.tsx | 15 ++++++----- .../Tenant/Diagnostics/Diagnostics.tsx | 10 +++---- .../Diagnostics/Network/NetworkWrapper.tsx | 5 +--- .../TenantOverview/TenantCpu/TenantCpu.tsx | 19 +++----------- .../TenantCpu/TopNodesByCpu.tsx | 9 ++----- .../TenantCpu/TopNodesByLoad.tsx | 9 ++----- .../TenantMemory/TopNodesByMemory.tsx | 9 ++----- .../TenantNetwork/TenantNetwork.tsx | 8 +++--- .../TenantNetwork/TopNodesByPing.tsx | 9 ++----- .../TenantNetwork/TopNodesBySkew.tsx | 9 ++----- .../TenantOverview/TenantOverview.tsx | 12 ++------- .../Tenant/ObjectGeneral/ObjectGeneral.tsx | 13 +++------- src/containers/Tenant/Tenant.tsx | 10 +++---- .../Versions/NodesTable/NodesTable.tsx | 4 +-- src/types/additionalProps.ts | 6 ----- src/utils/additionalProps.ts | 15 +---------- src/utils/hooks/useAdditionalNodesProps.ts | 14 ---------- src/utils/hooks/useNodeDeveloperUIHref.ts | 18 ++++++++----- 33 files changed, 82 insertions(+), 255 deletions(-) delete mode 100644 src/utils/hooks/useAdditionalNodesProps.ts diff --git a/src/components/FullNodeViewer/FullNodeViewer.tsx b/src/components/FullNodeViewer/FullNodeViewer.tsx index 2251740f42..4cdbb93184 100644 --- a/src/components/FullNodeViewer/FullNodeViewer.tsx +++ b/src/components/FullNodeViewer/FullNodeViewer.tsx @@ -24,6 +24,7 @@ const getLoadAverageIntervalTitle = (index: number) => { return [i18n('la-interval-1m'), i18n('la-interval-5m'), i18n('la-interval-15m')][index]; }; +// eslint-disable-next-line complexity export const FullNodeViewer = ({node, className}: FullNodeViewerProps) => { const developerUIHref = useNodeDeveloperUIHref(node); diff --git a/src/components/NetworkTable/NetworkTable.tsx b/src/components/NetworkTable/NetworkTable.tsx index a744d16f4f..5724d1bb89 100644 --- a/src/components/NetworkTable/NetworkTable.tsx +++ b/src/components/NetworkTable/NetworkTable.tsx @@ -11,7 +11,7 @@ import { type NetworkWrapperProps = Pick< NodesProps, - 'path' | 'scrollContainerRef' | 'additionalNodesProps' | 'database' | 'databaseFullPath' + 'path' | 'scrollContainerRef' | 'database' | 'databaseFullPath' >; export function NetworkTable({ @@ -19,7 +19,6 @@ export function NetworkTable({ databaseFullPath, path, scrollContainerRef, - additionalNodesProps, }: NetworkWrapperProps) { return ( { @@ -38,17 +33,6 @@ export const NodeHostWrapper = ({ const isNodeAvailable = !isUnavailableNode(node); - let developerUIInternalHref: string | undefined; - if (getNodeRef) { - const developerUIHref = getNodeRef(node); - developerUIInternalHref = developerUIHref - ? createDeveloperUIInternalPageHref(developerUIHref) - : undefined; - } else if (node.NodeId) { - const developerUIHref = createDeveloperUILinkWithNodeId(node.NodeId); - developerUIInternalHref = createDeveloperUIInternalPageHref(developerUIHref); - } - const nodePath = isNodeAvailable ? getDefaultNodePath( node.NodeId, @@ -66,9 +50,7 @@ export const NodeHostWrapper = ({ path={nodePath} hasClipboardButton infoPopoverContent={ - isNodeAvailable ? ( - - ) : null + isNodeAvailable ? : null } /> ); diff --git a/src/components/TooltipsContent/NodeEndpointsTooltipContent/NodeEndpointsTooltipContent.tsx b/src/components/TooltipsContent/NodeEndpointsTooltipContent/NodeEndpointsTooltipContent.tsx index 8e824599e2..a32659d4a3 100644 --- a/src/components/TooltipsContent/NodeEndpointsTooltipContent/NodeEndpointsTooltipContent.tsx +++ b/src/components/TooltipsContent/NodeEndpointsTooltipContent/NodeEndpointsTooltipContent.tsx @@ -1,9 +1,9 @@ import type {DefinitionListItemProps} from '@gravity-ui/uikit'; import {DefinitionList} from '@gravity-ui/uikit'; -import type {TSystemStateInfo} from '../../../types/api/nodes'; +import type {PreparedStorageNode} from '../../../store/reducers/storage/types'; import {cn} from '../../../utils/cn'; -import {useIsUserAllowedToMakeChanges} from '../../../utils/hooks/useIsUserAllowedToMakeChanges'; +import {useNodeDeveloperUIHref} from '../../../utils/hooks/useNodeDeveloperUIHref'; import {LinkWithIcon} from '../../LinkWithIcon/LinkWithIcon'; import i18n from './i18n'; @@ -13,12 +13,12 @@ import './NodeEndpointsTooltipContent.scss'; const b = cn('ydb-node-endpoints-tooltip-content'); interface NodeEdpointsTooltipProps { - data?: TSystemStateInfo; - nodeHref?: string; + data?: PreparedStorageNode; } -export const NodeEndpointsTooltipContent = ({data, nodeHref}: NodeEdpointsTooltipProps) => { - const isUserAllowedToMakeChanges = useIsUserAllowedToMakeChanges(); +export const NodeEndpointsTooltipContent = ({data}: NodeEdpointsTooltipProps) => { + const developerUIInternalHref = useNodeDeveloperUIHref(data); + const info: (DefinitionListItemProps & {key: string})[] = []; if (data?.Roles?.length) { @@ -58,10 +58,12 @@ export const NodeEndpointsTooltipContent = ({data, nodeHref}: NodeEdpointsToolti }); } - if (isUserAllowedToMakeChanges && nodeHref) { + if (developerUIInternalHref) { info.push({ name: 'Links', - children: , + children: ( + + ), key: 'developerUi', }); } diff --git a/src/components/nodesColumns/columns.tsx b/src/components/nodesColumns/columns.tsx index 729a5ea404..9dd263b2e0 100644 --- a/src/components/nodesColumns/columns.tsx +++ b/src/components/nodesColumns/columns.tsx @@ -1,6 +1,7 @@ import DataTable from '@gravity-ui/react-data-table'; import {DefinitionList} from '@gravity-ui/uikit'; +import type {PreparedStorageNode} from '../../store/reducers/storage/types'; import type {TMemoryStats, TPoolStats} from '../../types/api/nodes'; import type {TTabletStateInfo} from '../../types/api/tablet'; import {valueIsDefined} from '../../utils'; @@ -17,7 +18,6 @@ import {bytesToSpeed, isNumeric} from '../../utils/utils'; import {CellWithPopover} from '../CellWithPopover/CellWithPopover'; import {MemoryViewer} from '../MemoryViewer/MemoryViewer'; import {NodeHostWrapper} from '../NodeHostWrapper/NodeHostWrapper'; -import type {NodeHostData} from '../NodeHostWrapper/NodeHostWrapper'; import {PoolsGraph} from '../PoolsGraph/PoolsGraph'; import {ProgressViewer} from '../ProgressViewer/ProgressViewer'; import {TabletsStatistic} from '../TabletsStatistic'; @@ -44,15 +44,14 @@ export function getNodeIdColumn(): Column< align: DataTable.RIGHT, }; } -export function getHostColumn({ - getNodeRef, +export function getHostColumn({ database, }: GetNodesColumnsParams): Column { return { name: NODES_COLUMNS_IDS.Host, header: NODES_COLUMNS_TITLES.Host, render: ({row}) => { - return ; + return ; }, width: 350, align: DataTable.LEFT, @@ -62,8 +61,7 @@ export function getHostColumn({ // Different column for different set of required fields // ConnectStatus is required here, it makes handler to return network stats // On versions before 25-1-2 ConnectStatus also makes handler to return peers - it can significantly increase response size -export function getNetworkHostColumn({ - getNodeRef, +export function getNetworkHostColumn({ database, }: GetNodesColumnsParams): Column { return { @@ -71,12 +69,7 @@ export function getNetworkHostColumn({ header: NODES_COLUMNS_TITLES.NetworkHost, render: ({row}) => { return ( - + ); }, width: 350, diff --git a/src/components/nodesColumns/types.ts b/src/components/nodesColumns/types.ts index 1d56be9648..3c212b88e6 100644 --- a/src/components/nodesColumns/types.ts +++ b/src/components/nodesColumns/types.ts @@ -1,11 +1,9 @@ import type {StorageNodesColumnsSettings} from '../../containers/Storage/PaginatedStorageNodesTable/columns/types'; import type {StorageViewContext} from '../../containers/Storage/types'; import type {PreparedStorageNode} from '../../store/reducers/storage/types'; -import type {GetNodeRefFunc} from '../../types/additionalProps'; import type {Column} from '../../utils/tableUtils/types'; export interface GetNodesColumnsParams { - getNodeRef?: GetNodeRefFunc; database?: string; viewContext?: StorageViewContext; diff --git a/src/containers/AppWithClusters/ExtendedCluster/ExtendedCluster.tsx b/src/containers/AppWithClusters/ExtendedCluster/ExtendedCluster.tsx index ab924de72d..25a5049de0 100644 --- a/src/containers/AppWithClusters/ExtendedCluster/ExtendedCluster.tsx +++ b/src/containers/AppWithClusters/ExtendedCluster/ExtendedCluster.tsx @@ -4,7 +4,6 @@ import {useClusterBaseInfo} from '../../../store/reducers/cluster/cluster'; import type {AdditionalClusterProps} from '../../../types/additionalProps'; import type {GetClusterLinks, GetDatabaseLinks} from '../../../uiFactory/types'; import {cn} from '../../../utils/cn'; -import {useAdditionalNodesProps} from '../../../utils/hooks/useAdditionalNodesProps'; import type {GetLogsLink} from '../../../utils/logs'; import type {GetMonitoringClusterLink, GetMonitoringLink} from '../../../utils/monitoring'; import {getCleanBalancerValue} from '../../../utils/parseBalancer'; @@ -79,8 +78,6 @@ export function ExtendedCluster({ getDatabaseLinks, getClusterLinks, }: ExtendedClusterProps) { - const additionalNodesProps = useAdditionalNodesProps(); - return (
); diff --git a/src/containers/AppWithClusters/ExtendedTenant/ExtendedTenant.tsx b/src/containers/AppWithClusters/ExtendedTenant/ExtendedTenant.tsx index bf8dda86c6..8582f924fe 100644 --- a/src/containers/AppWithClusters/ExtendedTenant/ExtendedTenant.tsx +++ b/src/containers/AppWithClusters/ExtendedTenant/ExtendedTenant.tsx @@ -1,5 +1,4 @@ import type {GetDatabaseLinks} from '../../../uiFactory/types'; -import {useAdditionalNodesProps} from '../../../utils/hooks/useAdditionalNodesProps'; import type {GetLogsLink} from '../../../utils/logs'; import type {GetMonitoringLink} from '../../../utils/monitoring'; import type {Tenant} from '../../Tenant/Tenant'; @@ -18,17 +17,11 @@ export function ExtendedTenant({ getLogsLink, getDatabaseLinks, }: ExtendedTenantProps) { - const additionalNodesProps = useAdditionalNodesProps(); const additionalTenantProps = useAdditionalTenantsProps({ getMonitoringLink, getLogsLink, getDatabaseLinks, }); - return ( - - ); + return ; } diff --git a/src/containers/Cluster/Cluster.tsx b/src/containers/Cluster/Cluster.tsx index 37b2ddec3e..0fc43c2422 100644 --- a/src/containers/Cluster/Cluster.tsx +++ b/src/containers/Cluster/Cluster.tsx @@ -26,11 +26,7 @@ import { useClusterBaseInfo, } from '../../store/reducers/cluster/cluster'; import {setHeaderBreadcrumbs} from '../../store/reducers/header/header'; -import type { - AdditionalClusterProps, - AdditionalNodesProps, - AdditionalTenantsProps, -} from '../../types/additionalProps'; +import type {AdditionalClusterProps, AdditionalTenantsProps} from '../../types/additionalProps'; import {EFlag} from '../../types/api/enums'; import {uiFactory} from '../../uiFactory/uiFactory'; import {cn} from '../../utils/cn'; @@ -60,15 +56,10 @@ const b = cn('ydb-cluster'); interface ClusterProps { additionalTenantsProps?: AdditionalTenantsProps; - additionalNodesProps?: AdditionalNodesProps; additionalClusterProps?: AdditionalClusterProps; } -export function Cluster({ - additionalClusterProps, - additionalTenantsProps, - additionalNodesProps, -}: ClusterProps) { +export function Cluster({additionalClusterProps, additionalTenantsProps}: ClusterProps) { const container = React.useRef(null); const isClusterDashboardAvailable = useClusterDashboardAvailable(); @@ -237,10 +228,7 @@ export function Cluster({ .pathname } > - + - + )} ; - additionalNodesProps?: AdditionalNodesProps; withPeerRoleFilter?: boolean; columns?: NodesColumn[]; defaultColumnsIds?: NodesColumnId[]; @@ -46,7 +44,6 @@ export function Nodes({ database, databaseFullPath, scrollContainerRef, - additionalNodesProps, withPeerRoleFilter, columns: externalColumns, defaultColumnsIds = DEFAULT_NODES_COLUMNS, @@ -56,12 +53,7 @@ export function Nodes({ }: NodesProps) { const {handleDataFetched, columnsSettings} = useStorageColumnsSettings(); - const columns = useGetNodesColumns({ - columns: externalColumns, - database, - getNodeRef: additionalNodesProps?.getNodeRef, - columnsSettings, - }); + const columns = useGetNodesColumns({columns: externalColumns, database, columnsSettings}); const bridgeModeEnabled = useBridgeModeEnabled(); diff --git a/src/containers/Nodes/columns/hooks.ts b/src/containers/Nodes/columns/hooks.ts index 21606d183c..4b4c6e00f7 100644 --- a/src/containers/Nodes/columns/hooks.ts +++ b/src/containers/Nodes/columns/hooks.ts @@ -7,7 +7,6 @@ import {getNodesColumns} from './columns'; export function useGetNodesColumns({ columns: externalColumns, database, - getNodeRef, viewContext, columnsSettings, }: GetNodesColumnsParams & {columns?: NodesColumn[]}) { @@ -17,14 +16,9 @@ export function useGetNodesColumns({ if (externalColumns) { columns = externalColumns; } else { - columns = getNodesColumns({ - database, - getNodeRef, - viewContext, - columnsSettings, - }); + columns = getNodesColumns({database, viewContext, columnsSettings}); } return columns; - }, [externalColumns, database, getNodeRef, viewContext, columnsSettings]); + }, [externalColumns, database, viewContext, columnsSettings]); } diff --git a/src/containers/Storage/PaginatedStorageNodes/useStorageNodesColumnsToSelect.ts b/src/containers/Storage/PaginatedStorageNodes/useStorageNodesColumnsToSelect.ts index f7de340333..6f048fcbb9 100644 --- a/src/containers/Storage/PaginatedStorageNodes/useStorageNodesColumnsToSelect.ts +++ b/src/containers/Storage/PaginatedStorageNodes/useStorageNodesColumnsToSelect.ts @@ -1,4 +1,3 @@ -import {useAdditionalNodesProps} from '../../../utils/hooks/useAdditionalNodesProps'; import {useStorageNodesSelectedColumns} from '../PaginatedStorageNodesTable/columns/hooks'; import type {StorageNodesColumnsSettings} from '../PaginatedStorageNodesTable/columns/types'; import type {StorageViewContext} from '../types'; @@ -13,11 +12,9 @@ export function useStorageNodesColumnsToSelect({ viewContext?: StorageViewContext; columnsSettings?: StorageNodesColumnsSettings; }) { - const additionalNodesProps = useAdditionalNodesProps(); const {visibleEntities} = useStorageQueryParams(); return useStorageNodesSelectedColumns({ - additionalNodesProps, visibleEntities, database, viewContext, diff --git a/src/containers/Storage/PaginatedStorageNodesTable/columns/columns.tsx b/src/containers/Storage/PaginatedStorageNodesTable/columns/columns.tsx index 58d9493f83..ad06d62944 100644 --- a/src/containers/Storage/PaginatedStorageNodesTable/columns/columns.tsx +++ b/src/containers/Storage/PaginatedStorageNodesTable/columns/columns.tsx @@ -71,15 +71,12 @@ export const getPDisksColumn = ({ export const getStorageNodesColumns = ({ database, - additionalNodesProps, viewContext, columnsSettings, }: GetStorageNodesColumnsParams): NodesColumn[] => { - const getNodeRef = additionalNodesProps?.getNodeRef; - const columns: NodesColumn[] = [ getNodeIdColumn(), - getHostColumn({getNodeRef, database}), + getHostColumn({database}), getNodeNameColumn(), getDataCenterColumn(), getPileNameColumn(), diff --git a/src/containers/Storage/PaginatedStorageNodesTable/columns/hooks.ts b/src/containers/Storage/PaginatedStorageNodesTable/columns/hooks.ts index ca39a25a21..cba6c1b783 100644 --- a/src/containers/Storage/PaginatedStorageNodesTable/columns/hooks.ts +++ b/src/containers/Storage/PaginatedStorageNodesTable/columns/hooks.ts @@ -19,7 +19,6 @@ import type {GetStorageNodesColumnsParams} from './types'; export function useStorageNodesSelectedColumns({ visibleEntities, database, - additionalNodesProps, viewContext, columnsSettings, }: GetStorageNodesColumnsParams) { @@ -28,12 +27,11 @@ export function useStorageNodesSelectedColumns({ const columns = React.useMemo(() => { const all = getStorageNodesColumns({ database, - additionalNodesProps, viewContext, columnsSettings, }); return bridgeModeEnabled ? all : all.filter((c) => c.name !== NODES_COLUMNS_IDS.PileName); - }, [database, additionalNodesProps, viewContext, columnsSettings, bridgeModeEnabled]); + }, [database, viewContext, columnsSettings, bridgeModeEnabled]); const requiredColumns = React.useMemo(() => { if (visibleEntities === VISIBLE_ENTITIES.missing) { diff --git a/src/containers/Storage/PaginatedStorageNodesTable/columns/types.ts b/src/containers/Storage/PaginatedStorageNodesTable/columns/types.ts index 3579d2359a..4f559144a6 100644 --- a/src/containers/Storage/PaginatedStorageNodesTable/columns/types.ts +++ b/src/containers/Storage/PaginatedStorageNodesTable/columns/types.ts @@ -1,5 +1,4 @@ import type {VisibleEntities} from '../../../../store/reducers/storage/types'; -import type {AdditionalNodesProps} from '../../../../types/additionalProps'; import type {StorageViewContext} from '../../types'; export interface StorageNodesColumnsSettings { @@ -8,7 +7,6 @@ export interface StorageNodesColumnsSettings { } export interface GetStorageNodesColumnsParams { - additionalNodesProps?: AdditionalNodesProps | undefined; visibleEntities?: VisibleEntities; database?: string; viewContext?: StorageViewContext; diff --git a/src/containers/Tenant/Diagnostics/DetailedOverview/DetailedOverview.tsx b/src/containers/Tenant/Diagnostics/DetailedOverview/DetailedOverview.tsx index 7bf9c83645..cd916e1a2f 100644 --- a/src/containers/Tenant/Diagnostics/DetailedOverview/DetailedOverview.tsx +++ b/src/containers/Tenant/Diagnostics/DetailedOverview/DetailedOverview.tsx @@ -1,4 +1,4 @@ -import type {AdditionalNodesProps, AdditionalTenantsProps} from '../../../../types/additionalProps'; +import type {AdditionalTenantsProps} from '../../../../types/additionalProps'; import type {EPathType} from '../../../../types/api/schema'; import {cn} from '../../../../utils/cn'; import Overview from '../Overview/Overview'; @@ -13,15 +13,17 @@ interface DetailedOverviewProps { path: string; databaseFullPath: string; additionalTenantProps?: AdditionalTenantsProps; - additionalNodesProps?: AdditionalNodesProps; } const b = cn('kv-detailed-overview'); -function DetailedOverview(props: DetailedOverviewProps) { - const {type, database, databaseFullPath, path, additionalTenantProps, additionalNodesProps} = - props; - +function DetailedOverview({ + type, + database, + databaseFullPath, + path, + additionalTenantProps, +}: DetailedOverviewProps) { const renderTenantOverview = () => { return (
@@ -29,7 +31,6 @@ function DetailedOverview(props: DetailedOverviewProps) { database={database} databaseFullPath={databaseFullPath} additionalTenantProps={additionalTenantProps} - additionalNodesProps={additionalNodesProps} />
); diff --git a/src/containers/Tenant/Diagnostics/Diagnostics.tsx b/src/containers/Tenant/Diagnostics/Diagnostics.tsx index f8eb4fcb73..86f5fec76e 100644 --- a/src/containers/Tenant/Diagnostics/Diagnostics.tsx +++ b/src/containers/Tenant/Diagnostics/Diagnostics.tsx @@ -12,7 +12,7 @@ import { } from '../../../store/reducers/capabilities/hooks'; import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../../store/reducers/tenant/constants'; import {setDiagnosticsTab, useTenantBaseInfo} from '../../../store/reducers/tenant/tenant'; -import type {AdditionalNodesProps, AdditionalTenantsProps} from '../../../types/additionalProps'; +import type {AdditionalTenantsProps} from '../../../types/additionalProps'; import {uiFactory} from '../../../uiFactory/uiFactory'; import {cn} from '../../../utils/cn'; import {useScrollPosition, useTypedDispatch, useTypedSelector} from '../../../utils/hooks'; @@ -44,12 +44,11 @@ import './Diagnostics.scss'; interface DiagnosticsProps { additionalTenantProps?: AdditionalTenantsProps; - additionalNodesProps?: AdditionalNodesProps; } const b = cn('kv-tenant-diagnostics'); -function Diagnostics(props: DiagnosticsProps) { +function Diagnostics({additionalTenantProps}: DiagnosticsProps) { const {path, database, type, subType, databaseFullPath} = useCurrentSchema(); const containerRef = React.useRef(null); const dispatch = useTypedDispatch(); @@ -95,8 +94,7 @@ function Diagnostics(props: DiagnosticsProps) { database={database} path={path} databaseFullPath={databaseFullPath} - additionalTenantProps={props.additionalTenantProps} - additionalNodesProps={props.additionalNodesProps} + additionalTenantProps={additionalTenantProps} /> ); } @@ -129,7 +127,6 @@ function Diagnostics(props: DiagnosticsProps) { path={path} databaseFullPath={databaseFullPath} database={database} - additionalNodesProps={props.additionalNodesProps} scrollContainerRef={containerRef} /> ); @@ -156,7 +153,6 @@ function Diagnostics(props: DiagnosticsProps) { path={path} databaseFullPath={databaseFullPath} database={database} - additionalNodesProps={props.additionalNodesProps} scrollContainerRef={containerRef} /> ); diff --git a/src/containers/Tenant/Diagnostics/Network/NetworkWrapper.tsx b/src/containers/Tenant/Diagnostics/Network/NetworkWrapper.tsx index 25c2602525..04e8b80e84 100644 --- a/src/containers/Tenant/Diagnostics/Network/NetworkWrapper.tsx +++ b/src/containers/Tenant/Diagnostics/Network/NetworkWrapper.tsx @@ -6,8 +6,7 @@ import type {NodesProps} from '../../../Nodes/Nodes'; import {Network} from './Network'; -interface NetworkWrapperProps - extends Pick { +interface NetworkWrapperProps extends Pick { database: string; databaseFullPath: string; } @@ -17,7 +16,6 @@ export function NetworkWrapper({ path, databaseFullPath, scrollContainerRef, - additionalNodesProps, }: NetworkWrapperProps) { const capabilitiesLoaded = useCapabilitiesLoaded(); const shouldUseNetworkNodesTable = useShouldShowDatabaseNetworkTable(); @@ -30,7 +28,6 @@ export function NetworkWrapper({ databaseFullPath={databaseFullPath} database={database} scrollContainerRef={scrollContainerRef} - additionalNodesProps={additionalNodesProps} /> ); } diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TenantCpu.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TenantCpu.tsx index f6afbc81a0..3a108d41d1 100644 --- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TenantCpu.tsx +++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TenantCpu.tsx @@ -2,7 +2,6 @@ import {Flex} from '@gravity-ui/uikit'; import {setTopQueriesFilters} from '../../../../../store/reducers/executeTopQueries/executeTopQueries'; import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../../../../store/reducers/tenant/constants'; -import type {AdditionalNodesProps} from '../../../../../types/additionalProps'; import type {ETenantType} from '../../../../../types/api/tenant'; import {useTypedDispatch} from '../../../../../utils/hooks'; import {useDiagnosticsPageLinkGetter} from '../../../Diagnostics/DiagnosticsPages'; @@ -19,16 +18,10 @@ import {cpuDashboardConfig} from './cpuDashboardConfig'; interface TenantCpuProps { database: string; databaseFullPath: string; - additionalNodesProps?: AdditionalNodesProps; databaseType?: ETenantType; } -export function TenantCpu({ - database, - additionalNodesProps, - databaseType, - databaseFullPath, -}: TenantCpuProps) { +export function TenantCpu({database, databaseType, databaseFullPath}: TenantCpuProps) { const dispatch = useTypedDispatch(); const getDiagnosticsPageLink = useDiagnosticsPageLinkGetter(); @@ -47,19 +40,13 @@ export function TenantCpu({ allEntitiesLink={allNodesLink} title={i18n('title_top-nodes-load')} > - + - + )} diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByCpu.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByCpu.tsx index 908b7a1705..ab495224df 100644 --- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByCpu.tsx +++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByCpu.tsx @@ -13,7 +13,6 @@ import type { NodesColumn, } from '../../../../../components/nodesColumns/types'; import {nodesApi} from '../../../../../store/reducers/nodes/nodes'; -import type {AdditionalNodesProps} from '../../../../../types/additionalProps'; import type {NodesRequiredField} from '../../../../../types/api/nodes'; import { TENANT_OVERVIEW_TABLES_LIMIT, @@ -42,15 +41,11 @@ function getTopNodesByCpuColumns( interface TopNodesByCpuProps { database: string; - additionalNodesProps?: AdditionalNodesProps; } -export function TopNodesByCpu({database, additionalNodesProps}: TopNodesByCpuProps) { +export function TopNodesByCpu({database}: TopNodesByCpuProps) { const [autoRefreshInterval] = useAutoRefreshInterval(); - const [columns, fieldsRequired] = getTopNodesByCpuColumns({ - getNodeRef: additionalNodesProps?.getNodeRef, - database, - }); + const [columns, fieldsRequired] = getTopNodesByCpuColumns({database}); const {currentData, isFetching, error} = nodesApi.useGetNodesQuery( { diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByLoad.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByLoad.tsx index 9aa8f2b378..d3a9265d7b 100644 --- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByLoad.tsx +++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantCpu/TopNodesByLoad.tsx @@ -14,7 +14,6 @@ import type { NodesColumn, } from '../../../../../components/nodesColumns/types'; import {nodesApi} from '../../../../../store/reducers/nodes/nodes'; -import type {AdditionalNodesProps} from '../../../../../types/additionalProps'; import type {NodesRequiredField} from '../../../../../types/api/nodes'; import { TENANT_OVERVIEW_TABLES_LIMIT, @@ -48,15 +47,11 @@ function getTopNodesByLoadColumns( interface TopNodesByLoadProps { database: string; - additionalNodesProps?: AdditionalNodesProps; } -export function TopNodesByLoad({database, additionalNodesProps}: TopNodesByLoadProps) { +export function TopNodesByLoad({database}: TopNodesByLoadProps) { const [autoRefreshInterval] = useAutoRefreshInterval(); - const [columns, fieldsRequired] = getTopNodesByLoadColumns({ - getNodeRef: additionalNodesProps?.getNodeRef, - database, - }); + const [columns, fieldsRequired] = getTopNodesByLoadColumns({database}); const {currentData, isFetching, error} = nodesApi.useGetNodesQuery( { diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantMemory/TopNodesByMemory.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantMemory/TopNodesByMemory.tsx index 6640fefae8..427f9335db 100644 --- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantMemory/TopNodesByMemory.tsx +++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantMemory/TopNodesByMemory.tsx @@ -17,7 +17,6 @@ import type { NodesColumn, } from '../../../../../components/nodesColumns/types'; import {nodesApi} from '../../../../../store/reducers/nodes/nodes'; -import type {AdditionalNodesProps} from '../../../../../types/additionalProps'; import type {NodesRequiredField} from '../../../../../types/api/nodes'; import { TENANT_OVERVIEW_TABLES_LIMIT, @@ -49,15 +48,11 @@ function getTopNodesByMemoryColumns( interface TopNodesByMemoryProps { database: string; - additionalNodesProps?: AdditionalNodesProps; } -export function TopNodesByMemory({database, additionalNodesProps}: TopNodesByMemoryProps) { +export function TopNodesByMemory({database}: TopNodesByMemoryProps) { const [autoRefreshInterval] = useAutoRefreshInterval(); - const [columns, fieldsRequired] = getTopNodesByMemoryColumns({ - getNodeRef: additionalNodesProps?.getNodeRef, - database, - }); + const [columns, fieldsRequired] = getTopNodesByMemoryColumns({database}); const {currentData, isFetching, error} = nodesApi.useGetNodesQuery( { diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantNetwork/TenantNetwork.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantNetwork/TenantNetwork.tsx index e66fa3c43e..2041dd01ae 100644 --- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantNetwork/TenantNetwork.tsx +++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantNetwork/TenantNetwork.tsx @@ -1,7 +1,6 @@ import {Flex} from '@gravity-ui/uikit'; import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../../../../store/reducers/tenant/constants'; -import type {AdditionalNodesProps} from '../../../../../types/additionalProps'; import {cn} from '../../../../../utils/cn'; import {ENABLE_NETWORK_TABLE_KEY} from '../../../../../utils/constants'; import {useSearchQuery, useSetting} from '../../../../../utils/hooks'; @@ -18,10 +17,9 @@ const b = cn('tenant-network'); interface TenantNetworkProps { database: string; - additionalNodesProps?: AdditionalNodesProps; } -export function TenantNetwork({database, additionalNodesProps}: TenantNetworkProps) { +export function TenantNetwork({database}: TenantNetworkProps) { const query = useSearchQuery(); const [networkTableEnabled] = useSetting(ENABLE_NETWORK_TABLE_KEY); @@ -37,10 +35,10 @@ export function TenantNetwork({database, additionalNodesProps}: TenantNetworkPro return ( - + - + ); diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantNetwork/TopNodesByPing.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantNetwork/TopNodesByPing.tsx index 23543871f6..0d387e5988 100644 --- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantNetwork/TopNodesByPing.tsx +++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantNetwork/TopNodesByPing.tsx @@ -1,7 +1,6 @@ import {ResizeableDataTable} from '../../../../../components/ResizeableDataTable/ResizeableDataTable'; import {NODES_COLUMNS_WIDTH_LS_KEY} from '../../../../../components/nodesColumns/constants'; import {nodesApi} from '../../../../../store/reducers/nodes/nodes'; -import type {AdditionalNodesProps} from '../../../../../types/additionalProps'; import { TENANT_OVERVIEW_TABLES_LIMIT, TENANT_OVERVIEW_TABLES_SETTINGS, @@ -14,15 +13,11 @@ import {getTopNodesByPingColumns} from './columns'; interface TopNodesByPingProps { database: string; - additionalNodesProps?: AdditionalNodesProps; } -export function TopNodesByPing({database, additionalNodesProps}: TopNodesByPingProps) { +export function TopNodesByPing({database}: TopNodesByPingProps) { const [autoRefreshInterval] = useAutoRefreshInterval(); - const [columns, fieldsRequired] = getTopNodesByPingColumns({ - getNodeRef: additionalNodesProps?.getNodeRef, - database, - }); + const [columns, fieldsRequired] = getTopNodesByPingColumns({database}); const {currentData, isFetching, error} = nodesApi.useGetNodesQuery( { diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantNetwork/TopNodesBySkew.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantNetwork/TopNodesBySkew.tsx index f427c3bd4a..765a73a4a6 100644 --- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantNetwork/TopNodesBySkew.tsx +++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantNetwork/TopNodesBySkew.tsx @@ -1,7 +1,6 @@ import {ResizeableDataTable} from '../../../../../components/ResizeableDataTable/ResizeableDataTable'; import {NODES_COLUMNS_WIDTH_LS_KEY} from '../../../../../components/nodesColumns/constants'; import {nodesApi} from '../../../../../store/reducers/nodes/nodes'; -import type {AdditionalNodesProps} from '../../../../../types/additionalProps'; import { TENANT_OVERVIEW_TABLES_LIMIT, TENANT_OVERVIEW_TABLES_SETTINGS, @@ -14,15 +13,11 @@ import {getTopNodesBySkewColumns} from './columns'; interface TopNodesBySkewProps { database: string; - additionalNodesProps?: AdditionalNodesProps; } -export function TopNodesBySkew({database, additionalNodesProps}: TopNodesBySkewProps) { +export function TopNodesBySkew({database}: TopNodesBySkewProps) { const [autoRefreshInterval] = useAutoRefreshInterval(); - const [columns, fieldsRequired] = getTopNodesBySkewColumns({ - getNodeRef: additionalNodesProps?.getNodeRef, - database, - }); + const [columns, fieldsRequired] = getTopNodesBySkewColumns({database}); const {currentData, isFetching, error} = nodesApi.useGetNodesQuery( { diff --git a/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.tsx b/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.tsx index 52aa653ba7..d2c2926cf3 100644 --- a/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.tsx +++ b/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.tsx @@ -8,7 +8,7 @@ import {overviewApi} from '../../../../store/reducers/overview/overview'; import {TENANT_METRICS_TABS_IDS} from '../../../../store/reducers/tenant/constants'; import {tenantApi} from '../../../../store/reducers/tenant/tenant'; import {calculateTenantMetrics} from '../../../../store/reducers/tenants/utils'; -import type {AdditionalNodesProps, AdditionalTenantsProps} from '../../../../types/additionalProps'; +import type {AdditionalTenantsProps} from '../../../../types/additionalProps'; import {getDatabaseLinks} from '../../../../utils/additionalProps'; import {TENANT_DEFAULT_TITLE} from '../../../../utils/constants'; import {useAutoRefreshInterval, useTypedSelector} from '../../../../utils/hooks'; @@ -30,14 +30,12 @@ interface TenantOverviewProps { database: string; databaseFullPath: string; additionalTenantProps?: AdditionalTenantsProps; - additionalNodesProps?: AdditionalNodesProps; } export function TenantOverview({ database, databaseFullPath, additionalTenantProps, - additionalNodesProps, }: TenantOverviewProps) { const {metricsTab} = useTypedSelector((state) => state.tenant); const [autoRefreshInterval] = useAutoRefreshInterval(); @@ -145,7 +143,6 @@ export function TenantOverview({ return ( @@ -171,12 +168,7 @@ export function TenantOverview({ ); } case TENANT_METRICS_TABS_IDS.network: { - return ( - - ); + return ; } default: { return null; diff --git a/src/containers/Tenant/ObjectGeneral/ObjectGeneral.tsx b/src/containers/Tenant/ObjectGeneral/ObjectGeneral.tsx index 95b3907306..c0565c746e 100644 --- a/src/containers/Tenant/ObjectGeneral/ObjectGeneral.tsx +++ b/src/containers/Tenant/ObjectGeneral/ObjectGeneral.tsx @@ -1,7 +1,7 @@ import {useThemeValue} from '@gravity-ui/uikit'; import {TENANT_PAGES_IDS} from '../../../store/reducers/tenant/constants'; -import type {AdditionalNodesProps, AdditionalTenantsProps} from '../../../types/additionalProps'; +import type {AdditionalTenantsProps} from '../../../types/additionalProps'; import {cn} from '../../../utils/cn'; import {useTypedSelector} from '../../../utils/hooks'; import Diagnostics from '../Diagnostics/Diagnostics'; @@ -14,27 +14,20 @@ const b = cn('object-general'); interface ObjectGeneralProps { additionalTenantProps?: AdditionalTenantsProps; - additionalNodesProps?: AdditionalNodesProps; } -function ObjectGeneral(props: ObjectGeneralProps) { +function ObjectGeneral({additionalTenantProps}: ObjectGeneralProps) { const theme = useThemeValue(); const {tenantPage} = useTypedSelector((state) => state.tenant); const renderPageContent = () => { - const {additionalTenantProps, additionalNodesProps} = props; switch (tenantPage) { case TENANT_PAGES_IDS.query: { return ; } default: { - return ( - - ); + return ; } } }; diff --git a/src/containers/Tenant/Tenant.tsx b/src/containers/Tenant/Tenant.tsx index 1208046e6c..4269b2ce8b 100644 --- a/src/containers/Tenant/Tenant.tsx +++ b/src/containers/Tenant/Tenant.tsx @@ -9,7 +9,7 @@ import {setHeaderBreadcrumbs} from '../../store/reducers/header/header'; import {overviewApi} from '../../store/reducers/overview/overview'; import {selectSchemaObjectData} from '../../store/reducers/schema/schema'; import {useTenantBaseInfo} from '../../store/reducers/tenant/tenant'; -import type {AdditionalNodesProps, AdditionalTenantsProps} from '../../types/additionalProps'; +import type {AdditionalTenantsProps} from '../../types/additionalProps'; import {uiFactory} from '../../uiFactory/uiFactory'; import {cn} from '../../utils/cn'; import {DEFAULT_IS_TENANT_SUMMARY_COLLAPSED, DEFAULT_SIZE_TENANT_KEY} from '../../utils/constants'; @@ -44,11 +44,10 @@ const getTenantSummaryState = () => { interface TenantProps { additionalTenantProps?: AdditionalTenantsProps; - additionalNodesProps?: AdditionalNodesProps; } // eslint-disable-next-line complexity -export function Tenant(props: TenantProps) { +export function Tenant({additionalTenantProps}: TenantProps) { const [summaryVisibilityState, dispatchSummaryVisibilityAction] = React.useReducer( paneVisibilityToggleReducerCreator(DEFAULT_IS_TENANT_SUMMARY_COLLAPSED), undefined, @@ -156,10 +155,7 @@ export function Tenant(props: TenantProps) { isCollapsed={summaryVisibilityState.collapsed} />
- +
diff --git a/src/containers/Versions/NodesTable/NodesTable.tsx b/src/containers/Versions/NodesTable/NodesTable.tsx index e658f494a8..34bed14234 100644 --- a/src/containers/Versions/NodesTable/NodesTable.tsx +++ b/src/containers/Versions/NodesTable/NodesTable.tsx @@ -13,7 +13,6 @@ import type {GetNodesColumnsParams, NodesColumn} from '../../../components/nodes import {useBridgeModeEnabled} from '../../../store/reducers/capabilities/hooks'; import type {PreparedStorageNode} from '../../../store/reducers/storage/types'; import {DEFAULT_TABLE_SETTINGS} from '../../../utils/constants'; -import {useAdditionalNodesProps} from '../../../utils/hooks/useAdditionalNodesProps'; const VERSIONS_COLUMNS_WIDTH_LS_KEY = 'versionsTableColumnsWidth'; @@ -34,10 +33,9 @@ interface NodesTableProps { } export const NodesTable = ({nodes}: NodesTableProps) => { - const additionalNodesProps = useAdditionalNodesProps(); const bridgeModeEnabled = useBridgeModeEnabled(); - const allColumns = getColumns({getNodeRef: additionalNodesProps?.getNodeRef}); + const allColumns = getColumns({}); const columns = bridgeModeEnabled ? allColumns : allColumns.filter((c) => c.name !== NODES_COLUMNS_IDS.PileName); diff --git a/src/types/additionalProps.ts b/src/types/additionalProps.ts index a34ffd5164..56e437341d 100644 --- a/src/types/additionalProps.ts +++ b/src/types/additionalProps.ts @@ -28,9 +28,3 @@ export interface AdditionalTenantsProps { } export type NodeAddress = Pick; - -export type GetNodeRefFunc = (node?: NodeAddress) => string | undefined; - -export interface AdditionalNodesProps extends Record { - getNodeRef?: GetNodeRefFunc; -} diff --git a/src/utils/additionalProps.ts b/src/utils/additionalProps.ts index f7996da288..71fc11edce 100644 --- a/src/utils/additionalProps.ts +++ b/src/utils/additionalProps.ts @@ -1,24 +1,11 @@ import {FileText} from '@gravity-ui/icons'; import i18n from '../components/TenantNameWrapper/i18n'; -import {backend} from '../store'; -import type { - AdditionalNodesProps, - AdditionalTenantsProps, - DatabaseLink, -} from '../types/additionalProps'; +import type {AdditionalTenantsProps, DatabaseLink} from '../types/additionalProps'; import type {ETenantType} from '../types/api/tenant'; -import {getBackendFromBalancerAndNodeId} from './prepareBackend'; - import monitoringIcon from '../assets/icons/monitoring.svg'; -export const getAdditionalNodesProps = (balancer = backend): AdditionalNodesProps => { - return { - getNodeRef: (node) => getBackendFromBalancerAndNodeId(node?.NodeId, balancer ?? ''), - }; -}; - export function getDatabaseLinks( additionalProps?: AdditionalTenantsProps, name?: string, diff --git a/src/utils/hooks/useAdditionalNodesProps.ts b/src/utils/hooks/useAdditionalNodesProps.ts deleted file mode 100644 index 6fa7ac36e8..0000000000 --- a/src/utils/hooks/useAdditionalNodesProps.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {useClusterBaseInfo} from '../../store/reducers/cluster/cluster'; -import {getAdditionalNodesProps} from '../additionalProps'; - -import {useTypedSelector} from './useTypedSelector'; - -/** For multi-cluster version */ -export function useAdditionalNodesProps() { - const {balancer} = useClusterBaseInfo(); - const singleClusterMode = useTypedSelector((state) => state.singleClusterMode); - - const additionalNodesProps = getAdditionalNodesProps(balancer); - - return singleClusterMode ? undefined : additionalNodesProps; -} diff --git a/src/utils/hooks/useNodeDeveloperUIHref.ts b/src/utils/hooks/useNodeDeveloperUIHref.ts index e21159bb2a..21ee40f767 100644 --- a/src/utils/hooks/useNodeDeveloperUIHref.ts +++ b/src/utils/hooks/useNodeDeveloperUIHref.ts @@ -1,22 +1,28 @@ -import type {PreparedNode} from '../../store/reducers/node/types'; +import {backend} from '../../store'; +import {useClusterBaseInfo} from '../../store/reducers/cluster/cluster'; +import type {NodeAddress} from '../../types/additionalProps'; import { createDeveloperUIInternalPageHref, createDeveloperUILinkWithNodeId, } from '../developerUI/developerUI'; +import {getBackendFromBalancerAndNodeId} from '../prepareBackend'; -import {useAdditionalNodesProps} from './useAdditionalNodesProps'; import {useIsUserAllowedToMakeChanges} from './useIsUserAllowedToMakeChanges'; +import {useTypedSelector} from './useTypedSelector'; -export function useNodeDeveloperUIHref(node?: PreparedNode) { - const additionalNodesProps = useAdditionalNodesProps(); +export function useNodeDeveloperUIHref(node?: NodeAddress) { + const singleClusterMode = useTypedSelector((state) => state.singleClusterMode); + + const {balancer = backend} = useClusterBaseInfo(); const isUserAllowedToMakeChanges = useIsUserAllowedToMakeChanges(); if (!isUserAllowedToMakeChanges) { return undefined; } - if (additionalNodesProps?.getNodeRef) { - const developerUIHref = additionalNodesProps.getNodeRef(node); + // Only for multi-cluster version since there is no balancer in single-cluster mode + if (!singleClusterMode) { + const developerUIHref = getBackendFromBalancerAndNodeId(node?.NodeId, balancer ?? ''); return developerUIHref ? createDeveloperUIInternalPageHref(developerUIHref) : undefined; }