/* eslint-disable */ // @ts-nocheck import type PasswordPolicyTypeRepresentation from "@keycloak/keycloak-admin-client/lib/defs/passwordPolicyTypeRepresentation"; import type RealmRepresentation from "@keycloak/keycloak-admin-client/lib/defs/realmRepresentation"; import { ActionGroup, AlertVariant, Button, ButtonVariant, Divider, EmptyState, EmptyStateActions, EmptyStateBody, EmptyStateFooter, EmptyStateHeader, EmptyStateIcon, PageSection, Toolbar, ToolbarContent, ToolbarItem, Select, MenuToggle, SelectList, SelectOption, } from "../../../shared/@patternfly/react-core"; import { PlusCircleIcon } from "../../../shared/@patternfly/react-icons"; import { useEffect, useMemo, useState } from "react"; import { FormProvider, useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { useAdminClient } from "../../admin-client"; import { useAlerts } from "../../../shared/keycloak-ui-shared"; import { FormAccess } from "../../components/form/FormAccess"; import { useRealm } from "../../context/realm-context/RealmContext"; import { useServerInfo } from "../../context/server-info/ServerInfoProvider"; import { PolicyRow } from "./PolicyRow"; import { SubmittedValues, parsePolicy, serializePolicy } from "./util"; type PolicySelectProps = { onSelect: (row: PasswordPolicyTypeRepresentation) => void; selectedPolicies: PasswordPolicyTypeRepresentation[]; }; const PolicySelect = ({ onSelect, selectedPolicies }: PolicySelectProps) => { const { t } = useTranslation(); const { passwordPolicies } = useServerInfo(); const [open, setOpen] = useState(false); const policies = useMemo( () => passwordPolicies?.filter( (p) => selectedPolicies.find((o) => o.id === p.id) === undefined, ), [selectedPolicies], ); return ( ); }; type PasswordPolicyProps = { realm: RealmRepresentation; realmUpdated: (realm: RealmRepresentation) => void; }; export const PasswordPolicy = ({ realm, realmUpdated, }: PasswordPolicyProps) => { const { adminClient } = useAdminClient(); const { t } = useTranslation(); const { passwordPolicies } = useServerInfo(); const { addAlert, addError } = useAlerts(); const { realm: realmName, refresh } = useRealm(); const [rows, setRows] = useState([]); const onSelect = (row: PasswordPolicyTypeRepresentation) => { setRows([...rows, row]); setValue(row.id!, row.defaultValue!, { shouldDirty: true }); }; const form = useForm({ defaultValues: {}, }); const { handleSubmit, setValue, reset, formState: { isDirty }, } = form; const setupForm = (realm: RealmRepresentation) => { reset(); const values = parsePolicy(realm.passwordPolicy || "", passwordPolicies!); values.forEach((v) => { setValue(v.id!, v.value!); }); setRows(values); }; useEffect(() => setupForm(realm), []); const save = async (values: SubmittedValues) => { const updatedRealm = { ...realm, passwordPolicy: serializePolicy(rows, values), }; try { await adminClient.realms.update({ realm: realmName }, updatedRealm); realmUpdated(updatedRealm); setupForm(updatedRealm); refresh(); addAlert(t("updatePasswordPolicySuccess"), AlertVariant.success); } catch (error) { addError("updatePasswordPolicyError", error); } }; return ( {(rows.length !== 0 || realm.passwordPolicy) && ( <> {rows.map((r, index) => ( { setRows(rows.filter((r) => r.id !== id)); setValue(r.id!, "", { shouldDirty: true }); }} /> ))} )} {!rows.length && !realm.passwordPolicy && ( {t("noPasswordPolicies")}} icon={} headingLevel="h1" /> {t("noPasswordPoliciesInstructions")} )} ); };