Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
theme.keycloak.v2.admin.resources.assets.NewClientPolicyForm-19a9ce82.js.map Maven / Gradle / Ivy
Go to download
The user inferface to administrate the Keycloak server.
{"version":3,"file":"NewClientPolicyForm-19a9ce82.js","sources":["../../src/realm-settings/AddClientProfileModal.tsx","../../src/realm-settings/NewClientPolicyForm.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\";\n\nimport { adminClient } 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(\"roles\");\n\n return (\n <>\n {name}{\" \"}\n {global && {t(\"realm-settings: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 { t } = useTranslation(\"roles\");\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(\"common:add\")}\n ,\n {\n props.toggleDialog();\n }}\n >\n {t(\"common:cancel\")}\n ,\n ]}\n >\n {\n setSelectedRows([...rows]);\n }}\n columns={[\n {\n name: \"name\",\n displayKey: \"realm-settings:clientProfileName\",\n cellRenderer: AliasRenderer,\n },\n {\n name: \"description\",\n displayKey: \"common: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 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 PageSection,\n Text,\n TextVariants,\n ValidatedOptions,\n} from \"@patternfly/react-core\";\nimport { PlusCircleIcon, TrashIcon } from \"@patternfly/react-icons\";\nimport { useState } from \"react\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { HelpItem } from \"ui-shared\";\n\nimport { adminClient } 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 { KeycloakTextArea } from \"../components/keycloak-text-area/KeycloakTextArea\";\nimport { KeycloakTextInput } from \"../components/keycloak-text-input/KeycloakTextInput\";\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 NewClientPolicyForm = Required;\n\nconst defaultValues: NewClientPolicyForm = {\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 NewClientPolicyForm() {\n const { t } = useTranslation(\"realm-settings\");\n const { realm } = useRealm();\n const { addAlert, addError } = useAlerts();\n const [policies, setPolicies] = 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 type ClientPoliciesHeaderProps = {\n onChange: (value: boolean) => void;\n value: boolean;\n save: () => void;\n realmName: string;\n };\n\n const ClientPoliciesHeader = ({\n save,\n onChange,\n value,\n }: ClientPoliciesHeaderProps) => {\n const { t } = useTranslation(\"realm-settings\");\n\n const [toggleDisableDialog, DisableConfirm] = useConfirmDialog({\n titleKey: \"realm-settings:disablePolicyConfirmTitle\",\n messageKey: \"realm-settings:disablePolicyConfirm\",\n continueButtonLabel: \"common:disable\",\n onConfirm: () => {\n onChange(!value);\n save();\n },\n });\n\n if (!policies) {\n return ;\n }\n\n return (\n <>\n \n \n {\n toggleDeleteDialog();\n }}\n data-testid=\"deleteClientPolicyDropdown\"\n >\n {t(\"deleteClientPolicy\")}\n ,\n ]\n : undefined\n }\n isEnabled={value}\n onToggle={(value) => {\n if (!value) {\n toggleDisableDialog();\n } else {\n onChange(value);\n save();\n }\n }}\n />\n >\n );\n };\n\n useFetch(\n async () => {\n const [policies, profiles] = await Promise.all([\n adminClient.clientPolicies.listPolicies(),\n adminClient.clientPolicies.listProfiles({\n includeGlobalProfiles: true,\n }),\n ]);\n\n return { policies, profiles };\n },\n ({ policies, profiles }) => {\n const currentPolicy = policies.policies?.find(\n (item) => item.name === policyName,\n );\n\n const allClientProfiles = [\n ...(profiles.globalProfiles ?? []),\n ...(profiles.profiles ?? []),\n ];\n\n setPolicies(policies.policies ?? []);\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 = (policies || []).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 profiles: [],\n conditions: [],\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(\"realm-settings:updateClientPolicySuccess\")\n : t(\"realm-settings:createClientPolicySuccess\"),\n AlertVariant.success,\n );\n navigate(toEditClientPolicy({ realm, policyName: createdForm.name! }));\n setShowAddConditionsAndProfilesForm(true);\n } catch (error) {\n addError(\"realm-settings: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 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 navigate(toEditClientPolicy({ realm, policyName: formValues.name! }));\n addAlert(\n t(\"realm-settings:addClientProfileSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"realm-settings:addClientProfileError\", error);\n }\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 \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 {t(\"common:save\")}\n \n \n showAddConditionsAndProfilesForm || policyName\n ? reset()\n : navigate(\n toClientPolicies({\n realm,\n tab: \"policies\",\n }),\n )\n }\n data-testid=\"cancelCreatePolicy\"\n >\n {showAddConditionsAndProfilesForm\n ? t(\"common:reload\")\n : t(\"common:cancel\")}\n \n \n {(showAddConditionsAndProfilesForm || form.formState.isSubmitted) && (\n <>\n \n \n \n {t(\"conditions\")}\n \n \n \n \n (\n \n )}\n variant=\"link\"\n className=\"kc-addCondition\"\n data-testid=\"addCondition\"\n icon={ }\n >\n {t(\"realm-settings:addCondition\")}\n \n \n \n {policyConditions.length > 0 ? (\n \n {policyConditions.map((condition, idx) => (\n \n \n \n {Object.keys(condition.configuration!).length !==\n 0 ? (\n \n {condition.condition}\n \n ) : (\n condition.condition\n )}\n {conditionTypes?.map(\n (type) =>\n type.id === condition.condition && (\n <>\n \n {\n toggleDeleteConditionDialog();\n setConditionToDelete({\n idx: idx,\n name: type.id!,\n });\n }}\n />\n }\n > \n >\n ),\n )}\n ,\n ]}\n />\n \n \n ))}\n \n ) : (\n <>\n \n \n {t(\"realm-settings:emptyConditions\")}\n \n >\n )}\n >\n )}\n {(showAddConditionsAndProfilesForm || form.formState.isSubmitted) && (\n <>\n \n \n \n {t(\"clientProfiles\")}\n \n \n \n \n }\n onClick={toggleModal}\n >\n {t(\"realm-settings:addClientProfile\")}\n \n \n \n {policyProfiles.length > 0 ? (\n \n {policyProfiles.map((profile, idx) => (\n \n \n \n {profile && (\n \n {profile}\n \n )}\n {policyProfiles\n .filter((type) => type === profile)\n .map((type) => (\n <>\n type === profile.name,\n )?.description\n }\n fieldLabelId={profile}\n />\n {\n toggleDeleteProfileDialog();\n setProfileToDelete({\n idx: idx,\n name: type!,\n });\n }}\n />\n }\n > \n >\n ))}\n ,\n ]}\n />\n \n \n ))}\n \n ) : (\n <>\n \n \n {t(\"realm-settings:emptyProfiles\")}\n \n >\n )}\n >\n )}\n \n \n >\n );\n}\n"],"names":["AliasRenderer","name","global","t","useTranslation","jsxs","Fragment","jsx","Label","AddClientProfileModal","props","selectedRows","setSelectedRows","useState","tableProfiles","setTableProfiles","useFetch","adminClient","allProfiles","globalProfiles","profiles","loader","item","Modal","ModalVariant","Button","KeycloakDataTable","rows","ListEmptyState","KeycloakSpinner","defaultValues","NewClientPolicyForm","realm","useRealm","addAlert","addError","useAlerts","policies","setPolicies","clientProfiles","setClientProfiles","currentPolicy","setCurrentPolicy","showAddConditionsAndProfilesForm","setShowAddConditionsAndProfilesForm","conditionToDelete","setConditionToDelete","profilesModalOpen","setProfilesModalOpen","profileToDelete","setProfileToDelete","policyName","useParams","navigate","useNavigate","form","useForm","handleSubmit","formValues","ClientPoliciesHeader","save","onChange","value","toggleDisableDialog","DisableConfirm","useConfirmDialog","DeleteConfirm","ViewHeader","DropdownItem","toggleDeleteDialog","allClientProfiles","setupForm","policy","policyConditions","policyProfiles","conditionTypes","useServerInfo","createdForm","createdPolicy","getAllPolicies","AlertVariant","toEditClientPolicy","error","ButtonVariant","updatedPolicies","toClientPolicies","toggleDeleteConditionDialog","DeleteConditionConfirm","toggleDeleteProfileDialog","DeleteProfileConfirm","reset","toggleModal","addProfiles","index","newPolicies","Controller","field","PageSection","FormAccess","FormGroup","ValidatedOptions","KeycloakTextInput","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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"}