theme.keycloak.v2.admin.resources.assets.NewClientPolicy-CnABlseI.js.map Maven / Gradle / Ivy
{"version":3,"file":"NewClientPolicy-CnABlseI.js","sources":["../../src/realm-settings/AddClientProfileModal.tsx","../../src/realm-settings/NewClientPolicy.tsx"],"sourcesContent":["import type ClientProfileRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientProfileRepresentation\";\nimport type RoleRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/roleRepresentation\";\nimport { Button, Label, Modal, ModalVariant } from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../admin-client\";\nimport { KeycloakSpinner } from \"../components/keycloak-spinner/KeycloakSpinner\";\nimport { ListEmptyState } from \"../components/list-empty-state/ListEmptyState\";\nimport { KeycloakDataTable } from \"../components/table-toolbar/KeycloakDataTable\";\nimport { useFetch } from \"../utils/useFetch\";\n\ntype ClientProfile = ClientProfileRepresentation & {\n global: boolean;\n};\n\nconst AliasRenderer = ({ name, global }: ClientProfile) => {\n const { t } = useTranslation();\n\n return (\n <>\n {name} {global && }\n >\n );\n};\n\nexport type AddClientProfileModalProps = {\n open: boolean;\n toggleDialog: () => void;\n onConfirm: (newReps: RoleRepresentation[]) => void;\n allProfiles: string[];\n};\n\nexport const AddClientProfileModal = (props: AddClientProfileModalProps) => {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const [selectedRows, setSelectedRows] = useState([]);\n\n const [tableProfiles, setTableProfiles] = useState();\n\n useFetch(\n () =>\n adminClient.clientPolicies.listProfiles({\n includeGlobalProfiles: true,\n }),\n (allProfiles) => {\n const globalProfiles = allProfiles.globalProfiles?.map(\n (globalProfiles) => ({\n ...globalProfiles,\n global: true,\n }),\n );\n\n const profiles = allProfiles.profiles?.map((profiles) => ({\n ...profiles,\n global: false,\n }));\n\n setTableProfiles([...(globalProfiles ?? []), ...(profiles ?? [])]);\n },\n [],\n );\n\n const loader = async () =>\n tableProfiles?.filter((item) => !props.allProfiles.includes(item.name!)) ??\n [];\n\n if (!tableProfiles) {\n return ;\n }\n\n return (\n {\n props.toggleDialog();\n props.onConfirm(selectedRows);\n }}\n >\n {t(\"add\")}\n ,\n ,\n ]}\n >\n {\n setSelectedRows([...rows]);\n }}\n columns={[\n {\n name: \"name\",\n displayKey: \"clientProfileName\",\n cellRenderer: AliasRenderer,\n },\n {\n name: \"description\",\n displayKey: \"description\",\n },\n ]}\n emptyState={\n \n }\n />\n \n );\n};\n","import type ClientPolicyRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientPolicyRepresentation\";\nimport type ClientProfileRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientProfileRepresentation\";\nimport {\n HelpItem,\n KeycloakTextArea,\n TextControl,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n AlertVariant,\n Button,\n ButtonVariant,\n DataList,\n DataListCell,\n DataListItem,\n DataListItemCells,\n DataListItemRow,\n Divider,\n DropdownItem,\n Flex,\n FlexItem,\n FormGroup,\n Label,\n PageSection,\n Text,\n TextVariants,\n} from \"@patternfly/react-core\";\nimport { PlusCircleIcon, TrashIcon } from \"@patternfly/react-icons\";\nimport { useState } from \"react\";\nimport { Controller, FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../admin-client\";\nimport { useAlerts } from \"../components/alert/Alerts\";\nimport { useConfirmDialog } from \"../components/confirm-dialog/ConfirmDialog\";\nimport { FormAccess } from \"../components/form/FormAccess\";\nimport { KeycloakSpinner } from \"../components/keycloak-spinner/KeycloakSpinner\";\nimport { ViewHeader } from \"../components/view-header/ViewHeader\";\nimport { useRealm } from \"../context/realm-context/RealmContext\";\nimport { useServerInfo } from \"../context/server-info/ServerInfoProvider\";\nimport { useFetch } from \"../utils/useFetch\";\nimport { useParams } from \"../utils/useParams\";\nimport { AddClientProfileModal } from \"./AddClientProfileModal\";\nimport { toNewClientPolicyCondition } from \"./routes/AddCondition\";\nimport { toClientPolicies } from \"./routes/ClientPolicies\";\nimport { toClientProfile } from \"./routes/ClientProfile\";\nimport {\n EditClientPolicyParams,\n toEditClientPolicy,\n} from \"./routes/EditClientPolicy\";\nimport { toEditClientPolicyCondition } from \"./routes/EditCondition\";\n\nimport \"./realm-settings-section.css\";\n\ntype FormFields = Required;\n\nconst defaultValues: FormFields = {\n name: \"\",\n description: \"\",\n conditions: [],\n enabled: true,\n profiles: [],\n};\n\ntype PolicyDetailAttributes = {\n idx: number;\n name: string;\n};\n\nexport default function NewClientPolicy() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const { realm } = useRealm();\n const { addAlert, addError } = useAlerts();\n const [isGlobalPolicy, setIsGlobalPolicy] = useState(false);\n const [policies, setPolicies] = useState();\n const [globalPolicies, setGlobalPolicies] =\n useState();\n const [allPolicies, setAllPolicies] =\n useState();\n const [clientProfiles, setClientProfiles] = useState<\n ClientProfileRepresentation[]\n >([]);\n\n const [currentPolicy, setCurrentPolicy] =\n useState();\n const [\n showAddConditionsAndProfilesForm,\n setShowAddConditionsAndProfilesForm,\n ] = useState(false);\n\n const [conditionToDelete, setConditionToDelete] =\n useState();\n\n const [profilesModalOpen, setProfilesModalOpen] = useState(false);\n\n const [profileToDelete, setProfileToDelete] =\n useState();\n\n const { policyName } = useParams();\n\n const navigate = useNavigate();\n const form = useForm({\n mode: \"onChange\",\n defaultValues,\n });\n const { handleSubmit } = form;\n\n const formValues = form.getValues();\n\n useFetch(\n async () => {\n const [policies, profiles] = await Promise.all([\n adminClient.clientPolicies.listPolicies({\n includeGlobalPolicies: true,\n }),\n adminClient.clientPolicies.listProfiles({\n includeGlobalProfiles: true,\n }),\n ]);\n\n return { policies, profiles };\n },\n ({ policies, profiles }) => {\n let currentPolicy = policies.policies?.find(\n (item) => item.name === policyName,\n );\n if (currentPolicy === undefined) {\n currentPolicy = policies.globalPolicies?.find(\n (item) => item.name === policyName,\n );\n setIsGlobalPolicy(currentPolicy !== undefined);\n }\n\n const allClientProfiles = [\n ...(profiles.globalProfiles ?? []),\n ...(profiles.profiles ?? []),\n ];\n\n const allClientPolicies = [\n ...(policies.globalPolicies ?? []),\n ...(policies.policies ?? []),\n ];\n\n setPolicies(policies.policies ?? []);\n setGlobalPolicies(policies.globalPolicies ?? []);\n setAllPolicies(allClientPolicies);\n if (currentPolicy) {\n setupForm(currentPolicy);\n setClientProfiles(allClientProfiles);\n setCurrentPolicy(currentPolicy);\n setShowAddConditionsAndProfilesForm(true);\n }\n },\n [],\n );\n\n const setupForm = (policy: ClientPolicyRepresentation) => {\n form.reset(policy);\n };\n\n const policy = (allPolicies || []).filter(\n (policy) => policy.name === policyName,\n );\n const policyConditions = policy[0]?.conditions || [];\n const policyProfiles = policy[0]?.profiles || [];\n\n const serverInfo = useServerInfo();\n\n const conditionTypes =\n serverInfo.componentTypes?.[\n \"org.keycloak.services.clientpolicy.condition.ClientPolicyConditionProvider\"\n ];\n\n const save = async () => {\n const createdForm = form.getValues();\n const createdPolicy = {\n ...createdForm,\n };\n\n const getAllPolicies = () => {\n const policyNameExists = policies?.some(\n (policy) => policy.name === createdPolicy.name,\n );\n\n if (policyNameExists) {\n return policies?.map((policy) =>\n policy.name === createdPolicy.name ? createdPolicy : policy,\n );\n } else if (createdForm.name !== policyName) {\n return policies\n ?.filter((item) => item.name !== policyName)\n .concat(createdForm);\n }\n return policies?.concat(createdForm);\n };\n\n try {\n await adminClient.clientPolicies.updatePolicy({\n policies: getAllPolicies(),\n });\n addAlert(\n policyName\n ? t(\"updateClientPolicySuccess\")\n : t(\"createClientPolicySuccess\"),\n AlertVariant.success,\n );\n navigate(toEditClientPolicy({ realm, policyName: createdForm.name! }));\n setShowAddConditionsAndProfilesForm(true);\n } catch (error) {\n addError(\"createClientPolicyError\", error);\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: t(\"deleteClientPolicyConfirmTitle\"),\n messageKey: t(\"deleteClientPolicyConfirm\", {\n policyName: policyName,\n }),\n continueButtonLabel: t(\"delete\"),\n continueButtonVariant: ButtonVariant.danger,\n onConfirm: async () => {\n const updatedPolicies = policies?.filter(\n (policy) => policy.name !== policyName,\n );\n\n try {\n await adminClient.clientPolicies.updatePolicy({\n policies: updatedPolicies,\n });\n addAlert(t(\"deleteClientPolicySuccess\"), AlertVariant.success);\n navigate(\n toClientPolicies({\n realm,\n tab: \"policies\",\n }),\n );\n } catch (error) {\n addError(t(\"deleteClientPolicyError\"), error);\n }\n },\n });\n\n const [toggleDeleteConditionDialog, DeleteConditionConfirm] =\n useConfirmDialog({\n titleKey: t(\"deleteClientPolicyConditionConfirmTitle\"),\n messageKey: t(\"deleteClientPolicyConditionConfirm\", {\n condition: conditionToDelete?.name,\n }),\n continueButtonLabel: t(\"delete\"),\n continueButtonVariant: ButtonVariant.danger,\n onConfirm: async () => {\n if (conditionToDelete?.name) {\n currentPolicy?.conditions?.splice(conditionToDelete.idx!, 1);\n try {\n await adminClient.clientPolicies.updatePolicy({\n policies: policies,\n });\n addAlert(t(\"deleteConditionSuccess\"), AlertVariant.success);\n navigate(\n toEditClientPolicy({ realm, policyName: formValues.name! }),\n );\n } catch (error) {\n addError(t(\"deleteConditionError\"), error);\n }\n } else {\n const updatedPolicies = policies?.filter(\n (policy) => policy.name !== policyName,\n );\n\n try {\n await adminClient.clientPolicies.updatePolicy({\n policies: updatedPolicies,\n });\n addAlert(t(\"deleteClientSuccess\"), AlertVariant.success);\n navigate(\n toClientPolicies({\n realm,\n tab: \"policies\",\n }),\n );\n } catch (error) {\n addError(t(\"deleteClientError\"), error);\n }\n }\n },\n });\n\n const [toggleDeleteProfileDialog, DeleteProfileConfirm] = useConfirmDialog({\n titleKey: t(\"deleteClientPolicyProfileConfirmTitle\"),\n messageKey: t(\"deleteClientPolicyProfileConfirm\", {\n profileName: profileToDelete?.name,\n policyName,\n }),\n continueButtonLabel: t(\"delete\"),\n continueButtonVariant: ButtonVariant.danger,\n onConfirm: async () => {\n if (profileToDelete?.name) {\n currentPolicy?.profiles?.splice(profileToDelete.idx!, 1);\n try {\n await adminClient.clientPolicies.updatePolicy({\n policies: policies,\n });\n addAlert(t(\"deleteClientPolicyProfileSuccess\"), AlertVariant.success);\n form.setValue(\"profiles\", currentPolicy?.profiles || []);\n navigate(toEditClientPolicy({ realm, policyName: formValues.name! }));\n } catch (error) {\n addError(t(\"deleteClientPolicyProfileError\"), error);\n }\n } else {\n const updatedPolicies = policies?.filter(\n (policy) => policy.name !== policyName,\n );\n\n try {\n await adminClient.clientPolicies.updatePolicy({\n policies: updatedPolicies,\n });\n addAlert(t(\"deleteClientSuccess\"), AlertVariant.success);\n navigate(\n toClientPolicies({\n realm,\n tab: \"policies\",\n }),\n );\n } catch (error) {\n addError(t(\"deleteClientError\"), error);\n }\n }\n },\n });\n\n const reset = () => {\n if (currentPolicy?.name !== undefined) {\n form.setValue(\"name\", currentPolicy.name);\n }\n\n if (currentPolicy?.description !== undefined) {\n form.setValue(\"description\", currentPolicy.description);\n }\n };\n\n const toggleModal = () => {\n setProfilesModalOpen(!profilesModalOpen);\n };\n\n const addProfiles = async (profiles: string[]) => {\n const createdPolicy = {\n ...currentPolicy,\n profiles: policyProfiles.concat(profiles),\n conditions: currentPolicy?.conditions,\n };\n\n const index = policies?.findIndex(\n (policy) => createdPolicy.name === policy.name,\n );\n\n if (index === undefined || index === -1) {\n return;\n }\n\n const newPolicies = [\n ...(policies || []).slice(0, index),\n createdPolicy,\n ...(policies || []).slice(index + 1),\n ];\n\n try {\n await adminClient.clientPolicies.updatePolicy({\n policies: newPolicies,\n });\n setPolicies(newPolicies);\n const allClientPolicies = [...(globalPolicies || []), ...newPolicies];\n setAllPolicies(allClientPolicies);\n setCurrentPolicy(createdPolicy);\n form.setValue(\"profiles\", createdPolicy.profiles);\n navigate(toEditClientPolicy({ realm, policyName: formValues.name! }));\n addAlert(t(\"addClientProfileSuccess\"), AlertVariant.success);\n } catch (error) {\n addError(\"addClientProfileError\", error);\n }\n };\n\n const [toggleDisableDialog, DisableConfirm] = useConfirmDialog({\n titleKey: \"disablePolicyConfirmTitle\",\n messageKey: \"disablePolicyConfirm\",\n continueButtonLabel: \"disable\",\n onConfirm: () => {\n form.setValue(\"enabled\", !form.getValues().enabled);\n save();\n },\n });\n\n if (!policies) {\n return ;\n }\n\n return (\n <>\n \n \n {\n addProfiles(profiles.map((item) => item.name!));\n }}\n allProfiles={policyProfiles}\n open={profilesModalOpen}\n toggleDialog={toggleModal}\n />\n (\n <>\n \n \n {t(\"global\")}\n ) : (\n \"\"\n ),\n },\n ]}\n divider\n dropdownItems={\n (showAddConditionsAndProfilesForm || policyName) &&\n !isGlobalPolicy\n ? [\n {\n toggleDeleteDialog();\n }}\n data-testid=\"deleteClientPolicyDropdown\"\n >\n {t(\"deleteClientPolicy\")}\n ,\n ]\n : undefined\n }\n isReadOnly={isGlobalPolicy}\n isEnabled={field.value}\n onToggle={(value) => {\n if (!value) {\n toggleDisableDialog();\n } else {\n field.onChange(value);\n save();\n }\n }}\n />\n >\n )}\n />\n \n \n \n \n policies.some((policy) => policy.name === value)\n ? t(\"createClientProfileNameHelperText\").toString()\n : true,\n }}\n />\n \n \n \n \n \n \n \n {(showAddConditionsAndProfilesForm ||\n form.formState.isSubmitted) && (\n <>\n \n \n \n {t(\"conditions\")}\n \n \n \n {!isGlobalPolicy && (\n \n \n \n )}\n \n {policyConditions.length > 0 ? (\n \n ) : (\n <>\n \n \n {t(\"emptyConditions\")}\n \n >\n )}\n >\n )}\n {(showAddConditionsAndProfilesForm ||\n form.formState.isSubmitted) && (\n <>\n \n \n \n {t(\"clientProfiles\")}\n \n \n \n {!isGlobalPolicy && (\n \n }\n onClick={toggleModal}\n >\n {t(\"addClientProfile\")}\n \n \n )}\n \n {policyProfiles.length > 0 ? (\n \n ) : (\n <>\n \n \n {t(\"emptyProfiles\")}\n \n >\n )}\n >\n )}\n \n \n \n >\n );\n}\n"],"names":["AliasRenderer","name","global","t","useTranslation","jsxs","Fragment","jsx","Label","AddClientProfileModal","props","adminClient","useAdminClient","selectedRows","setSelectedRows","useState","tableProfiles","setTableProfiles","useFetch","allProfiles","globalProfiles","profiles","loader","item","Modal","ModalVariant","Button","KeycloakDataTable","rows","ListEmptyState","KeycloakSpinner","defaultValues","NewClientPolicy","realm","useRealm","addAlert","addError","useAlerts","isGlobalPolicy","setIsGlobalPolicy","policies","setPolicies","globalPolicies","setGlobalPolicies","allPolicies","setAllPolicies","clientProfiles","setClientProfiles","currentPolicy","setCurrentPolicy","showAddConditionsAndProfilesForm","setShowAddConditionsAndProfilesForm","conditionToDelete","setConditionToDelete","profilesModalOpen","setProfilesModalOpen","profileToDelete","setProfileToDelete","policyName","useParams","navigate","useNavigate","form","useForm","handleSubmit","formValues","allClientProfiles","allClientPolicies","setupForm","policy","policyConditions","policyProfiles","conditionTypes","useServerInfo","save","createdForm","createdPolicy","getAllPolicies","AlertVariant","toEditClientPolicy","error","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","ButtonVariant","updatedPolicies","toClientPolicies","toggleDeleteConditionDialog","DeleteConditionConfirm","toggleDeleteProfileDialog","DeleteProfileConfirm","reset","toggleModal","addProfiles","index","newPolicies","toggleDisableDialog","DisableConfirm","Controller","field","ViewHeader","DropdownItem","value","PageSection","FormAccess","FormProvider","TextControl","FormGroup","KeycloakTextArea","ActionGroup","Flex","FlexItem","Text","TextVariants","HelpItem","Link","toNewClientPolicyCondition","PlusCircleIcon","DataList","condition","idx","DataListItem","DataListItemRow","DataListItemCells","DataListCell","toEditClientPolicyCondition","type","TrashIcon","Divider","profile","toClientProfile"],"mappings":"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"}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy