@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.
- package/lib/.vite/manifest.json +42 -32
- package/lib/AddOAuth2-Dp7xZXck.js +72 -0
- package/lib/AddOAuth2-Dp7xZXck.js.map +1 -0
- package/lib/{CreateFlow-CWB0JMn7.js → CreateFlow-DT9GA2KA.js} +6 -6
- package/lib/{CreateFlow-CWB0JMn7.js.map → CreateFlow-DT9GA2KA.js.map} +1 -1
- package/lib/{DetailOrganization-BBgiO-1J.js → DetailOrganization-eJc5QSWd.js} +46 -46
- package/lib/{DetailOrganization-BBgiO-1J.js.map → DetailOrganization-eJc5QSWd.js.map} +1 -1
- package/lib/{ExecutorForm-UDoSS486.js → ExecutorForm-CS2GUPzw.js} +16 -16
- package/lib/{ExecutorForm-UDoSS486.js.map → ExecutorForm-CS2GUPzw.js.map} +1 -1
- package/lib/{FlowDetails-CS5k-eyp.js → FlowDetails-BfBqe2qh.js} +20 -17
- package/lib/{FlowDetails-CS5k-eyp.js.map → FlowDetails-BfBqe2qh.js.map} +1 -1
- package/lib/NewOrganization-eAFJqcV7.js +36 -0
- package/lib/{NewOrganization-Bqe9gAvH.js.map → NewOrganization-eAFJqcV7.js.map} +1 -1
- package/lib/{PermissionConfigurationDetails-BC-CKsEm.js → PermissionConfigurationDetails-NLncm72q.js} +61 -61
- package/lib/{PermissionConfigurationDetails-BC-CKsEm.js.map → PermissionConfigurationDetails-NLncm72q.js.map} +1 -1
- package/lib/{PermissionDetails-BgU8fw67.js → PermissionDetails-jXYUQx9h.js} +66 -66
- package/lib/{PermissionDetails-BgU8fw67.js.map → PermissionDetails-jXYUQx9h.js.map} +1 -1
- package/lib/{RealmSection-BcfZPWn1.js → RealmSection-DapWaHXV.js} +18 -18
- package/lib/{RealmSection-BcfZPWn1.js.map → RealmSection-DapWaHXV.js.map} +1 -1
- package/lib/{ResourceDetails-BxVNBjFH.js → ResourceDetails-Rw_lyxQA.js} +36 -36
- package/lib/{ResourceDetails-BxVNBjFH.js.map → ResourceDetails-Rw_lyxQA.js.map} +1 -1
- package/lib/{ScopeDetails-B7fOqprY.js → ScopeDetails-AqQr7pSf.js} +12 -12
- package/lib/{ScopeDetails-B7fOqprY.js.map → ScopeDetails-AqQr7pSf.js.map} +1 -1
- package/lib/{ScopePicker-BkvQJ5Lq.js → ScopePicker-B-NlVPQJ.js} +15 -15
- package/lib/{ScopePicker-BkvQJ5Lq.js.map → ScopePicker-B-NlVPQJ.js.map} +1 -1
- package/lib/clients/keys/ImportKeyDialog.d.ts +1 -4
- package/lib/clients/keys/SamlImportKeyDialog.d.ts +2 -1
- package/lib/components/key-value-form/KeyValueInput.d.ts +11 -3
- package/lib/components/role-mapping/AddRoleMappingModal.d.ts +11 -1
- package/lib/context/realm-context/useHash.d.ts +1 -0
- package/lib/identity-providers/add/AddOAuth2.d.ts +1 -0
- package/lib/identity-providers/add/AdvancedSettings.d.ts +2 -1
- package/lib/identity-providers/add/DiscoverySettings.d.ts +2 -1
- package/lib/identity-providers/add/ExtendedOAuth2Settings.d.ts +1 -0
- package/lib/identity-providers/add/OAuth2UserProfileClaimsSettings.d.ts +1 -0
- package/lib/identity-providers/add/OpenIdConnectSettings.d.ts +5 -1
- package/lib/identity-providers/routes/IdentityProviderOAuth2.d.ts +2 -0
- package/lib/{index-Cf5P7Xi4.js → index-BB_cYBCp.js} +22030 -21863
- package/lib/{index-Cf5P7Xi4.js.map → index-BB_cYBCp.js.map} +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/keycloak-admin-ui.css +1 -1
- package/lib/keycloak-admin-ui.js +39 -39
- package/lib/realm-settings/event-config/EventsTypeTable.d.ts +2 -1
- package/lib/realm-settings/security-defences/Time.d.ts +2 -1
- package/lib/realm-settings/themes/FileNameDialog.d.ts +6 -0
- package/lib/realm-settings/themes/ThemesTab.d.ts +1 -0
- package/lib/realm-settings/themes/UploadJar.d.ts +6 -0
- package/lib/realm-settings/user-profile/attribute/AddTranslationsDialog.d.ts +2 -1
- package/lib/{components/key-value-form → realm-settings/user-profile/attribute}/KeySelect.d.ts +2 -2
- package/lib/realm-settings/user-profile/attribute/TranslatableField.d.ts +2 -1
- package/lib/realm-settings/user-profile/attribute/ValueSelect.d.ts +6 -0
- package/lib/user/user-credentials/CredentialDataDialog.d.ts +2 -1
- package/lib/utils/useIsFeatureEnabled.d.ts +2 -1
- package/package.json +19 -18
- package/lib/NewOrganization-Bqe9gAvH.js +0 -36
- 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
|
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 =
|
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(
|
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 } =
|
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
|
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
|
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"),
|
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(
|
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
|
-
|
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(
|
113
|
-
/* @__PURE__ */ e(
|
114
|
-
|
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
|
-
|
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
|
-
|
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(
|
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: [
|
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-
|
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
|
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
|
6
|
+
import { S as ie } from "./ScopePicker-B-NlVPQJ.js";
|
7
7
|
function be() {
|
8
|
-
const { adminClient: o } =
|
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 } =
|
11
|
-
|
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,
|
19
|
+
([r, n, i]) => {
|
20
20
|
if (!r)
|
21
21
|
throw new Error(e("notFound"));
|
22
|
-
C(r), F(
|
22
|
+
C(r), F(i), p(n), V(n);
|
23
23
|
},
|
24
24
|
[]
|
25
25
|
);
|
26
|
-
const
|
27
|
-
const n =
|
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
|
32
|
+
const i = await o.clients.createResource(
|
33
33
|
{ id: t },
|
34
34
|
n
|
35
35
|
);
|
36
|
-
p(n),
|
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
|
-
|
40
|
+
A.success
|
41
41
|
);
|
42
|
-
} catch (
|
43
|
-
f("resourceSaveError",
|
42
|
+
} catch (i) {
|
43
|
+
f("resourceSaveError", i);
|
44
44
|
}
|
45
|
-
}, [
|
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"),
|
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(
|
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: () =>
|
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(
|
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(
|
99
|
+
onSubmit: S(_),
|
100
100
|
children: [
|
101
101
|
/* @__PURE__ */ a(
|
102
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
138
|
+
D,
|
139
139
|
{
|
140
140
|
label: e("uris"),
|
141
141
|
fieldId: "uris",
|
142
|
-
labelIcon: /* @__PURE__ */ a(
|
142
|
+
labelIcon: /* @__PURE__ */ a(R, { helpText: e("urisHelp"), fieldLabelId: "uris" }),
|
143
143
|
children: /* @__PURE__ */ a(
|
144
|
-
|
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(
|
154
|
+
/* @__PURE__ */ a(ie, { clientId: t }),
|
155
155
|
/* @__PURE__ */ a(
|
156
|
-
|
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
|
-
|
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
|
-
|
173
|
+
D,
|
174
174
|
{
|
175
175
|
hasNoPaddingTop: !0,
|
176
176
|
label: e("resourceAttribute"),
|
177
177
|
labelIcon: /* @__PURE__ */ a(
|
178
|
-
|
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
|
-
|
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
|
-
|
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:
|
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-
|
226
|
+
//# sourceMappingURL=ResourceDetails-Rw_lyxQA.js.map
|