@keycloak/keycloak-admin-ui 26.4.7 → 26.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/lib/.vite/manifest.json +53 -43
  2. package/lib/AddJWTAuthorizationGrant-CmYIQF47.js +69 -0
  3. package/lib/AddJWTAuthorizationGrant-CmYIQF47.js.map +1 -0
  4. package/lib/{AddKubernetesConnect-TKm82MxO.js → AddKubernetesConnect--zBiT7am.js} +4 -4
  5. package/lib/{AddKubernetesConnect-TKm82MxO.js.map → AddKubernetesConnect--zBiT7am.js.map} +1 -1
  6. package/lib/{AddOAuth2-Bg_V5CMD.js → AddOAuth2-BLRNGQKN.js} +15 -15
  7. package/lib/{AddOAuth2-Bg_V5CMD.js.map → AddOAuth2-BLRNGQKN.js.map} +1 -1
  8. package/lib/{AddSpiffeConnect-gH8LxYcP.js → AddSpiffeConnect-NfHagx80.js} +5 -5
  9. package/lib/{AddSpiffeConnect-gH8LxYcP.js.map → AddSpiffeConnect-NfHagx80.js.map} +1 -1
  10. package/lib/{CreateFlow-6M8Wg_2H.js → CreateFlow-Bf02T80Q.js} +2 -2
  11. package/lib/{CreateFlow-6M8Wg_2H.js.map → CreateFlow-Bf02T80Q.js.map} +1 -1
  12. package/lib/DetailOrganization-DWvk7gJ9.js +194 -0
  13. package/lib/DetailOrganization-DWvk7gJ9.js.map +1 -0
  14. package/lib/{ExecutorForm-BYCH7c3u.js → ExecutorForm-DHTRUoB1.js} +2 -2
  15. package/lib/{ExecutorForm-BYCH7c3u.js.map → ExecutorForm-DHTRUoB1.js.map} +1 -1
  16. package/lib/{FlowDetails-Dkl-8lLX.js → FlowDetails--N_U426z.js} +1021 -1048
  17. package/lib/{FlowDetails-Dkl-8lLX.js.map → FlowDetails--N_U426z.js.map} +1 -1
  18. package/lib/{NewOrganization-CBaP7xLv.js → NewOrganization-7we_ianL.js} +12 -12
  19. package/lib/{NewOrganization-CBaP7xLv.js.map → NewOrganization-7we_ianL.js.map} +1 -1
  20. package/lib/{PermissionConfigurationDetails-C0sgaW6Y.js → PermissionConfigurationDetails-u9MRYXxC.js} +18 -18
  21. package/lib/{PermissionConfigurationDetails-C0sgaW6Y.js.map → PermissionConfigurationDetails-u9MRYXxC.js.map} +1 -1
  22. package/lib/{PermissionDetails-CCdfBuaW.js → PermissionDetails-DxeSTYxA.js} +2 -2
  23. package/lib/{PermissionDetails-CCdfBuaW.js.map → PermissionDetails-DxeSTYxA.js.map} +1 -1
  24. package/lib/{RealmSection-CbqC2up8.js → RealmSection-DoqGXY7F.js} +7 -7
  25. package/lib/{RealmSection-CbqC2up8.js.map → RealmSection-DoqGXY7F.js.map} +1 -1
  26. package/lib/{ResourceDetails-DWXjggUc.js → ResourceDetails-Bn6Uim5l.js} +3 -3
  27. package/lib/{ResourceDetails-DWXjggUc.js.map → ResourceDetails-Bn6Uim5l.js.map} +1 -1
  28. package/lib/{ScopeDetails-dcHTfc9f.js → ScopeDetails-BCjTo6cS.js} +2 -2
  29. package/lib/{ScopeDetails-dcHTfc9f.js.map → ScopeDetails-BCjTo6cS.js.map} +1 -1
  30. package/lib/{ScopePicker-DNYZfIbU.js → ScopePicker-Dd6Cs54v.js} +7 -7
  31. package/lib/{ScopePicker-DNYZfIbU.js.map → ScopePicker-Dd6Cs54v.js.map} +1 -1
  32. package/lib/WorkflowDetailForm-alfgEItU.js +4938 -0
  33. package/lib/WorkflowDetailForm-alfgEItU.js.map +1 -0
  34. package/lib/WorkflowsSection-DflIdHaB.js +135 -0
  35. package/lib/WorkflowsSection-DflIdHaB.js.map +1 -0
  36. package/lib/client-scopes/details/SearchFilter.d.ts +1 -1
  37. package/lib/clients/constants.d.ts +2 -0
  38. package/lib/clients/keys/ImportKeyDialog.d.ts +3 -1
  39. package/lib/components/dynamic/ClaimDisplayComponent.d.ts +2 -0
  40. package/lib/components/dynamic/IdentityProviderMultiSelectComponent.d.ts +2 -0
  41. package/lib/components/dynamic/MultivaluedListComponent.d.ts +6 -1
  42. package/lib/components/dynamic/components.d.ts +2 -1
  43. package/lib/components/identity-provider/IdentityProviderSelect.d.ts +10 -0
  44. package/lib/components/users/UserDataTableAttributeSearchForm.d.ts +2 -1
  45. package/lib/groups/GroupRoleMapping.d.ts +2 -1
  46. package/lib/identity-providers/add/AddJWTAuthorizationGrant.d.ts +1 -0
  47. package/lib/identity-providers/add/JWTAuthorizationGrantAssertionSettings.d.ts +1 -0
  48. package/lib/identity-providers/add/JWTAuthorizationGrantSettings.d.ts +1 -0
  49. package/lib/identity-providers/add/JwksSettings.d.ts +5 -0
  50. package/lib/identity-providers/routes/IdentityProviderJWTAuthorizationGrant.d.ts +7 -0
  51. package/lib/{index-YEmLy1gM.js → index-Ddam0zn3.js} +28912 -27332
  52. package/lib/{index-YEmLy1gM.js.map → index-Ddam0zn3.js.map} +1 -1
  53. package/lib/index.d.ts +2 -0
  54. package/lib/keycloak-admin-ui.js +147 -145
  55. package/lib/organizations/Invitations.d.ts +1 -0
  56. package/lib/organizations/MembersSection.d.ts +1 -0
  57. package/lib/realm-settings/TokensTab.d.ts +2 -2
  58. package/lib/utils/useIsFeatureEnabled.d.ts +1 -0
  59. package/lib/workflows/WorkflowDetailForm.d.ts +1 -0
  60. package/lib/workflows/routes/WorkflowDetail.d.ts +9 -0
  61. package/package.json +34 -22
  62. package/lib/CreateWorkflow-zbDnQ8Gr.js +0 -86
  63. package/lib/CreateWorkflow-zbDnQ8Gr.js.map +0 -1
  64. package/lib/DetailOrganization-DfVZ7YOx.js +0 -164
  65. package/lib/DetailOrganization-DfVZ7YOx.js.map +0 -1
  66. package/lib/WorkflowsSection-DZtAH1DA.js +0 -92
  67. package/lib/WorkflowsSection-DZtAH1DA.js.map +0 -1
  68. package/lib/workflows/CreateWorkflow.d.ts +0 -1
  69. package/lib/workflows/routes/AddWorkflow.d.ts +0 -7
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionDetails-CCdfBuaW.js","sources":["../src/clients/authorization/ScopeSelect.tsx","../src/clients/authorization/PermissionDetails.tsx"],"sourcesContent":["import type ScopeRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/scopeRepresentation\";\nimport {\n KeycloakSelect,\n SelectVariant,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport { SelectOption } from \"@patternfly/react-core\";\nimport { useRef, useState } from \"react\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../../admin-client\";\n\ntype ScopeSelectProps = {\n clientId: string;\n resourceId?: string;\n preSelected?: string;\n};\n\nexport const ScopeSelect = ({\n clientId,\n resourceId,\n preSelected,\n}: ScopeSelectProps) => {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n\n const {\n control,\n getValues,\n setValue,\n formState: { errors },\n } = useFormContext();\n\n const [scopes, setScopes] = useState<ScopeRepresentation[]>([]);\n const [selectedScopes, setSelectedScopes] = useState<ScopeRepresentation[]>(\n [],\n );\n const [search, setSearch] = useState(\"\");\n const [open, setOpen] = useState(false);\n const firstUpdate = useRef(true);\n\n const values: string[] | undefined = getValues(\"scopes\");\n\n const toSelectOptions = (scopes: ScopeRepresentation[]) =>\n scopes.map((scope) => (\n <SelectOption key={scope.id} value={scope}>\n {scope.name}\n </SelectOption>\n ));\n\n useFetch(\n async (): Promise<ScopeRepresentation[]> => {\n if (!resourceId) {\n return adminClient.clients.listAllScopes(\n Object.assign(\n { id: clientId, deep: false },\n search === \"\" ? null : { name: search },\n ),\n );\n }\n\n if (resourceId && !firstUpdate.current) {\n setValue(\"scopes\", []);\n }\n\n firstUpdate.current = false;\n return adminClient.clients.listScopesByResource({\n id: clientId,\n resourceName: resourceId,\n });\n },\n (scopes) => {\n setScopes(scopes);\n if (!search)\n setSelectedScopes(\n scopes.filter((s: ScopeRepresentation) => values?.includes(s.id!)),\n );\n },\n [resourceId, search],\n );\n\n return (\n <Controller\n name=\"scopes\"\n defaultValue={preSelected ? [preSelected] : []}\n control={control}\n rules={{ validate: (value) => value.length > 0 }}\n render={({ field }) => (\n <KeycloakSelect\n toggleId=\"scopes\"\n variant={SelectVariant.typeaheadMulti}\n onToggle={(val) => setOpen(val)}\n onFilter={(filter) => {\n setSearch(filter);\n return toSelectOptions(scopes);\n }}\n onClear={() => {\n field.onChange([]);\n setSearch(\"\");\n }}\n selections={selectedScopes.map((s) => s.name!)}\n onSelect={(selectedValue) => {\n const option =\n typeof selectedValue === \"string\"\n ? selectedScopes.find((s) => s.name === selectedValue)!\n : (selectedValue as ScopeRepresentation);\n const changedValue = selectedScopes.find((p) => p.id === option.id)\n ? selectedScopes.filter((p) => p.id !== option.id)\n : [...selectedScopes, option];\n\n field.onChange(changedValue.map((s) => s.id));\n setSelectedScopes(changedValue);\n setSearch(\"\");\n }}\n isOpen={open}\n aria-labelledby={t(\"scopes\")}\n validated={errors.scopes ? \"error\" : \"default\"}\n isDisabled={!!preSelected}\n typeAheadAriaLabel={t(\"scopes\")}\n >\n {toSelectOptions(scopes)}\n </KeycloakSelect>\n )}\n />\n );\n};\n","import type PolicyRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport { DecisionStrategy } from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport {\n FormErrorText,\n HelpItem,\n SelectVariant,\n TextAreaControl,\n TextControl,\n useAlerts,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n FormGroup,\n PageSection,\n Radio,\n Switch,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { Controller, FormProvider, useForm, useWatch } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { useConfirmDialog } from \"../../components/confirm-dialog/ConfirmDialog\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { KeycloakSpinner } from \"@keycloak/keycloak-ui-shared\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useAccess } from \"../../context/access/Access\";\nimport { toUpperCase } from \"../../util\";\nimport { useParams } from \"../../utils/useParams\";\nimport { toAuthorizationTab } from \"../routes/AuthenticationTab\";\nimport type { NewPermissionParams } from \"../routes/NewPermission\";\nimport {\n PermissionDetailsParams,\n toPermissionDetails,\n} from \"../routes/PermissionDetails\";\nimport { ResourcesPolicySelect } from \"./ResourcesPolicySelect\";\nimport { ScopeSelect } from \"./ScopeSelect\";\n\ntype FormFields = PolicyRepresentation & {\n resourceType: string;\n};\n\nexport default function PermissionDetails() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n\n const form = useForm<FormFields>({\n mode: \"onChange\",\n });\n const {\n control,\n reset,\n formState: { errors },\n handleSubmit,\n } = form;\n\n const navigate = useNavigate();\n const { id, realm, permissionType, permissionId, selectedId } = useParams<\n NewPermissionParams & PermissionDetailsParams\n >();\n\n const { addAlert, addError } = useAlerts();\n const [permission, setPermission] = useState<PolicyRepresentation>();\n const [applyToResourceTypeFlag, setApplyToResourceTypeFlag] = useState(false);\n const { hasAccess } = useAccess();\n\n const isDisabled = !hasAccess(\"manage-authorization\");\n\n useFetch(\n async () => {\n if (!permissionId) {\n return {};\n }\n const [permission, resources, policies, scopes] = await Promise.all([\n adminClient.clients.findOnePermission({\n id,\n type: permissionType,\n permissionId,\n }),\n adminClient.clients.getAssociatedResources({\n id,\n permissionId,\n }),\n adminClient.clients.getAssociatedPolicies({\n id,\n permissionId,\n }),\n adminClient.clients.getAssociatedScopes({\n id,\n permissionId,\n }),\n ]);\n\n if (!permission) {\n throw new Error(t(\"notFound\"));\n }\n\n return {\n permission,\n resources: resources.map((r) => r._id),\n policies: policies.map((p) => p.id!),\n scopes: scopes.map((s) => s.id!),\n };\n },\n ({ permission, resources, policies, scopes }) => {\n reset({ ...permission, resources, policies, scopes });\n if (permission && \"resourceType\" in permission) {\n setApplyToResourceTypeFlag(\n !!(permission as { resourceType: string }).resourceType,\n );\n }\n setPermission({ ...permission, resources, policies });\n },\n [],\n );\n\n const save = async (permission: PolicyRepresentation) => {\n try {\n if (permissionId) {\n await adminClient.clients.updatePermission(\n { id, type: permissionType, permissionId },\n permission,\n );\n } else {\n const result = await adminClient.clients.createPermission(\n { id, type: permissionType },\n permission,\n );\n setPermission(result);\n navigate(\n toPermissionDetails({\n realm,\n id,\n permissionType,\n permissionId: result.id!,\n }),\n );\n }\n addAlert(\n t((permissionId ? \"update\" : \"create\") + \"PermissionSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"permissionSaveError\", error);\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"deletePermission\",\n messageKey: t(\"deletePermissionConfirm\", {\n permission: permission?.name,\n }),\n continueButtonVariant: ButtonVariant.danger,\n continueButtonLabel: \"confirm\",\n onConfirm: async () => {\n try {\n await adminClient.clients.delPermission({\n id,\n type: permissionType,\n permissionId: permissionId,\n });\n addAlert(t(\"permissionDeletedSuccess\"), AlertVariant.success);\n navigate(\n toAuthorizationTab({ realm, clientId: id, tab: \"permissions\" }),\n );\n } catch (error) {\n addError(\"permissionDeletedError\", error);\n }\n },\n });\n\n const resourcesIds = useWatch({\n control,\n name: \"resources\",\n defaultValue: [],\n });\n\n if (!permission) {\n return <KeycloakSpinner />;\n }\n\n return (\n <>\n <DeleteConfirm />\n <ViewHeader\n titleKey={\n permissionId\n ? permission.name!\n : `create${toUpperCase(permissionType)}BasedPermission`\n }\n dropdownItems={\n permissionId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-resource\"\n isDisabled={isDisabled}\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n onSubmit={handleSubmit(save)}\n >\n <FormProvider {...form}>\n <TextControl\n name=\"name\"\n label={t(\"name\")}\n labelIcon={t(\"permissionName\")}\n rules={{\n required: t(\"required\"),\n }}\n />\n <TextAreaControl\n name=\"description\"\n label={t(\"description\")}\n labelIcon={t(\"permissionDescription\")}\n rules={{\n maxLength: {\n value: 255,\n message: t(\"maxLength\", { length: 255 }),\n },\n }}\n />\n <FormGroup\n label={t(\"applyToResourceTypeFlag\")}\n fieldId=\"applyToResourceTypeFlag\"\n labelIcon={\n <HelpItem\n helpText={t(\"applyToResourceTypeFlagHelp\")}\n fieldLabelId=\"applyToResourceTypeFlag\"\n />\n }\n >\n <Switch\n id=\"applyToResourceTypeFlag\"\n name=\"applyToResourceTypeFlag\"\n label={t(\"on\")}\n labelOff={t(\"off\")}\n isChecked={applyToResourceTypeFlag}\n onChange={(_event, val) => setApplyToResourceTypeFlag(val)}\n aria-label={t(\"applyToResourceTypeFlag\")}\n />\n </FormGroup>\n {applyToResourceTypeFlag ? (\n <TextControl\n name=\"resourceType\"\n label={t(\"resourceType\")}\n labelIcon={t(\"resourceTypeHelp\")}\n rules={{\n required: {\n value: permissionType === \"scope\" ? true : false,\n message: t(\"required\"),\n },\n }}\n />\n ) : (\n <FormGroup\n label={t(\"resource\")}\n fieldId=\"resources\"\n labelIcon={\n <HelpItem\n helpText={t(\"permissionResources\")}\n fieldLabelId=\"resources\"\n />\n }\n isRequired={permissionType !== \"scope\"}\n >\n <ResourcesPolicySelect\n name=\"resources\"\n clientId={id}\n permissionId={permissionId}\n preSelected={\n permissionType === \"scope\" ? undefined : selectedId\n }\n variant={\n permissionType === \"scope\"\n ? SelectVariant.typeahead\n : SelectVariant.typeaheadMulti\n }\n isRequired={permissionType !== \"scope\"}\n />\n {errors.resources && <FormErrorText message={t(\"required\")} />}\n </FormGroup>\n )}\n {permissionType === \"scope\" && (\n <FormGroup\n label={t(\"authorizationScopes\")}\n fieldId=\"scopes\"\n labelIcon={\n <HelpItem\n helpText={t(\"permissionScopesHelp\")}\n fieldLabelId=\"scopesSelect\"\n />\n }\n isRequired\n >\n <ScopeSelect\n clientId={id}\n resourceId={resourcesIds?.[0]}\n preSelected={selectedId}\n />\n {errors.scopes && <FormErrorText message={t(\"required\")} />}\n </FormGroup>\n )}\n <FormGroup\n label={t(\"policies\")}\n fieldId=\"policies\"\n labelIcon={\n <HelpItem\n helpText={t(\"permissionPoliciesHelp\")}\n fieldLabelId=\"policies\"\n />\n }\n >\n <ResourcesPolicySelect\n name=\"policies\"\n clientId={id}\n permissionId={permissionId}\n />\n </FormGroup>\n <FormGroup\n label={t(\"decisionStrategy\")}\n labelIcon={\n <HelpItem\n helpText={t(\"permissionDecisionStrategyHelp\")}\n fieldLabelId=\"decisionStrategy\"\n />\n }\n fieldId=\"policyEnforcementMode\"\n hasNoPaddingTop\n >\n <Controller\n name=\"decisionStrategy\"\n data-testid=\"decisionStrategy\"\n defaultValue={DecisionStrategy.UNANIMOUS}\n control={control}\n render={({ field }) => (\n <>\n {Object.values(DecisionStrategy).map((strategy) => (\n <Radio\n id={strategy}\n key={strategy}\n data-testid={strategy}\n isChecked={field.value === strategy}\n isDisabled={isDisabled}\n name=\"decisionStrategies\"\n onChange={() => field.onChange(strategy)}\n label={t(`decisionStrategies.${strategy}`)}\n className=\"pf-v5-u-mb-md\"\n />\n ))}\n </>\n )}\n />\n </FormGroup>\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toAuthorizationTab({\n realm,\n clientId: id,\n tab: \"permissions\",\n })}\n ></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n </div>\n </ActionGroup>\n </FormProvider>\n </FormAccess>\n </PageSection>\n </>\n );\n}\n"],"names":["ScopeSelect","clientId","resourceId","preSelected","adminClient","useAdminClient","t","useTranslation","control","getValues","setValue","errors","useFormContext","scopes","setScopes","useState","selectedScopes","setSelectedScopes","search","setSearch","open","setOpen","firstUpdate","useRef","values","toSelectOptions","scope","jsx","SelectOption","useFetch","s","Controller","value","field","KeycloakSelect","SelectVariant","val","filter","selectedValue","option","changedValue","p","PermissionDetails","form","useForm","reset","handleSubmit","navigate","useNavigate","id","realm","permissionType","permissionId","selectedId","useParams","addAlert","addError","useAlerts","permission","setPermission","applyToResourceTypeFlag","setApplyToResourceTypeFlag","hasAccess","useAccess","isDisabled","resources","policies","r","save","result","toPermissionDetails","AlertVariant","error","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","ButtonVariant","toAuthorizationTab","resourcesIds","useWatch","jsxs","Fragment","ViewHeader","toUpperCase","DropdownItem","PageSection","FormAccess","FormProvider","TextControl","TextAreaControl","FormGroup","HelpItem","Switch","_event","ResourcesPolicySelect","FormErrorText","DecisionStrategy","strategy","Radio","ActionGroup","Button","props","Link","KeycloakSpinner"],"mappings":";;;;;AAkBO,MAAMA,KAAc,CAAC;AAAA,EAC1B,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,aAAAC;AACF,MAAwB;AACtB,QAAM,EAAE,aAAAC,EAAA,IAAgBC,EAAA,GAElB,EAAE,GAAAC,EAAA,IAAMC,EAAA,GAER;AAAA,IACJ,SAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,WAAW,EAAE,QAAAC,EAAA;AAAA,EAAO,IAClBC,EAAA,GAEE,CAACC,GAAQC,CAAS,IAAIC,EAAgC,CAAA,CAAE,GACxD,CAACC,GAAgBC,CAAiB,IAAIF;AAAA,IAC1C,CAAA;AAAA,EAAC,GAEG,CAACG,GAAQC,CAAS,IAAIJ,EAAS,EAAE,GACjC,CAACK,GAAMC,CAAO,IAAIN,EAAS,EAAK,GAChCO,IAAcC,GAAO,EAAI,GAEzBC,IAA+Bf,EAAU,QAAQ,GAEjDgB,IAAkB,CAACZ,MACvBA,EAAO,IAAI,CAACa,MACV,gBAAAC,EAACC,GAAA,EAA4B,OAAOF,GACjC,UAAAA,EAAM,QADUA,EAAM,EAEzB,CACD;AAEHG,SAAAA;AAAAA,IACE,YACO3B,KASDA,KAAc,CAACoB,EAAY,WAC7BZ,EAAS,UAAU,EAAE,GAGvBY,EAAY,UAAU,IACflB,EAAY,QAAQ,qBAAqB;AAAA,MAC9C,IAAIH;AAAA,MACJ,cAAcC;AAAA,IAAA,CACf,KAhBQE,EAAY,QAAQ;AAAA,MACzB,OAAO;AAAA,QACL,EAAE,IAAIH,GAAU,MAAM,GAAA;AAAA,QACtBiB,MAAW,KAAK,OAAO,EAAE,MAAMA,EAAA;AAAA,MAAO;AAAA,IACxC;AAAA,IAcN,CAACL,MAAW;AACV,MAAAC,EAAUD,CAAM,GACXK,KACHD;AAAA,QACEJ,EAAO,OAAO,CAACiB,MAA2BN,GAAQ,SAASM,EAAE,EAAG,CAAC;AAAA,MAAA;AAAA,IAEvE;AAAA,IACA,CAAC5B,GAAYgB,CAAM;AAAA,EAAA,GAInB,gBAAAS;AAAA,IAACI;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAc5B,IAAc,CAACA,CAAW,IAAI,CAAA;AAAA,MAC5C,SAAAK;AAAA,MACA,OAAO,EAAE,UAAU,CAACwB,MAAUA,EAAM,SAAS,EAAA;AAAA,MAC7C,QAAQ,CAAC,EAAE,OAAAC,EAAA,MACT,gBAAAN;AAAA,QAACO;AAAAA,QAAA;AAAA,UACC,UAAS;AAAA,UACT,SAASC,EAAc;AAAA,UACvB,UAAU,CAACC,MAAQf,EAAQe,CAAG;AAAA,UAC9B,UAAU,CAACC,OACTlB,EAAUkB,CAAM,GACTZ,EAAgBZ,CAAM;AAAA,UAE/B,SAAS,MAAM;AACb,YAAAoB,EAAM,SAAS,EAAE,GACjBd,EAAU,EAAE;AAAA,UACd;AAAA,UACA,YAAYH,EAAe,IAAI,CAACc,MAAMA,EAAE,IAAK;AAAA,UAC7C,UAAU,CAACQ,MAAkB;AAC3B,kBAAMC,IACJ,OAAOD,KAAkB,WACrBtB,EAAe,KAAK,CAACc,MAAMA,EAAE,SAASQ,CAAa,IAClDA,GACDE,IAAexB,EAAe,KAAK,CAACyB,MAAMA,EAAE,OAAOF,EAAO,EAAE,IAC9DvB,EAAe,OAAO,CAACyB,MAAMA,EAAE,OAAOF,EAAO,EAAE,IAC/C,CAAC,GAAGvB,GAAgBuB,CAAM;AAE9B,YAAAN,EAAM,SAASO,EAAa,IAAI,CAACV,MAAMA,EAAE,EAAE,CAAC,GAC5Cb,EAAkBuB,CAAY,GAC9BrB,EAAU,EAAE;AAAA,UACd;AAAA,UACA,QAAQC;AAAA,UACR,mBAAiBd,EAAE,QAAQ;AAAA,UAC3B,WAAWK,EAAO,SAAS,UAAU;AAAA,UACrC,YAAY,CAAC,CAACR;AAAA,UACd,oBAAoBG,EAAE,QAAQ;AAAA,UAE7B,YAAgBO,CAAM;AAAA,QAAA;AAAA,MAAA;AAAA,IACzB;AAAA,EAAA;AAIR;AC/EA,SAAwB6B,KAAoB;AAC1C,QAAM,EAAE,aAAAtC,EAAA,IAAgBC,EAAA,GAElB,EAAE,GAAAC,EAAA,IAAMC,EAAA,GAERoC,IAAOC,EAAoB;AAAA,IAC/B,MAAM;AAAA,EAAA,CACP,GACK;AAAA,IACJ,SAAApC;AAAA,IACA,OAAAqC;AAAA,IACA,WAAW,EAAE,QAAAlC,EAAA;AAAA,IACb,cAAAmC;AAAA,EAAA,IACEH,GAEEI,IAAWC,GAAA,GACX,EAAE,IAAAC,GAAI,OAAAC,GAAO,gBAAAC,GAAgB,cAAAC,GAAc,YAAAC,EAAA,IAAeC,EAAA,GAI1D,EAAE,UAAAC,GAAU,UAAAC,EAAA,IAAaC,GAAA,GACzB,CAACC,GAAYC,CAAa,IAAI5C,EAAA,GAC9B,CAAC6C,GAAyBC,CAA0B,IAAI9C,EAAS,EAAK,GACtE,EAAE,WAAA+C,EAAA,IAAcC,GAAA,GAEhBC,IAAa,CAACF,EAAU,sBAAsB;AAEpDjC,EAAAA;AAAAA,IACE,YAAY;AACV,UAAI,CAACuB;AACH,eAAO,CAAA;AAET,YAAM,CAACM,GAAYO,GAAWC,GAAUrD,CAAM,IAAI,MAAM,QAAQ,IAAI;AAAA,QAClET,EAAY,QAAQ,kBAAkB;AAAA,UACpC,IAAA6C;AAAA,UACA,MAAME;AAAA,UACN,cAAAC;AAAA,QAAA,CACD;AAAA,QACDhD,EAAY,QAAQ,uBAAuB;AAAA,UACzC,IAAA6C;AAAA,UACA,cAAAG;AAAA,QAAA,CACD;AAAA,QACDhD,EAAY,QAAQ,sBAAsB;AAAA,UACxC,IAAA6C;AAAA,UACA,cAAAG;AAAA,QAAA,CACD;AAAA,QACDhD,EAAY,QAAQ,oBAAoB;AAAA,UACtC,IAAA6C;AAAA,UACA,cAAAG;AAAA,QAAA,CACD;AAAA,MAAA,CACF;AAED,UAAI,CAACM;AACH,cAAM,IAAI,MAAMpD,EAAE,UAAU,CAAC;AAG/B,aAAO;AAAA,QACL,YAAAoD;AAAAA,QACA,WAAWO,EAAU,IAAI,CAACE,MAAMA,EAAE,GAAG;AAAA,QACrC,UAAUD,EAAS,IAAI,CAACzB,MAAMA,EAAE,EAAG;AAAA,QACnC,QAAQ5B,EAAO,IAAI,CAACiB,MAAMA,EAAE,EAAG;AAAA,MAAA;AAAA,IAEnC;AAAA,IACA,CAAC,EAAE,YAAA4B,GAAY,WAAAO,GAAW,UAAAC,GAAU,QAAArD,QAAa;AAC/C,MAAAgC,EAAM,EAAE,GAAGa,GAAY,WAAAO,GAAW,UAAAC,GAAU,QAAArD,GAAQ,GAChD6C,KAAc,kBAAkBA,KAClCG;AAAA,QACE,CAAC,CAAEH,EAAwC;AAAA,MAAA,GAG/CC,EAAc,EAAE,GAAGD,GAAY,WAAAO,GAAW,UAAAC,GAAU;AAAA,IACtD;AAAA,IACA,CAAA;AAAA,EAAC;AAGH,QAAME,IAAO,OAAOV,MAAqC;AACvD,QAAI;AACF,UAAIN;AACF,cAAMhD,EAAY,QAAQ;AAAA,UACxB,EAAE,IAAA6C,GAAI,MAAME,GAAgB,cAAAC,EAAA;AAAA,UAC5BM;AAAAA,QAAA;AAAA,WAEG;AACL,cAAMW,IAAS,MAAMjE,EAAY,QAAQ;AAAA,UACvC,EAAE,IAAA6C,GAAI,MAAME,EAAA;AAAA,UACZO;AAAAA,QAAA;AAEF,QAAAC,EAAcU,CAAM,GACpBtB;AAAA,UACEuB,GAAoB;AAAA,YAClB,OAAApB;AAAA,YACA,IAAAD;AAAA,YACA,gBAAAE;AAAA,YACA,cAAckB,EAAO;AAAA,UAAA,CACtB;AAAA,QAAA;AAAA,MAEL;AACA,MAAAd;AAAA,QACEjD,GAAG8C,IAAe,WAAW,YAAY,mBAAmB;AAAA,QAC5DmB,EAAa;AAAA,MAAA;AAAA,IAEjB,SAASC,GAAO;AACd,MAAAhB,EAAS,uBAAuBgB,CAAK;AAAA,IACvC;AAAA,EACF,GAEM,CAACC,GAAoBC,CAAa,IAAIC,GAAiB;AAAA,IAC3D,UAAU;AAAA,IACV,YAAYrE,EAAE,2BAA2B;AAAA,MACvC,YAAYoD,GAAY;AAAA,IAAA,CACzB;AAAA,IACD,uBAAuBkB,EAAc;AAAA,IACrC,qBAAqB;AAAA,IACrB,WAAW,YAAY;AACrB,UAAI;AACF,cAAMxE,EAAY,QAAQ,cAAc;AAAA,UACtC,IAAA6C;AAAA,UACA,MAAME;AAAA,UACN,cAAAC;AAAA,QAAA,CACD,GACDG,EAASjD,EAAE,0BAA0B,GAAGiE,EAAa,OAAO,GAC5DxB;AAAA,UACE8B,EAAmB,EAAE,OAAA3B,GAAO,UAAUD,GAAI,KAAK,eAAe;AAAA,QAAA;AAAA,MAElE,SAASuB,GAAO;AACd,QAAAhB,EAAS,0BAA0BgB,CAAK;AAAA,MAC1C;AAAA,IACF;AAAA,EAAA,CACD,GAEKM,IAAeC,GAAS;AAAA,IAC5B,SAAAvE;AAAA,IACA,MAAM;AAAA,IACN,cAAc,CAAA;AAAA,EAAC,CAChB;AAED,SAAKkD,IAKH,gBAAAsB,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAtD,EAAC+C,GAAA,EAAc;AAAA,IACf,gBAAA/C;AAAA,MAACuD;AAAA,MAAA;AAAA,QACC,UACE9B,IACIM,EAAW,OACX,SAASyB,GAAYhC,CAAc,CAAC;AAAA,QAE1C,eACEC,IACI;AAAA,UACE,gBAAAzB;AAAA,YAACyD;AAAA,YAAA;AAAA,cAEC,eAAY;AAAA,cACZ,YAAApB;AAAA,cACA,SAAS,MAAMS,EAAA;AAAA,cAEd,YAAE,QAAQ;AAAA,YAAA;AAAA,YALP;AAAA,UAAA;AAAA,QAMN,IAEF;AAAA,MAAA;AAAA,IAAA;AAAA,IAGR,gBAAA9C,EAAC0D,IAAA,EAAY,SAAQ,SACnB,UAAA,gBAAA1D;AAAA,MAAC2D;AAAA,MAAA;AAAA,QACC,cAAY;AAAA,QACZ,MAAK;AAAA,QACL,UAAUxC,EAAasB,CAAI;AAAA,QAE3B,UAAA,gBAAAY,EAACO,IAAA,EAAc,GAAG5C,GAChB,UAAA;AAAA,UAAA,gBAAAhB;AAAA,YAAC6D;AAAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAOlF,EAAE,MAAM;AAAA,cACf,WAAWA,EAAE,gBAAgB;AAAA,cAC7B,OAAO;AAAA,gBACL,UAAUA,EAAE,UAAU;AAAA,cAAA;AAAA,YACxB;AAAA,UAAA;AAAA,UAEF,gBAAAqB;AAAA,YAAC8D;AAAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAOnF,EAAE,aAAa;AAAA,cACtB,WAAWA,EAAE,uBAAuB;AAAA,cACpC,OAAO;AAAA,gBACL,WAAW;AAAA,kBACT,OAAO;AAAA,kBACP,SAASA,EAAE,aAAa,EAAE,QAAQ,KAAK;AAAA,gBAAA;AAAA,cACzC;AAAA,YACF;AAAA,UAAA;AAAA,UAEF,gBAAAqB;AAAA,YAAC+D;AAAA,YAAA;AAAA,cACC,OAAOpF,EAAE,yBAAyB;AAAA,cAClC,SAAQ;AAAA,cACR,WACE,gBAAAqB;AAAA,gBAACgE;AAAAA,gBAAA;AAAA,kBACC,UAAUrF,EAAE,6BAA6B;AAAA,kBACzC,cAAa;AAAA,gBAAA;AAAA,cAAA;AAAA,cAIjB,UAAA,gBAAAqB;AAAA,gBAACiE;AAAA,gBAAA;AAAA,kBACC,IAAG;AAAA,kBACH,MAAK;AAAA,kBACL,OAAOtF,EAAE,IAAI;AAAA,kBACb,UAAUA,EAAE,KAAK;AAAA,kBACjB,WAAWsD;AAAA,kBACX,UAAU,CAACiC,GAAQzD,MAAQyB,EAA2BzB,CAAG;AAAA,kBACzD,cAAY9B,EAAE,yBAAyB;AAAA,gBAAA;AAAA,cAAA;AAAA,YACzC;AAAA,UAAA;AAAA,UAEDsD,IACC,gBAAAjC;AAAA,YAAC6D;AAAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAOlF,EAAE,cAAc;AAAA,cACvB,WAAWA,EAAE,kBAAkB;AAAA,cAC/B,OAAO;AAAA,gBACL,UAAU;AAAA,kBACR,OAAO6C,MAAmB;AAAA,kBAC1B,SAAS7C,EAAE,UAAU;AAAA,gBAAA;AAAA,cACvB;AAAA,YACF;AAAA,UAAA,IAGF,gBAAA0E;AAAA,YAACU;AAAA,YAAA;AAAA,cACC,OAAOpF,EAAE,UAAU;AAAA,cACnB,SAAQ;AAAA,cACR,WACE,gBAAAqB;AAAA,gBAACgE;AAAAA,gBAAA;AAAA,kBACC,UAAUrF,EAAE,qBAAqB;AAAA,kBACjC,cAAa;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGjB,YAAY6C,MAAmB;AAAA,cAE/B,UAAA;AAAA,gBAAA,gBAAAxB;AAAA,kBAACmE;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,UAAU7C;AAAA,oBACV,cAAAG;AAAA,oBACA,aACED,MAAmB,UAAU,SAAYE;AAAA,oBAE3C,SACEF,MAAmB,UACfhB,EAAc,YACdA,EAAc;AAAA,oBAEpB,YAAYgB,MAAmB;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEhCxC,EAAO,aAAa,gBAAAgB,EAACoE,KAAc,SAASzF,EAAE,UAAU,EAAA,CAAG;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAG/D6C,MAAmB,WAClB,gBAAA6B;AAAA,YAACU;AAAA,YAAA;AAAA,cACC,OAAOpF,EAAE,qBAAqB;AAAA,cAC9B,SAAQ;AAAA,cACR,WACE,gBAAAqB;AAAA,gBAACgE;AAAAA,gBAAA;AAAA,kBACC,UAAUrF,EAAE,sBAAsB;AAAA,kBAClC,cAAa;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGjB,YAAU;AAAA,cAEV,UAAA;AAAA,gBAAA,gBAAAqB;AAAA,kBAAC3B;AAAA,kBAAA;AAAA,oBACC,UAAUiD;AAAA,oBACV,YAAY6B,IAAe,CAAC;AAAA,oBAC5B,aAAazB;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEd1C,EAAO,UAAU,gBAAAgB,EAACoE,KAAc,SAASzF,EAAE,UAAU,EAAA,CAAG;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAG7D,gBAAAqB;AAAA,YAAC+D;AAAA,YAAA;AAAA,cACC,OAAOpF,EAAE,UAAU;AAAA,cACnB,SAAQ;AAAA,cACR,WACE,gBAAAqB;AAAA,gBAACgE;AAAAA,gBAAA;AAAA,kBACC,UAAUrF,EAAE,wBAAwB;AAAA,kBACpC,cAAa;AAAA,gBAAA;AAAA,cAAA;AAAA,cAIjB,UAAA,gBAAAqB;AAAA,gBAACmE;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,UAAU7C;AAAA,kBACV,cAAAG;AAAA,gBAAA;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,UAEF,gBAAAzB;AAAA,YAAC+D;AAAA,YAAA;AAAA,cACC,OAAOpF,EAAE,kBAAkB;AAAA,cAC3B,WACE,gBAAAqB;AAAA,gBAACgE;AAAAA,gBAAA;AAAA,kBACC,UAAUrF,EAAE,gCAAgC;AAAA,kBAC5C,cAAa;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGjB,SAAQ;AAAA,cACR,iBAAe;AAAA,cAEf,UAAA,gBAAAqB;AAAA,gBAACI;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,eAAY;AAAA,kBACZ,cAAciE,EAAiB;AAAA,kBAC/B,SAAAxF;AAAA,kBACA,QAAQ,CAAC,EAAE,OAAAyB,EAAA,MACT,gBAAAN,EAAAsD,GAAA,EACG,UAAA,OAAO,OAAOe,CAAgB,EAAE,IAAI,CAACC,MACpC,gBAAAtE;AAAA,oBAACuE;AAAA,oBAAA;AAAA,sBACC,IAAID;AAAA,sBAEJ,eAAaA;AAAA,sBACb,WAAWhE,EAAM,UAAUgE;AAAA,sBAC3B,YAAAjC;AAAA,sBACA,MAAK;AAAA,sBACL,UAAU,MAAM/B,EAAM,SAASgE,CAAQ;AAAA,sBACvC,OAAO3F,EAAE,sBAAsB2F,CAAQ,EAAE;AAAA,sBACzC,WAAU;AAAA,oBAAA;AAAA,oBAPLA;AAAA,kBAAA,CASR,EAAA,CACH;AAAA,gBAAA;AAAA,cAAA;AAAA,YAEJ;AAAA,UAAA;AAAA,UAEF,gBAAAtE,EAACwE,IAAA,EACC,UAAA,gBAAAnB,EAAC,OAAA,EAAI,WAAU,iBACb,UAAA;AAAA,YAAA,gBAAArD;AAAA,cAACyE;AAAA,cAAA;AAAA,gBACC,SAASxB,EAAc;AAAA,gBACvB,MAAK;AAAA,gBACL,eAAY;AAAA,gBAEX,YAAE,MAAM;AAAA,cAAA;AAAA,YAAA;AAAA,YAGX,gBAAAjD;AAAA,cAACyE;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,eAAY;AAAA,gBACZ,WAAW,CAACC,MACV,gBAAA1E;AAAA,kBAAC2E;AAAA,kBAAA;AAAA,oBACE,GAAGD;AAAA,oBACJ,IAAIxB,EAAmB;AAAA,sBACrB,OAAA3B;AAAA,sBACA,UAAUD;AAAA,sBACV,KAAK;AAAA,oBAAA,CACN;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAIJ,YAAE,QAAQ;AAAA,cAAA;AAAA,YAAA;AAAA,UACb,EAAA,CACF,EAAA,CACF;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA,EACF,CACF;AAAA,EAAA,GACF,sBAxNQsD,IAAA,EAAgB;AA0N5B;"}
1
+ {"version":3,"file":"PermissionDetails-DxeSTYxA.js","sources":["../src/clients/authorization/ScopeSelect.tsx","../src/clients/authorization/PermissionDetails.tsx"],"sourcesContent":["import type ScopeRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/scopeRepresentation\";\nimport {\n KeycloakSelect,\n SelectVariant,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport { SelectOption } from \"@patternfly/react-core\";\nimport { useRef, useState } from \"react\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../../admin-client\";\n\ntype ScopeSelectProps = {\n clientId: string;\n resourceId?: string;\n preSelected?: string;\n};\n\nexport const ScopeSelect = ({\n clientId,\n resourceId,\n preSelected,\n}: ScopeSelectProps) => {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n\n const {\n control,\n getValues,\n setValue,\n formState: { errors },\n } = useFormContext();\n\n const [scopes, setScopes] = useState<ScopeRepresentation[]>([]);\n const [selectedScopes, setSelectedScopes] = useState<ScopeRepresentation[]>(\n [],\n );\n const [search, setSearch] = useState(\"\");\n const [open, setOpen] = useState(false);\n const firstUpdate = useRef(true);\n\n const values: string[] | undefined = getValues(\"scopes\");\n\n const toSelectOptions = (scopes: ScopeRepresentation[]) =>\n scopes.map((scope) => (\n <SelectOption key={scope.id} value={scope}>\n {scope.name}\n </SelectOption>\n ));\n\n useFetch(\n async (): Promise<ScopeRepresentation[]> => {\n if (!resourceId) {\n return adminClient.clients.listAllScopes(\n Object.assign(\n { id: clientId, deep: false },\n search === \"\" ? null : { name: search },\n ),\n );\n }\n\n if (resourceId && !firstUpdate.current) {\n setValue(\"scopes\", []);\n }\n\n firstUpdate.current = false;\n return adminClient.clients.listScopesByResource({\n id: clientId,\n resourceName: resourceId,\n });\n },\n (scopes) => {\n setScopes(scopes);\n if (!search)\n setSelectedScopes(\n scopes.filter((s: ScopeRepresentation) => values?.includes(s.id!)),\n );\n },\n [resourceId, search],\n );\n\n return (\n <Controller\n name=\"scopes\"\n defaultValue={preSelected ? [preSelected] : []}\n control={control}\n rules={{ validate: (value) => value.length > 0 }}\n render={({ field }) => (\n <KeycloakSelect\n toggleId=\"scopes\"\n variant={SelectVariant.typeaheadMulti}\n onToggle={(val) => setOpen(val)}\n onFilter={(filter) => {\n setSearch(filter);\n return toSelectOptions(scopes);\n }}\n onClear={() => {\n field.onChange([]);\n setSearch(\"\");\n }}\n selections={selectedScopes.map((s) => s.name!)}\n onSelect={(selectedValue) => {\n const option =\n typeof selectedValue === \"string\"\n ? selectedScopes.find((s) => s.name === selectedValue)!\n : (selectedValue as ScopeRepresentation);\n const changedValue = selectedScopes.find((p) => p.id === option.id)\n ? selectedScopes.filter((p) => p.id !== option.id)\n : [...selectedScopes, option];\n\n field.onChange(changedValue.map((s) => s.id));\n setSelectedScopes(changedValue);\n setSearch(\"\");\n }}\n isOpen={open}\n aria-labelledby={t(\"scopes\")}\n validated={errors.scopes ? \"error\" : \"default\"}\n isDisabled={!!preSelected}\n typeAheadAriaLabel={t(\"scopes\")}\n >\n {toSelectOptions(scopes)}\n </KeycloakSelect>\n )}\n />\n );\n};\n","import type PolicyRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport { DecisionStrategy } from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport {\n FormErrorText,\n HelpItem,\n SelectVariant,\n TextAreaControl,\n TextControl,\n useAlerts,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n FormGroup,\n PageSection,\n Radio,\n Switch,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { Controller, FormProvider, useForm, useWatch } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { useConfirmDialog } from \"../../components/confirm-dialog/ConfirmDialog\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { KeycloakSpinner } from \"@keycloak/keycloak-ui-shared\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useAccess } from \"../../context/access/Access\";\nimport { toUpperCase } from \"../../util\";\nimport { useParams } from \"../../utils/useParams\";\nimport { toAuthorizationTab } from \"../routes/AuthenticationTab\";\nimport type { NewPermissionParams } from \"../routes/NewPermission\";\nimport {\n PermissionDetailsParams,\n toPermissionDetails,\n} from \"../routes/PermissionDetails\";\nimport { ResourcesPolicySelect } from \"./ResourcesPolicySelect\";\nimport { ScopeSelect } from \"./ScopeSelect\";\n\ntype FormFields = PolicyRepresentation & {\n resourceType: string;\n};\n\nexport default function PermissionDetails() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n\n const form = useForm<FormFields>({\n mode: \"onChange\",\n });\n const {\n control,\n reset,\n formState: { errors },\n handleSubmit,\n } = form;\n\n const navigate = useNavigate();\n const { id, realm, permissionType, permissionId, selectedId } = useParams<\n NewPermissionParams & PermissionDetailsParams\n >();\n\n const { addAlert, addError } = useAlerts();\n const [permission, setPermission] = useState<PolicyRepresentation>();\n const [applyToResourceTypeFlag, setApplyToResourceTypeFlag] = useState(false);\n const { hasAccess } = useAccess();\n\n const isDisabled = !hasAccess(\"manage-authorization\");\n\n useFetch(\n async () => {\n if (!permissionId) {\n return {};\n }\n const [permission, resources, policies, scopes] = await Promise.all([\n adminClient.clients.findOnePermission({\n id,\n type: permissionType,\n permissionId,\n }),\n adminClient.clients.getAssociatedResources({\n id,\n permissionId,\n }),\n adminClient.clients.getAssociatedPolicies({\n id,\n permissionId,\n }),\n adminClient.clients.getAssociatedScopes({\n id,\n permissionId,\n }),\n ]);\n\n if (!permission) {\n throw new Error(t(\"notFound\"));\n }\n\n return {\n permission,\n resources: resources.map((r) => r._id),\n policies: policies.map((p) => p.id!),\n scopes: scopes.map((s) => s.id!),\n };\n },\n ({ permission, resources, policies, scopes }) => {\n reset({ ...permission, resources, policies, scopes });\n if (permission && \"resourceType\" in permission) {\n setApplyToResourceTypeFlag(\n !!(permission as { resourceType: string }).resourceType,\n );\n }\n setPermission({ ...permission, resources, policies });\n },\n [],\n );\n\n const save = async (permission: PolicyRepresentation) => {\n try {\n if (permissionId) {\n await adminClient.clients.updatePermission(\n { id, type: permissionType, permissionId },\n permission,\n );\n } else {\n const result = await adminClient.clients.createPermission(\n { id, type: permissionType },\n permission,\n );\n setPermission(result);\n navigate(\n toPermissionDetails({\n realm,\n id,\n permissionType,\n permissionId: result.id!,\n }),\n );\n }\n addAlert(\n t((permissionId ? \"update\" : \"create\") + \"PermissionSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"permissionSaveError\", error);\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"deletePermission\",\n messageKey: t(\"deletePermissionConfirm\", {\n permission: permission?.name,\n }),\n continueButtonVariant: ButtonVariant.danger,\n continueButtonLabel: \"confirm\",\n onConfirm: async () => {\n try {\n await adminClient.clients.delPermission({\n id,\n type: permissionType,\n permissionId: permissionId,\n });\n addAlert(t(\"permissionDeletedSuccess\"), AlertVariant.success);\n navigate(\n toAuthorizationTab({ realm, clientId: id, tab: \"permissions\" }),\n );\n } catch (error) {\n addError(\"permissionDeletedError\", error);\n }\n },\n });\n\n const resourcesIds = useWatch({\n control,\n name: \"resources\",\n defaultValue: [],\n });\n\n if (!permission) {\n return <KeycloakSpinner />;\n }\n\n return (\n <>\n <DeleteConfirm />\n <ViewHeader\n titleKey={\n permissionId\n ? permission.name!\n : `create${toUpperCase(permissionType)}BasedPermission`\n }\n dropdownItems={\n permissionId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-resource\"\n isDisabled={isDisabled}\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n onSubmit={handleSubmit(save)}\n >\n <FormProvider {...form}>\n <TextControl\n name=\"name\"\n label={t(\"name\")}\n labelIcon={t(\"permissionName\")}\n rules={{\n required: t(\"required\"),\n }}\n />\n <TextAreaControl\n name=\"description\"\n label={t(\"description\")}\n labelIcon={t(\"permissionDescription\")}\n rules={{\n maxLength: {\n value: 255,\n message: t(\"maxLength\", { length: 255 }),\n },\n }}\n />\n <FormGroup\n label={t(\"applyToResourceTypeFlag\")}\n fieldId=\"applyToResourceTypeFlag\"\n labelIcon={\n <HelpItem\n helpText={t(\"applyToResourceTypeFlagHelp\")}\n fieldLabelId=\"applyToResourceTypeFlag\"\n />\n }\n >\n <Switch\n id=\"applyToResourceTypeFlag\"\n name=\"applyToResourceTypeFlag\"\n label={t(\"on\")}\n labelOff={t(\"off\")}\n isChecked={applyToResourceTypeFlag}\n onChange={(_event, val) => setApplyToResourceTypeFlag(val)}\n aria-label={t(\"applyToResourceTypeFlag\")}\n />\n </FormGroup>\n {applyToResourceTypeFlag ? (\n <TextControl\n name=\"resourceType\"\n label={t(\"resourceType\")}\n labelIcon={t(\"resourceTypeHelp\")}\n rules={{\n required: {\n value: permissionType === \"scope\" ? true : false,\n message: t(\"required\"),\n },\n }}\n />\n ) : (\n <FormGroup\n label={t(\"resource\")}\n fieldId=\"resources\"\n labelIcon={\n <HelpItem\n helpText={t(\"permissionResources\")}\n fieldLabelId=\"resources\"\n />\n }\n isRequired={permissionType !== \"scope\"}\n >\n <ResourcesPolicySelect\n name=\"resources\"\n clientId={id}\n permissionId={permissionId}\n preSelected={\n permissionType === \"scope\" ? undefined : selectedId\n }\n variant={\n permissionType === \"scope\"\n ? SelectVariant.typeahead\n : SelectVariant.typeaheadMulti\n }\n isRequired={permissionType !== \"scope\"}\n />\n {errors.resources && <FormErrorText message={t(\"required\")} />}\n </FormGroup>\n )}\n {permissionType === \"scope\" && (\n <FormGroup\n label={t(\"authorizationScopes\")}\n fieldId=\"scopes\"\n labelIcon={\n <HelpItem\n helpText={t(\"permissionScopesHelp\")}\n fieldLabelId=\"scopesSelect\"\n />\n }\n isRequired\n >\n <ScopeSelect\n clientId={id}\n resourceId={resourcesIds?.[0]}\n preSelected={selectedId}\n />\n {errors.scopes && <FormErrorText message={t(\"required\")} />}\n </FormGroup>\n )}\n <FormGroup\n label={t(\"policies\")}\n fieldId=\"policies\"\n labelIcon={\n <HelpItem\n helpText={t(\"permissionPoliciesHelp\")}\n fieldLabelId=\"policies\"\n />\n }\n >\n <ResourcesPolicySelect\n name=\"policies\"\n clientId={id}\n permissionId={permissionId}\n />\n </FormGroup>\n <FormGroup\n label={t(\"decisionStrategy\")}\n labelIcon={\n <HelpItem\n helpText={t(\"permissionDecisionStrategyHelp\")}\n fieldLabelId=\"decisionStrategy\"\n />\n }\n fieldId=\"policyEnforcementMode\"\n hasNoPaddingTop\n >\n <Controller\n name=\"decisionStrategy\"\n data-testid=\"decisionStrategy\"\n defaultValue={DecisionStrategy.UNANIMOUS}\n control={control}\n render={({ field }) => (\n <>\n {Object.values(DecisionStrategy).map((strategy) => (\n <Radio\n id={strategy}\n key={strategy}\n data-testid={strategy}\n isChecked={field.value === strategy}\n isDisabled={isDisabled}\n name=\"decisionStrategies\"\n onChange={() => field.onChange(strategy)}\n label={t(`decisionStrategies.${strategy}`)}\n className=\"pf-v5-u-mb-md\"\n />\n ))}\n </>\n )}\n />\n </FormGroup>\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toAuthorizationTab({\n realm,\n clientId: id,\n tab: \"permissions\",\n })}\n ></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n </div>\n </ActionGroup>\n </FormProvider>\n </FormAccess>\n </PageSection>\n </>\n );\n}\n"],"names":["ScopeSelect","clientId","resourceId","preSelected","adminClient","useAdminClient","t","useTranslation","control","getValues","setValue","errors","useFormContext","scopes","setScopes","useState","selectedScopes","setSelectedScopes","search","setSearch","open","setOpen","firstUpdate","useRef","values","toSelectOptions","scope","jsx","SelectOption","useFetch","s","Controller","value","field","KeycloakSelect","SelectVariant","val","filter","selectedValue","option","changedValue","p","PermissionDetails","form","useForm","reset","handleSubmit","navigate","useNavigate","id","realm","permissionType","permissionId","selectedId","useParams","addAlert","addError","useAlerts","permission","setPermission","applyToResourceTypeFlag","setApplyToResourceTypeFlag","hasAccess","useAccess","isDisabled","resources","policies","r","save","result","toPermissionDetails","AlertVariant","error","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","ButtonVariant","toAuthorizationTab","resourcesIds","useWatch","jsxs","Fragment","ViewHeader","toUpperCase","DropdownItem","PageSection","FormAccess","FormProvider","TextControl","TextAreaControl","FormGroup","HelpItem","Switch","_event","ResourcesPolicySelect","FormErrorText","DecisionStrategy","strategy","Radio","ActionGroup","Button","props","Link","KeycloakSpinner"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsxs as u, Fragment as g, jsx as e } from "react/jsx-runtime";
2
- import { aW as T, a as B, u as L, _ as V, aa as W, d as _, aX as $, aY as j, V as M, P as H, aZ as J, a_ as D, a$ as U, b0 as k, b1 as X, b2 as Y, af as f, B as Z, b3 as q, b4 as z, b5 as G, I as S, J as K, K as O, O as v, b6 as Q } from "./index-YEmLy1gM.js";
2
+ import { aX as T, a as B, u as L, _ as V, aa as _, d as $, aY as j, aZ as M, V as W, P as H, a_ as J, a$ as D, b0 as U, b1 as k, b2 as X, b3 as Y, af as f, B as Z, b4 as q, b5 as z, b6 as G, I as S, J as K, K as O, O as v, b7 as Q } from "./index-Ddam0zn3.js";
3
3
  import { useState as m } from "react";
4
4
  import { useTranslation as p } from "react-i18next";
5
5
  import { useNavigate as ee, Link as A } from "react-router-dom";
@@ -77,7 +77,7 @@ function ie() {
77
77
  return [];
78
78
  throw d;
79
79
  }
80
- }, [w, P] = W({
80
+ }, [w, P] = _({
81
81
  titleKey: n("deleteConfirmRealm", {
82
82
  count: c.length,
83
83
  name: c[0]?.name
@@ -86,14 +86,14 @@ function ie() {
86
86
  continueButtonLabel: "delete",
87
87
  onConfirm: async () => {
88
88
  try {
89
- c.filter(({ name: r }) => r === "master").length > 0 && s(n("cantDeleteMasterRealm"), _.warning);
89
+ c.filter(({ name: r }) => r === "master").length > 0 && s(n("cantDeleteMasterRealm"), $.warning);
90
90
  const a = c.filter(({ name: r }) => r !== "master");
91
91
  if (a.length === 0) return;
92
92
  await Promise.all(
93
93
  a.map(
94
94
  ({ name: r }) => t.realms.del({ realm: r })
95
95
  )
96
- ), s(n("deletedSuccessRealmSetting")), c.filter(({ name: r }) => r === l).length > 0 && o($({ realm: "master" })), C(), h([]);
96
+ ), s(n("deletedSuccessRealmSetting")), c.filter(({ name: r }) => r === l).length > 0 && o(j({ realm: "master" })), C(), h([]);
97
97
  } catch (a) {
98
98
  I("deleteError", a);
99
99
  }
@@ -102,14 +102,14 @@ function ie() {
102
102
  return /* @__PURE__ */ u(g, { children: [
103
103
  /* @__PURE__ */ e(P, {}),
104
104
  x && /* @__PURE__ */ e(
105
- j,
105
+ M,
106
106
  {
107
107
  onClose: () => {
108
108
  b(!1), C();
109
109
  }
110
110
  }
111
111
  ),
112
- /* @__PURE__ */ e(M, { titleKey: "manageRealms", divider: !1 }),
112
+ /* @__PURE__ */ e(W, { titleKey: "manageRealms", divider: !1 }),
113
113
  /* @__PURE__ */ e(H, { variant: "light", className: "pf-v5-u-p-0", children: /* @__PURE__ */ e(
114
114
  J,
115
115
  {
@@ -176,4 +176,4 @@ function ie() {
176
176
  export {
177
177
  ie as default
178
178
  };
179
- //# sourceMappingURL=RealmSection-CbqC2up8.js.map
179
+ //# sourceMappingURL=RealmSection-DoqGXY7F.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RealmSection-CbqC2up8.js","sources":["../src/realm/RealmSection.tsx"],"sourcesContent":["import { NetworkError } from \"@keycloak/keycloak-admin-client\";\nimport { KeycloakDataTable, useAlerts } from \"@keycloak/keycloak-ui-shared\";\nimport {\n AlertVariant,\n Badge,\n Button,\n Dropdown,\n DropdownItem,\n DropdownList,\n MenuToggle,\n PageSection,\n Popover,\n ToolbarItem,\n} from \"@patternfly/react-core\";\nimport { EllipsisVIcon } from \"@patternfly/react-icons\";\nimport { cellWidth } from \"@patternfly/react-table\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../admin-client\";\nimport { useConfirmDialog } from \"../components/confirm-dialog/ConfirmDialog\";\nimport { ViewHeader } from \"../components/view-header/ViewHeader\";\nimport { fetchAdminUI } from \"../context/auth/admin-ui-endpoint\";\nimport { useRealm } from \"../context/realm-context/RealmContext\";\nimport { useRecentRealms } from \"../context/RecentRealms\";\nimport { useWhoAmI } from \"../context/whoami/WhoAmI\";\nimport { translationFormatter } from \"../utils/translationFormatter\";\nimport NewRealmForm from \"./add/NewRealmForm\";\nimport { toRealm } from \"./RealmRoutes\";\nimport { toDashboard } from \"../dashboard/routes/Dashboard\";\n\nexport type RealmNameRepresentation = {\n name: string;\n displayName?: string;\n};\n\nconst RecentRealmsDropdown = () => {\n const { t } = useTranslation();\n const [open, setOpen] = useState(false);\n const recentRealms = useRecentRealms();\n\n if (recentRealms.length < 3) return null;\n return (\n <Dropdown\n shouldFocusToggleOnSelect\n onOpenChange={(isOpen) => setOpen(isOpen)}\n toggle={(ref) => (\n <MenuToggle\n data-testid=\"kebab\"\n aria-label=\"Kebab toggle\"\n ref={ref}\n onClick={() => setOpen(!open)}\n >\n {t(\"recentRealms\")}\n </MenuToggle>\n )}\n isOpen={open}\n >\n <DropdownList>\n {recentRealms.map(({ name }) => (\n <DropdownItem\n key=\"server info\"\n component={(props) => (\n <Link {...props} to={toDashboard({ realm: name })} />\n )}\n >\n {name}\n </DropdownItem>\n ))}\n </DropdownList>\n </Dropdown>\n );\n};\n\ntype KebabDropdownProps = {\n onClick: () => void;\n isDisabled?: boolean;\n};\n\nconst KebabDropdown = ({ onClick, isDisabled }: KebabDropdownProps) => {\n const { t } = useTranslation();\n const [open, setOpen] = useState(false);\n return (\n <Dropdown\n shouldFocusToggleOnSelect\n onOpenChange={(isOpen) => setOpen(isOpen)}\n toggle={(ref) => (\n <MenuToggle\n data-testid=\"kebab\"\n aria-label=\"Kebab toggle\"\n ref={ref}\n onClick={() => setOpen(!open)}\n variant=\"plain\"\n isDisabled={isDisabled}\n >\n <EllipsisVIcon />\n </MenuToggle>\n )}\n isOpen={open}\n >\n <DropdownList>\n <DropdownItem\n data-testid=\"delete\"\n onClick={() => {\n setOpen(false);\n onClick();\n }}\n >\n {t(\"delete\")}\n </DropdownItem>\n </DropdownList>\n </Dropdown>\n );\n};\n\ntype RealmRow = RealmNameRepresentation & { id: string };\n\nexport default function RealmSection() {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { whoAmI } = useWhoAmI();\n const { realm } = useRealm();\n const { adminClient } = useAdminClient();\n const { addAlert, addError } = useAlerts();\n\n const [selected, setSelected] = useState<RealmRow[]>([]);\n const [openNewRealm, setOpenNewRealm] = useState(false);\n const [key, setKey] = useState(0);\n const refresh = () => setKey(key + 1);\n\n const loader = async (first?: number, max?: number, search?: string) => {\n try {\n const result = await fetchAdminUI<RealmNameRepresentation[]>(\n adminClient,\n \"ui-ext/realms/names\",\n { first: `${first}`, max: `${max}`, search: search || \"\" },\n );\n return result.map((r) => ({ ...r, id: r.name }));\n } catch (error) {\n if (error instanceof NetworkError && error.response.status < 500) {\n return [];\n }\n\n throw error;\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: t(\"deleteConfirmRealm\", {\n count: selected.length,\n name: selected[0]?.name,\n }),\n messageKey: \"deleteConfirmRealmSetting\",\n continueButtonLabel: \"delete\",\n onConfirm: async () => {\n try {\n if (selected.filter(({ name }) => name === \"master\").length > 0) {\n addAlert(t(\"cantDeleteMasterRealm\"), AlertVariant.warning);\n }\n const filtered = selected.filter(({ name }) => name !== \"master\");\n if (filtered.length === 0) return;\n await Promise.all(\n filtered.map(({ name: realmName }) =>\n adminClient.realms.del({ realm: realmName }),\n ),\n );\n addAlert(t(\"deletedSuccessRealmSetting\"));\n if (selected.filter(({ name }) => name === realm).length > 0) {\n navigate(toRealm({ realm: \"master\" }));\n }\n refresh();\n setSelected([]);\n } catch (error) {\n addError(\"deleteError\", error);\n }\n },\n });\n\n return (\n <>\n <DeleteConfirm />\n {openNewRealm && (\n <NewRealmForm\n onClose={() => {\n setOpenNewRealm(false);\n refresh();\n }}\n />\n )}\n <ViewHeader titleKey=\"manageRealms\" divider={false} />\n <PageSection variant=\"light\" className=\"pf-v5-u-p-0\">\n <KeycloakDataTable\n key={key}\n loader={loader}\n isPaginated\n onSelect={setSelected}\n canSelectAll\n ariaLabelKey=\"selectRealm\"\n searchPlaceholderKey=\"search\"\n actions={[\n {\n title: t(\"delete\"),\n onRowClick: (selected) => {\n setSelected([selected]);\n toggleDeleteDialog();\n },\n },\n ]}\n toolbarItem={\n <>\n <ToolbarItem>\n {whoAmI.createRealm && (\n <Button\n onClick={() => setOpenNewRealm(true)}\n data-testid=\"add-realm\"\n >\n {t(\"createRealm\")}\n </Button>\n )}\n </ToolbarItem>\n <ToolbarItem>\n <RecentRealmsDropdown />\n </ToolbarItem>\n <ToolbarItem>\n <KebabDropdown\n onClick={toggleDeleteDialog}\n isDisabled={selected.length === 0}\n />\n </ToolbarItem>\n </>\n }\n columns={[\n {\n name: \"name\",\n transforms: [cellWidth(20)],\n cellRenderer: ({ name }) =>\n name !== realm ? (\n <Link to={toDashboard({ realm: name })}>{name}</Link>\n ) : (\n <Popover\n bodyContent={t(\"currentRealmExplain\")}\n triggerAction=\"hover\"\n >\n <>\n {name} <Badge isRead>{t(\"currentRealm\")}</Badge>\n </>\n </Popover>\n ),\n },\n {\n name: \"displayName\",\n transforms: [cellWidth(80)],\n cellFormatters: [translationFormatter(t)],\n },\n ]}\n />\n </PageSection>\n </>\n );\n}\n"],"names":["RecentRealmsDropdown","t","useTranslation","open","setOpen","useState","recentRealms","useRecentRealms","jsx","Dropdown","isOpen","ref","MenuToggle","DropdownList","name","DropdownItem","props","Link","toDashboard","KebabDropdown","onClick","isDisabled","EllipsisVIcon","RealmSection","navigate","useNavigate","whoAmI","useWhoAmI","realm","useRealm","adminClient","useAdminClient","addAlert","addError","useAlerts","selected","setSelected","openNewRealm","setOpenNewRealm","key","setKey","refresh","loader","first","max","search","fetchAdminUI","r","error","NetworkError","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","AlertVariant","filtered","realmName","toRealm","jsxs","Fragment","NewRealmForm","ViewHeader","PageSection","KeycloakDataTable","ToolbarItem","Button","cellWidth","Popover","Badge","translationFormatter"],"mappings":"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"}
1
+ {"version":3,"file":"RealmSection-DoqGXY7F.js","sources":["../src/realm/RealmSection.tsx"],"sourcesContent":["import { NetworkError } from \"@keycloak/keycloak-admin-client\";\nimport { KeycloakDataTable, useAlerts } from \"@keycloak/keycloak-ui-shared\";\nimport {\n AlertVariant,\n Badge,\n Button,\n Dropdown,\n DropdownItem,\n DropdownList,\n MenuToggle,\n PageSection,\n Popover,\n ToolbarItem,\n} from \"@patternfly/react-core\";\nimport { EllipsisVIcon } from \"@patternfly/react-icons\";\nimport { cellWidth } from \"@patternfly/react-table\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../admin-client\";\nimport { useConfirmDialog } from \"../components/confirm-dialog/ConfirmDialog\";\nimport { ViewHeader } from \"../components/view-header/ViewHeader\";\nimport { fetchAdminUI } from \"../context/auth/admin-ui-endpoint\";\nimport { useRealm } from \"../context/realm-context/RealmContext\";\nimport { useRecentRealms } from \"../context/RecentRealms\";\nimport { useWhoAmI } from \"../context/whoami/WhoAmI\";\nimport { translationFormatter } from \"../utils/translationFormatter\";\nimport NewRealmForm from \"./add/NewRealmForm\";\nimport { toRealm } from \"./RealmRoutes\";\nimport { toDashboard } from \"../dashboard/routes/Dashboard\";\n\nexport type RealmNameRepresentation = {\n name: string;\n displayName?: string;\n};\n\nconst RecentRealmsDropdown = () => {\n const { t } = useTranslation();\n const [open, setOpen] = useState(false);\n const recentRealms = useRecentRealms();\n\n if (recentRealms.length < 3) return null;\n return (\n <Dropdown\n shouldFocusToggleOnSelect\n onOpenChange={(isOpen) => setOpen(isOpen)}\n toggle={(ref) => (\n <MenuToggle\n data-testid=\"kebab\"\n aria-label=\"Kebab toggle\"\n ref={ref}\n onClick={() => setOpen(!open)}\n >\n {t(\"recentRealms\")}\n </MenuToggle>\n )}\n isOpen={open}\n >\n <DropdownList>\n {recentRealms.map(({ name }) => (\n <DropdownItem\n key=\"server info\"\n component={(props) => (\n <Link {...props} to={toDashboard({ realm: name })} />\n )}\n >\n {name}\n </DropdownItem>\n ))}\n </DropdownList>\n </Dropdown>\n );\n};\n\ntype KebabDropdownProps = {\n onClick: () => void;\n isDisabled?: boolean;\n};\n\nconst KebabDropdown = ({ onClick, isDisabled }: KebabDropdownProps) => {\n const { t } = useTranslation();\n const [open, setOpen] = useState(false);\n return (\n <Dropdown\n shouldFocusToggleOnSelect\n onOpenChange={(isOpen) => setOpen(isOpen)}\n toggle={(ref) => (\n <MenuToggle\n data-testid=\"kebab\"\n aria-label=\"Kebab toggle\"\n ref={ref}\n onClick={() => setOpen(!open)}\n variant=\"plain\"\n isDisabled={isDisabled}\n >\n <EllipsisVIcon />\n </MenuToggle>\n )}\n isOpen={open}\n >\n <DropdownList>\n <DropdownItem\n data-testid=\"delete\"\n onClick={() => {\n setOpen(false);\n onClick();\n }}\n >\n {t(\"delete\")}\n </DropdownItem>\n </DropdownList>\n </Dropdown>\n );\n};\n\ntype RealmRow = RealmNameRepresentation & { id: string };\n\nexport default function RealmSection() {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { whoAmI } = useWhoAmI();\n const { realm } = useRealm();\n const { adminClient } = useAdminClient();\n const { addAlert, addError } = useAlerts();\n\n const [selected, setSelected] = useState<RealmRow[]>([]);\n const [openNewRealm, setOpenNewRealm] = useState(false);\n const [key, setKey] = useState(0);\n const refresh = () => setKey(key + 1);\n\n const loader = async (first?: number, max?: number, search?: string) => {\n try {\n const result = await fetchAdminUI<RealmNameRepresentation[]>(\n adminClient,\n \"ui-ext/realms/names\",\n { first: `${first}`, max: `${max}`, search: search || \"\" },\n );\n return result.map((r) => ({ ...r, id: r.name }));\n } catch (error) {\n if (error instanceof NetworkError && error.response.status < 500) {\n return [];\n }\n\n throw error;\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: t(\"deleteConfirmRealm\", {\n count: selected.length,\n name: selected[0]?.name,\n }),\n messageKey: \"deleteConfirmRealmSetting\",\n continueButtonLabel: \"delete\",\n onConfirm: async () => {\n try {\n if (selected.filter(({ name }) => name === \"master\").length > 0) {\n addAlert(t(\"cantDeleteMasterRealm\"), AlertVariant.warning);\n }\n const filtered = selected.filter(({ name }) => name !== \"master\");\n if (filtered.length === 0) return;\n await Promise.all(\n filtered.map(({ name: realmName }) =>\n adminClient.realms.del({ realm: realmName }),\n ),\n );\n addAlert(t(\"deletedSuccessRealmSetting\"));\n if (selected.filter(({ name }) => name === realm).length > 0) {\n navigate(toRealm({ realm: \"master\" }));\n }\n refresh();\n setSelected([]);\n } catch (error) {\n addError(\"deleteError\", error);\n }\n },\n });\n\n return (\n <>\n <DeleteConfirm />\n {openNewRealm && (\n <NewRealmForm\n onClose={() => {\n setOpenNewRealm(false);\n refresh();\n }}\n />\n )}\n <ViewHeader titleKey=\"manageRealms\" divider={false} />\n <PageSection variant=\"light\" className=\"pf-v5-u-p-0\">\n <KeycloakDataTable\n key={key}\n loader={loader}\n isPaginated\n onSelect={setSelected}\n canSelectAll\n ariaLabelKey=\"selectRealm\"\n searchPlaceholderKey=\"search\"\n actions={[\n {\n title: t(\"delete\"),\n onRowClick: (selected) => {\n setSelected([selected]);\n toggleDeleteDialog();\n },\n },\n ]}\n toolbarItem={\n <>\n <ToolbarItem>\n {whoAmI.createRealm && (\n <Button\n onClick={() => setOpenNewRealm(true)}\n data-testid=\"add-realm\"\n >\n {t(\"createRealm\")}\n </Button>\n )}\n </ToolbarItem>\n <ToolbarItem>\n <RecentRealmsDropdown />\n </ToolbarItem>\n <ToolbarItem>\n <KebabDropdown\n onClick={toggleDeleteDialog}\n isDisabled={selected.length === 0}\n />\n </ToolbarItem>\n </>\n }\n columns={[\n {\n name: \"name\",\n transforms: [cellWidth(20)],\n cellRenderer: ({ name }) =>\n name !== realm ? (\n <Link to={toDashboard({ realm: name })}>{name}</Link>\n ) : (\n <Popover\n bodyContent={t(\"currentRealmExplain\")}\n triggerAction=\"hover\"\n >\n <>\n {name} <Badge isRead>{t(\"currentRealm\")}</Badge>\n </>\n </Popover>\n ),\n },\n {\n name: \"displayName\",\n transforms: [cellWidth(80)],\n cellFormatters: [translationFormatter(t)],\n },\n ]}\n />\n </PageSection>\n </>\n );\n}\n"],"names":["RecentRealmsDropdown","t","useTranslation","open","setOpen","useState","recentRealms","useRecentRealms","jsx","Dropdown","isOpen","ref","MenuToggle","DropdownList","name","DropdownItem","props","Link","toDashboard","KebabDropdown","onClick","isDisabled","EllipsisVIcon","RealmSection","navigate","useNavigate","whoAmI","useWhoAmI","realm","useRealm","adminClient","useAdminClient","addAlert","addError","useAlerts","selected","setSelected","openNewRealm","setOpenNewRealm","key","setKey","refresh","loader","first","max","search","fetchAdminUI","r","error","NetworkError","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","AlertVariant","filtered","realmName","toRealm","jsxs","Fragment","NewRealmForm","ViewHeader","PageSection","KeycloakDataTable","ToolbarItem","Button","cellWidth","Popover","Badge","translationFormatter"],"mappings":";;;;;AAoCA,MAAMA,KAAuB,MAAM;AACjC,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACR,CAACC,GAAMC,CAAO,IAAIC,EAAS,EAAK,GAChCC,IAAeC,EAAA;AAErB,SAAID,EAAa,SAAS,IAAU,OAElC,gBAAAE;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,2BAAyB;AAAA,MACzB,cAAc,CAACC,MAAWN,EAAQM,CAAM;AAAA,MACxC,QAAQ,CAACC,MACP,gBAAAH;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,eAAY;AAAA,UACZ,cAAW;AAAA,UACX,KAAAD;AAAA,UACA,SAAS,MAAMP,EAAQ,CAACD,CAAI;AAAA,UAE3B,YAAE,cAAc;AAAA,QAAA;AAAA,MAAA;AAAA,MAGrB,QAAQA;AAAA,MAER,4BAACU,GAAA,EACE,UAAAP,EAAa,IAAI,CAAC,EAAE,MAAAQ,QACnB,gBAAAN;AAAA,QAACO;AAAA,QAAA;AAAA,UAEC,WAAW,CAACC,MACV,gBAAAR,EAACS,GAAA,EAAM,GAAGD,GAAO,IAAIE,EAAY,EAAE,OAAOJ,EAAA,CAAM,EAAA,CAAG;AAAA,UAGpD,UAAAA;AAAA,QAAA;AAAA,QALG;AAAA,MAAA,CAOP,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAGN,GAOMK,KAAgB,CAAC,EAAE,SAAAC,GAAS,YAAAC,QAAqC;AACrE,QAAM,EAAE,GAAApB,EAAA,IAAMC,EAAA,GACR,CAACC,GAAMC,CAAO,IAAIC,EAAS,EAAK;AACtC,SACE,gBAAAG;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,2BAAyB;AAAA,MACzB,cAAc,CAACC,MAAWN,EAAQM,CAAM;AAAA,MACxC,QAAQ,CAACC,MACP,gBAAAH;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,eAAY;AAAA,UACZ,cAAW;AAAA,UACX,KAAAD;AAAA,UACA,SAAS,MAAMP,EAAQ,CAACD,CAAI;AAAA,UAC5B,SAAQ;AAAA,UACR,YAAAkB;AAAA,UAEA,4BAACC,GAAA,CAAA,CAAc;AAAA,QAAA;AAAA,MAAA;AAAA,MAGnB,QAAQnB;AAAA,MAER,4BAACU,GAAA,EACC,UAAA,gBAAAL;AAAA,QAACO;AAAA,QAAA;AAAA,UACC,eAAY;AAAA,UACZ,SAAS,MAAM;AACb,YAAAX,EAAQ,EAAK,GACbgB,EAAA;AAAA,UACF;AAAA,UAEC,YAAE,QAAQ;AAAA,QAAA;AAAA,MAAA,EACb,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAIA,SAAwBG,KAAe;AACrC,QAAM,EAAE,GAAAtB,EAAA,IAAMC,EAAA,GACRsB,IAAWC,GAAA,GACX,EAAE,QAAAC,EAAA,IAAWC,EAAA,GACb,EAAE,OAAAC,EAAA,IAAUC,EAAA,GACZ,EAAE,aAAAC,EAAA,IAAgBC,EAAA,GAClB,EAAE,UAAAC,GAAU,UAAAC,EAAA,IAAaC,EAAA,GAEzB,CAACC,GAAUC,CAAW,IAAI/B,EAAqB,CAAA,CAAE,GACjD,CAACgC,GAAcC,CAAe,IAAIjC,EAAS,EAAK,GAChD,CAACkC,GAAKC,CAAM,IAAInC,EAAS,CAAC,GAC1BoC,IAAU,MAAMD,EAAOD,IAAM,CAAC,GAE9BG,IAAS,OAAOC,GAAgBC,GAAcC,MAAoB;AACtE,QAAI;AAMF,cALe,MAAMC;AAAA,QACnBhB;AAAA,QACA;AAAA,QACA,EAAE,OAAO,GAAGa,CAAK,IAAI,KAAK,GAAGC,CAAG,IAAI,QAAQC,KAAU,GAAA;AAAA,MAAG,GAE7C,IAAI,CAACE,OAAO,EAAE,GAAGA,GAAG,IAAIA,EAAE,KAAA,EAAO;AAAA,IACjD,SAASC,GAAO;AACd,UAAIA,aAAiBC,KAAgBD,EAAM,SAAS,SAAS;AAC3D,eAAO,CAAA;AAGT,YAAMA;AAAA,IACR;AAAA,EACF,GAEM,CAACE,GAAoBC,CAAa,IAAIC,EAAiB;AAAA,IAC3D,UAAUnD,EAAE,sBAAsB;AAAA,MAChC,OAAOkC,EAAS;AAAA,MAChB,MAAMA,EAAS,CAAC,GAAG;AAAA,IAAA,CACpB;AAAA,IACD,YAAY;AAAA,IACZ,qBAAqB;AAAA,IACrB,WAAW,YAAY;AACrB,UAAI;AACF,QAAIA,EAAS,OAAO,CAAC,EAAE,MAAArB,EAAA,MAAWA,MAAS,QAAQ,EAAE,SAAS,KAC5DkB,EAAS/B,EAAE,uBAAuB,GAAGoD,EAAa,OAAO;AAE3D,cAAMC,IAAWnB,EAAS,OAAO,CAAC,EAAE,MAAArB,EAAA,MAAWA,MAAS,QAAQ;AAChE,YAAIwC,EAAS,WAAW,EAAG;AAC3B,cAAM,QAAQ;AAAA,UACZA,EAAS;AAAA,YAAI,CAAC,EAAE,MAAMC,QACpBzB,EAAY,OAAO,IAAI,EAAE,OAAOyB,EAAA,CAAW;AAAA,UAAA;AAAA,QAC7C,GAEFvB,EAAS/B,EAAE,4BAA4B,CAAC,GACpCkC,EAAS,OAAO,CAAC,EAAE,MAAArB,EAAA,MAAWA,MAASc,CAAK,EAAE,SAAS,KACzDJ,EAASgC,EAAQ,EAAE,OAAO,SAAA,CAAU,CAAC,GAEvCf,EAAA,GACAL,EAAY,CAAA,CAAE;AAAA,MAChB,SAASY,GAAO;AACd,QAAAf,EAAS,eAAee,CAAK;AAAA,MAC/B;AAAA,IACF;AAAA,EAAA,CACD;AAED,SACE,gBAAAS,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAlD,EAAC2C,GAAA,EAAc;AAAA,IACdd,KACC,gBAAA7B;AAAA,MAACmD;AAAA,MAAA;AAAA,QACC,SAAS,MAAM;AACb,UAAArB,EAAgB,EAAK,GACrBG,EAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,IAGJ,gBAAAjC,EAACoD,GAAA,EAAW,UAAS,gBAAe,SAAS,IAAO;AAAA,IACpD,gBAAApD,EAACqD,GAAA,EAAY,SAAQ,SAAQ,WAAU,eACrC,UAAA,gBAAArD;AAAA,MAACsD;AAAAA,MAAA;AAAA,QAEC,QAAApB;AAAA,QACA,aAAW;AAAA,QACX,UAAUN;AAAA,QACV,cAAY;AAAA,QACZ,cAAa;AAAA,QACb,sBAAqB;AAAA,QACrB,SAAS;AAAA,UACP;AAAA,YACE,OAAOnC,EAAE,QAAQ;AAAA,YACjB,YAAY,CAACkC,MAAa;AACxB,cAAAC,EAAY,CAACD,CAAQ,CAAC,GACtBe,EAAA;AAAA,YACF;AAAA,UAAA;AAAA,QACF;AAAA,QAEF,aACE,gBAAAO,EAAAC,GAAA,EACE,UAAA;AAAA,UAAA,gBAAAlD,EAACuD,GAAA,EACE,YAAO,eACN,gBAAAvD;AAAA,YAACwD;AAAA,YAAA;AAAA,cACC,SAAS,MAAM1B,EAAgB,EAAI;AAAA,cACnC,eAAY;AAAA,cAEX,YAAE,aAAa;AAAA,YAAA;AAAA,UAAA,GAGtB;AAAA,UACA,gBAAA9B,EAACuD,GAAA,EACC,UAAA,gBAAAvD,EAACR,IAAA,CAAA,CAAqB,GACxB;AAAA,4BACC+D,GAAA,EACC,UAAA,gBAAAvD;AAAA,YAACW;AAAA,YAAA;AAAA,cACC,SAAS+B;AAAA,cACT,YAAYf,EAAS,WAAW;AAAA,YAAA;AAAA,UAAA,EAClC,CACF;AAAA,QAAA,GACF;AAAA,QAEF,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,YAAY,CAAC8B,EAAU,EAAE,CAAC;AAAA,YAC1B,cAAc,CAAC,EAAE,MAAAnD,EAAA,MACfA,MAASc,IACP,gBAAApB,EAACS,GAAA,EAAK,IAAIC,EAAY,EAAE,OAAOJ,GAAM,GAAI,aAAK,IAE9C,gBAAAN;AAAA,cAAC0D;AAAA,cAAA;AAAA,gBACC,aAAajE,EAAE,qBAAqB;AAAA,gBACpC,eAAc;AAAA,gBAEd,UAAA,gBAAAwD,EAAAC,GAAA,EACG,UAAA;AAAA,kBAAA5C;AAAA,kBAAK;AAAA,oCAAEqD,GAAA,EAAM,QAAM,IAAE,UAAAlE,EAAE,cAAc,EAAA,CAAE;AAAA,gBAAA,EAAA,CAC1C;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,UAGN;AAAA,YACE,MAAM;AAAA,YACN,YAAY,CAACgE,EAAU,EAAE,CAAC;AAAA,YAC1B,gBAAgB,CAACG,EAAqBnE,CAAC,CAAC;AAAA,UAAA;AAAA,QAC1C;AAAA,MACF;AAAA,MA9DKsC;AAAA,IAAA,EA+DP,CACF;AAAA,EAAA,GACF;AAEJ;"}
@@ -1,9 +1,9 @@
1
1
  import { jsxs as c, Fragment as y, jsx as a } from "react/jsx-runtime";
2
- import { u as q, _ as x, b as L, ao as E, ap as z, y as K, aa as M, d as A, aq as w, aA as j, as as O, V as U, K as G, P as Q, F as W, c as J, Q as l, au as D, aB as X, a7 as R, aC as Y, aD as Z, A as $, B as P, m as ee, a2 as ae, a3 as re, aE as se } from "./index-YEmLy1gM.js";
2
+ import { u as q, _ as x, b as L, ao as E, ap as z, y as K, aa as M, d as A, aq as w, aA as j, as as O, V as U, K as G, P as Q, F as W, c as J, Q as l, au as D, aB as X, a7 as R, aC as Y, aD as Z, A as $, B as P, m as ee, a2 as ae, a3 as re, aE as se } from "./index-Ddam0zn3.js";
3
3
  import { useState as d } from "react";
4
4
  import { useTranslation as te } from "react-i18next";
5
5
  import { useNavigate as oe, Link as ne } from "react-router-dom";
6
- import { S as ie } from "./ScopePicker-DNYZfIbU.js";
6
+ import { S as ie } from "./ScopePicker-Dd6Cs54v.js";
7
7
  function be() {
8
8
  const { adminClient: o } = q(), { t: e } = te(), [m, C] = d(), [N, p] = d(), [b, F] = d(), { addAlert: h, addError: f } = x(), I = L({
9
9
  mode: "onChange"
@@ -223,4 +223,4 @@ function be() {
223
223
  export {
224
224
  be as default
225
225
  };
226
- //# sourceMappingURL=ResourceDetails-DWXjggUc.js.map
226
+ //# sourceMappingURL=ResourceDetails-Bn6Uim5l.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ResourceDetails-DWXjggUc.js","sources":["../src/clients/authorization/ResourceDetails.tsx"],"sourcesContent":["import type ClientRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientRepresentation\";\nimport type ResourceRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/resourceRepresentation\";\nimport type ResourceServerRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/resourceServerRepresentation\";\nimport {\n HelpItem,\n TextControl,\n useAlerts,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n Alert,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n FormGroup,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { DefaultSwitchControl } from \"../../components/SwitchControl\";\nimport { useConfirmDialog } from \"../../components/confirm-dialog/ConfirmDialog\";\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 { KeycloakSpinner } from \"@keycloak/keycloak-ui-shared\";\nimport { MultiLineInput } from \"../../components/multi-line-input/MultiLineInput\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useAccess } from \"../../context/access/Access\";\nimport { convertFormValuesToObject, convertToFormValues } from \"../../util\";\nimport { useParams } from \"../../utils/useParams\";\nimport { toAuthorizationTab } from \"../routes/AuthenticationTab\";\nimport { ResourceDetailsParams, toResourceDetails } from \"../routes/Resource\";\nimport { ScopePicker } from \"./ScopePicker\";\nimport \"./resource-details.css\";\n\ntype SubmittedResource = Omit<\n ResourceRepresentation,\n \"attributes\" | \"scopes\"\n> & {\n attributes: KeyValueType[];\n};\n\nexport default function ResourceDetails() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const [client, setClient] = useState<ClientRepresentation>();\n const [resource, setResource] = useState<ResourceRepresentation>();\n\n const [permissions, setPermission] =\n useState<ResourceServerRepresentation[]>();\n\n const { addAlert, addError } = useAlerts();\n const form = useForm<SubmittedResource>({\n mode: \"onChange\",\n });\n const { setValue, handleSubmit } = form;\n\n const { id, resourceId, realm } = useParams<ResourceDetailsParams>();\n const navigate = useNavigate();\n\n const setupForm = (resource: ResourceRepresentation = {}) => {\n convertToFormValues(resource, setValue);\n };\n\n const { hasAccess } = useAccess();\n\n const isDisabled = !hasAccess(\"manage-authorization\");\n\n useFetch(\n () =>\n Promise.all([\n adminClient.clients.findOne({ id }),\n resourceId\n ? adminClient.clients.getResource({ id, resourceId })\n : Promise.resolve(undefined),\n resourceId\n ? adminClient.clients.listPermissionsByResource({ id, resourceId })\n : Promise.resolve(undefined),\n ]),\n ([client, resource, permissions]) => {\n if (!client) {\n throw new Error(t(\"notFound\"));\n }\n setClient(client);\n setPermission(permissions);\n setResource(resource);\n setupForm(resource);\n },\n [],\n );\n\n const submit = async (submitted: SubmittedResource) => {\n const resource = convertFormValuesToObject<\n SubmittedResource,\n ResourceRepresentation\n >(submitted);\n\n try {\n if (resourceId) {\n await adminClient.clients.updateResource({ id, resourceId }, resource);\n } else {\n const result = await adminClient.clients.createResource(\n { id },\n resource,\n );\n setResource(resource);\n navigate(toResourceDetails({ realm, id, resourceId: result._id! }));\n }\n addAlert(\n t((resourceId ? \"update\" : \"create\") + \"ResourceSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"resourceSaveError\", error);\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"deleteResource\",\n children: (\n <>\n {t(\"deleteResourceConfirm\")}\n {permissions?.length !== 0 && (\n <Alert\n variant=\"warning\"\n isInline\n isPlain\n title={t(\"deleteResourceWarning\")}\n className=\"pf-v5-u-pt-lg\"\n >\n <p className=\"pf-v5-u-pt-xs\">\n {permissions?.map((permission) => (\n <strong key={permission.id} className=\"pf-v5-u-pr-md\">\n {permission.name}\n </strong>\n ))}\n </p>\n </Alert>\n )}\n </>\n ),\n continueButtonLabel: \"confirm\",\n onConfirm: async () => {\n try {\n await adminClient.clients.delResource({\n id,\n resourceId: resourceId!,\n });\n addAlert(t(\"resourceDeletedSuccess\"), AlertVariant.success);\n navigate(toAuthorizationTab({ realm, clientId: id, tab: \"resources\" }));\n } catch (error) {\n addError(\"resourceDeletedError\", error);\n }\n },\n });\n\n if (!client) {\n return <KeycloakSpinner />;\n }\n\n return (\n <>\n <DeleteConfirm />\n <ViewHeader\n titleKey={resourceId ? resource?.name! : \"createResource\"}\n dropdownItems={\n resourceId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-resource\"\n isDisabled={isDisabled}\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormProvider {...form}>\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n className=\"keycloak__resource-details__form\"\n onSubmit={handleSubmit(submit)}\n >\n <TextControl\n name={resourceId ? \"owner.name\" : \"\"}\n label={t(\"owner\")}\n labelIcon={t(\"ownerHelp\")}\n defaultValue={client.clientId}\n readOnly\n />\n <TextControl\n name={\"name\"}\n label={t(\"name\")}\n labelIcon={t(\"resourceNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"displayName\"\n label={t(\"displayName\")}\n labelIcon={t(\"displayNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"type\"\n label={t(\"type\")}\n labelIcon={t(\"resourceDetailsTypeHelp\")}\n />\n <FormGroup\n label={t(\"uris\")}\n fieldId=\"uris\"\n labelIcon={\n <HelpItem helpText={t(\"urisHelp\")} fieldLabelId=\"uris\" />\n }\n >\n <MultiLineInput\n name=\"uris\"\n type=\"url\"\n aria-label={t(\"uris\")}\n addButtonLabel=\"addUri\"\n />\n </FormGroup>\n <ScopePicker clientId={id} />\n <TextControl\n name=\"icon_uri\"\n label={t(\"iconUri\")}\n labelIcon={t(\"iconUriHelp\")}\n type=\"url\"\n />\n <DefaultSwitchControl\n name=\"ownerManagedAccess\"\n label={t(\"ownerManagedAccess\")}\n labelIcon={t(\"ownerManagedAccessHelp\")}\n />\n <FormGroup\n hasNoPaddingTop\n label={t(\"resourceAttribute\")}\n labelIcon={\n <HelpItem\n helpText={t(\"resourceAttributeHelp\")}\n fieldLabelId=\"resourceAttribute\"\n />\n }\n fieldId=\"resourceAttribute\"\n >\n <KeyValueInput name=\"attributes\" isDisabled={isDisabled} />\n </FormGroup>\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toAuthorizationTab({\n realm,\n clientId: id,\n tab: \"resources\",\n })}\n ></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n </div>\n </ActionGroup>\n </FormAccess>\n </FormProvider>\n </PageSection>\n </>\n );\n}\n"],"names":["ResourceDetails","adminClient","useAdminClient","t","useTranslation","client","setClient","useState","resource","setResource","permissions","setPermission","addAlert","addError","useAlerts","form","useForm","setValue","handleSubmit","id","resourceId","realm","useParams","navigate","useNavigate","setupForm","convertToFormValues","hasAccess","useAccess","isDisabled","useFetch","submit","submitted","convertFormValuesToObject","result","toResourceDetails","AlertVariant","error","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","jsxs","Fragment","jsx","Alert","permission","toAuthorizationTab","ViewHeader","DropdownItem","PageSection","FormProvider","FormAccess","TextControl","FormGroup","HelpItem","MultiLineInput","ScopePicker","DefaultSwitchControl","KeyValueInput","ActionGroup","Button","ButtonVariant","props","Link","KeycloakSpinner"],"mappings":"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"}
1
+ {"version":3,"file":"ResourceDetails-Bn6Uim5l.js","sources":["../src/clients/authorization/ResourceDetails.tsx"],"sourcesContent":["import type ClientRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientRepresentation\";\nimport type ResourceRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/resourceRepresentation\";\nimport type ResourceServerRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/resourceServerRepresentation\";\nimport {\n HelpItem,\n TextControl,\n useAlerts,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n Alert,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n FormGroup,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { DefaultSwitchControl } from \"../../components/SwitchControl\";\nimport { useConfirmDialog } from \"../../components/confirm-dialog/ConfirmDialog\";\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 { KeycloakSpinner } from \"@keycloak/keycloak-ui-shared\";\nimport { MultiLineInput } from \"../../components/multi-line-input/MultiLineInput\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useAccess } from \"../../context/access/Access\";\nimport { convertFormValuesToObject, convertToFormValues } from \"../../util\";\nimport { useParams } from \"../../utils/useParams\";\nimport { toAuthorizationTab } from \"../routes/AuthenticationTab\";\nimport { ResourceDetailsParams, toResourceDetails } from \"../routes/Resource\";\nimport { ScopePicker } from \"./ScopePicker\";\nimport \"./resource-details.css\";\n\ntype SubmittedResource = Omit<\n ResourceRepresentation,\n \"attributes\" | \"scopes\"\n> & {\n attributes: KeyValueType[];\n};\n\nexport default function ResourceDetails() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const [client, setClient] = useState<ClientRepresentation>();\n const [resource, setResource] = useState<ResourceRepresentation>();\n\n const [permissions, setPermission] =\n useState<ResourceServerRepresentation[]>();\n\n const { addAlert, addError } = useAlerts();\n const form = useForm<SubmittedResource>({\n mode: \"onChange\",\n });\n const { setValue, handleSubmit } = form;\n\n const { id, resourceId, realm } = useParams<ResourceDetailsParams>();\n const navigate = useNavigate();\n\n const setupForm = (resource: ResourceRepresentation = {}) => {\n convertToFormValues(resource, setValue);\n };\n\n const { hasAccess } = useAccess();\n\n const isDisabled = !hasAccess(\"manage-authorization\");\n\n useFetch(\n () =>\n Promise.all([\n adminClient.clients.findOne({ id }),\n resourceId\n ? adminClient.clients.getResource({ id, resourceId })\n : Promise.resolve(undefined),\n resourceId\n ? adminClient.clients.listPermissionsByResource({ id, resourceId })\n : Promise.resolve(undefined),\n ]),\n ([client, resource, permissions]) => {\n if (!client) {\n throw new Error(t(\"notFound\"));\n }\n setClient(client);\n setPermission(permissions);\n setResource(resource);\n setupForm(resource);\n },\n [],\n );\n\n const submit = async (submitted: SubmittedResource) => {\n const resource = convertFormValuesToObject<\n SubmittedResource,\n ResourceRepresentation\n >(submitted);\n\n try {\n if (resourceId) {\n await adminClient.clients.updateResource({ id, resourceId }, resource);\n } else {\n const result = await adminClient.clients.createResource(\n { id },\n resource,\n );\n setResource(resource);\n navigate(toResourceDetails({ realm, id, resourceId: result._id! }));\n }\n addAlert(\n t((resourceId ? \"update\" : \"create\") + \"ResourceSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"resourceSaveError\", error);\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"deleteResource\",\n children: (\n <>\n {t(\"deleteResourceConfirm\")}\n {permissions?.length !== 0 && (\n <Alert\n variant=\"warning\"\n isInline\n isPlain\n title={t(\"deleteResourceWarning\")}\n className=\"pf-v5-u-pt-lg\"\n >\n <p className=\"pf-v5-u-pt-xs\">\n {permissions?.map((permission) => (\n <strong key={permission.id} className=\"pf-v5-u-pr-md\">\n {permission.name}\n </strong>\n ))}\n </p>\n </Alert>\n )}\n </>\n ),\n continueButtonLabel: \"confirm\",\n onConfirm: async () => {\n try {\n await adminClient.clients.delResource({\n id,\n resourceId: resourceId!,\n });\n addAlert(t(\"resourceDeletedSuccess\"), AlertVariant.success);\n navigate(toAuthorizationTab({ realm, clientId: id, tab: \"resources\" }));\n } catch (error) {\n addError(\"resourceDeletedError\", error);\n }\n },\n });\n\n if (!client) {\n return <KeycloakSpinner />;\n }\n\n return (\n <>\n <DeleteConfirm />\n <ViewHeader\n titleKey={resourceId ? resource?.name! : \"createResource\"}\n dropdownItems={\n resourceId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-resource\"\n isDisabled={isDisabled}\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormProvider {...form}>\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n className=\"keycloak__resource-details__form\"\n onSubmit={handleSubmit(submit)}\n >\n <TextControl\n name={resourceId ? \"owner.name\" : \"\"}\n label={t(\"owner\")}\n labelIcon={t(\"ownerHelp\")}\n defaultValue={client.clientId}\n readOnly\n />\n <TextControl\n name={\"name\"}\n label={t(\"name\")}\n labelIcon={t(\"resourceNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"displayName\"\n label={t(\"displayName\")}\n labelIcon={t(\"displayNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"type\"\n label={t(\"type\")}\n labelIcon={t(\"resourceDetailsTypeHelp\")}\n />\n <FormGroup\n label={t(\"uris\")}\n fieldId=\"uris\"\n labelIcon={\n <HelpItem helpText={t(\"urisHelp\")} fieldLabelId=\"uris\" />\n }\n >\n <MultiLineInput\n name=\"uris\"\n type=\"url\"\n aria-label={t(\"uris\")}\n addButtonLabel=\"addUri\"\n />\n </FormGroup>\n <ScopePicker clientId={id} />\n <TextControl\n name=\"icon_uri\"\n label={t(\"iconUri\")}\n labelIcon={t(\"iconUriHelp\")}\n type=\"url\"\n />\n <DefaultSwitchControl\n name=\"ownerManagedAccess\"\n label={t(\"ownerManagedAccess\")}\n labelIcon={t(\"ownerManagedAccessHelp\")}\n />\n <FormGroup\n hasNoPaddingTop\n label={t(\"resourceAttribute\")}\n labelIcon={\n <HelpItem\n helpText={t(\"resourceAttributeHelp\")}\n fieldLabelId=\"resourceAttribute\"\n />\n }\n fieldId=\"resourceAttribute\"\n >\n <KeyValueInput name=\"attributes\" isDisabled={isDisabled} />\n </FormGroup>\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toAuthorizationTab({\n realm,\n clientId: id,\n tab: \"resources\",\n })}\n ></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n </div>\n </ActionGroup>\n </FormAccess>\n </FormProvider>\n </PageSection>\n </>\n );\n}\n"],"names":["ResourceDetails","adminClient","useAdminClient","t","useTranslation","client","setClient","useState","resource","setResource","permissions","setPermission","addAlert","addError","useAlerts","form","useForm","setValue","handleSubmit","id","resourceId","realm","useParams","navigate","useNavigate","setupForm","convertToFormValues","hasAccess","useAccess","isDisabled","useFetch","submit","submitted","convertFormValuesToObject","result","toResourceDetails","AlertVariant","error","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","jsxs","Fragment","jsx","Alert","permission","toAuthorizationTab","ViewHeader","DropdownItem","PageSection","FormProvider","FormAccess","TextControl","FormGroup","HelpItem","MultiLineInput","ScopePicker","DefaultSwitchControl","KeyValueInput","ActionGroup","Button","ButtonVariant","props","Link","KeycloakSpinner"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsxs as c, Fragment as D, jsx as t } from "react/jsx-runtime";
2
- import { u as w, ao as N, _ as z, S as F, b as k, y as C, aF as H, aq as l, V as U, K as P, P as V, F as q, c as x, Q as d, A as B, B as m, m as E, d as T } from "./index-YEmLy1gM.js";
2
+ import { u as w, ao as N, _ as z, S as F, b as k, y as C, aF as H, aq as l, V as U, K as P, P as V, F as q, c as x, Q as d, A as B, B as m, m as E, d as T } from "./index-Ddam0zn3.js";
3
3
  import { useState as j } from "react";
4
4
  import { useTranslation as K } from "react-i18next";
5
5
  import { useNavigate as Q, Link as _ } from "react-router-dom";
@@ -150,4 +150,4 @@ function R() {
150
150
  export {
151
151
  R as default
152
152
  };
153
- //# sourceMappingURL=ScopeDetails-dcHTfc9f.js.map
153
+ //# sourceMappingURL=ScopeDetails-BCjTo6cS.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScopeDetails-dcHTfc9f.js","sources":["../src/clients/authorization/ScopeDetails.tsx"],"sourcesContent":["import type ScopeRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/scopeRepresentation\";\nimport { TextControl, useAlerts, useFetch } from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useParams } from \"../../utils/useParams\";\nimport useToggle from \"../../utils/useToggle\";\nimport { toAuthorizationTab } from \"../routes/AuthenticationTab\";\nimport type { ScopeDetailsParams } from \"../routes/Scope\";\nimport { DeleteScopeDialog } from \"./DeleteScopeDialog\";\n\ntype FormFields = Omit<ScopeRepresentation, \"resources\">;\n\nexport default function ScopeDetails() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const { id, scopeId, realm } = useParams<ScopeDetailsParams>();\n const navigate = useNavigate();\n const { addAlert, addError } = useAlerts();\n const [deleteDialog, toggleDeleteDialog] = useToggle();\n const [scope, setScope] = useState<ScopeRepresentation>();\n const form = useForm<FormFields>({\n mode: \"onChange\",\n });\n const { reset, handleSubmit } = form;\n\n useFetch(\n async () => {\n if (scopeId) {\n const scope = await adminClient.clients.getAuthorizationScope({\n id,\n scopeId,\n });\n if (!scope) {\n throw new Error(t(\"notFound\"));\n }\n return scope;\n }\n },\n (scope) => {\n setScope(scope);\n reset({ ...scope });\n },\n [],\n );\n\n const onSubmit = async (scope: ScopeRepresentation) => {\n try {\n if (scopeId) {\n await adminClient.clients.updateAuthorizationScope(\n { id, scopeId },\n scope,\n );\n setScope(scope);\n } else {\n await adminClient.clients.createAuthorizationScope(\n { id },\n {\n name: scope.name!,\n displayName: scope.displayName,\n iconUri: scope.iconUri,\n },\n );\n navigate(toAuthorizationTab({ realm, clientId: id, tab: \"scopes\" }));\n }\n addAlert(\n t((scopeId ? \"update\" : \"create\") + \"ScopeSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"scopeSaveError\", error);\n }\n };\n\n return (\n <>\n <DeleteScopeDialog\n clientId={id}\n open={deleteDialog}\n toggleDialog={toggleDeleteDialog}\n selectedScope={scope}\n refresh={() =>\n navigate(toAuthorizationTab({ realm, clientId: id, tab: \"scopes\" }))\n }\n />\n <ViewHeader\n titleKey={scopeId ? scope?.name! : t(\"createAuthorizationScope\")}\n dropdownItems={\n scopeId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-resource\"\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormProvider {...form}>\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n onSubmit={handleSubmit(onSubmit)}\n >\n <TextControl\n name=\"name\"\n label={t(\"name\")}\n labelIcon={t(\"scopeNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"displayName\"\n label={t(\"displayName\")}\n labelIcon={t(\"scopeDisplayNameHelp\")}\n />\n <TextControl\n name=\"iconUri\"\n label={t(\"iconUri\")}\n labelIcon={t(\"iconUriHelp\")}\n />\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n\n {!scope ? (\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toAuthorizationTab({\n realm,\n clientId: id,\n tab: \"scopes\",\n })}\n ></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n ) : (\n <Button\n variant=\"link\"\n data-testid=\"revert\"\n onClick={() => reset({ ...scope })}\n >\n {t(\"revert\")}\n </Button>\n )}\n </div>\n </ActionGroup>\n </FormAccess>\n </FormProvider>\n </PageSection>\n </>\n );\n}\n"],"names":["ScopeDetails","adminClient","useAdminClient","t","useTranslation","id","scopeId","realm","useParams","navigate","useNavigate","addAlert","addError","useAlerts","deleteDialog","toggleDeleteDialog","useToggle","scope","setScope","useState","form","useForm","reset","handleSubmit","useFetch","onSubmit","toAuthorizationTab","AlertVariant","error","jsxs","Fragment","jsx","DeleteScopeDialog","ViewHeader","DropdownItem","PageSection","FormProvider","FormAccess","TextControl","ActionGroup","Button","ButtonVariant","props","Link"],"mappings":"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"}
1
+ {"version":3,"file":"ScopeDetails-BCjTo6cS.js","sources":["../src/clients/authorization/ScopeDetails.tsx"],"sourcesContent":["import type ScopeRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/scopeRepresentation\";\nimport { TextControl, useAlerts, useFetch } from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useParams } from \"../../utils/useParams\";\nimport useToggle from \"../../utils/useToggle\";\nimport { toAuthorizationTab } from \"../routes/AuthenticationTab\";\nimport type { ScopeDetailsParams } from \"../routes/Scope\";\nimport { DeleteScopeDialog } from \"./DeleteScopeDialog\";\n\ntype FormFields = Omit<ScopeRepresentation, \"resources\">;\n\nexport default function ScopeDetails() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const { id, scopeId, realm } = useParams<ScopeDetailsParams>();\n const navigate = useNavigate();\n const { addAlert, addError } = useAlerts();\n const [deleteDialog, toggleDeleteDialog] = useToggle();\n const [scope, setScope] = useState<ScopeRepresentation>();\n const form = useForm<FormFields>({\n mode: \"onChange\",\n });\n const { reset, handleSubmit } = form;\n\n useFetch(\n async () => {\n if (scopeId) {\n const scope = await adminClient.clients.getAuthorizationScope({\n id,\n scopeId,\n });\n if (!scope) {\n throw new Error(t(\"notFound\"));\n }\n return scope;\n }\n },\n (scope) => {\n setScope(scope);\n reset({ ...scope });\n },\n [],\n );\n\n const onSubmit = async (scope: ScopeRepresentation) => {\n try {\n if (scopeId) {\n await adminClient.clients.updateAuthorizationScope(\n { id, scopeId },\n scope,\n );\n setScope(scope);\n } else {\n await adminClient.clients.createAuthorizationScope(\n { id },\n {\n name: scope.name!,\n displayName: scope.displayName,\n iconUri: scope.iconUri,\n },\n );\n navigate(toAuthorizationTab({ realm, clientId: id, tab: \"scopes\" }));\n }\n addAlert(\n t((scopeId ? \"update\" : \"create\") + \"ScopeSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"scopeSaveError\", error);\n }\n };\n\n return (\n <>\n <DeleteScopeDialog\n clientId={id}\n open={deleteDialog}\n toggleDialog={toggleDeleteDialog}\n selectedScope={scope}\n refresh={() =>\n navigate(toAuthorizationTab({ realm, clientId: id, tab: \"scopes\" }))\n }\n />\n <ViewHeader\n titleKey={scopeId ? scope?.name! : t(\"createAuthorizationScope\")}\n dropdownItems={\n scopeId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-resource\"\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormProvider {...form}>\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n onSubmit={handleSubmit(onSubmit)}\n >\n <TextControl\n name=\"name\"\n label={t(\"name\")}\n labelIcon={t(\"scopeNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"displayName\"\n label={t(\"displayName\")}\n labelIcon={t(\"scopeDisplayNameHelp\")}\n />\n <TextControl\n name=\"iconUri\"\n label={t(\"iconUri\")}\n labelIcon={t(\"iconUriHelp\")}\n />\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n\n {!scope ? (\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toAuthorizationTab({\n realm,\n clientId: id,\n tab: \"scopes\",\n })}\n ></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n ) : (\n <Button\n variant=\"link\"\n data-testid=\"revert\"\n onClick={() => reset({ ...scope })}\n >\n {t(\"revert\")}\n </Button>\n )}\n </div>\n </ActionGroup>\n </FormAccess>\n </FormProvider>\n </PageSection>\n </>\n );\n}\n"],"names":["ScopeDetails","adminClient","useAdminClient","t","useTranslation","id","scopeId","realm","useParams","navigate","useNavigate","addAlert","addError","useAlerts","deleteDialog","toggleDeleteDialog","useToggle","scope","setScope","useState","form","useForm","reset","handleSubmit","useFetch","onSubmit","toAuthorizationTab","AlertVariant","error","jsxs","Fragment","jsx","DeleteScopeDialog","ViewHeader","DropdownItem","PageSection","FormProvider","FormAccess","TextControl","ActionGroup","Button","ButtonVariant","props","Link"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  import { jsx as n, jsxs as q, Fragment as F } from "react/jsx-runtime";
2
- import { u as y, ak as I, aU as P, y as O, as as T, au as j, al as k, am as z, an as G, ax as L, a7 as R, a4 as w } from "./index-YEmLy1gM.js";
2
+ import { u as y, ak as I, aV as P, y as O, as as T, au as j, al as k, am as z, an as G, ax as L, a7 as R, a4 as V } from "./index-Ddam0zn3.js";
3
3
  import { useState as c } from "react";
4
- import { useTranslation as H } from "react-i18next";
5
- const B = ({
4
+ import { useTranslation as w } from "react-i18next";
5
+ const D = ({
6
6
  clientId: m,
7
7
  resourceTypeScopes: r
8
8
  }) => {
9
- const { adminClient: S } = y(), { t: a } = H(), {
9
+ const { adminClient: S } = y(), { t: a } = w(), {
10
10
  control: f,
11
11
  formState: { errors: x }
12
12
  } = I(), [C, v] = c(!1), [p, A] = c(), [u, d] = c(""), o = P(m);
@@ -24,7 +24,7 @@ const B = ({
24
24
  A,
25
25
  [u]
26
26
  );
27
- const h = (e) => e.map((t, s) => /* @__PURE__ */ n(w, { value: t, children: typeof t == "string" ? t : t.name }, s));
27
+ const h = (e) => e.map((t, s) => /* @__PURE__ */ n(V, { value: t, children: typeof t == "string" ? t : t.name }, s));
28
28
  if (!p && !r) return /* @__PURE__ */ n(T, {});
29
29
  const g = o && r ? r : p?.map((e) => e.name);
30
30
  return /* @__PURE__ */ n(
@@ -80,6 +80,6 @@ const B = ({
80
80
  );
81
81
  };
82
82
  export {
83
- B as S
83
+ D as S
84
84
  };
85
- //# sourceMappingURL=ScopePicker-DNYZfIbU.js.map
85
+ //# sourceMappingURL=ScopePicker-Dd6Cs54v.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScopePicker-DNYZfIbU.js","sources":["../src/clients/authorization/ScopePicker.tsx"],"sourcesContent":["import type ScopeRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/scopeRepresentation\";\nimport {\n FormErrorText,\n HelpItem,\n KeycloakSelect,\n SelectVariant,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport { FormGroup, SelectOption } from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { KeycloakSpinner } from \"@keycloak/keycloak-ui-shared\";\nimport { useIsAdminPermissionsClient } from \"../../utils/useIsAdminPermissionsClient\";\n\ntype Scope = {\n id: string;\n name: string;\n};\n\ntype ScopePickerProps = {\n clientId: string;\n resourceTypeScopes?: string[];\n};\n\nexport const ScopePicker = ({\n clientId,\n resourceTypeScopes,\n}: ScopePickerProps) => {\n const { adminClient } = useAdminClient();\n const { t } = useTranslation();\n const {\n control,\n formState: { errors },\n } = useFormContext();\n const [open, setOpen] = useState(false);\n const [scopes, setScopes] = useState<ScopeRepresentation[]>();\n const [search, setSearch] = useState(\"\");\n const isAdminPermissionsClient = useIsAdminPermissionsClient(clientId);\n\n useFetch(\n () => {\n const params = {\n id: clientId,\n first: 0,\n max: 20,\n deep: false,\n name: search,\n };\n return adminClient.clients.listAllScopes(params);\n },\n setScopes,\n [search],\n );\n\n const renderScopes = (scopes: ScopeRepresentation[] | string[]) =>\n scopes.map((option, index) => (\n <SelectOption key={index} value={option}>\n {typeof option === \"string\" ? option : option.name}\n </SelectOption>\n ));\n\n if (!scopes && !resourceTypeScopes) return <KeycloakSpinner />;\n\n const allScopes =\n isAdminPermissionsClient && resourceTypeScopes\n ? resourceTypeScopes\n : scopes?.map((scope) => scope.name!);\n\n return (\n <FormGroup\n label={t(\"authorizationScopes\")}\n labelIcon={\n <HelpItem helpText={t(\"clientScopesHelp\")} fieldLabelId=\"scopes\" />\n }\n fieldId=\"scopes\"\n isRequired={isAdminPermissionsClient}\n >\n <Controller\n name=\"scopes\"\n defaultValue={[]}\n control={control}\n rules={isAdminPermissionsClient ? { required: t(\"requiredField\") } : {}}\n render={({ field }) => {\n const selectedValues = field.value.map((o: Scope) => o.name);\n return (\n <>\n <KeycloakSelect\n toggleId=\"scopes\"\n variant={SelectVariant.typeaheadMulti}\n chipGroupProps={{\n numChips: 3,\n expandedText: t(\"hide\"),\n collapsedText: t(\"showRemaining\"),\n }}\n onToggle={(val) => setOpen(val)}\n isOpen={open}\n selections={selectedValues}\n onFilter={(value) => {\n setSearch(value);\n return renderScopes(allScopes || []);\n }}\n onSelect={(selectedValue) => {\n const option =\n typeof selectedValue === \"string\"\n ? selectedValue\n : (selectedValue as Scope).name;\n const changedValue = field.value.find(\n (o: Scope) => o.name === option,\n )\n ? field.value.filter((item: Scope) => item.name !== option)\n : [...field.value, { name: option }];\n field.onChange(changedValue);\n }}\n onClear={() => {\n setSearch(\"\");\n field.onChange([]);\n }}\n typeAheadAriaLabel={t(\"authorizationScopes\")}\n >\n {renderScopes(allScopes || [])}\n </KeycloakSelect>\n {isAdminPermissionsClient && errors.scopes && (\n <FormErrorText message={t(\"required\")} />\n )}\n </>\n );\n }}\n />\n </FormGroup>\n );\n};\n"],"names":["ScopePicker","clientId","resourceTypeScopes","adminClient","useAdminClient","t","useTranslation","control","errors","useFormContext","open","setOpen","useState","scopes","setScopes","search","setSearch","isAdminPermissionsClient","useIsAdminPermissionsClient","useFetch","params","renderScopes","option","index","jsx","SelectOption","KeycloakSpinner","allScopes","scope","FormGroup","HelpItem","Controller","field","selectedValues","o","jsxs","Fragment","KeycloakSelect","SelectVariant","val","value","selectedValue","changedValue","item","FormErrorText"],"mappings":"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"}
1
+ {"version":3,"file":"ScopePicker-Dd6Cs54v.js","sources":["../src/clients/authorization/ScopePicker.tsx"],"sourcesContent":["import type ScopeRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/scopeRepresentation\";\nimport {\n FormErrorText,\n HelpItem,\n KeycloakSelect,\n SelectVariant,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport { FormGroup, SelectOption } from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { KeycloakSpinner } from \"@keycloak/keycloak-ui-shared\";\nimport { useIsAdminPermissionsClient } from \"../../utils/useIsAdminPermissionsClient\";\n\ntype Scope = {\n id: string;\n name: string;\n};\n\ntype ScopePickerProps = {\n clientId: string;\n resourceTypeScopes?: string[];\n};\n\nexport const ScopePicker = ({\n clientId,\n resourceTypeScopes,\n}: ScopePickerProps) => {\n const { adminClient } = useAdminClient();\n const { t } = useTranslation();\n const {\n control,\n formState: { errors },\n } = useFormContext();\n const [open, setOpen] = useState(false);\n const [scopes, setScopes] = useState<ScopeRepresentation[]>();\n const [search, setSearch] = useState(\"\");\n const isAdminPermissionsClient = useIsAdminPermissionsClient(clientId);\n\n useFetch(\n () => {\n const params = {\n id: clientId,\n first: 0,\n max: 20,\n deep: false,\n name: search,\n };\n return adminClient.clients.listAllScopes(params);\n },\n setScopes,\n [search],\n );\n\n const renderScopes = (scopes: ScopeRepresentation[] | string[]) =>\n scopes.map((option, index) => (\n <SelectOption key={index} value={option}>\n {typeof option === \"string\" ? option : option.name}\n </SelectOption>\n ));\n\n if (!scopes && !resourceTypeScopes) return <KeycloakSpinner />;\n\n const allScopes =\n isAdminPermissionsClient && resourceTypeScopes\n ? resourceTypeScopes\n : scopes?.map((scope) => scope.name!);\n\n return (\n <FormGroup\n label={t(\"authorizationScopes\")}\n labelIcon={\n <HelpItem helpText={t(\"clientScopesHelp\")} fieldLabelId=\"scopes\" />\n }\n fieldId=\"scopes\"\n isRequired={isAdminPermissionsClient}\n >\n <Controller\n name=\"scopes\"\n defaultValue={[]}\n control={control}\n rules={isAdminPermissionsClient ? { required: t(\"requiredField\") } : {}}\n render={({ field }) => {\n const selectedValues = field.value.map((o: Scope) => o.name);\n return (\n <>\n <KeycloakSelect\n toggleId=\"scopes\"\n variant={SelectVariant.typeaheadMulti}\n chipGroupProps={{\n numChips: 3,\n expandedText: t(\"hide\"),\n collapsedText: t(\"showRemaining\"),\n }}\n onToggle={(val) => setOpen(val)}\n isOpen={open}\n selections={selectedValues}\n onFilter={(value) => {\n setSearch(value);\n return renderScopes(allScopes || []);\n }}\n onSelect={(selectedValue) => {\n const option =\n typeof selectedValue === \"string\"\n ? selectedValue\n : (selectedValue as Scope).name;\n const changedValue = field.value.find(\n (o: Scope) => o.name === option,\n )\n ? field.value.filter((item: Scope) => item.name !== option)\n : [...field.value, { name: option }];\n field.onChange(changedValue);\n }}\n onClear={() => {\n setSearch(\"\");\n field.onChange([]);\n }}\n typeAheadAriaLabel={t(\"authorizationScopes\")}\n >\n {renderScopes(allScopes || [])}\n </KeycloakSelect>\n {isAdminPermissionsClient && errors.scopes && (\n <FormErrorText message={t(\"required\")} />\n )}\n </>\n );\n }}\n />\n </FormGroup>\n );\n};\n"],"names":["ScopePicker","clientId","resourceTypeScopes","adminClient","useAdminClient","t","useTranslation","control","errors","useFormContext","open","setOpen","useState","scopes","setScopes","search","setSearch","isAdminPermissionsClient","useIsAdminPermissionsClient","useFetch","params","renderScopes","option","index","jsx","SelectOption","KeycloakSpinner","allScopes","scope","FormGroup","HelpItem","Controller","field","selectedValues","o","jsxs","Fragment","KeycloakSelect","SelectVariant","val","value","selectedValue","changedValue","item","FormErrorText"],"mappings":"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"}