From e539d999f2717b4fa579e33169dd5374e58b6614 Mon Sep 17 00:00:00 2001 From: simeng-li Date: Mon, 22 Jan 2024 11:33:00 +0800 Subject: [PATCH] feat(console,phrases): add application permissions edit modal (#5239) * feat(console,phrases): implement permission edit modal implement permission edit modal * fix(console): remove useless undefined type remove useless undefined type --- .../index.tsx | 135 ++++++++++++++++++ .../Permissions/index.tsx | 37 ++++- .../Permissions/use-scopes-table.ts | 63 ++++++-- .../admin-console/api-resource-details.ts | 4 + .../admin-console/application-details.ts | 3 + .../admin-console/api-resource-details.ts | 2 + .../admin-console/application-details.ts | 2 + .../admin-console/api-resource-details.ts | 4 + .../admin-console/application-details.ts | 3 + .../admin-console/api-resource-details.ts | 4 + .../admin-console/application-details.ts | 3 + .../admin-console/api-resource-details.ts | 4 + .../admin-console/application-details.ts | 3 + .../admin-console/api-resource-details.ts | 4 + .../admin-console/application-details.ts | 3 + .../admin-console/api-resource-details.ts | 4 + .../admin-console/application-details.ts | 3 + .../admin-console/api-resource-details.ts | 4 + .../admin-console/application-details.ts | 3 + .../admin-console/api-resource-details.ts | 4 + .../admin-console/application-details.ts | 3 + .../admin-console/api-resource-details.ts | 4 + .../admin-console/application-details.ts | 3 + .../admin-console/api-resource-details.ts | 4 + .../admin-console/application-details.ts | 3 + .../admin-console/api-resource-details.ts | 4 + .../admin-console/application-details.ts | 3 + .../admin-console/api-resource-details.ts | 4 + .../admin-console/application-details.ts | 3 + .../admin-console/api-resource-details.ts | 4 + .../admin-console/application-details.ts | 3 + .../admin-console/api-resource-details.ts | 4 + .../admin-console/application-details.ts | 3 + 33 files changed, 322 insertions(+), 15 deletions(-) create mode 100644 packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/Permissions/ApplicationScopesManagementModal/index.tsx diff --git a/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/Permissions/ApplicationScopesManagementModal/index.tsx b/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/Permissions/ApplicationScopesManagementModal/index.tsx new file mode 100644 index 000000000..810d4e865 --- /dev/null +++ b/packages/console/src/pages/ApplicationDetails/ApplicationDetailsContent/Permissions/ApplicationScopesManagementModal/index.tsx @@ -0,0 +1,135 @@ +import { ApplicationUserConsentScopeType } from '@logto/schemas'; +import { useEffect } from 'react'; +import { useForm } from 'react-hook-form'; +import { useTranslation } from 'react-i18next'; +import ReactModal from 'react-modal'; + +import Button from '@/ds-components/Button'; +import DangerousRaw from '@/ds-components/DangerousRaw'; +import FormField from '@/ds-components/FormField'; +import ModalLayout from '@/ds-components/ModalLayout'; +import TextInput from '@/ds-components/TextInput'; +import useActionTranslation from '@/hooks/use-action-translation'; +import useApi from '@/hooks/use-api'; +import * as modalStyles from '@/scss/modal.module.scss'; +import { trySubmitSafe } from '@/utils/form'; + +import { type ScopesTableRowDataType, type UserScopeTableRowDataType } from '../use-scopes-table'; + +/** + * ApplicationScopesManagementModal + * + * This modal is used to edit the resource and organization scopes' descriptions. + */ +export type EditableScopeData = Exclude; + +type Props = { + scope?: EditableScopeData; + onClose: () => void; + onSubmit: (scope: EditableScopeData) => void; +}; + +function ApplicationScopesManagementModal({ scope, onClose, onSubmit }: Props) { + const api = useApi(); + + const { + reset, + register, + handleSubmit, + formState: { errors, isSubmitting }, + } = useForm(); + + const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' }); + const tAction = useActionTranslation(); + + const onSubmitHandler = handleSubmit(trySubmitSafe(onSubmit)); + + // Reset form on open + useEffect(() => { + if (scope) { + reset(scope); + } + }, [reset, scope]); + + return ( + + {scope && ( + + {tAction('edit', 'organizations.organization_permission')} + + ) + } + subtitle={ + scope.type === ApplicationUserConsentScopeType.ResourceScopes ? ( + + {t('api_resource_details.permission.edit_subtitle', { + resourceName: scope.resourceName, + })} + + ) : undefined + } + learnMoreLink={ + scope.type === ApplicationUserConsentScopeType.ResourceScopes + ? { + href: 'https://docs.logto.io/docs/recipes/rbac/manage-permissions-and-roles#manage-role-permissions', + targetBlank: 'noopener', + } + : undefined + } + footer={ +