import { useMemo } from "react";
import { useTranslation } from "react-i18next";
import { union, filter } from "lodash-es";
import {
Brand,
Card,
CardBody,
CardTitle,
DescriptionList,
DescriptionListDescription,
DescriptionListGroup,
DescriptionListTerm,
EmptyState,
EmptyStateBody,
Grid,
GridItem,
Label,
List,
ListItem,
ListVariant,
PageSection,
Tab,
TabTitleText,
Text,
TextContent,
Title,
} from "@patternfly/react-core";
import { useRealm } from "../context/realm-context/RealmContext";
import { useServerInfo } from "../context/server-info/ServerInfoProvider";
import { toUpperCase } from "../util";
import { HelpItem } from "ui-shared";
import environment from "../environment";
import { KeycloakSpinner } from "../components/keycloak-spinner/KeycloakSpinner";
import useLocaleSort from "../utils/useLocaleSort";
import {
RoutableTabs,
useRoutableTab,
} from "../components/routable-tabs/RoutableTabs";
import { DashboardTab, toDashboard } from "./routes/Dashboard";
import { ProviderInfo } from "./ProviderInfo";
import "./dashboard.css";
const EmptyDashboard = () => {
const { t } = useTranslation("dashboard");
const { realm } = useRealm();
const brandImage = environment.logo ? environment.logo : "/icon.svg";
return (
{t("welcome")}
{realm}
{t("introduction")}
);
};
const Dashboard = () => {
const { t } = useTranslation("dashboard");
const { realm } = useRealm();
const serverInfo = useServerInfo();
const localeSort = useLocaleSort();
const isDeprecatedFeature = (feature: string) =>
disabledFeatures.includes(feature);
const isExperimentalFeature = (feature: string) =>
serverInfo.profileInfo?.experimentalFeatures?.includes(feature);
const isPreviewFeature = (feature: string) =>
serverInfo.profileInfo?.previewFeatures?.includes(feature);
const isSupportedFeature = (feature: string) =>
!isExperimentalFeature(feature) && !isPreviewFeature(feature);
const disabledFeatures = useMemo(
() =>
localeSort(
serverInfo.profileInfo?.disabledFeatures ?? [],
(item) => item,
),
[serverInfo.profileInfo],
);
const enabledFeatures = useMemo(
() =>
localeSort(
filter(
union(
serverInfo.profileInfo?.experimentalFeatures,
serverInfo.profileInfo?.previewFeatures,
),
(feature) => {
return !isDeprecatedFeature(feature);
},
),
(item) => item,
),
[serverInfo.profileInfo],
);
const useTab = (tab: DashboardTab) =>
useRoutableTab(
toDashboard({
realm,
tab,
}),
);
const infoTab = useTab("info");
const providersTab = useTab("providers");
if (Object.keys(serverInfo).length === 0) {
return ;
}
return (
<>
{t("realmName", { name: realm })}
{t("serverInfo")}}
{...infoTab}
>
{t("serverInfo")}
{t("version")}
{serverInfo.systemInfo?.version}
{t("product")}
{toUpperCase(serverInfo.profileInfo?.name!)}
{t("memory")}
{t("totalMemory")}
{serverInfo.memoryInfo?.totalFormated}
{t("freeMemory")}
{serverInfo.memoryInfo?.freeFormated}
{t("usedMemory")}
{serverInfo.memoryInfo?.usedFormated}
{t("profile")}
{t("enabledFeatures")}{" "}
{enabledFeatures.map((feature) => (
{feature}{" "}
{isExperimentalFeature(feature) ? (
) : null}
{isPreviewFeature(feature) ? (
) : null}
))}
{t("disabledFeatures")}{" "}
{disabledFeatures.map((feature) => (
{feature}{" "}
{isExperimentalFeature(feature) ? (
) : null}
{isPreviewFeature(feature) ? (
) : null}
{isSupportedFeature(feature) ? (
) : null}
))}
{t("providerInfo")}}
{...providersTab}
>
>
);
};
export default function DashboardSection() {
const { realm } = useRealm();
const isMasterRealm = realm === "master";
return (
<>
{!isMasterRealm && }
{isMasterRealm && }
>
);
}