import { useMemo } from "react";
import { useHistory } from "react-router-dom";
import { Trans, 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 "../components/help-enabler/HelpItem";
import environment from "../environment";
import { KeycloakSpinner } from "../components/keycloak-spinner/KeycloakSpinner";
import useLocaleSort from "../utils/useLocaleSort";
import {
routableTab,
RoutableTabs,
} 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();
return (
{t("welcome")}
{realm}
{t("introduction")}
);
};
const Dashboard = () => {
const { t } = useTranslation("dashboard");
const { realm } = useRealm();
const serverInfo = useServerInfo();
const history = useHistory();
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]
);
if (Object.keys(serverInfo).length === 0) {
return ;
}
const route = (tab: DashboardTab) =>
routableTab({
to: toDashboard({
realm,
tab,
}),
history,
});
return (
<>
{t("realmName", { name: realm })}
Admin UI version
{{ version: environment.commitHash }}
{t("realmInfo")}}
{...route("info")}
>
{t("serverInfo")}
{t("version")}
{serverInfo.systemInfo?.version}
{t("product")}
{toUpperCase(serverInfo.profileInfo?.name!)}
{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")}}
{...route("providers")}
>
>
);
};
export default function DashboardSection() {
const { realm } = useRealm();
const isMasterRealm = realm === "master";
return (
<>
{!isMasterRealm && }
{isMasterRealm && }
>
);
}