theme.keycloak.v2.admin.resources.assets.AttributesGroupDetails-Ccdzh65G.js.map Maven / Gradle / Ivy
{"version":3,"file":"AttributesGroupDetails-Ccdzh65G.js","sources":["../../src/realm-settings/user-profile/AttributesGroupForm.tsx","../../src/realm-settings/user-profile/AttributesGroupDetails.tsx"],"sourcesContent":["import type { UserProfileGroup } from \"@keycloak/keycloak-admin-client/lib/defs/userProfileMetadata\";\nimport { HelpItem, TextControl } from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n Alert,\n Button,\n FormGroup,\n Grid,\n GridItem,\n PageSection,\n Text,\n TextContent,\n TextInput,\n} from \"@patternfly/react-core\";\nimport { GlobeRouteIcon } from \"@patternfly/react-icons\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport {\n FormProvider,\n SubmitHandler,\n useForm,\n useWatch,\n} from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate, useParams } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { useAlerts } from \"../../components/alert/Alerts\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { KeyValueInput } from \"../../components/key-value-form/KeyValueInput\";\nimport type { KeyValueType } from \"../../components/key-value-form/key-value-convert\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useRealm } from \"../../context/realm-context/RealmContext\";\nimport { useFetch } from \"../../utils/useFetch\";\nimport useLocale from \"../../utils/useLocale\";\nimport useToggle from \"../../utils/useToggle\";\nimport \"../realm-settings-section.css\";\nimport type { EditAttributesGroupParams } from \"../routes/EditAttributesGroup\";\nimport { toUserProfile } from \"../routes/UserProfile\";\nimport { useUserProfile } from \"./UserProfileContext\";\nimport {\n AddTranslationsDialog,\n TranslationsType,\n} from \"./attribute/AddTranslationsDialog\";\n\nfunction parseAnnotations(input: Record): KeyValueType[] {\n return Object.entries(input).reduce((p, [key, value]) => {\n if (typeof value === \"string\") {\n return [...p, { key, value }];\n } else {\n return [...p];\n }\n }, [] as KeyValueType[]);\n}\n\nfunction transformAnnotations(input: KeyValueType[]): Record {\n return Object.fromEntries(\n input\n .filter((annotation) => annotation.key.length > 0)\n .map((annotation) => [annotation.key, annotation.value] as const),\n );\n}\n\ntype FormFields = Required> & {\n annotations: KeyValueType[];\n};\n\ntype TranslationForm = {\n locale: string;\n value: string;\n};\n\ntype Translations = {\n key: string;\n translations: TranslationForm[];\n};\n\ntype TranslationsSets = {\n displayHeader: Translations;\n displayDescription: Translations;\n};\n\nconst defaultValues: FormFields = {\n annotations: [],\n displayDescription: \"\",\n displayHeader: \"\",\n name: \"\",\n};\n\nexport default function AttributesGroupForm() {\n const { adminClient } = useAdminClient();\n const { t } = useTranslation();\n const { realm: realmName, realmRepresentation: realm } = useRealm();\n const { config, save } = useUserProfile();\n const navigate = useNavigate();\n const combinedLocales = useLocale();\n const params = useParams();\n const form = useForm({ defaultValues });\n const { addError } = useAlerts();\n const editMode = params.name ? true : false;\n const [newAttributesGroupName, setNewAttributesGroupName] = useState(\"\");\n const [\n generatedAttributesGroupDisplayName,\n setGeneratedAttributesGroupDisplayName,\n ] = useState(\"\");\n const [\n generatedAttributesGroupDisplayDescription,\n setGeneratedAttributesGroupDisplayDescription,\n ] = useState(\"\");\n const [addTranslationsModalOpen, toggleModal] = useToggle();\n const regexPattern = /\\$\\{([^}]+)\\}/;\n const [type, setType] = useState();\n const [translationsData, setTranslationsData] = useState({\n displayHeader: {\n key: \"\",\n translations: [],\n },\n displayDescription: {\n key: \"\",\n translations: [],\n },\n });\n\n const matchingGroup = useMemo(\n () => config?.groups?.find(({ name }) => name === params.name),\n [config?.groups],\n );\n\n useEffect(() => {\n if (!matchingGroup) {\n return;\n }\n\n const annotations = matchingGroup.annotations\n ? parseAnnotations(matchingGroup.annotations)\n : [];\n\n form.reset({ ...defaultValues, ...matchingGroup, annotations });\n }, [matchingGroup]);\n\n useEffect(() => {\n form.setValue(\n \"displayHeader\",\n matchingGroup\n ? matchingGroup.displayHeader!\n : generatedAttributesGroupDisplayName,\n );\n form.setValue(\n \"displayDescription\",\n matchingGroup\n ? matchingGroup.displayDescription!\n : generatedAttributesGroupDisplayDescription,\n );\n }, [\n generatedAttributesGroupDisplayName,\n generatedAttributesGroupDisplayDescription,\n ]);\n\n useFetch(\n async () => {\n const translationsToSaveDisplayHeader: Translations[] = [];\n const translationsToSaveDisplayDescription: Translations[] = [];\n const formData = form.getValues();\n\n const translationsResults = await Promise.all(\n combinedLocales.map(async (selectedLocale) => {\n try {\n const translations =\n await adminClient.realms.getRealmLocalizationTexts({\n realm: realmName,\n selectedLocale,\n });\n\n const formattedDisplayHeaderKey = formData.displayHeader?.substring(\n 2,\n formData.displayHeader.length - 1,\n );\n const formattedDisplayDescriptionKey =\n formData.displayDescription?.substring(\n 2,\n formData.displayDescription.length - 1,\n );\n\n return {\n locale: selectedLocale,\n headerTranslation: translations[formattedDisplayHeaderKey] ?? \"\",\n descriptionTranslation:\n translations[formattedDisplayDescriptionKey] ?? \"\",\n };\n } catch (error) {\n console.error(\n `Error fetching translations for ${selectedLocale}:`,\n error,\n );\n return null;\n }\n }),\n );\n\n translationsResults.forEach((translationsResult) => {\n if (translationsResult) {\n const { locale, headerTranslation, descriptionTranslation } =\n translationsResult;\n translationsToSaveDisplayHeader.push({\n key: formData.displayHeader?.substring(\n 2,\n formData.displayHeader.length - 1,\n ),\n translations: [\n {\n locale,\n value: headerTranslation,\n },\n ],\n });\n translationsToSaveDisplayDescription.push({\n key: formData.displayDescription?.substring(\n 2,\n formData.displayDescription.length - 1,\n ),\n translations: [\n {\n locale,\n value: descriptionTranslation,\n },\n ],\n });\n }\n });\n\n return {\n translationsToSaveDisplayHeader,\n translationsToSaveDisplayDescription,\n };\n },\n (data) => {\n setTranslationsData({\n displayHeader: {\n key: data.translationsToSaveDisplayHeader[0].key,\n translations: data.translationsToSaveDisplayHeader.flatMap(\n (translationData) => translationData.translations,\n ),\n },\n displayDescription: {\n key: data.translationsToSaveDisplayDescription[0].key,\n translations: data.translationsToSaveDisplayDescription.flatMap(\n (translationData) => translationData.translations,\n ),\n },\n });\n },\n [combinedLocales],\n );\n\n const saveTranslations = async () => {\n const addLocalization = async (\n key: string,\n locale: string,\n value: string,\n ) => {\n try {\n await adminClient.realms.addLocalization(\n {\n realm: realmName,\n selectedLocale: locale,\n key: key,\n },\n value,\n );\n } catch (error) {\n console.error(\n `Error saving translation for locale ${locale}: ${error}`,\n );\n }\n };\n\n try {\n if (\n translationsData.displayHeader &&\n translationsData.displayHeader.translations.length > 0\n ) {\n for (const translation of translationsData.displayHeader.translations) {\n await addLocalization(\n translationsData.displayHeader.key,\n translation.locale,\n translation.value,\n );\n }\n }\n\n if (\n translationsData.displayDescription &&\n translationsData.displayDescription.translations.length > 0\n ) {\n for (const translation of translationsData.displayDescription\n .translations) {\n await addLocalization(\n translationsData.displayDescription.key,\n translation.locale,\n translation.value,\n );\n }\n }\n } catch (error) {\n console.error(`Error while processing translations: ${error}`);\n }\n };\n\n const onSubmit: SubmitHandler = async (values) => {\n if (!config) {\n return;\n }\n\n const groups = [...(config.groups ?? [])];\n const updateAt = matchingGroup ? groups.indexOf(matchingGroup) : -1;\n const updatedGroup: UserProfileGroup = {\n ...values,\n annotations: transformAnnotations(values.annotations),\n };\n\n if (updateAt === -1) {\n groups.push(updatedGroup);\n } else {\n groups[updateAt] = updatedGroup;\n }\n\n if (realm?.internationalizationEnabled) {\n const hasNonEmptyDisplayHeaderTranslations =\n translationsData.displayHeader.translations.some(\n (translation) => translation.value.trim() !== \"\",\n );\n\n const hasNonEmptyDisplayDescriptionTranslations =\n translationsData.displayDescription.translations.some(\n (translation) => translation.value.trim() !== \"\",\n );\n\n if (\n !hasNonEmptyDisplayHeaderTranslations ||\n !hasNonEmptyDisplayDescriptionTranslations\n ) {\n addError(\"createAttributeError\", t(\"translationError\"));\n return;\n }\n }\n\n const success = await save({ ...config, groups });\n\n if (success) {\n await saveTranslations();\n navigate(toUserProfile({ realm: realmName, tab: \"attributes-group\" }));\n }\n };\n\n const attributesGroupDisplayName = useWatch({\n control: form.control,\n name: \"displayHeader\",\n });\n\n const attributesGroupDisplayDescription = useWatch({\n control: form.control,\n name: \"displayDescription\",\n });\n\n const handleAttributesGroupNameChange = (\n event: React.FormEvent,\n value: string,\n ) => {\n const newDisplayName =\n value !== \"\" && realm?.internationalizationEnabled\n ? \"${profile.attribute-group.\" + `${value}}`\n : \"\";\n const newDisplayDescription =\n value !== \"\" && realm?.internationalizationEnabled\n ? \"${profile.attribute-group-description.\" + `${value}}`\n : \"\";\n setNewAttributesGroupName(value);\n setGeneratedAttributesGroupDisplayName(newDisplayName);\n setGeneratedAttributesGroupDisplayDescription(newDisplayDescription);\n };\n\n const attributesGroupDisplayPatternMatch = regexPattern.test(\n attributesGroupDisplayName || attributesGroupDisplayDescription,\n );\n\n const formattedAttributesGroupDisplayName =\n attributesGroupDisplayName?.substring(\n 2,\n attributesGroupDisplayName.length - 1,\n );\n const formattedAttributesGroupDisplayDescription =\n attributesGroupDisplayDescription?.substring(\n 2,\n attributesGroupDisplayDescription.length - 1,\n );\n\n const handleHeaderTranslationsAdded = (headerTranslations: Translations) => {\n setTranslationsData((prev) => ({\n ...prev,\n displayHeader: headerTranslations,\n }));\n };\n\n const handleDescriptionTranslationsAdded = (\n descriptionTranslations: Translations,\n ) => {\n setTranslationsData((prev) => ({\n ...prev,\n displayDescription: descriptionTranslations,\n }));\n };\n\n const handleToggleDialog = () => {\n toggleModal();\n };\n\n const groupDisplayNameKey =\n type === \"displayHeader\"\n ? formattedAttributesGroupDisplayName\n : `profile.attribute-group.${newAttributesGroupName}`;\n const groupDisplayDescriptionKey =\n type === \"displayDescription\"\n ? formattedAttributesGroupDisplayDescription\n : `profile.attribute-group-description.${newAttributesGroupName}`;\n\n return (\n <>\n {addTranslationsModalOpen && (\n {\n toggleModal();\n }}\n />\n )}\n \n \n \n \n {\n handleAttributesGroupNameChange(event, event.target.value);\n },\n }}\n />\n {!!matchingGroup && (\n \n )}\n \n }\n fieldId=\"kc-attributes-group-display-header\"\n >\n \n \n \n {generatedAttributesGroupDisplayName && (\n \n )}\n \n {realm?.internationalizationEnabled && (\n \n \n )}\n \n \n \n }\n fieldId=\"kc-attributes-group-display-description\"\n >\n \n \n \n {generatedAttributesGroupDisplayDescription && (\n \n )}\n \n {realm?.internationalizationEnabled && (\n \n \n )}\n \n \n \n {t(\"annotationsText\")} \n \n \n \n \n \n \n \n \n \n \n \n >\n );\n}\n","import AttributesGroupForm from \"./AttributesGroupForm\";\nimport { UserProfileProvider } from \"./UserProfileContext\";\n\nconst AttributesGroupDetails = () => (\n \n \n \n);\n\nexport default AttributesGroupDetails;\n"],"names":["parseAnnotations","input","p","key","value","transformAnnotations","annotation","defaultValues","AttributesGroupForm","adminClient","useAdminClient","t","useTranslation","realmName","realm","useRealm","config","save","useUserProfile","navigate","useNavigate","combinedLocales","useLocale","params","useParams","form","useForm","addError","useAlerts","editMode","newAttributesGroupName","setNewAttributesGroupName","useState","generatedAttributesGroupDisplayName","setGeneratedAttributesGroupDisplayName","generatedAttributesGroupDisplayDescription","setGeneratedAttributesGroupDisplayDescription","addTranslationsModalOpen","toggleModal","useToggle","regexPattern","type","setType","translationsData","setTranslationsData","matchingGroup","useMemo","name","useEffect","annotations","useFetch","translationsToSaveDisplayHeader","translationsToSaveDisplayDescription","formData","selectedLocale","translations","formattedDisplayHeaderKey","formattedDisplayDescriptionKey","error","translationsResult","locale","headerTranslation","descriptionTranslation","data","translationData","saveTranslations","addLocalization","translation","onSubmit","values","groups","updateAt","updatedGroup","hasNonEmptyDisplayHeaderTranslations","hasNonEmptyDisplayDescriptionTranslations","toUserProfile","attributesGroupDisplayName","useWatch","attributesGroupDisplayDescription","handleAttributesGroupNameChange","event","newDisplayName","newDisplayDescription","attributesGroupDisplayPatternMatch","formattedAttributesGroupDisplayName","formattedAttributesGroupDisplayDescription","handleHeaderTranslationsAdded","headerTranslations","prev","handleDescriptionTranslationsAdded","descriptionTranslations","handleToggleDialog","groupDisplayNameKey","groupDisplayDescriptionKey","jsxs","Fragment","jsx","AddTranslationsDialog","ViewHeader","PageSection","FormAccess","FormProvider","TextControl","FormGroup","HelpItem","Grid","GridItem","TextInput","Alert","Button","GlobeRouteIcon","TextContent","Text","KeyValueInput","ActionGroup","props","Link","AttributesGroupDetails","UserProfileProvider"],"mappings":"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"}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy