/* eslint-disable */ // @ts-nocheck import type IdentityProviderRepresentation from "libs/keycloak-admin-client/lib/defs/identityProviderRepresentation"; import type IdentityProviderMapperRepresentation from "@keycloak/keycloak-admin-client/lib/defs/identityProviderMapperRepresentation"; import type { IdentityProviderMapperTypeRepresentation } from "@keycloak/keycloak-admin-client/lib/defs/identityProviderMapperTypeRepresentation"; import type RoleRepresentation from "@keycloak/keycloak-admin-client/lib/defs/roleRepresentation"; import { useAlerts, useFetch } from "../../../shared/keycloak-ui-shared"; import { FormGroup, TextInput, ActionGroup, AlertVariant, Button, ButtonVariant, DropdownItem, PageSection, } from "../../../shared/@patternfly/react-core"; import { useState } from "react"; import { FormProvider, useForm } from "react-hook-form"; 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 { DynamicComponents } from "../../components/dynamic/DynamicComponents"; import { FormAccess } from "../../components/form/FormAccess"; import type { AttributeForm } from "../../components/key-value-form/AttributeForm"; import { KeycloakSpinner } from "../../../shared/keycloak-ui-shared"; import { ViewHeader } from "../../components/view-header/ViewHeader"; import { useRealm } from "../../context/realm-context/RealmContext"; import { convertFormValuesToObject, convertToFormValues } from "../../util"; import useLocaleSort, { mapByKey } from "../../utils/useLocaleSort"; import { useParams } from "../../utils/useParams"; import { IdentityProviderEditMapperParams, toIdentityProviderEditMapper, } from "../routes/EditMapper"; import { toIdentityProvider } from "../routes/IdentityProvider"; import { AddMapperForm } from "./AddMapperForm"; import { GroupResourceContext } from "../../context/group-resource/GroupResourceContext"; export type IdPMapperRepresentationWithAttributes = IdentityProviderMapperRepresentation & AttributeForm; export type Role = RoleRepresentation & { clientId?: string; }; export default function AddMapper() { const { adminClient } = useAdminClient(); const { t } = useTranslation(); const form = useForm(); const { handleSubmit } = form; const { addAlert, addError } = useAlerts(); const navigate = useNavigate(); const localeSort = useLocaleSort(); const { realm } = useRealm(); const { id, providerId, alias } = useParams(); const [mapperTypes, setMapperTypes] = useState(); const [currentMapper, setCurrentMapper] = useState(); const [idp, setIdp] = useState(); const save = async (idpMapper: IdentityProviderMapperRepresentation) => { const mapper = convertFormValuesToObject(idpMapper); const identityProviderMapper = { ...mapper, config: { ...mapper.config, }, identityProviderAlias: alias!, }; if (id) { try { await adminClient.identityProviders.updateMapper( { id: id!, alias: alias!, }, { ...identityProviderMapper, id }, ); addAlert(t("mapperSaveSuccess"), AlertVariant.success); } catch (error) { addError("mapperSaveError", error); } } else { try { const createdMapper = await adminClient.identityProviders.createMapper({ identityProviderMapper, alias: alias!, }); addAlert(t("mapperCreateSuccess"), AlertVariant.success); navigate( toIdentityProviderEditMapper({ realm, alias, providerId: providerId, id: createdMapper.id, }), ); } catch (error) { addError("mapperCreateError", error); } } }; const [toggleDeleteMapperDialog, DeleteMapperConfirm] = useConfirmDialog({ titleKey: "deleteProviderMapper", messageKey: t("deleteMapperConfirm", { mapper: currentMapper?.name, }), continueButtonLabel: "delete", continueButtonVariant: ButtonVariant.danger, onConfirm: async () => { try { await adminClient.identityProviders.delMapper({ alias: alias, id: id!, }); addAlert(t("deleteMapperSuccess"), AlertVariant.success); navigate( toIdentityProvider({ providerId, alias, tab: "mappers", realm }), ); } catch (error) { addError("deleteErrorIdentityProvider", error); } }, }); useFetch( () => Promise.all([ id ? adminClient.identityProviders.findOneMapper({ alias, id }) : null, adminClient.identityProviders.findMapperTypes({ alias }), adminClient.identityProviders.findOne({ alias }), ]), ([mapper, mapperTypes, idp]) => { const mappers = localeSort(Object.values(mapperTypes), mapByKey("name")); if (mapper) { setCurrentMapper( mappers.find(({ id }) => id === mapper.identityProviderMapper), ); setupForm(mapper); } else { setCurrentMapper(mappers[0]); } setMapperTypes(mappers); setIdp(idp); }, [id], ); const setupForm = (mapper: IdentityProviderMapperRepresentation) => { convertToFormValues(mapper, form.setValue); }; if (!mapperTypes || !currentMapper) { return ; } return ( {t("delete")} , ] : undefined } divider /> {id && ( <> )} {currentMapper.properties && ( <> )} ); }