fix: register AppBarClusterBadge, fix CSI label mismatch, improve accessibility and theme support

- Register AppBarClusterBadge via registerAppBarAction (was dead code)
- Add Rook 1.12+ CSI pod labels to CephPodDetailSection alongside legacy labels
- Add sidebar entries for Storage Classes and Volumes pages
- Add role="dialog", aria-modal, aria-labelledby, and Escape key to all detail drawers
- Replace hardcoded hex colors with CSS custom properties for dark/light theme compat
- Remove duplicate parseStorageToBytes from OverviewPage (import from k8s.ts)
- Add endpoints field to CephObjectStoreStatus interface (remove unsafe cast)
- Use ROOK_CEPH_API_GROUP/VERSION constants in API URL construction
- Hoist extractJsonData to module level
- Remove dead extractPoolFromVolumeHandle function
- Fix redundant storageClasses.length guard in OverviewPage
- Fix lint indent warnings
- Update CLAUDE.md and CHANGELOG.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
DevContainer User
2026-03-04 12:55:37 +00:00
parent fea6df6719
commit 62c24e3857
14 changed files with 185 additions and 100 deletions
+30 -3
View File
@@ -6,6 +6,7 @@
*/
import {
registerAppBarAction,
registerDetailsViewSection,
registerResourceTableColumnsProcessor,
registerRoute,
@@ -13,6 +14,7 @@ import {
} from '@kinvolk/headlamp-plugin/lib';
import React from 'react';
import { RookCephDataProvider } from './api/RookCephDataContext';
import AppBarClusterBadge from './components/AppBarClusterBadge';
import BlockPoolsPage from './components/BlockPoolsPage';
import CephPodDetailSection from './components/CephPodDetailSection';
import FilesystemsPage from './components/FilesystemsPage';
@@ -72,6 +74,22 @@ registerSidebarEntry({
icon: 'mdi:bucket',
});
registerSidebarEntry({
parent: 'rook-ceph',
name: 'rook-ceph-storage-classes',
label: 'Storage Classes',
url: '/rook-ceph/storage-classes',
icon: 'mdi:database-settings',
});
registerSidebarEntry({
parent: 'rook-ceph',
name: 'rook-ceph-volumes',
label: 'Volumes',
url: '/rook-ceph/volumes',
icon: 'mdi:harddisk',
});
registerSidebarEntry({
parent: 'rook-ceph',
name: 'rook-ceph-pods',
@@ -80,6 +98,16 @@ registerSidebarEntry({
icon: 'mdi:cube-outline',
});
// ---------------------------------------------------------------------------
// App bar action — cluster health badge
// ---------------------------------------------------------------------------
registerAppBarAction(() => (
<RookCephDataProvider>
<AppBarClusterBadge />
</RookCephDataProvider>
));
// ---------------------------------------------------------------------------
// Routes
// ---------------------------------------------------------------------------
@@ -132,10 +160,9 @@ registerRoute({
),
});
// Storage Classes and Volumes pages accessible via direct URL
registerRoute({
path: '/rook-ceph/storage-classes',
sidebar: 'rook-ceph-overview',
sidebar: 'rook-ceph-storage-classes',
name: 'rook-ceph-storage-classes',
exact: true,
component: () => (
@@ -147,7 +174,7 @@ registerRoute({
registerRoute({
path: '/rook-ceph/volumes',
sidebar: 'rook-ceph-overview',
sidebar: 'rook-ceph-volumes',
name: 'rook-ceph-volumes',
exact: true,
component: () => (