@keycloak/keycloak-admin-ui 26.2.5 → 26.3.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 (56) hide show
  1. package/lib/.vite/manifest.json +42 -32
  2. package/lib/AddOAuth2-Dp7xZXck.js +72 -0
  3. package/lib/AddOAuth2-Dp7xZXck.js.map +1 -0
  4. package/lib/{CreateFlow-CWB0JMn7.js → CreateFlow-DT9GA2KA.js} +6 -6
  5. package/lib/{CreateFlow-CWB0JMn7.js.map → CreateFlow-DT9GA2KA.js.map} +1 -1
  6. package/lib/{DetailOrganization-BBgiO-1J.js → DetailOrganization-eJc5QSWd.js} +46 -46
  7. package/lib/{DetailOrganization-BBgiO-1J.js.map → DetailOrganization-eJc5QSWd.js.map} +1 -1
  8. package/lib/{ExecutorForm-UDoSS486.js → ExecutorForm-CS2GUPzw.js} +16 -16
  9. package/lib/{ExecutorForm-UDoSS486.js.map → ExecutorForm-CS2GUPzw.js.map} +1 -1
  10. package/lib/{FlowDetails-CS5k-eyp.js → FlowDetails-BfBqe2qh.js} +20 -17
  11. package/lib/{FlowDetails-CS5k-eyp.js.map → FlowDetails-BfBqe2qh.js.map} +1 -1
  12. package/lib/NewOrganization-eAFJqcV7.js +36 -0
  13. package/lib/{NewOrganization-Bqe9gAvH.js.map → NewOrganization-eAFJqcV7.js.map} +1 -1
  14. package/lib/{PermissionConfigurationDetails-BC-CKsEm.js → PermissionConfigurationDetails-NLncm72q.js} +61 -61
  15. package/lib/{PermissionConfigurationDetails-BC-CKsEm.js.map → PermissionConfigurationDetails-NLncm72q.js.map} +1 -1
  16. package/lib/{PermissionDetails-BgU8fw67.js → PermissionDetails-jXYUQx9h.js} +66 -66
  17. package/lib/{PermissionDetails-BgU8fw67.js.map → PermissionDetails-jXYUQx9h.js.map} +1 -1
  18. package/lib/{RealmSection-BcfZPWn1.js → RealmSection-DapWaHXV.js} +18 -18
  19. package/lib/{RealmSection-BcfZPWn1.js.map → RealmSection-DapWaHXV.js.map} +1 -1
  20. package/lib/{ResourceDetails-BxVNBjFH.js → ResourceDetails-Rw_lyxQA.js} +36 -36
  21. package/lib/{ResourceDetails-BxVNBjFH.js.map → ResourceDetails-Rw_lyxQA.js.map} +1 -1
  22. package/lib/{ScopeDetails-B7fOqprY.js → ScopeDetails-AqQr7pSf.js} +12 -12
  23. package/lib/{ScopeDetails-B7fOqprY.js.map → ScopeDetails-AqQr7pSf.js.map} +1 -1
  24. package/lib/{ScopePicker-BkvQJ5Lq.js → ScopePicker-B-NlVPQJ.js} +15 -15
  25. package/lib/{ScopePicker-BkvQJ5Lq.js.map → ScopePicker-B-NlVPQJ.js.map} +1 -1
  26. package/lib/clients/keys/ImportKeyDialog.d.ts +1 -4
  27. package/lib/clients/keys/SamlImportKeyDialog.d.ts +2 -1
  28. package/lib/components/key-value-form/KeyValueInput.d.ts +11 -3
  29. package/lib/components/role-mapping/AddRoleMappingModal.d.ts +11 -1
  30. package/lib/context/realm-context/useHash.d.ts +1 -0
  31. package/lib/identity-providers/add/AddOAuth2.d.ts +1 -0
  32. package/lib/identity-providers/add/AdvancedSettings.d.ts +2 -1
  33. package/lib/identity-providers/add/DiscoverySettings.d.ts +2 -1
  34. package/lib/identity-providers/add/ExtendedOAuth2Settings.d.ts +1 -0
  35. package/lib/identity-providers/add/OAuth2UserProfileClaimsSettings.d.ts +1 -0
  36. package/lib/identity-providers/add/OpenIdConnectSettings.d.ts +5 -1
  37. package/lib/identity-providers/routes/IdentityProviderOAuth2.d.ts +2 -0
  38. package/lib/{index-Cf5P7Xi4.js → index-BB_cYBCp.js} +22030 -21863
  39. package/lib/{index-Cf5P7Xi4.js.map → index-BB_cYBCp.js.map} +1 -1
  40. package/lib/index.d.ts +2 -2
  41. package/lib/keycloak-admin-ui.css +1 -1
  42. package/lib/keycloak-admin-ui.js +39 -39
  43. package/lib/realm-settings/event-config/EventsTypeTable.d.ts +2 -1
  44. package/lib/realm-settings/security-defences/Time.d.ts +2 -1
  45. package/lib/realm-settings/themes/FileNameDialog.d.ts +6 -0
  46. package/lib/realm-settings/themes/ThemesTab.d.ts +1 -0
  47. package/lib/realm-settings/themes/UploadJar.d.ts +6 -0
  48. package/lib/realm-settings/user-profile/attribute/AddTranslationsDialog.d.ts +2 -1
  49. package/lib/{components/key-value-form → realm-settings/user-profile/attribute}/KeySelect.d.ts +2 -2
  50. package/lib/realm-settings/user-profile/attribute/TranslatableField.d.ts +2 -1
  51. package/lib/realm-settings/user-profile/attribute/ValueSelect.d.ts +6 -0
  52. package/lib/user/user-credentials/CredentialDataDialog.d.ts +2 -1
  53. package/lib/utils/useIsFeatureEnabled.d.ts +2 -1
  54. package/package.json +19 -18
  55. package/lib/NewOrganization-Bqe9gAvH.js +0 -36
  56. package/lib/components/key-value-form/ValueSelect.d.ts +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionDetails-BgU8fw67.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
