+
{/*
{
{statusComponent}
-

+
);
diff --git a/src/renderer/Generics/redesign/SidebarNodeItem/SidebarNodeItem.tsx b/src/renderer/Generics/redesign/SidebarNodeItem/SidebarNodeItem.tsx
index 52773c5f3..e2f30947b 100644
--- a/src/renderer/Generics/redesign/SidebarNodeItem/SidebarNodeItem.tsx
+++ b/src/renderer/Generics/redesign/SidebarNodeItem/SidebarNodeItem.tsx
@@ -28,7 +28,7 @@ export interface SidebarNodeItemProps {
/**
* Which icon?
*/
- iconId: NodeIconId;
+ iconId: NodeIconId | string;
/**
* What's the status?
*/
diff --git a/src/renderer/Generics/redesign/SidebarNodeItem/sideBarNodeItem.css.ts b/src/renderer/Generics/redesign/SidebarNodeItem/sideBarNodeItem.css.ts
index 93d5e2bcc..575717477 100644
--- a/src/renderer/Generics/redesign/SidebarNodeItem/sideBarNodeItem.css.ts
+++ b/src/renderer/Generics/redesign/SidebarNodeItem/sideBarNodeItem.css.ts
@@ -29,7 +29,7 @@ export const textContainer = style({
alignItems: 'flex-start',
padding: '0px',
gap: '2px',
- width: '172px',
+ // width: '172px',
height: '32px',
flex: 'none',
order: '1',
diff --git a/src/renderer/Generics/redesign/utils.ts b/src/renderer/Generics/redesign/utils.ts
index 7fa75e5e1..b8f901900 100644
--- a/src/renderer/Generics/redesign/utils.ts
+++ b/src/renderer/Generics/redesign/utils.ts
@@ -3,7 +3,6 @@ import { ClientStatusProps, SYNC_STATUS } from './consts';
export const getSyncStatus = (status: ClientStatusProps) => {
let syncStatus;
switch (true) {
- // TODO: revisit this.. feels off or unnecessary
// find worst cases first
case status.updating:
syncStatus = SYNC_STATUS.UPDATING;
diff --git a/src/renderer/Presentational/Sidebar/Sidebar.tsx b/src/renderer/Presentational/Sidebar/Sidebar.tsx
index 1eedda492..977b50caa 100644
--- a/src/renderer/Presentational/Sidebar/Sidebar.tsx
+++ b/src/renderer/Presentational/Sidebar/Sidebar.tsx
@@ -1,3 +1,11 @@
+import { NodeId, NodeStatus } from 'common/node';
+import { useCallback, useEffect } from 'react';
+import {
+ selectSelectedNodeId,
+ selectUserNodes,
+ updateSelectedNodeId,
+} from 'renderer/state/node';
+import { useAppDispatch, useAppSelector } from 'renderer/state/hooks';
import { Banner } from '../../Generics/redesign/Banner/Banner';
import {
SidebarNodeItem,
@@ -75,7 +83,63 @@ const itemListData: { iconId: IconId; label: string; count?: number }[] = [
},
];
+const NODE_SIDEBAR_STATUS_MAP: Record
= {
+ created: 'stopped',
+ initializing: 'sync',
+ [NodeStatus.checkingForUpdates]: 'sync',
+ downloading: 'sync',
+ downloaded: 'sync',
+ [NodeStatus.errorDownloading]: 'error',
+ extracting: 'sync',
+ [NodeStatus.readyToStart]: 'stopped',
+ starting: 'sync',
+ running: 'healthy',
+ stopping: 'healthy',
+ stopped: 'stopped',
+ [NodeStatus.errorRunning]: 'error',
+ [NodeStatus.errorStarting]: 'error',
+ [NodeStatus.errorStopping]: 'error',
+ unknown: 'error',
+};
+
const Sidebar = ({ offline }: SidebarProps) => {
+ const sSelectedNodeId = useAppSelector(selectSelectedNodeId);
+ const sUserNodes = useAppSelector(selectUserNodes);
+ const dispatch = useAppDispatch();
+
+ // Default selected node to be the first node
+ useEffect(() => {
+ if (
+ !sSelectedNodeId &&
+ sUserNodes &&
+ Array.isArray(sUserNodes?.nodeIds) &&
+ sUserNodes.nodeIds.length > 0
+ ) {
+ dispatch(updateSelectedNodeId(sUserNodes.nodeIds[0]));
+ }
+ }, [sSelectedNodeId, sUserNodes, dispatch]);
+
+ // const nodeListObject = { nodeService: [], validator: [], singleClients: [] };
+ // sUserNodes?.nodeIds.forEach((nodeId: NodeId) => {
+ // const node = sUserNodes.nodes[nodeId];
+ // // TODO: add validator logic here eventually
+ // if (
+ // node.spec.category === 'L1/ExecutionClient' ||
+ // node.spec.category === 'L1/ConsensusClient/BeaconNode'
+ // ) {
+ // nodeListObject.nodeService.push(node);
+ // } else {
+ // nodeListObject.singleClients.push(node);
+ // }
+ // });
+
+ const onClickLinkItem = useCallback((linkItemId) => {
+ console.log('sidebar link item clicked: ', linkItemId);
+ if (linkItemId === 'add') {
+ // open add node dialog
+ }
+ }, []);
+
return (
{offline && (
@@ -87,14 +151,31 @@ const Sidebar = ({ offline }: SidebarProps) => {
- {nodeListData.map((item) => {
+ {/* {nodeListObject.nodeService.length === 2 && (
+
{
+ dispatch(updateSelectedNodeId(nodeListObject.nodeService[1].id));
+ }}
+ />
+ )} */}
+ {sUserNodes?.nodeIds.map((nodeId: NodeId) => {
+ const node = sUserNodes.nodes[nodeId];
+ const { spec, status } = node;
+ const sidebarStatus = NODE_SIDEBAR_STATUS_MAP[status];
return (
dispatch(updateSelectedNodeId(node.id))}
/>
);
})}
@@ -103,9 +184,11 @@ const Sidebar = ({ offline }: SidebarProps) => {
{itemListData.map((item) => {
return (
onClickLinkItem(item.iconId)}
/>
);
})}
diff --git a/src/renderer/Presentational/Sidebar/sidebar.css.ts b/src/renderer/Presentational/Sidebar/sidebar.css.ts
index 58487d609..3807245b8 100644
--- a/src/renderer/Presentational/Sidebar/sidebar.css.ts
+++ b/src/renderer/Presentational/Sidebar/sidebar.css.ts
@@ -30,7 +30,7 @@ export const titleItem = style({
});
export const nodeList = style({
- overflowY: 'scroll',
+ overflowY: 'auto',
order: '2',
alignSelf: 'stretch',
flexGrow: '1',