diff --git a/src/containers/Cluster/ClusterOverview/components/BridgeInfoTable.tsx b/src/containers/Cluster/ClusterOverview/components/BridgeInfoTable.tsx index d930bc47de..1939437dde 100644 --- a/src/containers/Cluster/ClusterOverview/components/BridgeInfoTable.tsx +++ b/src/containers/Cluster/ClusterOverview/components/BridgeInfoTable.tsx @@ -46,12 +46,33 @@ const BridgePileCard = React.memo(function BridgePileCard({pile}: BridgePileCard return ; }, [pile.State]); + const renderBeingPromotedStatus = React.useCallback(() => { + const isBeingPromoted = pile.IsBeingPromoted; + const icon = isBeingPromoted ? CircleCheckFill : CircleXmarkFill; + const text = isBeingPromoted ? i18n('value_yes') : i18n('value_no'); + + return ( + + + {text} + + ); + }, [pile.IsBeingPromoted]); + const info = React.useMemo( () => [ { name: i18n('field_primary'), content: renderPrimaryStatus(), }, + { + name: i18n('field_being-promoted'), + content: renderBeingPromotedStatus(), + }, { name: i18n('field_state'), content: renderStateStatus(), @@ -62,7 +83,7 @@ const BridgePileCard = React.memo(function BridgePileCard({pile}: BridgePileCard pile.Nodes === undefined ? EMPTY_DATA_PLACEHOLDER : formatNumber(pile.Nodes), }, ], - [renderPrimaryStatus, renderStateStatus, pile.Nodes], + [renderPrimaryStatus, renderBeingPromotedStatus, renderStateStatus, pile.Nodes], ); return ( diff --git a/src/containers/Cluster/i18n/en.json b/src/containers/Cluster/i18n/en.json index 8bdd168b47..57ad7248fa 100644 --- a/src/containers/Cluster/i18n/en.json +++ b/src/containers/Cluster/i18n/en.json @@ -22,6 +22,7 @@ "label_load": "Load", "field_name": "Name", "field_primary": "Primary", + "field_being-promoted": "Being Promoted", "field_state": "State", "field_nodes": "Nodes", "value_yes": "Yes", diff --git a/src/types/api/cluster.ts b/src/types/api/cluster.ts index 675f2b8658..4c49245c88 100644 --- a/src/types/api/cluster.ts +++ b/src/types/api/cluster.ts @@ -106,6 +106,8 @@ export interface TBridgePile { State?: string; /** whether this pile is primary */ IsPrimary?: boolean; + /** whether this pile is being promoted to primary */ + IsBeingPromoted?: boolean; /** number of nodes in the pile */ Nodes?: number; } diff --git a/tests/suites/bridge/bridge.test.ts b/tests/suites/bridge/bridge.test.ts index 0134e6cb60..35c4ca6211 100644 --- a/tests/suites/bridge/bridge.test.ts +++ b/tests/suites/bridge/bridge.test.ts @@ -120,6 +120,7 @@ test.describe('Bridge mode - Cluster Overview', () => { const firstPileContent = await clusterPage.getFirstPileContent(); expect(firstPileContent).toContain('r1'); expect(firstPileContent).toContain('Yes'); // Primary status + expect(firstPileContent).toContain('No'); // Being Promoted status (false for first pile) expect(firstPileContent).toContain('SYNCHRONIZED'); expect(firstPileContent).toContain('16'); // Nodes count }); diff --git a/tests/suites/bridge/mocks.ts b/tests/suites/bridge/mocks.ts index 888fc75436..1f61e53fc5 100644 --- a/tests/suites/bridge/mocks.ts +++ b/tests/suites/bridge/mocks.ts @@ -131,8 +131,22 @@ export const mockClusterWithBridgePiles = (page: Page) => { NetworkWriteThroughput: '1445752', BridgeInfo: { Piles: [ - {PileId: 1, Name: 'r1', State: 'SYNCHRONIZED', IsPrimary: true, Nodes: 16}, - {PileId: 2, Name: 'r2', State: 'READY', IsPrimary: false, Nodes: 12}, + { + PileId: 1, + Name: 'r1', + State: 'SYNCHRONIZED', + IsPrimary: true, + IsBeingPromoted: false, + Nodes: 16, + }, + { + PileId: 2, + Name: 'r2', + State: 'READY', + IsPrimary: false, + IsBeingPromoted: true, + Nodes: 12, + }, ], }, }),