import {
registerRoute,
registerSidebarEntry,
} from "@kinvolk/headlamp-plugin/lib";
import {
SectionBox,
StatusLabel,
} from "@kinvolk/headlamp-plugin/lib/CommonComponents";
import React from "react";
import ApplicationDetail from "./components/ApplicationDetail";
import ApplicationsList from "./components/ApplicationsList";
import "./components/PageInjections"; // side-effect: registers detail view sections
// --- Error boundary for plugin components ---
interface ErrorBoundaryState {
error: string | null;
}
class ArgoCDErrorBoundary extends React.Component<
{ children: React.ReactNode },
ErrorBoundaryState
> {
state: ErrorBoundaryState = { error: null };
static getDerivedStateFromError(error: Error): ErrorBoundaryState {
return { error: error.message };
}
render() {
if (this.state.error) {
return (
{this.state.error}
);
}
return this.props.children;
}
}
// --- Sidebar entry ---
registerSidebarEntry({
parent: null,
name: "argocd",
label: "ArgoCD",
url: "/argocd",
icon: "mdi:git",
});
registerSidebarEntry({
parent: "argocd",
name: "argocd-overview",
label: "Applications",
url: "/argocd",
icon: "mdi:view-list",
});
// --- Routes ---
registerRoute({
path: "/argocd",
sidebar: "argocd-overview",
name: "argocd",
exact: true,
component: () => (
),
});
registerRoute({
path: "/argocd/applications/:name",
sidebar: "argocd-overview",
name: "argocd-application-detail",
component: () => (
),
});