/* eslint-disable */
// @ts-nocheck
import { NetworkError } from "@keycloak/keycloak-admin-client";
import {
KeycloakDataTable,
useAlerts,
useEnvironment,
} from "../../shared/keycloak-ui-shared";
import {
AlertVariant,
Badge,
Button,
Dropdown,
DropdownItem,
DropdownList,
MenuToggle,
PageSection,
Popover,
ToolbarItem,
} from "../../shared/@patternfly/react-core";
import { EllipsisVIcon } from "../../shared/@patternfly/react-icons";
import { cellWidth } from "../../shared/@patternfly/react-table";
import { useState } from "react";
import { useTranslation } from "react-i18next";
import { Link, useNavigate } from "react-router-dom";
import { useAdminClient } from "../admin-client";
import { useConfirmDialog } from "../components/confirm-dialog/ConfirmDialog";
import { ViewHeader } from "../components/view-header/ViewHeader";
import { fetchAdminUI } from "../context/auth/admin-ui-endpoint";
import { useRealm } from "../context/realm-context/RealmContext";
import { useRecentRealms } from "../context/RecentRealms";
import { useWhoAmI } from "../context/whoami/WhoAmI";
import type { Environment } from "../environment-types";
import { resolveDisplayName } from "../util";
import NewRealmForm from "./add/NewRealmForm";
import { toRealm } from "./RealmRoutes";
import { toDashboard } from "../dashboard/routes/Dashboard";
export type RealmNameRepresentation = {
name: string;
displayName?: string;
};
const RecentRealmsDropdown = () => {
const { t } = useTranslation();
const [open, setOpen] = useState(false);
const recentRealms = useRecentRealms();
if (recentRealms.length < 3) return null;
return (
setOpen(isOpen)}
toggle={(ref) => (
setOpen(!open)}
>
{t("recentRealms")}
)}
isOpen={open}
>
{recentRealms.map(({ name }) => (
(
)}
>
{name}
))}
);
};
type KebabDropdownProps = {
onClick: () => void;
isDisabled?: boolean;
};
const KebabDropdown = ({ onClick, isDisabled }: KebabDropdownProps) => {
const { t } = useTranslation();
const [open, setOpen] = useState(false);
return (
setOpen(isOpen)}
toggle={(ref) => (
setOpen(!open)}
variant="plain"
isDisabled={isDisabled}
>
)}
isOpen={open}
>
{
setOpen(false);
onClick();
}}
>
{t("delete")}
);
};
type RealmRow = RealmNameRepresentation & { id: string };
export default function RealmSection() {
const { t } = useTranslation();
const navigate = useNavigate();
const { whoAmI } = useWhoAmI();
const { realm } = useRealm();
const { environment } = useEnvironment();
const { adminClient } = useAdminClient();
const { addAlert, addError } = useAlerts();
const [selected, setSelected] = useState([]);
const [openNewRealm, setOpenNewRealm] = useState(false);
const [key, setKey] = useState(0);
const refresh = () => setKey(key + 1);
const loader = async (first?: number, max?: number, search?: string) => {
try {
const result = await fetchAdminUI(
adminClient,
"ui-ext/realms/names",
{ first: `${first}`, max: `${max}`, search: search || "" },
);
return result.map((r) => ({ ...r, id: r.name }));
} catch (error) {
if (error instanceof NetworkError && error.response.status < 500) {
return [];
}
throw error;
}
};
const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({
titleKey: t("deleteConfirmRealm", {
count: selected.length,
name: selected[0]?.name,
}),
messageKey: "deleteConfirmRealmSetting",
continueButtonLabel: "delete",
onConfirm: async () => {
try {
if (selected.some(({ name }) => name === environment.masterRealm)) {
addAlert(t("cantDeleteMasterRealm"), AlertVariant.warning);
}
const filtered = selected.filter(
({ name }) => name !== environment.masterRealm,
);
if (filtered.length === 0) return;
await Promise.all(
filtered.map(({ name: realmName }) =>
adminClient.realms.del({ realm: realmName }),
),
);
addAlert(t("deletedSuccessRealmSetting"));
if (selected.some(({ name }) => name === realm)) {
navigate(toRealm({ realm: environment.masterRealm }));
}
refresh();
setSelected([]);
} catch (error) {
addError("deleteError", error);
}
},
});
return (
<>
{openNewRealm && (
{
setOpenNewRealm(false);
refresh();
}}
/>
)}
{
setSelected([selected]);
toggleDeleteDialog();
},
},
]}
toolbarItem={
<>
{whoAmI.createRealm && (
)}
>
}
columns={[
{
name: "name",
transforms: [cellWidth(20)],
cellRenderer: ({ name }) =>
name !== realm ? (
{name}
) : (
<>
{name} {t("currentRealm")}
>
),
},
{
name: "displayName",
transforms: [cellWidth(80)],
cellRenderer: ({ displayName }) =>
resolveDisplayName(t, displayName, "—"),
},
]}
/>
>
);
}