import React, { useState } from "react"; import { Divider, FormGroup, Radio, Select, SelectOption, SelectVariant, Switch, } from "@patternfly/react-core"; import { useTranslation } from "react-i18next"; import { HelpItem } from "../../../components/help-enabler/HelpItem"; import { Controller, useFormContext, useWatch } from "react-hook-form"; import { FormAccess } from "../../../components/form-access/FormAccess"; import { KeycloakTextInput } from "../../../components/keycloak-text-input/KeycloakTextInput"; import { useAdminClient, useFetch } from "../../../context/auth/AdminClient"; import type ClientScopeRepresentation from "@keycloak/keycloak-admin-client/lib/defs/clientScopeRepresentation"; import type UserProfileConfig from "@keycloak/keycloak-admin-client/lib/defs/userProfileConfig"; import type { AttributeParams } from "../../routes/Attribute"; import { useParams } from "react-router-dom"; import { isEqual } from "lodash-es"; import "../../realm-settings-section.css"; const REQUIRED_FOR = [ { label: "requiredForLabel.both", value: ["admin", "user"] }, { label: "requiredForLabel.users", value: ["user"] }, { label: "requiredForLabel.admins", value: ["admin"] }, ] as const; export const AttributeGeneralSettings = () => { const { t } = useTranslation("realm-settings"); const { adminClient } = useAdminClient(); const form = useFormContext(); const [clientScopes, setClientScopes] = useState(); const [config, setConfig] = useState(); const [selectEnabledWhenOpen, setSelectEnabledWhenOpen] = useState(false); const [selectRequiredForOpen, setSelectRequiredForOpen] = useState(false); const [isAttributeGroupDropdownOpen, setIsAttributeGroupDropdownOpen] = useState(false); const { attributeName } = useParams(); const editMode = attributeName ? true : false; const selectedScopes = useWatch({ control: form.control, name: "selector.scopes", defaultValue: [], }); const requiredScopes = useWatch({ control: form.control, name: "required.scopes", defaultValue: [], }); const required = useWatch({ control: form.control, name: "isRequired", defaultValue: false, }); useFetch(() => adminClient.clientScopes.find(), setClientScopes, []); useFetch(() => adminClient.users.getProfile(), setConfig, []); return ( } fieldId="kc-attribute-name" isRequired validated={form.errors.name ? "error" : "default"} helperTextInvalid={form.errors.name?.message} > } fieldId="kc-attribute-display-name" > } fieldId="kc-attribute-group" > ( )} > { if (value) { form.setValue( "selector.scopes", clientScopes?.map((s) => s.name) ); } else { form.setValue("selector.scopes", []); } }} className="pf-u-mb-md" /> { if (value) { form.setValue("selector.scopes", []); } else { form.setValue( "selector.scopes", clientScopes?.map((s) => s.name) ); } }} className="pf-u-mb-md" /> ( )} /> } fieldId="kc-required" hasNoPaddingTop > ( )} /> {required && ( <> (
{REQUIRED_FOR.map((option) => ( { onChange(option.value); }} label={t(option.label)} className="kc-requiredFor-option" /> ))}
)} />
{ if (value) { form.setValue( "required.scopes", clientScopes?.map((s) => s.name) ); } else { form.setValue("required.scopes", []); } }} className="pf-u-mb-md" /> { if (value) { form.setValue("required.scopes", []); } else { form.setValue( "required.scopes", clientScopes?.map((s) => s.name) ); } }} className="pf-u-mb-md" /> ( )} /> )}
); };