/* eslint-disable */
// @ts-nocheck
import type IdentityProviderRepresentation from "@keycloak/keycloak-admin-client/lib/defs/identityProviderRepresentation";
import type { IdentityProvidersQuery } from "@keycloak/keycloak-admin-client/lib/resources/identityProviders";
import {
Action,
IconMapper,
KeycloakDataTable,
ListEmptyState,
useAlerts,
useFetch,
} from "../../shared/keycloak-ui-shared";
import {
AlertVariant,
Badge,
Button,
ButtonVariant,
CardTitle,
Checkbox,
Dropdown,
DropdownGroup,
DropdownItem,
DropdownList,
Gallery,
MenuToggle,
PageSection,
Split,
SplitItem,
Text,
TextContent,
TextVariants,
ToolbarItem,
} from "../../shared/@patternfly/react-core";
import { groupBy, sortBy } from "lodash-es";
import { Fragment, 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 { ClickableCard } from "../components/keycloak-card/ClickableCard";
import { ViewHeader } from "../components/view-header/ViewHeader";
import { useRealm } from "../context/realm-context/RealmContext";
import { useServerInfo } from "../context/server-info/ServerInfoProvider";
import helpUrls from "../help-urls";
import { toEditOrganization } from "../organizations/routes/EditOrganization";
import { upperCaseFormatter } from "../util";
import { ManageOrderDialog } from "./ManageOrderDialog";
import { toIdentityProvider } from "./routes/IdentityProvider";
import { toIdentityProviderCreate } from "./routes/IdentityProviderCreate";
const DetailLink = (identityProvider: IdentityProviderRepresentation) => {
const { t } = useTranslation();
const { realm } = useRealm();
return (
{identityProvider.displayName || identityProvider.alias}
{!identityProvider.enabled && (
{t("disabled")}
)}
);
};
const OrganizationLink = (identityProvider: IdentityProviderRepresentation) => {
const { t } = useTranslation();
const { realm } = useRealm();
if (!identityProvider.organizationId) {
return "—";
}
return (
{t("organization")}
);
};
export default function IdentityProvidersSection() {
const { adminClient } = useAdminClient();
const { t } = useTranslation();
const identityProviders = groupBy(
useServerInfo().identityProviders,
"groupName",
);
const { realm } = useRealm();
const navigate = useNavigate();
const [key, setKey] = useState(0);
const refresh = () => setKey(key + 1);
const [hide, setHide] = useState(false);
const [addProviderOpen, setAddProviderOpen] = useState(false);
const [manageDisplayDialog, setManageDisplayDialog] = useState(false);
const [hasProviders, setHasProviders] = useState(false);
const [selectedProvider, setSelectedProvider] =
useState();
const { addAlert, addError } = useAlerts();
useFetch(
async () => adminClient.identityProviders.find({ max: 1 }),
(providers) => {
setHasProviders(providers.length === 1);
},
[key],
);
const loader = async (first?: number, max?: number, search?: string) => {
const params: IdentityProvidersQuery = {
first: first!,
max: max!,
realmOnly: hide,
};
if (search) {
params.search = search;
}
const providers = await adminClient.identityProviders.find(params);
return providers;
};
const navigateToCreate = (providerId: string) =>
navigate(
toIdentityProviderCreate({
realm,
providerId,
}),
);
const identityProviderOptions = () =>
Object.keys(identityProviders).map((group) => (
{sortBy(identityProviders[group], "name").map((provider) => (
navigate(
toIdentityProviderCreate({
realm,
providerId: provider.id,
}),
)
}
>
{provider.name}
))}
));
const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({
titleKey: "deleteProvider",
messageKey: t("deleteConfirm", { provider: selectedProvider?.alias }),
continueButtonLabel: "delete",
continueButtonVariant: ButtonVariant.danger,
onConfirm: async () => {
try {
await adminClient.identityProviders.del({
alias: selectedProvider!.alias!,
});
refresh();
addAlert(t("deletedSuccessIdentityProvider"), AlertVariant.success);
} catch (error) {
addError("deleteErrorIdentityProvider", error);
}
},
});
return (
<>
{manageDisplayDialog && (
{
setManageDisplayDialog(false);
refresh();
}}
/>
)}
{!hasProviders && (
<>
{t("getStarted")}
{Object.keys(identityProviders).map((group) => (
{group}:
{sortBy(identityProviders[group], "name").map((provider) => (
navigateToCreate(provider.id)}
>
{provider.name}
))}
))}
>
)}
{hasProviders && (
{
setHide(check);
refresh();
}}
/>
setAddProviderOpen(isOpen)}
toggle={(ref) => (
setAddProviderOpen(!addProviderOpen)}
variant="primary"
>
{t("addProvider")}
)}
isOpen={addProviderOpen}
>
{identityProviderOptions()}
>
}
actions={[
{
title: t("delete"),
onRowClick: (provider) => {
setSelectedProvider(provider);
toggleDeleteDialog();
},
} as Action,
]}
columns={[
{
name: "alias",
displayKey: "name",
cellRenderer: DetailLink,
},
{
name: "providerId",
displayKey: "providerDetails",
cellFormatters: [upperCaseFormatter()],
},
{
name: "organizationId",
displayKey: "linkedOrganization",
cellRenderer: OrganizationLink,
},
]}
emptyState={
{
setHide(false);
refresh();
},
type: ButtonVariant.link,
},
]}
/>
}
/>
)}
>
);
}