+ {"version":3,"file":"PermissionDetails-jXYUQx9h.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,10 +1,10 @@
1
1
  import { jsxs as u, Fragment as g, jsx as e } from "react/jsx-runtime";
2
- import { aW as T, a as V, u as B, V as L, aa as W, aX as $, c as j, P as M, aY as H, aZ as D, a_ as J, a$ as k, b0 as U, b1 as X, af as f, B as Y, b2 as Z, b3 as _, b4 as q, I as S, J as K, K as O, O as v, b5 as z, e as G, b6 as Q } from "./index-Cf5P7Xi4.js";
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-BB_cYBCp.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";
6
6
  const te = () => {
7
- const { t: n } = p(), [o, i] = m(!1), l = q();
7
+ const { t: n } = p(), [o, i] = m(!1), l = G();
8
8
  return l.length < 3 ? null : /* @__PURE__ */ e(
9
9
  S,
10
10
  {
@@ -47,7 +47,7 @@ const te = () => {
47
47
  onClick: () => t(!l),
48
48
  variant: "plain",
49
49
  isDisabled: o,
50
- children: /* @__PURE__ */ e(z, {})
50
+ children: /* @__PURE__ */ e(Q, {})
51
51
  }
52
52
  ),
53
53
  isOpen: l,
@@ -65,15 +65,15 @@ const te = () => {
65
65
  );
66
66
  };
67
67
  function ie() {
68
- const { t: n } = p(), o = ee(), { whoAmI: i } = T(), { realm: l } = V(), { adminClient: t } = B(), { addAlert: s, addError: I } = L(), [c, h] = m([]), [N, b] = m(!1), [R, x] = m(0), C = () => x(R + 1), F = async (a, r, E) => {
68
+ const { t: n } = p(), o = ee(), { whoAmI: i } = T(), { realm: l } = B(), { adminClient: t } = L(), { addAlert: s, addError: I } = V(), [c, h] = m([]), [x, b] = m(!1), [R, N] = m(0), C = () => N(R + 1), F = async (a, r, E) => {
69
69
  try {
70
- return (await Z(
70
+ return (await q(
71
71
  t,
72
72
  "ui-ext/realms/names",
73
73
  { first: `${a}`, max: `${r}`, search: E || "" }
74
74
  )).map((y) => ({ ...y, id: y.name }));
75
75
  } catch (d) {
76
- if (d instanceof _ && d.response.status < 500)
76
+ if (d instanceof z && d.response.status < 500)
77
77
  return [];
78
78
  throw d;
79
79
  }
@@ -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"), G.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(Q({ realm: "master" })), C(), h([]);
96
+ ), s(n("deletedSuccessRealmSetting")), c.filter(({ name: r }) => r === l).length > 0 && o($({ realm: "master" })), C(), h([]);
97
97
  } catch (a) {
98
98
  I("deleteError", a);
99
99
  }
@@ -101,17 +101,17 @@ function ie() {
101
101
  });
102
102
  return /* @__PURE__ */ u(g, { children: [
103
103
  /* @__PURE__ */ e(P, {}),
104
- N && /* @__PURE__ */ e(
105
- $,
104
+ x && /* @__PURE__ */ e(
105
+ j,
106
106
  {
107
107
  onClose: () => {
108
108
  b(!1), C();
109
109
  }
110
110
  }
111
111
  ),
112
- /* @__PURE__ */ e(j, { titleKey: "manageRealms", divider: !1 }),
113
- /* @__PURE__ */ e(M, { variant: "light", className: "pf-v5-u-p-0", children: /* @__PURE__ */ e(
114
- H,
112
+ /* @__PURE__ */ e(M, { titleKey: "manageRealms", divider: !1 }),
113
+ /* @__PURE__ */ e(H, { variant: "light", className: "pf-v5-u-p-0", children: /* @__PURE__ */ e(
114
+ J,
115
115
  {
116
116
  loader: F,
117
117
  isPaginated: !0,
@@ -129,7 +129,7 @@ function ie() {
129
129
  ],
130
130
  toolbarItem: /* @__PURE__ */ u(g, { children: [
131
131
  /* @__PURE__ */ e(f, { children: i.canCreateRealm() && /* @__PURE__ */ e(
132
- Y,
132
+ Z,
133
133
  {
134
134
  onClick: () => b(!0),
135
135
  "data-testid": "add-realm",
@@ -150,14 +150,14 @@ function ie() {
150
150
  name: "name",
151
151
  transforms: [D(20)],
152
152
  cellRenderer: ({ name: a }) => a !== l ? /* @__PURE__ */ e(A, { to: k({ realm: a }), children: a }) : /* @__PURE__ */ e(
153
- U,
153
+ X,
154
154
  {
155
155
  bodyContent: n("currentRealmExplain"),
156
156
  triggerAction: "hover",
157
157
  children: /* @__PURE__ */ u(g, { children: [
158
158
  a,
159
159
  " ",
160
- /* @__PURE__ */ e(X, { isRead: !0, children: n("currentRealm") })
160
+ /* @__PURE__ */ e(Y, { isRead: !0, children: n("currentRealm") })
161
161
  ] })
162
162
  }
163
163
  )
@@ -165,7 +165,7 @@ function ie() {
165
165
  {
166
166
  name: "displayName",
167
167
  transforms: [D(80)],
168
- cellFormatters: [J(n)]
168
+ cellFormatters: [U(n)]
169
169
  }
170
170
  ]
171
171
  },
@@ -176,4 +176,4 @@ function ie() {
176
176
  export {
177
177
  ie as default
178
178
  };
179
- //# sourceMappingURL=RealmSection-BcfZPWn1.js.map
179
+ //# sourceMappingURL=RealmSection-DapWaHXV.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RealmSection-BcfZPWn1.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.canCreateRealm() && (\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-DapWaHXV.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.canCreateRealm() && (\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,14 +1,14 @@
1
1
  import { jsxs as c, Fragment as y, jsx as a } from "react/jsx-runtime";
2
- import { u as L, V as _, b as q, ao as E, ap as z, n as K, aa as M, aA as j, ar as O, c as U, K as G, P as Y, F as W, d as J, Y as i, at as A, aB as Q, a7 as w, aC as X, aD as Z, A as $, B as D, l as ee, ay as R, a3 as ae, aE as re, e as P, a2 as se } from "./index-Cf5P7Xi4.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-BB_cYBCp.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 le } from "./ScopePicker-BkvQJ5Lq.js";
6
+ import { S as ie } from "./ScopePicker-B-NlVPQJ.js";
7
7
  function be() {
8
- const { adminClient: o } = L(), { t: e } = te(), [m, C] = d(), [N, p] = d(), [b, F] = d(), { addAlert: h, addError: f } = _(), g = q({
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"
10
- }), { setValue: H, handleSubmit: S } = g, { id: t, resourceId: s, realm: u } = E(), I = oe(), V = (r = {}) => {
11
- se(r, H);
10
+ }), { setValue: H, handleSubmit: S } = I, { id: t, resourceId: s, realm: u } = E(), g = oe(), V = (r = {}) => {
11
+ ae(r, H);
12
12
  }, { hasAccess: T } = z(), v = !T("manage-authorization");
13
13
  K(
14
14
  () => Promise.all([
@@ -16,33 +16,33 @@ function be() {
16
16
  s ? o.clients.getResource({ id: t, resourceId: s }) : Promise.resolve(void 0),
17
17
  s ? o.clients.listPermissionsByResource({ id: t, resourceId: s }) : Promise.resolve(void 0)
18
18
  ]),
19
- ([r, n, l]) => {
19
+ ([r, n, i]) => {
20
20
  if (!r)
21
21
  throw new Error(e("notFound"));
22
- C(r), F(l), p(n), V(n);
22
+ C(r), F(i), p(n), V(n);
23
23
  },
24
24
  []
25
25
  );
26
- const B = async (r) => {
27
- const n = ae(r);
26
+ const _ = async (r) => {
27
+ const n = re(r);
28
28
  try {
29
29
  if (s)
30
30
  await o.clients.updateResource({ id: t, resourceId: s }, n);
31
31
  else {
32
- const l = await o.clients.createResource(
32
+ const i = await o.clients.createResource(
33
33
  { id: t },
34
34
  n
35
35
  );
36
- p(n), I(re({ realm: u, id: t, resourceId: l._id }));
36
+ p(n), g(se({ realm: u, id: t, resourceId: i._id }));
37
37
  }
38
38
  h(
39
39
  e((s ? "update" : "create") + "ResourceSuccess"),
40
- P.success
40
+ A.success
41
41
  );
42
- } catch (l) {
43
- f("resourceSaveError", l);
42
+ } catch (i) {
43
+ f("resourceSaveError", i);
44
44
  }
45
- }, [k, x] = M({
45
+ }, [B, k] = M({
46
46
  titleKey: "deleteResource",
47
47
  children: /* @__PURE__ */ c(y, { children: [
48
48
  e("deleteResourceConfirm"),
@@ -64,14 +64,14 @@ function be() {
64
64
  await o.clients.delResource({
65
65
  id: t,
66
66
  resourceId: s
67
- }), h(e("resourceDeletedSuccess"), P.success), I(R({ realm: u, clientId: t, tab: "resources" }));
67
+ }), h(e("resourceDeletedSuccess"), A.success), g(w({ realm: u, clientId: t, tab: "resources" }));
68
68
  } catch (r) {
69
69
  f("resourceDeletedError", r);
70
70
  }
71
71
  }
72
72
  });
73
73
  return m ? /* @__PURE__ */ c(y, { children: [
74
- /* @__PURE__ */ a(x, {}),
74
+ /* @__PURE__ */ a(k, {}),
75
75
  /* @__PURE__ */ a(
76
76
  U,
77
77
  {
@@ -82,7 +82,7 @@ function be() {
82
82
  {
83
83
  "data-testid": "delete-resource",
84
84
  isDisabled: v,
85
- onClick: () => k(),
85
+ onClick: () => B(),
86
86
  children: e("delete")
87
87
  },
88
88
  "delete"
@@ -90,16 +90,16 @@ function be() {
90
90
  ] : void 0
91
91
  }
92
92
  ),
93
- /* @__PURE__ */ a(Y, { variant: "light", children: /* @__PURE__ */ a(W, { ...g, children: /* @__PURE__ */ c(
93
+ /* @__PURE__ */ a(Q, { variant: "light", children: /* @__PURE__ */ a(W, { ...I, children: /* @__PURE__ */ c(
94
94
  J,
95
95
  {
96
96
  isHorizontal: !0,
97
97
  role: "manage-authorization",
98
98
  className: "keycloak__resource-details__form",
99
- onSubmit: S(B),
99
+ onSubmit: S(_),
100
100
  children: [
101
101
  /* @__PURE__ */ a(
102
- i,
102
+ l,
103
103
  {
104
104
  name: s ? "owner.name" : "",
105
105
  label: e("owner"),
@@ -109,7 +109,7 @@ function be() {
109
109
  }
110
110
  ),
111
111
  /* @__PURE__ */ a(
112
- i,
112
+ l,
113
113
  {
114
114
  name: "name",
115
115
  label: e("name"),
@@ -118,7 +118,7 @@ function be() {
118
118
  }
119
119
  ),
120
120
  /* @__PURE__ */ a(
121
- i,
121
+ l,
122
122
  {
123
123
  name: "displayName",
124
124
  label: e("displayName"),
@@ -127,7 +127,7 @@ function be() {
127
127
  }
128
128
  ),
129
129
  /* @__PURE__ */ a(
130
- i,
130
+ l,
131
131
  {
132
132
  name: "type",
133
133
  label: e("type"),
@@ -135,13 +135,13 @@ function be() {
135
135
  }
136
136
  ),
137
137
  /* @__PURE__ */ a(
138
- A,
138
+ D,
139
139
  {
140
140
  label: e("uris"),
141
141
  fieldId: "uris",
142
- labelIcon: /* @__PURE__ */ a(w, { helpText: e("urisHelp"), fieldLabelId: "uris" }),
142
+ labelIcon: /* @__PURE__ */ a(R, { helpText: e("urisHelp"), fieldLabelId: "uris" }),
143
143
  children: /* @__PURE__ */ a(
144
- Q,
144
+ X,
145
145
  {
146
146
  name: "uris",
147
147
  type: "url",
@@ -151,9 +151,9 @@ function be() {
151
151
  )
152
152
  }
153
153
  ),
154
- /* @__PURE__ */ a(le, { clientId: t }),
154
+ /* @__PURE__ */ a(ie, { clientId: t }),
155
155
  /* @__PURE__ */ a(
156
- i,
156
+ l,
157
157
  {
158
158
  name: "icon_uri",
159
159
  label: e("iconUri"),
@@ -162,7 +162,7 @@ function be() {
162
162
  }
163
163
  ),
164
164
  /* @__PURE__ */ a(
165
- X,
165
+ Y,
166
166
  {
167
167
  name: "ownerManagedAccess",
168
168
  label: e("ownerManagedAccess"),
@@ -170,12 +170,12 @@ function be() {
170
170
  }
171
171
  ),
172
172
  /* @__PURE__ */ a(
173
- A,
173
+ D,
174
174
  {
175
175
  hasNoPaddingTop: !0,
176
176
  label: e("resourceAttribute"),
177
177
  labelIcon: /* @__PURE__ */ a(
178
- w,
178
+ R,
179
179
  {
180
180
  helpText: e("resourceAttributeHelp"),
181
181
  fieldLabelId: "resourceAttribute"
@@ -187,7 +187,7 @@ function be() {
187
187
  ),
188
188
  /* @__PURE__ */ a($, { children: /* @__PURE__ */ c("div", { className: "pf-v5-u-mt-md", children: [
189
189
  /* @__PURE__ */ a(
190
- D,
190
+ P,
191
191
  {
192
192
  variant: ee.primary,
193
193
  type: "submit",
@@ -196,7 +196,7 @@ function be() {
196
196
  }
197
197
  ),
198
198
  /* @__PURE__ */ a(
199
- D,
199
+ P,
200
200
  {
201
201
  variant: "link",
202
202
  "data-testid": "cancel",
@@ -204,7 +204,7 @@ function be() {
204
204
  ne,
205
205
  {
206
206
  ...r,
207
- to: R({
207
+ to: w({
208
208
  realm: u,
209
209
  clientId: t,
210
210
  tab: "resources"
@@ -223,4 +223,4 @@ function be() {
223
223
  export {
224
224
  be as default
225
225
  };
226
- //# sourceMappingURL=ResourceDetails-BxVNBjFH.js.map
226
+ //# sourceMappingURL=ResourceDetails-Rw_lyxQA.js.map