@keycloak/keycloak-admin-ui 26.2.2 → 26.2.3
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 +28 -28
- package/lib/{CreateFlow-C8ou3z3D.js → CreateFlow-D4uM_8WC.js} +2 -2
- package/lib/{CreateFlow-C8ou3z3D.js.map → CreateFlow-D4uM_8WC.js.map} +1 -1
- package/lib/{DetailOrganization-ChDFPj6w.js → DetailOrganization-COJeYoGE.js} +2 -2
- package/lib/{DetailOrganization-ChDFPj6w.js.map → DetailOrganization-COJeYoGE.js.map} +1 -1
- package/lib/{ExecutorForm-CqhYZ9zD.js → ExecutorForm-BxTSytPh.js} +2 -2
- package/lib/{ExecutorForm-CqhYZ9zD.js.map → ExecutorForm-BxTSytPh.js.map} +1 -1
- package/lib/{FlowDetails-BYnrUM6B.js → FlowDetails-nR6R7QwB.js} +6 -4
- package/lib/{FlowDetails-BYnrUM6B.js.map → FlowDetails-nR6R7QwB.js.map} +1 -1
- package/lib/{NewOrganization-IjGiIFRg.js → NewOrganization-C8OgoMUL.js} +2 -2
- package/lib/{NewOrganization-IjGiIFRg.js.map → NewOrganization-C8OgoMUL.js.map} +1 -1
- package/lib/PermissionConfigurationDetails-0hvEwSNW.js +704 -0
- package/lib/PermissionConfigurationDetails-0hvEwSNW.js.map +1 -0
- package/lib/{PermissionDetails-FszJtVpG.js → PermissionDetails-ATEUBMrD.js} +2 -2
- package/lib/{PermissionDetails-FszJtVpG.js.map → PermissionDetails-ATEUBMrD.js.map} +1 -1
- package/lib/{RealmSection-BkVmYRIb.js → RealmSection-DEj7Pofo.js} +2 -2
- package/lib/{RealmSection-BkVmYRIb.js.map → RealmSection-DEj7Pofo.js.map} +1 -1
- package/lib/{ResourceDetails-Br81AEgO.js → ResourceDetails-C88S7tXu.js} +3 -3
- package/lib/{ResourceDetails-Br81AEgO.js.map → ResourceDetails-C88S7tXu.js.map} +1 -1
- package/lib/{ScopeDetails-nDvWwhgg.js → ScopeDetails-BLW92hEw.js} +2 -2
- package/lib/{ScopeDetails-nDvWwhgg.js.map → ScopeDetails-BLW92hEw.js.map} +1 -1
- package/lib/{ScopePicker-kvjSuh0C.js → ScopePicker-Cbywl8IC.js} +2 -2
- package/lib/{ScopePicker-kvjSuh0C.js.map → ScopePicker-Cbywl8IC.js.map} +1 -1
- package/lib/clients/keys/Keys.d.ts +2 -1
- package/lib/{index-CRHbhwXr.js → index-Bd4uRM2j.js} +5692 -5682
- package/lib/{index-CRHbhwXr.js.map → index-Bd4uRM2j.js.map} +1 -1
- package/lib/keycloak-admin-ui.js +1 -1
- package/package.json +3 -3
- package/lib/PermissionConfigurationDetails-B_xt8b5a.js +0 -702
- package/lib/PermissionConfigurationDetails-B_xt8b5a.js.map +0 -1
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"PermissionConfigurationDetails-0hvEwSNW.js","sources":["../src/permissions-configuration/permission-configuration/NewPermissionPolicyDialog.tsx","../src/permissions-configuration/permission-configuration/ExistingPoliciesDialog.tsx","../src/permissions-configuration/permission-configuration/AssignedPolicies.tsx","../src/permissions-configuration/permission-configuration/PermissionConfigurationDetails.tsx"],"sourcesContent":["import PolicyRepresentation, {\n DecisionStrategy,\n Logic,\n} from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport PolicyProviderRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyProviderRepresentation\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n Modal,\n ModalVariant,\n TextContent,\n Text,\n TextVariants,\n ActionGroup,\n Button,\n Form,\n ButtonVariant,\n AlertVariant,\n} from \"@patternfly/react-core\";\nimport {\n SelectControl,\n TextControl,\n useAlerts,\n} from \"@keycloak/keycloak-ui-shared\";\nimport { FormProvider, useForm, useWatch } from \"react-hook-form\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { useRealm } from \"../../context/realm-context/RealmContext\";\nimport { Client } from \"../../clients/authorization/policy/Client\";\nimport { User } from \"../../clients/authorization/policy/User\";\nimport {\n ClientScope,\n RequiredIdValue,\n} from \"../../clients/authorization/policy/ClientScope\";\nimport { Group, GroupValue } from \"../../clients/authorization/policy/Group\";\nimport { Regex } from \"../../clients/authorization/policy/Regex\";\nimport { Role } from \"../../clients/authorization/policy/Role\";\nimport { Time } from \"../../clients/authorization/policy/Time\";\nimport { JavaScript } from \"../../clients/authorization/policy/JavaScript\";\nimport { LogicSelector } from \"../../clients/authorization/policy/LogicSelector\";\nimport { Aggregate } from \"../../clients/authorization/policy/Aggregate\";\nimport { capitalize } from \"lodash-es\";\nimport { useEffect, type JSX } from \"react\";\n\ntype Policy = Omit<PolicyRepresentation, \"roles\"> & {\n groups?: GroupValue[];\n clientScopes?: RequiredIdValue[];\n roles?: RequiredIdValue[];\n clients?: [];\n};\n\ntype ComponentsProps = {\n isPermissionClient?: boolean;\n permissionClientId: string;\n};\n\nconst defaultValues: Policy = {\n name: \"\",\n description: \"\",\n type: \"group\",\n policies: [],\n decisionStrategy: DecisionStrategy.UNANIMOUS,\n logic: Logic.POSITIVE,\n};\n\nconst COMPONENTS: {\n [index: string]: ({\n isPermissionClient,\n permissionClientId,\n }: ComponentsProps) => JSX.Element;\n} = {\n aggregate: Aggregate,\n client: Client,\n user: User,\n \"client-scope\": ClientScope,\n group: Group,\n regex: Regex,\n role: Role,\n time: Time,\n js: JavaScript,\n default: Group,\n} as const;\n\nexport const isValidComponentType = (value: string) => value in COMPONENTS;\n\ntype NewPermissionConfigurationDialogProps = {\n permissionClientId: string;\n providers: PolicyProviderRepresentation[];\n policies: PolicyRepresentation[];\n resourceType: string;\n toggleDialog: () => void;\n onAssign: (newPolicy: PolicyRepresentation) => void;\n};\n\nexport const NewPermissionPolicyDialog = ({\n permissionClientId,\n providers,\n policies,\n toggleDialog,\n onAssign,\n}: NewPermissionConfigurationDialogProps) => {\n const { adminClient } = useAdminClient();\n const { realmRepresentation } = useRealm();\n const { t } = useTranslation();\n const form = useForm<Policy>({\n mode: \"onChange\",\n defaultValues,\n });\n const { addAlert, addError } = useAlerts();\n const { handleSubmit, reset } = form;\n const isPermissionClient = realmRepresentation?.adminPermissionsEnabled;\n\n const policyTypeSelector = useWatch({\n control: form.control,\n name: \"type\",\n });\n\n function getComponentType() {\n if (policyTypeSelector && isValidComponentType(policyTypeSelector)) {\n return COMPONENTS[policyTypeSelector];\n }\n return COMPONENTS[\"default\"];\n }\n\n const ComponentType = getComponentType();\n\n useEffect(() => {\n if (policyTypeSelector) {\n const { name, description, decisionStrategy, logic } = form.getValues();\n\n reset({\n type: policyTypeSelector,\n name,\n description,\n decisionStrategy,\n logic,\n });\n }\n }, [policyTypeSelector, reset, form]);\n\n const save = async (policy: Policy) => {\n const { groups, roles, policies, clients, ...rest } = policy;\n\n const cleanedPolicy = {\n ...rest,\n ...(groups && groups.length > 0 && { groups }),\n ...(roles && roles.length > 0 && { roles }),\n ...(policies && policies.length > 0 && { policies }),\n ...(clients && clients.length > 0 && { clients }),\n ...(rest.type === \"group\" &&\n (!groups || groups.length === 0) && { groups: [] }),\n ...(rest.type === \"client\" &&\n (!clients || clients.length === 0) && { clients: [] }),\n };\n\n try {\n const createdPolicy = await adminClient.clients.createPolicy(\n { id: permissionClientId, type: policyTypeSelector! },\n cleanedPolicy,\n );\n\n onAssign(createdPolicy);\n toggleDialog();\n addAlert(t(\"createPolicySuccess\"), AlertVariant.success);\n } catch (error) {\n addError(\"policySaveError\", error);\n }\n };\n\n return (\n <Modal\n aria-label={t(\"createPermissionPolicy\")}\n variant={ModalVariant.medium}\n header={\n <TextContent>\n <Text component={TextVariants.h1}>{t(\"createPermissionPolicy\")}</Text>\n </TextContent>\n }\n isOpen\n onClose={toggleDialog}\n >\n <Form\n id=\"createPermissionPolicy-form\"\n onSubmit={(e) => {\n e.stopPropagation();\n handleSubmit(save)(e);\n }}\n isHorizontal\n >\n <FormProvider {...form}>\n <TextControl\n name=\"name\"\n label={t(\"name\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl name=\"description\" label={t(\"description\")} />\n {providers && providers.length > 0 && (\n <SelectControl\n name=\"type\"\n label={t(\"policyType\")}\n labelIcon={t(\"policyTypeHelpText\")}\n options={providers.map((provider) => ({\n key: provider.type!,\n value: capitalize(provider.type!),\n }))}\n controller={{ defaultValue: \"\" }}\n />\n )}\n <ComponentType\n isPermissionClient={isPermissionClient}\n permissionClientId={permissionClientId}\n />\n <LogicSelector />\n </FormProvider>\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n className=\"pf-v5-u-mr-md\"\n type=\"submit\"\n data-testid=\"save\"\n isDisabled={\n policies?.length === 0 && policyTypeSelector === \"aggregate\"\n }\n >\n {t(\"save\")}\n </Button>\n <Button variant=\"link\" data-testid=\"cancel\" onClick={toggleDialog}>\n {t(\"cancel\")}\n </Button>\n </div>\n </ActionGroup>\n </Form>\n </Modal>\n );\n};\n","import PolicyRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport { PolicyQuery } from \"@keycloak/keycloak-admin-client/lib/resources/clients\";\nimport {\n KeycloakDataTable,\n ListEmptyState,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n Button,\n ButtonVariant,\n Dropdown,\n DropdownItem,\n DropdownList,\n MenuToggle,\n Modal,\n ModalVariant,\n} from \"@patternfly/react-core\";\nimport { CaretDownIcon, FilterIcon } from \"@patternfly/react-icons\";\nimport { sortBy } from \"lodash-es\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { capitalizeFirstLetterFormatter } from \"../../util\";\nimport useToggle from \"../../utils/useToggle\";\n\nexport type ExistingPoliciesDialogProps = {\n toggleDialog: () => void;\n onAssign: (policies: { policy: PolicyRepresentation }[]) => void;\n open: boolean;\n permissionClientId: string;\n};\n\nexport const ExistingPoliciesDialog = ({\n toggleDialog,\n onAssign,\n open,\n permissionClientId,\n}: ExistingPoliciesDialogProps) => {\n const { t } = useTranslation();\n const { adminClient } = useAdminClient();\n const [rows, setRows] = useState<PolicyRepresentation[]>([]);\n const [filterType, setFilterType] = useState<string | undefined>(undefined);\n const [isFilterTypeDropdownOpen, toggleIsFilterTypeDropdownOpen] =\n useToggle();\n const [providers, setProviders] = useState<string[]>([]);\n\n useFetch(\n () =>\n adminClient.clients.listPolicyProviders({\n id: permissionClientId!,\n }),\n (providers) => {\n const formattedProviders = providers\n .filter((p) => p.type !== \"resource\" && p.type !== \"scope\")\n .map((provider) => provider.name)\n .filter((name) => name !== undefined);\n setProviders(sortBy(formattedProviders));\n },\n [permissionClientId],\n );\n\n const loader = async (first?: number, max?: number, search?: string) => {\n const params: PolicyQuery = {\n id: permissionClientId!,\n permission: \"false\",\n first,\n max,\n };\n\n if (search) {\n params.name = search;\n }\n\n if (filterType) {\n params.type = filterType;\n }\n\n return (await adminClient.clients.listPolicies(params)) || [];\n };\n\n return (\n <Modal\n variant={ModalVariant.medium}\n title={t(\"assignExistingPolicies\")}\n isOpen={open}\n onClose={toggleDialog}\n actions={[\n <>\n <Button\n id=\"modal-assignExistingPolicies\"\n data-testid=\"confirm\"\n key=\"assign\"\n variant={ButtonVariant.primary}\n onClick={() => {\n const selectedPolicies = rows.map((policy) => ({ policy }));\n onAssign(selectedPolicies);\n toggleDialog();\n }}\n isDisabled={rows.length === 0}\n >\n {t(\"assign\")}\n </Button>\n <Button\n id=\"modal-cancelExistingPolicies\"\n data-testid=\"cancel\"\n key=\"cancel\"\n variant={ButtonVariant.link}\n onClick={() => {\n setRows([]);\n toggleDialog();\n }}\n >\n {t(\"cancel\")}\n </Button>\n </>,\n ]}\n >\n <KeycloakDataTable\n key={filterType}\n loader={loader}\n ariaLabelKey={t(\"chooseAPolicyType\")}\n searchPlaceholderKey={t(\"searchClientAuthorizationPolicy\")}\n isSearching={true}\n searchTypeComponent={\n <Dropdown\n onSelect={(_, value) => {\n setFilterType(value as string | undefined);\n toggleIsFilterTypeDropdownOpen();\n }}\n onOpenChange={toggleIsFilterTypeDropdownOpen}\n toggle={(ref) => (\n <MenuToggle\n ref={ref}\n data-testid=\"filter-type-dropdown-existingPolicies\"\n id=\"toggle-id-10\"\n onClick={toggleIsFilterTypeDropdownOpen}\n icon={<FilterIcon />}\n statusIcon={<CaretDownIcon />}\n >\n {filterType ? filterType : t(\"allTypes\")}\n </MenuToggle>\n )}\n isOpen={isFilterTypeDropdownOpen}\n >\n <DropdownList>\n <DropdownItem\n data-testid=\"filter-type-dropdown-existingPolicies-all\"\n key=\"all\"\n onClick={() => setFilterType(undefined)}\n >\n {t(\"allTypes\")}\n </DropdownItem>\n {providers.map((name) => (\n <DropdownItem\n data-testid={`filter-type-dropdown-existingPolicies-${name}`}\n key={name}\n onClick={() => setFilterType(name)}\n >\n {name}\n </DropdownItem>\n ))}\n </DropdownList>\n </Dropdown>\n }\n canSelectAll\n onSelect={(selectedRows) => setRows(selectedRows)}\n columns={[\n { name: \"name\" },\n {\n name: \"type\",\n cellFormatters: [capitalizeFirstLetterFormatter()],\n },\n { name: \"description\" },\n ]}\n emptyState={\n <ListEmptyState\n message={t(\"emptyAssignExistingPolicies\")}\n instructions={t(\"emptyAssignExistingPoliciesInstructions\")}\n />\n }\n />\n </Modal>\n );\n};\n","import PolicyRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport {\n Action,\n FormErrorText,\n HelpItem,\n KeycloakDataTable,\n ListEmptyState,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n Button,\n Dropdown,\n DropdownItem,\n DropdownList,\n FormGroup,\n MenuToggle,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { NewPermissionPolicyDialog } from \"./NewPermissionPolicyDialog\";\nimport PolicyProviderRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyProviderRepresentation\";\nimport { ExistingPoliciesDialog } from \"./ExistingPoliciesDialog\";\nimport { CaretDownIcon, FilterIcon } from \"@patternfly/react-icons\";\nimport { capitalize, sortBy } from \"lodash-es\";\nimport useToggle from \"../../utils/useToggle\";\nimport { IRowData } from \"@patternfly/react-table\";\n\ntype AssignedPoliciesProps = {\n permissionClientId: string;\n providers: PolicyProviderRepresentation[];\n policies: PolicyRepresentation[] | undefined;\n resourceType: string;\n};\n\ntype AssignedPolicyForm = {\n policies?: { id: string; type?: string }[];\n};\n\nexport const AssignedPolicies = ({\n permissionClientId,\n providers,\n policies,\n resourceType,\n}: AssignedPoliciesProps) => {\n const { adminClient } = useAdminClient();\n const { t } = useTranslation();\n const {\n control,\n getValues,\n setValue,\n trigger,\n formState: { errors },\n } = useFormContext<AssignedPolicyForm>();\n const values = getValues(\"policies\");\n const [existingPoliciesOpen, setExistingPoliciesOpen] = useState(false);\n const [newPolicyOpen, setNewPolicyOpen] = useState(false);\n const [selectedPolicies, setSelectedPolicies] = useState<\n PolicyRepresentation[]\n >([]);\n const [filterType, setFilterType] = useState<string | undefined>(undefined);\n const [isFilterTypeDropdownOpen, toggleIsFilterTypeDropdownOpen] =\n useToggle();\n\n useFetch(\n () => {\n if (values && values.length > 0)\n return Promise.all(\n values.map((p) =>\n adminClient.clients.findOnePolicy({\n id: permissionClientId,\n type: p.type!,\n policyId: p.id,\n }),\n ),\n );\n return Promise.resolve([]);\n },\n (policies) => {\n const filteredPolicy = policies.filter((p) => p) as [];\n setSelectedPolicies(filteredPolicy);\n },\n [policies],\n );\n\n const sortedProviders = sortBy(\n providers\n ? providers\n .filter((p) => p.type !== \"resource\" && p.type !== \"scope\")\n .map((provider) => provider.name)\n : [],\n );\n\n const assign = (policies: { policy: PolicyRepresentation }[]) => {\n const assignedPolicies = policies.map(({ policy }) => ({\n id: policy.id!,\n }));\n\n setValue(\"policies\", [\n ...(getValues(\"policies\") || []),\n ...assignedPolicies,\n ]);\n trigger(\"policies\");\n setSelectedPolicies([\n ...selectedPolicies,\n ...policies.map(({ policy }) => policy),\n ]);\n };\n\n const unAssign = (policy: PolicyRepresentation) => {\n const updatedPolicies = selectedPolicies.filter(\n (selectedPolicy) => selectedPolicy.id !== policy.id,\n );\n setSelectedPolicies(updatedPolicies);\n setValue(\n \"policies\",\n updatedPolicies.map((policy) => ({\n id: policy.id!,\n name: policy.name!,\n type: policy.type!,\n description: policy.description!,\n })),\n );\n };\n\n const filteredPolicies = filterType\n ? selectedPolicies.filter(\n (policy) => capitalize(policy.type) === filterType,\n )\n : selectedPolicies;\n\n return (\n <FormGroup\n label={t(\"policies\")}\n labelIcon={\n <HelpItem\n helpText={t(\"permissionPoliciesHelp\")}\n fieldLabelId=\"policies\"\n />\n }\n fieldId=\"policies\"\n isRequired\n >\n <Controller\n name=\"policies\"\n control={control}\n defaultValue={[]}\n rules={{\n validate: (value?: { id: string }[]) => {\n if (!value || value.length === 0) return false;\n return value.every(({ id }) => id && id.trim().length > 0);\n },\n }}\n render={() => (\n <>\n {existingPoliciesOpen && (\n <ExistingPoliciesDialog\n permissionClientId={permissionClientId}\n open={existingPoliciesOpen}\n toggleDialog={() =>\n setExistingPoliciesOpen(!existingPoliciesOpen)\n }\n onAssign={assign}\n />\n )}\n {newPolicyOpen && (\n <NewPermissionPolicyDialog\n toggleDialog={() => setNewPolicyOpen(!newPolicyOpen)}\n permissionClientId={permissionClientId}\n providers={providers!}\n policies={policies!}\n resourceType={resourceType}\n onAssign={(newPolicy) => {\n assign([{ policy: newPolicy }]);\n }}\n />\n )}\n <Button\n data-testid=\"select-assignedPolicy-button\"\n variant=\"secondary\"\n onClick={() => {\n setExistingPoliciesOpen(true);\n }}\n >\n {t(\"assignExistingPolicies\")}\n </Button>\n <Button\n data-testid=\"select-createNewPolicy-button\"\n className=\"pf-v5-u-ml-md\"\n variant=\"secondary\"\n onClick={() => {\n setNewPolicyOpen(true);\n }}\n >\n {t(\"createNewPolicy\")}\n </Button>\n </>\n )}\n />\n {selectedPolicies.length > 0 && (\n <KeycloakDataTable\n loader={filteredPolicies}\n ariaLabelKey={t(\"policies\")}\n searchPlaceholderKey={t(\"searchClientAuthorizationPolicy\")}\n isSearching={true}\n searchTypeComponent={\n <Dropdown\n onSelect={(event, value) => {\n setFilterType(value as string | undefined);\n toggleIsFilterTypeDropdownOpen();\n }}\n onOpenChange={toggleIsFilterTypeDropdownOpen}\n toggle={(ref) => (\n <MenuToggle\n ref={ref}\n data-testid=\"filter-type-dropdown-existingPolicies\"\n id=\"toggle-id-10\"\n onClick={toggleIsFilterTypeDropdownOpen}\n icon={<FilterIcon />}\n statusIcon={<CaretDownIcon />}\n >\n {filterType ? capitalize(filterType) : t(\"allTypes\")}\n </MenuToggle>\n )}\n isOpen={isFilterTypeDropdownOpen}\n >\n <DropdownList>\n <DropdownItem\n data-testid=\"filter-type-dropdown-existingPolicies-all\"\n key=\"all\"\n onClick={() => setFilterType(undefined)}\n >\n {t(\"allTypes\")}\n </DropdownItem>\n {sortedProviders.map((name) => (\n <DropdownItem\n data-testid={`filter-type-dropdown-existingPolicies-${name}`}\n key={name}\n onClick={() => setFilterType(name)}\n >\n {name}\n </DropdownItem>\n ))}\n </DropdownList>\n </Dropdown>\n }\n actionResolver={(rowData: IRowData) => [\n {\n title: t(\"unAssignPolicy\"),\n onClick: () => unAssign(rowData.data as PolicyRepresentation),\n } as Action<PolicyRepresentation>,\n ]}\n columns={[\n { name: \"name\", displayKey: t(\"name\") },\n {\n name: \"type\",\n displayKey: t(\"type\"),\n cellFormatters: [(value) => capitalize(String(value || \"\"))],\n },\n { name: \"description\", displayKey: t(\"description\") },\n ]}\n emptyState={\n <ListEmptyState\n message={t(\"emptyAssignExistingPolicies\")}\n instructions={t(\"emptyAssignExistingPoliciesInstructions\")}\n />\n }\n />\n )}\n {errors.policies && <FormErrorText message={t(\"requiredPolicies\")} />}\n </FormGroup>\n );\n};\n","import PolicyProviderRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyProviderRepresentation\";\nimport { useAlerts, useFetch } from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { useMemo, useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { 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 { useParams } from \"../../utils/useParams\";\nimport {\n PermissionConfigurationDetailsParams,\n toPermissionConfigurationDetails,\n} from \"../routes/PermissionConfigurationDetails\";\nimport { toPermissionsConfigurationTabs } from \"../routes/PermissionsConfigurationTabs\";\nimport PolicyRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport { AssignedPolicies } from \"./AssignedPolicies\";\nimport { ScopePicker } from \"../../clients/authorization/ScopePicker\";\nimport { ResourceType } from \"../resource-types/ResourceType\";\nimport { sortBy } from \"lodash-es\";\nimport { NameDescription } from \"../../clients/authorization/policy/NameDescription\";\nimport useSortedResourceTypes from \"../../utils/useSortedResourceTypes\";\n\nexport default function PermissionConfigurationDetails() {\n const { adminClient } = useAdminClient();\n const { t } = useTranslation();\n const { realm, permissionClientId, permissionId, resourceType } =\n useParams<PermissionConfigurationDetailsParams>();\n const navigate = useNavigate();\n const form = useForm();\n const { handleSubmit, reset } = form;\n const { addAlert, addError } = useAlerts();\n const [permission, setPermission] = useState<PolicyRepresentation>();\n const [providers, setProviders] = useState<PolicyProviderRepresentation[]>();\n const [policies, setPolicies] = useState<PolicyRepresentation[]>();\n const resourceTypes = useSortedResourceTypes({\n clientId: permissionClientId,\n });\n\n const resourceTypeScopes = useMemo(\n () =>\n resourceTypes\n .filter(({ type }) => type === resourceType)\n .flatMap(({ scopes = [] }) => scopes)\n .map((scope) => scope || \"\"),\n [resourceTypes, resourceType],\n );\n\n useFetch(\n async () => {\n if (!permissionClientId) {\n return {};\n }\n\n const [providers, policies] = await Promise.all([\n adminClient.clients.listPolicyProviders({ id: permissionClientId }),\n adminClient.clients.listPolicies({\n id: permissionClientId,\n permission: \"false\",\n }),\n ]);\n\n return { providers, policies };\n },\n ({ providers, policies }) => {\n const filteredProviders = providers?.filter(\n (p) => p.type !== \"resource\" && p.type !== \"scope\",\n );\n\n setProviders(\n sortBy(\n filteredProviders,\n (provider: PolicyProviderRepresentation) => provider.type,\n ),\n );\n setPolicies(policies || []);\n },\n [permissionClientId],\n );\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: permissionClientId,\n type: \"scope\",\n permissionId,\n }),\n adminClient.clients.getAssociatedResources({\n id: permissionClientId,\n permissionId,\n }),\n adminClient.clients.getAssociatedPolicies({\n id: permissionClientId,\n permissionId,\n }),\n adminClient.clients.getAssociatedScopes({\n id: permissionClientId,\n permissionId,\n }),\n ]);\n\n if (!permission) {\n throw new Error(t(\"notFound\"));\n }\n\n return {\n permission,\n resources,\n policies,\n scopes,\n };\n },\n ({ permission, resources, policies, scopes }) => {\n const resourceIds = resources?.map((resource) => resource.name!) || [];\n const policyIds = policies?.map((policy) => policy.id!) || [];\n const scopeNames = scopes?.map((scope) => scope.name) || [];\n\n reset({\n ...permission,\n resources: resourceIds!,\n policies,\n scopes,\n });\n\n setPermission({\n ...permission,\n resources: resourceIds!,\n policies: policyIds,\n scopes: scopeNames,\n });\n },\n [permissionClientId, permissionId],\n );\n\n const save = async (permission: PolicyRepresentation) => {\n try {\n const newPermission = {\n ...permission,\n policies: permission.policies?.map((policy: any) => policy.id),\n scopes: permission.scopes?.map((scope: any) => scope.name),\n resourceType: resourceType,\n };\n\n if (permissionId) {\n await adminClient.clients.updatePermission(\n { id: permissionClientId, type: \"scope\", permissionId },\n newPermission,\n );\n } else {\n const result = await adminClient.clients.createPermission(\n { id: permissionClientId, type: \"scope\" },\n newPermission,\n );\n setPermission(result);\n navigate(\n toPermissionConfigurationDetails({\n realm,\n permissionClientId: permissionClientId,\n permissionId: result.id!,\n resourceType,\n }),\n );\n }\n\n addAlert(\n t(permissionId ? \"updatePermissionSuccess\" : \"createPermissionSuccess\"),\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(\"deleteAdminPermissionConfirm\", {\n permission: permission?.name,\n }),\n continueButtonVariant: ButtonVariant.danger,\n continueButtonLabel: \"confirm\",\n onConfirm: async () => {\n try {\n await adminClient.clients.delPermission({\n id: permissionClientId!,\n type: \"scope\",\n permissionId: permissionId,\n });\n addAlert(t(\"permissionDeletedSuccess\"), AlertVariant.success);\n navigate(\n toPermissionsConfigurationTabs({\n realm,\n permissionClientId,\n tab: \"permissions\",\n }),\n );\n } catch (error) {\n addError(\"permissionDeletedError\", error);\n }\n },\n });\n\n if (!permission) {\n return <KeycloakSpinner />;\n }\n\n return (\n <>\n <DeleteConfirm />\n <ViewHeader\n titleKey={permissionId ? permission?.name! : t(\"createPermission\")}\n subKey={\n permissionId\n ? permission?.description!\n : t(\"createPermissionOfType\", { resourceType })\n }\n dropdownItems={\n permissionId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-permission\"\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormAccess isHorizontal onSubmit={handleSubmit(save)} role=\"anyone\">\n <FormProvider {...form}>\n <NameDescription clientId={permissionClientId} />\n <ScopePicker\n clientId={permissionClientId}\n resourceTypeScopes={resourceTypeScopes ?? []}\n />\n <ResourceType resourceType={resourceType} />\n <AssignedPolicies\n permissionClientId={permissionClientId}\n providers={providers!}\n policies={policies!}\n resourceType={resourceType}\n />\n </FormProvider>\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n className=\"pf-v5-u-mr-md\"\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toPermissionsConfigurationTabs({\n realm,\n permissionClientId,\n tab: \"permissions\",\n })}\n />\n )}\n >\n {t(\"cancel\")}\n </Button>\n </div>\n </ActionGroup>\n </FormAccess>\n </PageSection>\n </>\n );\n}\n"],"names":["defaultValues","DecisionStrategy","Logic","COMPONENTS","Aggregate","Client","User","ClientScope","Group","Regex","Role","Time","JavaScript","isValidComponentType","value","NewPermissionPolicyDialog","permissionClientId","providers","policies","toggleDialog","onAssign","adminClient","useAdminClient","realmRepresentation","useRealm","t","useTranslation","form","useForm","addAlert","addError","useAlerts","handleSubmit","reset","isPermissionClient","policyTypeSelector","useWatch","getComponentType","ComponentType","useEffect","name","description","decisionStrategy","logic","save","policy","groups","roles","clients","rest","cleanedPolicy","createdPolicy","AlertVariant","error","jsx","Modal","ModalVariant","TextContent","Text","TextVariants","jsxs","Form","e","FormProvider","TextControl","SelectControl","provider","capitalize","LogicSelector","ActionGroup","Button","ButtonVariant","ExistingPoliciesDialog","open","rows","setRows","useState","filterType","setFilterType","isFilterTypeDropdownOpen","toggleIsFilterTypeDropdownOpen","useToggle","setProviders","useFetch","formattedProviders","p","sortBy","loader","first","max","search","params","Fragment","selectedPolicies","KeycloakDataTable","Dropdown","_","ref","MenuToggle","FilterIcon","CaretDownIcon","DropdownList","DropdownItem","selectedRows","capitalizeFirstLetterFormatter","ListEmptyState","AssignedPolicies","resourceType","control","getValues","setValue","trigger","errors","useFormContext","values","existingPoliciesOpen","setExistingPoliciesOpen","newPolicyOpen","setNewPolicyOpen","setSelectedPolicies","filteredPolicy","sortedProviders","assign","assignedPolicies","unAssign","updatedPolicies","selectedPolicy","filteredPolicies","FormGroup","HelpItem","Controller","id","newPolicy","event","rowData","FormErrorText","PermissionConfigurationDetails","realm","permissionId","useParams","navigate","useNavigate","permission","setPermission","setPolicies","resourceTypes","useSortedResourceTypes","resourceTypeScopes","useMemo","type","scopes","scope","filteredProviders","resources","resourceIds","resource","policyIds","scopeNames","newPermission","result","toPermissionConfigurationDetails","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","toPermissionsConfigurationTabs","ViewHeader","PageSection","FormAccess","NameDescription","ScopePicker","ResourceType","props","Link","KeycloakSpinner"],"mappings":"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"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { jsx as s, jsxs as v, Fragment as B } from "react/jsx-runtime";
|
2
|
-
import { u as _, ak as J, n as G, al as Y, am as W, an as N, a4 as Q, b as X, ao as Z, V as ee, ap as se, aa as ae, l as H, aq as ie, ar as oe, c as te, as as ne, K as re, P as le, d as ce, F as de, Y as k, U as pe, at as C, au as ue, a7 as P, av as z, aw as E, ax as U, R as me, A as fe, B as j, ay as K, az as he, e as M } from "./index-
|
2
|
+
import { u as _, ak as J, n as G, al as Y, am as W, an as N, a4 as Q, b as X, ao as Z, V as ee, ap as se, aa as ae, l as H, aq as ie, ar as oe, c as te, as as ne, K as re, P as le, d as ce, F as de, Y as k, U as pe, at as C, au as ue, a7 as P, av as z, aw as E, ax as U, R as me, A as fe, B as j, ay as K, az as he, e as M } from "./index-Bd4uRM2j.js";
|
3
3
|
import { useState as h, useRef as ge } from "react";
|
4
4
|
import { useTranslation as $ } from "react-i18next";
|
5
5
|
import { useNavigate as ye, Link as be } from "react-router-dom";
|
@@ -410,4 +410,4 @@ function Re() {
|
|
410
410
|
export {
|
411
411
|
Re as default
|
412
412
|
};
|
413
|
-
//# sourceMappingURL=PermissionDetails-
|
413
|
+
//# sourceMappingURL=PermissionDetails-ATEUBMrD.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"PermissionDetails-FszJtVpG.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-ATEUBMrD.js","sources":["../src/clients/authorization/ScopeSelect.tsx","../src/clients/authorization/PermissionDetails.tsx"],"sourcesContent":["import type ScopeRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/scopeRepresentation\";\nimport {\n KeycloakSelect,\n SelectVariant,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport { SelectOption } from \"@patternfly/react-core\";\nimport { useRef, useState } from \"react\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { useAdminClient } from \"../../admin-client\";\n\ntype ScopeSelectProps = {\n clientId: string;\n resourceId?: string;\n preSelected?: string;\n};\n\nexport const ScopeSelect = ({\n clientId,\n resourceId,\n preSelected,\n}: ScopeSelectProps) => {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n\n const {\n control,\n getValues,\n setValue,\n formState: { errors },\n } = useFormContext();\n\n const [scopes, setScopes] = useState<ScopeRepresentation[]>([]);\n const [selectedScopes, setSelectedScopes] = useState<ScopeRepresentation[]>(\n [],\n );\n const [search, setSearch] = useState(\"\");\n const [open, setOpen] = useState(false);\n const firstUpdate = useRef(true);\n\n const values: string[] | undefined = getValues(\"scopes\");\n\n const toSelectOptions = (scopes: ScopeRepresentation[]) =>\n scopes.map((scope) => (\n <SelectOption key={scope.id} value={scope}>\n {scope.name}\n </SelectOption>\n ));\n\n useFetch(\n async (): Promise<ScopeRepresentation[]> => {\n if (!resourceId) {\n return adminClient.clients.listAllScopes(\n Object.assign(\n { id: clientId, deep: false },\n search === \"\" ? null : { name: search },\n ),\n );\n }\n\n if (resourceId && !firstUpdate.current) {\n setValue(\"scopes\", []);\n }\n\n firstUpdate.current = false;\n return adminClient.clients.listScopesByResource({\n id: clientId,\n resourceName: resourceId,\n });\n },\n (scopes) => {\n setScopes(scopes);\n if (!search)\n setSelectedScopes(\n scopes.filter((s: ScopeRepresentation) => values?.includes(s.id!)),\n );\n },\n [resourceId, search],\n );\n\n return (\n <Controller\n name=\"scopes\"\n defaultValue={preSelected ? [preSelected] : []}\n control={control}\n rules={{ validate: (value) => value.length > 0 }}\n render={({ field }) => (\n <KeycloakSelect\n toggleId=\"scopes\"\n variant={SelectVariant.typeaheadMulti}\n onToggle={(val) => setOpen(val)}\n onFilter={(filter) => {\n setSearch(filter);\n return toSelectOptions(scopes);\n }}\n onClear={() => {\n field.onChange([]);\n setSearch(\"\");\n }}\n selections={selectedScopes.map((s) => s.name!)}\n onSelect={(selectedValue) => {\n const option =\n typeof selectedValue === \"string\"\n ? selectedScopes.find((s) => s.name === selectedValue)!\n : (selectedValue as ScopeRepresentation);\n const changedValue = selectedScopes.find((p) => p.id === option.id)\n ? selectedScopes.filter((p) => p.id !== option.id)\n : [...selectedScopes, option];\n\n field.onChange(changedValue.map((s) => s.id));\n setSelectedScopes(changedValue);\n setSearch(\"\");\n }}\n isOpen={open}\n aria-labelledby={t(\"scopes\")}\n validated={errors.scopes ? \"error\" : \"default\"}\n isDisabled={!!preSelected}\n typeAheadAriaLabel={t(\"scopes\")}\n >\n {toSelectOptions(scopes)}\n </KeycloakSelect>\n )}\n />\n );\n};\n","import type PolicyRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport { DecisionStrategy } from \"@keycloak/keycloak-admin-client/lib/defs/policyRepresentation\";\nimport {\n FormErrorText,\n HelpItem,\n SelectVariant,\n TextAreaControl,\n TextControl,\n useAlerts,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n FormGroup,\n PageSection,\n Radio,\n Switch,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { Controller, FormProvider, useForm, useWatch } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { useConfirmDialog } from \"../../components/confirm-dialog/ConfirmDialog\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { KeycloakSpinner } from \"@keycloak/keycloak-ui-shared\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useAccess } from \"../../context/access/Access\";\nimport { toUpperCase } from \"../../util\";\nimport { useParams } from \"../../utils/useParams\";\nimport { toAuthorizationTab } from \"../routes/AuthenticationTab\";\nimport type { NewPermissionParams } from \"../routes/NewPermission\";\nimport {\n PermissionDetailsParams,\n toPermissionDetails,\n} from \"../routes/PermissionDetails\";\nimport { ResourcesPolicySelect } from \"./ResourcesPolicySelect\";\nimport { ScopeSelect } from \"./ScopeSelect\";\n\ntype FormFields = PolicyRepresentation & {\n resourceType: string;\n};\n\nexport default function PermissionDetails() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n\n const form = useForm<FormFields>({\n mode: \"onChange\",\n });\n const {\n control,\n reset,\n formState: { errors },\n handleSubmit,\n } = form;\n\n const navigate = useNavigate();\n const { id, realm, permissionType, permissionId, selectedId } = useParams<\n NewPermissionParams & PermissionDetailsParams\n >();\n\n const { addAlert, addError } = useAlerts();\n const [permission, setPermission] = useState<PolicyRepresentation>();\n const [applyToResourceTypeFlag, setApplyToResourceTypeFlag] = useState(false);\n const { hasAccess } = useAccess();\n\n const isDisabled = !hasAccess(\"manage-authorization\");\n\n useFetch(\n async () => {\n if (!permissionId) {\n return {};\n }\n const [permission, resources, policies, scopes] = await Promise.all([\n adminClient.clients.findOnePermission({\n id,\n type: permissionType,\n permissionId,\n }),\n adminClient.clients.getAssociatedResources({\n id,\n permissionId,\n }),\n adminClient.clients.getAssociatedPolicies({\n id,\n permissionId,\n }),\n adminClient.clients.getAssociatedScopes({\n id,\n permissionId,\n }),\n ]);\n\n if (!permission) {\n throw new Error(t(\"notFound\"));\n }\n\n return {\n permission,\n resources: resources.map((r) => r._id),\n policies: policies.map((p) => p.id!),\n scopes: scopes.map((s) => s.id!),\n };\n },\n ({ permission, resources, policies, scopes }) => {\n reset({ ...permission, resources, policies, scopes });\n if (permission && \"resourceType\" in permission) {\n setApplyToResourceTypeFlag(\n !!(permission as { resourceType: string }).resourceType,\n );\n }\n setPermission({ ...permission, resources, policies });\n },\n [],\n );\n\n const save = async (permission: PolicyRepresentation) => {\n try {\n if (permissionId) {\n await adminClient.clients.updatePermission(\n { id, type: permissionType, permissionId },\n permission,\n );\n } else {\n const result = await adminClient.clients.createPermission(\n { id, type: permissionType },\n permission,\n );\n setPermission(result);\n navigate(\n toPermissionDetails({\n realm,\n id,\n permissionType,\n permissionId: result.id!,\n }),\n );\n }\n addAlert(\n t((permissionId ? \"update\" : \"create\") + \"PermissionSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"permissionSaveError\", error);\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"deletePermission\",\n messageKey: t(\"deletePermissionConfirm\", {\n permission: permission?.name,\n }),\n continueButtonVariant: ButtonVariant.danger,\n continueButtonLabel: \"confirm\",\n onConfirm: async () => {\n try {\n await adminClient.clients.delPermission({\n id,\n type: permissionType,\n permissionId: permissionId,\n });\n addAlert(t(\"permissionDeletedSuccess\"), AlertVariant.success);\n navigate(\n toAuthorizationTab({ realm, clientId: id, tab: \"permissions\" }),\n );\n } catch (error) {\n addError(\"permissionDeletedError\", error);\n }\n },\n });\n\n const resourcesIds = useWatch({\n control,\n name: \"resources\",\n defaultValue: [],\n });\n\n if (!permission) {\n return <KeycloakSpinner />;\n }\n\n return (\n <>\n <DeleteConfirm />\n <ViewHeader\n titleKey={\n permissionId\n ? permission.name!\n : `create${toUpperCase(permissionType)}BasedPermission`\n }\n dropdownItems={\n permissionId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-resource\"\n isDisabled={isDisabled}\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n onSubmit={handleSubmit(save)}\n >\n <FormProvider {...form}>\n <TextControl\n name=\"name\"\n label={t(\"name\")}\n labelIcon={t(\"permissionName\")}\n rules={{\n required: t(\"required\"),\n }}\n />\n <TextAreaControl\n name=\"description\"\n label={t(\"description\")}\n labelIcon={t(\"permissionDescription\")}\n rules={{\n maxLength: {\n value: 255,\n message: t(\"maxLength\", { length: 255 }),\n },\n }}\n />\n <FormGroup\n label={t(\"applyToResourceTypeFlag\")}\n fieldId=\"applyToResourceTypeFlag\"\n labelIcon={\n <HelpItem\n helpText={t(\"applyToResourceTypeFlagHelp\")}\n fieldLabelId=\"applyToResourceTypeFlag\"\n />\n }\n >\n <Switch\n id=\"applyToResourceTypeFlag\"\n name=\"applyToResourceTypeFlag\"\n label={t(\"on\")}\n labelOff={t(\"off\")}\n isChecked={applyToResourceTypeFlag}\n onChange={(_event, val) => setApplyToResourceTypeFlag(val)}\n aria-label={t(\"applyToResourceTypeFlag\")}\n />\n </FormGroup>\n {applyToResourceTypeFlag ? (\n <TextControl\n name=\"resourceType\"\n label={t(\"resourceType\")}\n labelIcon={t(\"resourceTypeHelp\")}\n rules={{\n required: {\n value: permissionType === \"scope\" ? true : false,\n message: t(\"required\"),\n },\n }}\n />\n ) : (\n <FormGroup\n label={t(\"resource\")}\n fieldId=\"resources\"\n labelIcon={\n <HelpItem\n helpText={t(\"permissionResources\")}\n fieldLabelId=\"resources\"\n />\n }\n isRequired={permissionType !== \"scope\"}\n >\n <ResourcesPolicySelect\n name=\"resources\"\n clientId={id}\n permissionId={permissionId}\n preSelected={\n permissionType === \"scope\" ? undefined : selectedId\n }\n variant={\n permissionType === \"scope\"\n ? SelectVariant.typeahead\n : SelectVariant.typeaheadMulti\n }\n isRequired={permissionType !== \"scope\"}\n />\n {errors.resources && <FormErrorText message={t(\"required\")} />}\n </FormGroup>\n )}\n {permissionType === \"scope\" && (\n <FormGroup\n label={t(\"authorizationScopes\")}\n fieldId=\"scopes\"\n labelIcon={\n <HelpItem\n helpText={t(\"permissionScopesHelp\")}\n fieldLabelId=\"scopesSelect\"\n />\n }\n isRequired\n >\n <ScopeSelect\n clientId={id}\n resourceId={resourcesIds?.[0]}\n preSelected={selectedId}\n />\n {errors.scopes && <FormErrorText message={t(\"required\")} />}\n </FormGroup>\n )}\n <FormGroup\n label={t(\"policies\")}\n fieldId=\"policies\"\n labelIcon={\n <HelpItem\n helpText={t(\"permissionPoliciesHelp\")}\n fieldLabelId=\"policies\"\n />\n }\n >\n <ResourcesPolicySelect\n name=\"policies\"\n clientId={id}\n permissionId={permissionId}\n />\n </FormGroup>\n <FormGroup\n label={t(\"decisionStrategy\")}\n labelIcon={\n <HelpItem\n helpText={t(\"permissionDecisionStrategyHelp\")}\n fieldLabelId=\"decisionStrategy\"\n />\n }\n fieldId=\"policyEnforcementMode\"\n hasNoPaddingTop\n >\n <Controller\n name=\"decisionStrategy\"\n data-testid=\"decisionStrategy\"\n defaultValue={DecisionStrategy.UNANIMOUS}\n control={control}\n render={({ field }) => (\n <>\n {Object.values(DecisionStrategy).map((strategy) => (\n <Radio\n id={strategy}\n key={strategy}\n data-testid={strategy}\n isChecked={field.value === strategy}\n isDisabled={isDisabled}\n name=\"decisionStrategies\"\n onChange={() => field.onChange(strategy)}\n label={t(`decisionStrategies.${strategy}`)}\n className=\"pf-v5-u-mb-md\"\n />\n ))}\n </>\n )}\n />\n </FormGroup>\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toAuthorizationTab({\n realm,\n clientId: id,\n tab: \"permissions\",\n })}\n ></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n </div>\n </ActionGroup>\n </FormProvider>\n </FormAccess>\n </PageSection>\n </>\n );\n}\n"],"names":["ScopeSelect","clientId","resourceId","preSelected","adminClient","useAdminClient","t","useTranslation","control","getValues","setValue","errors","useFormContext","scopes","setScopes","useState","selectedScopes","setSelectedScopes","search","setSearch","open","setOpen","firstUpdate","useRef","values","toSelectOptions","scope","jsx","SelectOption","useFetch","s","Controller","value","field","KeycloakSelect","SelectVariant","val","filter","selectedValue","option","changedValue","p","PermissionDetails","form","useForm","reset","handleSubmit","navigate","useNavigate","id","realm","permissionType","permissionId","selectedId","useParams","addAlert","addError","useAlerts","permission","setPermission","applyToResourceTypeFlag","setApplyToResourceTypeFlag","hasAccess","useAccess","isDisabled","resources","policies","r","save","result","toPermissionDetails","AlertVariant","error","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","ButtonVariant","toAuthorizationTab","resourcesIds","useWatch","jsxs","Fragment","ViewHeader","toUpperCase","DropdownItem","PageSection","FormAccess","FormProvider","TextControl","TextAreaControl","FormGroup","HelpItem","Switch","_event","ResourcesPolicySelect","FormErrorText","DecisionStrategy","strategy","Radio","ActionGroup","Button","props","Link","KeycloakSpinner"],"mappings":"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"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { jsxs as u, Fragment as g, jsx as e } from "react/jsx-runtime";
|
2
|
-
import { aW as T, a as 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-
|
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-Bd4uRM2j.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";
|
@@ -176,4 +176,4 @@ function ie() {
|
|
176
176
|
export {
|
177
177
|
ie as default
|
178
178
|
};
|
179
|
-
//# sourceMappingURL=RealmSection-
|
179
|
+
//# sourceMappingURL=RealmSection-DEj7Pofo.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"RealmSection-BkVmYRIb.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-DEj7Pofo.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,9 +1,9 @@
|
|
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-
|
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-Bd4uRM2j.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-
|
6
|
+
import { S as le } from "./ScopePicker-Cbywl8IC.js";
|
7
7
|
function be() {
|
8
8
|
const { adminClient: o } = L(), { t: e } = te(), [m, C] = d(), [N, p] = d(), [b, F] = d(), { addAlert: h, addError: f } = _(), g = q({
|
9
9
|
mode: "onChange"
|
@@ -223,4 +223,4 @@ function be() {
|
|
223
223
|
export {
|
224
224
|
be as default
|
225
225
|
};
|
226
|
-
//# sourceMappingURL=ResourceDetails-
|
226
|
+
//# sourceMappingURL=ResourceDetails-C88S7tXu.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ResourceDetails-Br81AEgO.js","sources":["../src/clients/authorization/ResourceDetails.tsx"],"sourcesContent":["import type ClientRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientRepresentation\";\nimport type ResourceRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/resourceRepresentation\";\nimport type ResourceServerRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/resourceServerRepresentation\";\nimport {\n HelpItem,\n TextControl,\n useAlerts,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n Alert,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n FormGroup,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { DefaultSwitchControl } from \"../../components/SwitchControl\";\nimport { useConfirmDialog } from \"../../components/confirm-dialog/ConfirmDialog\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { KeyValueInput } from \"../../components/key-value-form/KeyValueInput\";\nimport type { KeyValueType } from \"../../components/key-value-form/key-value-convert\";\nimport { KeycloakSpinner } from \"@keycloak/keycloak-ui-shared\";\nimport { MultiLineInput } from \"../../components/multi-line-input/MultiLineInput\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useAccess } from \"../../context/access/Access\";\nimport { convertFormValuesToObject, convertToFormValues } from \"../../util\";\nimport { useParams } from \"../../utils/useParams\";\nimport { toAuthorizationTab } from \"../routes/AuthenticationTab\";\nimport { ResourceDetailsParams, toResourceDetails } from \"../routes/Resource\";\nimport { ScopePicker } from \"./ScopePicker\";\nimport \"./resource-details.css\";\n\ntype SubmittedResource = Omit<\n ResourceRepresentation,\n \"attributes\" | \"scopes\"\n> & {\n attributes: KeyValueType[];\n};\n\nexport default function ResourceDetails() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const [client, setClient] = useState<ClientRepresentation>();\n const [resource, setResource] = useState<ResourceRepresentation>();\n\n const [permissions, setPermission] =\n useState<ResourceServerRepresentation[]>();\n\n const { addAlert, addError } = useAlerts();\n const form = useForm<SubmittedResource>({\n mode: \"onChange\",\n });\n const { setValue, handleSubmit } = form;\n\n const { id, resourceId, realm } = useParams<ResourceDetailsParams>();\n const navigate = useNavigate();\n\n const setupForm = (resource: ResourceRepresentation = {}) => {\n convertToFormValues(resource, setValue);\n };\n\n const { hasAccess } = useAccess();\n\n const isDisabled = !hasAccess(\"manage-authorization\");\n\n useFetch(\n () =>\n Promise.all([\n adminClient.clients.findOne({ id }),\n resourceId\n ? adminClient.clients.getResource({ id, resourceId })\n : Promise.resolve(undefined),\n resourceId\n ? adminClient.clients.listPermissionsByResource({ id, resourceId })\n : Promise.resolve(undefined),\n ]),\n ([client, resource, permissions]) => {\n if (!client) {\n throw new Error(t(\"notFound\"));\n }\n setClient(client);\n setPermission(permissions);\n setResource(resource);\n setupForm(resource);\n },\n [],\n );\n\n const submit = async (submitted: SubmittedResource) => {\n const resource = convertFormValuesToObject<\n SubmittedResource,\n ResourceRepresentation\n >(submitted);\n\n try {\n if (resourceId) {\n await adminClient.clients.updateResource({ id, resourceId }, resource);\n } else {\n const result = await adminClient.clients.createResource(\n { id },\n resource,\n );\n setResource(resource);\n navigate(toResourceDetails({ realm, id, resourceId: result._id! }));\n }\n addAlert(\n t((resourceId ? \"update\" : \"create\") + \"ResourceSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"resourceSaveError\", error);\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"deleteResource\",\n children: (\n <>\n {t(\"deleteResourceConfirm\")}\n {permissions?.length !== 0 && (\n <Alert\n variant=\"warning\"\n isInline\n isPlain\n title={t(\"deleteResourceWarning\")}\n className=\"pf-v5-u-pt-lg\"\n >\n <p className=\"pf-v5-u-pt-xs\">\n {permissions?.map((permission) => (\n <strong key={permission.id} className=\"pf-v5-u-pr-md\">\n {permission.name}\n </strong>\n ))}\n </p>\n </Alert>\n )}\n </>\n ),\n continueButtonLabel: \"confirm\",\n onConfirm: async () => {\n try {\n await adminClient.clients.delResource({\n id,\n resourceId: resourceId!,\n });\n addAlert(t(\"resourceDeletedSuccess\"), AlertVariant.success);\n navigate(toAuthorizationTab({ realm, clientId: id, tab: \"resources\" }));\n } catch (error) {\n addError(\"resourceDeletedError\", error);\n }\n },\n });\n\n if (!client) {\n return <KeycloakSpinner />;\n }\n\n return (\n <>\n <DeleteConfirm />\n <ViewHeader\n titleKey={resourceId ? resource?.name! : \"createResource\"}\n dropdownItems={\n resourceId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-resource\"\n isDisabled={isDisabled}\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormProvider {...form}>\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n className=\"keycloak__resource-details__form\"\n onSubmit={handleSubmit(submit)}\n >\n <TextControl\n name={resourceId ? \"owner.name\" : \"\"}\n label={t(\"owner\")}\n labelIcon={t(\"ownerHelp\")}\n defaultValue={client.clientId}\n readOnly\n />\n <TextControl\n name={\"name\"}\n label={t(\"name\")}\n labelIcon={t(\"resourceNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"displayName\"\n label={t(\"displayName\")}\n labelIcon={t(\"displayNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"type\"\n label={t(\"type\")}\n labelIcon={t(\"resourceDetailsTypeHelp\")}\n />\n <FormGroup\n label={t(\"uris\")}\n fieldId=\"uris\"\n labelIcon={\n <HelpItem helpText={t(\"urisHelp\")} fieldLabelId=\"uris\" />\n }\n >\n <MultiLineInput\n name=\"uris\"\n type=\"url\"\n aria-label={t(\"uris\")}\n addButtonLabel=\"addUri\"\n />\n </FormGroup>\n <ScopePicker clientId={id} />\n <TextControl\n name=\"icon_uri\"\n label={t(\"iconUri\")}\n labelIcon={t(\"iconUriHelp\")}\n type=\"url\"\n />\n <DefaultSwitchControl\n name=\"ownerManagedAccess\"\n label={t(\"ownerManagedAccess\")}\n labelIcon={t(\"ownerManagedAccessHelp\")}\n />\n <FormGroup\n hasNoPaddingTop\n label={t(\"resourceAttribute\")}\n labelIcon={\n <HelpItem\n helpText={t(\"resourceAttributeHelp\")}\n fieldLabelId=\"resourceAttribute\"\n />\n }\n fieldId=\"resourceAttribute\"\n >\n <KeyValueInput name=\"attributes\" isDisabled={isDisabled} />\n </FormGroup>\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toAuthorizationTab({\n realm,\n clientId: id,\n tab: \"resources\",\n })}\n ></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n </div>\n </ActionGroup>\n </FormAccess>\n </FormProvider>\n </PageSection>\n </>\n );\n}\n"],"names":["ResourceDetails","adminClient","useAdminClient","t","useTranslation","client","setClient","useState","resource","setResource","permissions","setPermission","addAlert","addError","useAlerts","form","useForm","setValue","handleSubmit","id","resourceId","realm","useParams","navigate","useNavigate","setupForm","convertToFormValues","hasAccess","useAccess","isDisabled","useFetch","submit","submitted","convertFormValuesToObject","result","toResourceDetails","AlertVariant","error","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","jsxs","Fragment","jsx","Alert","permission","toAuthorizationTab","ViewHeader","DropdownItem","PageSection","FormProvider","FormAccess","TextControl","FormGroup","HelpItem","MultiLineInput","ScopePicker","DefaultSwitchControl","KeyValueInput","ActionGroup","Button","ButtonVariant","props","Link","KeycloakSpinner"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"ResourceDetails-C88S7tXu.js","sources":["../src/clients/authorization/ResourceDetails.tsx"],"sourcesContent":["import type ClientRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/clientRepresentation\";\nimport type ResourceRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/resourceRepresentation\";\nimport type ResourceServerRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/resourceServerRepresentation\";\nimport {\n HelpItem,\n TextControl,\n useAlerts,\n useFetch,\n} from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n Alert,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n FormGroup,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { DefaultSwitchControl } from \"../../components/SwitchControl\";\nimport { useConfirmDialog } from \"../../components/confirm-dialog/ConfirmDialog\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { KeyValueInput } from \"../../components/key-value-form/KeyValueInput\";\nimport type { KeyValueType } from \"../../components/key-value-form/key-value-convert\";\nimport { KeycloakSpinner } from \"@keycloak/keycloak-ui-shared\";\nimport { MultiLineInput } from \"../../components/multi-line-input/MultiLineInput\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useAccess } from \"../../context/access/Access\";\nimport { convertFormValuesToObject, convertToFormValues } from \"../../util\";\nimport { useParams } from \"../../utils/useParams\";\nimport { toAuthorizationTab } from \"../routes/AuthenticationTab\";\nimport { ResourceDetailsParams, toResourceDetails } from \"../routes/Resource\";\nimport { ScopePicker } from \"./ScopePicker\";\nimport \"./resource-details.css\";\n\ntype SubmittedResource = Omit<\n ResourceRepresentation,\n \"attributes\" | \"scopes\"\n> & {\n attributes: KeyValueType[];\n};\n\nexport default function ResourceDetails() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const [client, setClient] = useState<ClientRepresentation>();\n const [resource, setResource] = useState<ResourceRepresentation>();\n\n const [permissions, setPermission] =\n useState<ResourceServerRepresentation[]>();\n\n const { addAlert, addError } = useAlerts();\n const form = useForm<SubmittedResource>({\n mode: \"onChange\",\n });\n const { setValue, handleSubmit } = form;\n\n const { id, resourceId, realm } = useParams<ResourceDetailsParams>();\n const navigate = useNavigate();\n\n const setupForm = (resource: ResourceRepresentation = {}) => {\n convertToFormValues(resource, setValue);\n };\n\n const { hasAccess } = useAccess();\n\n const isDisabled = !hasAccess(\"manage-authorization\");\n\n useFetch(\n () =>\n Promise.all([\n adminClient.clients.findOne({ id }),\n resourceId\n ? adminClient.clients.getResource({ id, resourceId })\n : Promise.resolve(undefined),\n resourceId\n ? adminClient.clients.listPermissionsByResource({ id, resourceId })\n : Promise.resolve(undefined),\n ]),\n ([client, resource, permissions]) => {\n if (!client) {\n throw new Error(t(\"notFound\"));\n }\n setClient(client);\n setPermission(permissions);\n setResource(resource);\n setupForm(resource);\n },\n [],\n );\n\n const submit = async (submitted: SubmittedResource) => {\n const resource = convertFormValuesToObject<\n SubmittedResource,\n ResourceRepresentation\n >(submitted);\n\n try {\n if (resourceId) {\n await adminClient.clients.updateResource({ id, resourceId }, resource);\n } else {\n const result = await adminClient.clients.createResource(\n { id },\n resource,\n );\n setResource(resource);\n navigate(toResourceDetails({ realm, id, resourceId: result._id! }));\n }\n addAlert(\n t((resourceId ? \"update\" : \"create\") + \"ResourceSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"resourceSaveError\", error);\n }\n };\n\n const [toggleDeleteDialog, DeleteConfirm] = useConfirmDialog({\n titleKey: \"deleteResource\",\n children: (\n <>\n {t(\"deleteResourceConfirm\")}\n {permissions?.length !== 0 && (\n <Alert\n variant=\"warning\"\n isInline\n isPlain\n title={t(\"deleteResourceWarning\")}\n className=\"pf-v5-u-pt-lg\"\n >\n <p className=\"pf-v5-u-pt-xs\">\n {permissions?.map((permission) => (\n <strong key={permission.id} className=\"pf-v5-u-pr-md\">\n {permission.name}\n </strong>\n ))}\n </p>\n </Alert>\n )}\n </>\n ),\n continueButtonLabel: \"confirm\",\n onConfirm: async () => {\n try {\n await adminClient.clients.delResource({\n id,\n resourceId: resourceId!,\n });\n addAlert(t(\"resourceDeletedSuccess\"), AlertVariant.success);\n navigate(toAuthorizationTab({ realm, clientId: id, tab: \"resources\" }));\n } catch (error) {\n addError(\"resourceDeletedError\", error);\n }\n },\n });\n\n if (!client) {\n return <KeycloakSpinner />;\n }\n\n return (\n <>\n <DeleteConfirm />\n <ViewHeader\n titleKey={resourceId ? resource?.name! : \"createResource\"}\n dropdownItems={\n resourceId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-resource\"\n isDisabled={isDisabled}\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormProvider {...form}>\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n className=\"keycloak__resource-details__form\"\n onSubmit={handleSubmit(submit)}\n >\n <TextControl\n name={resourceId ? \"owner.name\" : \"\"}\n label={t(\"owner\")}\n labelIcon={t(\"ownerHelp\")}\n defaultValue={client.clientId}\n readOnly\n />\n <TextControl\n name={\"name\"}\n label={t(\"name\")}\n labelIcon={t(\"resourceNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"displayName\"\n label={t(\"displayName\")}\n labelIcon={t(\"displayNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"type\"\n label={t(\"type\")}\n labelIcon={t(\"resourceDetailsTypeHelp\")}\n />\n <FormGroup\n label={t(\"uris\")}\n fieldId=\"uris\"\n labelIcon={\n <HelpItem helpText={t(\"urisHelp\")} fieldLabelId=\"uris\" />\n }\n >\n <MultiLineInput\n name=\"uris\"\n type=\"url\"\n aria-label={t(\"uris\")}\n addButtonLabel=\"addUri\"\n />\n </FormGroup>\n <ScopePicker clientId={id} />\n <TextControl\n name=\"icon_uri\"\n label={t(\"iconUri\")}\n labelIcon={t(\"iconUriHelp\")}\n type=\"url\"\n />\n <DefaultSwitchControl\n name=\"ownerManagedAccess\"\n label={t(\"ownerManagedAccess\")}\n labelIcon={t(\"ownerManagedAccessHelp\")}\n />\n <FormGroup\n hasNoPaddingTop\n label={t(\"resourceAttribute\")}\n labelIcon={\n <HelpItem\n helpText={t(\"resourceAttributeHelp\")}\n fieldLabelId=\"resourceAttribute\"\n />\n }\n fieldId=\"resourceAttribute\"\n >\n <KeyValueInput name=\"attributes\" isDisabled={isDisabled} />\n </FormGroup>\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toAuthorizationTab({\n realm,\n clientId: id,\n tab: \"resources\",\n })}\n ></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n </div>\n </ActionGroup>\n </FormAccess>\n </FormProvider>\n </PageSection>\n </>\n );\n}\n"],"names":["ResourceDetails","adminClient","useAdminClient","t","useTranslation","client","setClient","useState","resource","setResource","permissions","setPermission","addAlert","addError","useAlerts","form","useForm","setValue","handleSubmit","id","resourceId","realm","useParams","navigate","useNavigate","setupForm","convertToFormValues","hasAccess","useAccess","isDisabled","useFetch","submit","submitted","convertFormValuesToObject","result","toResourceDetails","AlertVariant","error","toggleDeleteDialog","DeleteConfirm","useConfirmDialog","jsxs","Fragment","jsx","Alert","permission","toAuthorizationTab","ViewHeader","DropdownItem","PageSection","FormProvider","FormAccess","TextControl","FormGroup","HelpItem","MultiLineInput","ScopePicker","DefaultSwitchControl","KeyValueInput","ActionGroup","Button","ButtonVariant","props","Link","KeycloakSpinner"],"mappings":"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"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { jsxs as c, Fragment as D, jsx as t } from "react/jsx-runtime";
|
2
|
-
import { u as w, ao as N, V as z, Q as F, b as k, n as C, aF as H, ay as l, c as U, K as V, P, F as x, d as B, Y as d, A as E, B as m, l as T, e as j } from "./index-
|
2
|
+
import { u as w, ao as N, V as z, Q as F, b as k, n as C, aF as H, ay as l, c as U, K as V, P, F as x, d as B, Y as d, A as E, B as m, l as T, e as j } from "./index-Bd4uRM2j.js";
|
3
3
|
import { useState as q } from "react";
|
4
4
|
import { useTranslation as K } from "react-i18next";
|
5
5
|
import { useNavigate as Y, Link as G } from "react-router-dom";
|
@@ -150,4 +150,4 @@ function R() {
|
|
150
150
|
export {
|
151
151
|
R as default
|
152
152
|
};
|
153
|
-
//# sourceMappingURL=ScopeDetails-
|
153
|
+
//# sourceMappingURL=ScopeDetails-BLW92hEw.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ScopeDetails-
|
1
|
+
{"version":3,"file":"ScopeDetails-BLW92hEw.js","sources":["../src/clients/authorization/ScopeDetails.tsx"],"sourcesContent":["import type ScopeRepresentation from \"@keycloak/keycloak-admin-client/lib/defs/scopeRepresentation\";\nimport { TextControl, useAlerts, useFetch } from \"@keycloak/keycloak-ui-shared\";\nimport {\n ActionGroup,\n AlertVariant,\n Button,\n ButtonVariant,\n DropdownItem,\n PageSection,\n} from \"@patternfly/react-core\";\nimport { useState } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Link, useNavigate } from \"react-router-dom\";\nimport { useAdminClient } from \"../../admin-client\";\nimport { FormAccess } from \"../../components/form/FormAccess\";\nimport { ViewHeader } from \"../../components/view-header/ViewHeader\";\nimport { useParams } from \"../../utils/useParams\";\nimport useToggle from \"../../utils/useToggle\";\nimport { toAuthorizationTab } from \"../routes/AuthenticationTab\";\nimport type { ScopeDetailsParams } from \"../routes/Scope\";\nimport { DeleteScopeDialog } from \"./DeleteScopeDialog\";\n\ntype FormFields = Omit<ScopeRepresentation, \"resources\">;\n\nexport default function ScopeDetails() {\n const { adminClient } = useAdminClient();\n\n const { t } = useTranslation();\n const { id, scopeId, realm } = useParams<ScopeDetailsParams>();\n const navigate = useNavigate();\n const { addAlert, addError } = useAlerts();\n const [deleteDialog, toggleDeleteDialog] = useToggle();\n const [scope, setScope] = useState<ScopeRepresentation>();\n const form = useForm<FormFields>({\n mode: \"onChange\",\n });\n const { reset, handleSubmit } = form;\n\n useFetch(\n async () => {\n if (scopeId) {\n const scope = await adminClient.clients.getAuthorizationScope({\n id,\n scopeId,\n });\n if (!scope) {\n throw new Error(t(\"notFound\"));\n }\n return scope;\n }\n },\n (scope) => {\n setScope(scope);\n reset({ ...scope });\n },\n [],\n );\n\n const onSubmit = async (scope: ScopeRepresentation) => {\n try {\n if (scopeId) {\n await adminClient.clients.updateAuthorizationScope(\n { id, scopeId },\n scope,\n );\n setScope(scope);\n } else {\n await adminClient.clients.createAuthorizationScope(\n { id },\n {\n name: scope.name!,\n displayName: scope.displayName,\n iconUri: scope.iconUri,\n },\n );\n navigate(toAuthorizationTab({ realm, clientId: id, tab: \"scopes\" }));\n }\n addAlert(\n t((scopeId ? \"update\" : \"create\") + \"ScopeSuccess\"),\n AlertVariant.success,\n );\n } catch (error) {\n addError(\"scopeSaveError\", error);\n }\n };\n\n return (\n <>\n <DeleteScopeDialog\n clientId={id}\n open={deleteDialog}\n toggleDialog={toggleDeleteDialog}\n selectedScope={scope}\n refresh={() =>\n navigate(toAuthorizationTab({ realm, clientId: id, tab: \"scopes\" }))\n }\n />\n <ViewHeader\n titleKey={scopeId ? scope?.name! : t(\"createAuthorizationScope\")}\n dropdownItems={\n scopeId\n ? [\n <DropdownItem\n key=\"delete\"\n data-testid=\"delete-resource\"\n onClick={() => toggleDeleteDialog()}\n >\n {t(\"delete\")}\n </DropdownItem>,\n ]\n : undefined\n }\n />\n <PageSection variant=\"light\">\n <FormProvider {...form}>\n <FormAccess\n isHorizontal\n role=\"manage-authorization\"\n onSubmit={handleSubmit(onSubmit)}\n >\n <TextControl\n name=\"name\"\n label={t(\"name\")}\n labelIcon={t(\"scopeNameHelp\")}\n rules={{ required: t(\"required\") }}\n />\n <TextControl\n name=\"displayName\"\n label={t(\"displayName\")}\n labelIcon={t(\"scopeDisplayNameHelp\")}\n />\n <TextControl\n name=\"iconUri\"\n label={t(\"iconUri\")}\n labelIcon={t(\"iconUriHelp\")}\n />\n <ActionGroup>\n <div className=\"pf-v5-u-mt-md\">\n <Button\n variant={ButtonVariant.primary}\n type=\"submit\"\n data-testid=\"save\"\n >\n {t(\"save\")}\n </Button>\n\n {!scope ? (\n <Button\n variant=\"link\"\n data-testid=\"cancel\"\n component={(props) => (\n <Link\n {...props}\n to={toAuthorizationTab({\n realm,\n clientId: id,\n tab: \"scopes\",\n })}\n ></Link>\n )}\n >\n {t(\"cancel\")}\n </Button>\n ) : (\n <Button\n variant=\"link\"\n data-testid=\"revert\"\n onClick={() => reset({ ...scope })}\n >\n {t(\"revert\")}\n </Button>\n )}\n </div>\n </ActionGroup>\n </FormAccess>\n </FormProvider>\n </PageSection>\n </>\n );\n}\n"],"names":["ScopeDetails","adminClient","useAdminClient","t","useTranslation","id","scopeId","realm","useParams","navigate","useNavigate","addAlert","addError","useAlerts","deleteDialog","toggleDeleteDialog","useToggle","scope","setScope","useState","form","useForm","reset","handleSubmit","useFetch","onSubmit","toAuthorizationTab","AlertVariant","error","jsxs","Fragment","jsx","DeleteScopeDialog","ViewHeader","DropdownItem","PageSection","FormProvider","FormAccess","TextControl","ActionGroup","Button","ButtonVariant","props","Link"],"mappings":"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"}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { jsx as n, jsxs as F, Fragment as b } from "react/jsx-runtime";
|
2
|
-
import { u as I, ak as P, aU as y, n as O, ar as T, at as j, al as k, am as w, an as z, aw as G, a7 as L, a4 as R } from "./index-
|
2
|
+
import { u as I, ak as P, aU as y, n as O, ar as T, at as j, al as k, am as w, an as z, aw as G, a7 as L, a4 as R } from "./index-Bd4uRM2j.js";
|
3
3
|
import { useState as c } from "react";
|
4
4
|
import { useTranslation as H } from "react-i18next";
|
5
5
|
const B = ({
|
@@ -82,4 +82,4 @@ const B = ({
|
|
82
82
|
export {
|
83
83
|
B as S
|
84
84
|
};
|
85
|
-
//# sourceMappingURL=ScopePicker-
|
85
|
+
//# sourceMappingURL=ScopePicker-Cbywl8IC.js.map
|