diff --git a/src/components/NetworkTable/NetworkTable.tsx b/src/components/NetworkTable/NetworkTable.tsx index 5724d1bb89..d330760046 100644 --- a/src/components/NetworkTable/NetworkTable.tsx +++ b/src/components/NetworkTable/NetworkTable.tsx @@ -11,7 +11,7 @@ import { type NetworkWrapperProps = Pick< NodesProps, - 'path' | 'scrollContainerRef' | 'database' | 'databaseFullPath' + 'path' | 'scrollContainerRef' | 'database' | 'databaseFullPath' | 'nodeId' >; export function NetworkTable({ @@ -19,6 +19,7 @@ export function NetworkTable({ databaseFullPath, path, scrollContainerRef, + nodeId, }: NetworkWrapperProps) { return ( ); } diff --git a/src/containers/Node/Node.tsx b/src/containers/Node/Node.tsx index 353f22198d..7276d09ace 100644 --- a/src/containers/Node/Node.tsx +++ b/src/containers/Node/Node.tsx @@ -11,6 +11,7 @@ import {ResponseError} from '../../components/Errors/ResponseError'; import {FullNodeViewer} from '../../components/FullNodeViewer/FullNodeViewer'; import {InfoViewerSkeleton} from '../../components/InfoViewerSkeleton/InfoViewerSkeleton'; import {InternalLink} from '../../components/InternalLink'; +import {NetworkTable} from '../../components/NetworkTable/NetworkTable'; import {PageMetaWithAutorefresh} from '../../components/PageMeta/PageMeta'; import routes, {getDefaultNodePath} from '../../routes'; import { @@ -281,6 +282,16 @@ function NodePageContent({ return ; } + case 'network': { + return ( + + ); + } + default: return false; } diff --git a/src/containers/Node/NodePages.ts b/src/containers/Node/NodePages.ts index b3741a9f68..0ec0ec4f34 100644 --- a/src/containers/Node/NodePages.ts +++ b/src/containers/Node/NodePages.ts @@ -11,6 +11,7 @@ const NODE_TABS_IDS = { tablets: 'tablets', structure: 'structure', threads: 'threads', + network: 'network', configs: 'configs', } as const; @@ -41,6 +42,12 @@ export const NODE_TABS = [ return i18n('tabs.threads'); }, }, + { + id: NODE_TABS_IDS.network, + get title() { + return i18n('tabs.network'); + }, + }, { id: NODE_TABS_IDS.configs, get title() { diff --git a/src/containers/Node/i18n/en.json b/src/containers/Node/i18n/en.json index 38ea152935..5202195dbf 100644 --- a/src/containers/Node/i18n/en.json +++ b/src/containers/Node/i18n/en.json @@ -6,6 +6,7 @@ "tabs.structure": "Structure", "tabs.tablets": "Tablets", "tabs.threads": "Threads", + "tabs.network": "Network", "tabs.configs": "Configs", "node": "Node", diff --git a/src/containers/Nodes/Nodes.tsx b/src/containers/Nodes/Nodes.tsx index 772e2fbda9..02175b4adc 100644 --- a/src/containers/Nodes/Nodes.tsx +++ b/src/containers/Nodes/Nodes.tsx @@ -37,6 +37,7 @@ export interface NodesProps { requiredColumnsIds?: NodesColumnId[]; selectedColumnsKey?: string; groupByParams?: NodesGroupByField[]; + nodeId?: string; } export function Nodes({ @@ -50,6 +51,7 @@ export function Nodes({ requiredColumnsIds = REQUIRED_NODES_COLUMNS, selectedColumnsKey = NODES_TABLE_SELECTED_COLUMNS_LS_KEY, groupByParams = ALL_NODES_GROUP_BY_PARAMS, + nodeId, }: NodesProps) { const {handleDataFetched, columnsSettings} = useStorageColumnsSettings(); @@ -109,6 +111,7 @@ export function Nodes({ selectedColumnsKey={selectedColumnsKey} groupByParams={effectiveGroupByParams} onDataFetched={handleDataFetched} + nodeId={nodeId} /> ); } diff --git a/src/containers/Nodes/NodesTable.tsx b/src/containers/Nodes/NodesTable.tsx index 8728cb02e3..c7fe7bcb3b 100644 --- a/src/containers/Nodes/NodesTable.tsx +++ b/src/containers/Nodes/NodesTable.tsx @@ -20,6 +20,8 @@ interface NodesTableProps { database?: string; databaseFullPath?: string; + nodeId?: string; + searchValue: string; withProblems: boolean; uptimeFilter: NodesUptimeFilterValues; @@ -40,6 +42,7 @@ export function NodesTable({ path, database, databaseFullPath, + nodeId, searchValue, withProblems, uptimeFilter, @@ -56,6 +59,7 @@ export function NodesTable({ path, databaseFullPath, database, + nodeId, searchValue, withProblems, uptimeFilter, @@ -67,6 +71,7 @@ export function NodesTable({ path, databaseFullPath, database, + nodeId, searchValue, withProblems, uptimeFilter, diff --git a/src/containers/Nodes/PaginatedNodes/GroupedNodesComponent.tsx b/src/containers/Nodes/PaginatedNodes/GroupedNodesComponent.tsx index ee1b86d82d..ba8bb1fc27 100644 --- a/src/containers/Nodes/PaginatedNodes/GroupedNodesComponent.tsx +++ b/src/containers/Nodes/PaginatedNodes/GroupedNodesComponent.tsx @@ -102,6 +102,7 @@ interface GroupedNodesComponentProps { selectedColumnsKey: string; groupByParams: NodesGroupByField[]; onDataFetched?: (data: PaginatedTableData) => void; + nodeId?: string; } export function GroupedNodesComponent({ @@ -116,6 +117,7 @@ export function GroupedNodesComponent({ selectedColumnsKey, groupByParams, onDataFetched, + nodeId, }: GroupedNodesComponentProps) { const {searchValue, peerRoleFilter, groupByParam} = useNodesPageQueryParams( groupByParams, @@ -145,6 +147,7 @@ export function GroupedNodesComponent({ filter: searchValue, filter_peer_role: peerRoleFilter, group: groupByParam, + node_id: nodeId, limit: 0, }, { diff --git a/src/containers/Nodes/PaginatedNodes/NodesComponent.tsx b/src/containers/Nodes/PaginatedNodes/NodesComponent.tsx index d6cedfa1af..cc538eb295 100644 --- a/src/containers/Nodes/PaginatedNodes/NodesComponent.tsx +++ b/src/containers/Nodes/PaginatedNodes/NodesComponent.tsx @@ -27,6 +27,7 @@ interface NodesComponentProps { selectedColumnsKey: string; groupByParams: NodesGroupByField[]; onDataFetched?: (data: PaginatedTableData) => void; + nodeId?: string; } export function NodesComponent({ @@ -41,6 +42,7 @@ export function NodesComponent({ selectedColumnsKey, groupByParams, onDataFetched, + nodeId, }: NodesComponentProps) { const {searchValue, uptimeFilter, peerRoleFilter, withProblems} = useNodesPageQueryParams( groupByParams, @@ -78,6 +80,7 @@ export function NodesComponent({ path={path} database={database} databaseFullPath={databaseFullPath} + nodeId={nodeId} searchValue={searchValue} withProblems={withProblems} uptimeFilter={uptimeFilter} diff --git a/src/containers/Nodes/PaginatedNodes/PaginatedNodes.tsx b/src/containers/Nodes/PaginatedNodes/PaginatedNodes.tsx index 9438921d7c..401906bfcb 100644 --- a/src/containers/Nodes/PaginatedNodes/PaginatedNodes.tsx +++ b/src/containers/Nodes/PaginatedNodes/PaginatedNodes.tsx @@ -30,6 +30,7 @@ export interface PaginatedNodesProps { selectedColumnsKey: string; groupByParams: NodesGroupByField[]; onDataFetched?: (data: PaginatedTableData) => void; + nodeId?: string; } export function PaginatedNodes(props: PaginatedNodesProps) { diff --git a/src/containers/Nodes/getNodes.ts b/src/containers/Nodes/getNodes.ts index 391b5f0f2e..7519891079 100644 --- a/src/containers/Nodes/getNodes.ts +++ b/src/containers/Nodes/getNodes.ts @@ -31,6 +31,7 @@ export const getNodes: FetchData< peerRoleFilter, filterGroup, filterGroupBy, + nodeId, } = filters ?? {}; const sortField = getNodesColumnSortField(columnId); @@ -55,6 +56,7 @@ export const getNodes: FetchData< filter_peer_role: peerRoleFilter, filter_group: filterGroup, filter_group_by: filterGroupBy, + node_id: nodeId, fieldsRequired: dataFieldsRequired, }); const preparedResponse = prepareStorageNodesResponse(response); diff --git a/src/store/reducers/nodes/types.ts b/src/store/reducers/nodes/types.ts index 023ab558a3..e9e3e2b57e 100644 --- a/src/store/reducers/nodes/types.ts +++ b/src/store/reducers/nodes/types.ts @@ -10,6 +10,7 @@ export interface NodesFilters { path?: string; databaseFullPath?: string; database?: string; + nodeId?: string; filterGroup?: string; filterGroupBy?: NodesGroupByField;