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;