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