/* 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, }, ]} /> } /> )}
); }