@strapi/admin 5.48.1 → 5.49.0
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/dist/admin/admin/src/StrapiApp.js +33 -20
- package/dist/admin/admin/src/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.mjs +6 -1
- package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/components/ConfirmDialog.js +3 -2
- package/dist/admin/admin/src/components/ConfirmDialog.js.map +1 -1
- package/dist/admin/admin/src/components/Context.js +4 -3
- package/dist/admin/admin/src/components/Context.js.map +1 -1
- package/dist/admin/admin/src/components/DescriptionComponentRenderer.js +8 -4
- package/dist/admin/admin/src/components/DescriptionComponentRenderer.js.map +1 -1
- package/dist/admin/admin/src/components/Filters.js +3 -2
- package/dist/admin/admin/src/components/Filters.js.map +1 -1
- package/dist/admin/admin/src/components/Form.js +9 -5
- package/dist/admin/admin/src/components/Form.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Date.js +3 -2
- package/dist/admin/admin/src/components/FormInputs/Date.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Json.js +3 -2
- package/dist/admin/admin/src/components/FormInputs/Json.js.map +1 -1
- package/dist/admin/admin/src/components/GapDropZone.js +3 -2
- package/dist/admin/admin/src/components/GapDropZone.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Context.js +3 -2
- package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js +3 -2
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Tours.js +9 -3
- package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Tours.mjs +6 -1
- package/dist/admin/admin/src/components/GuidedTour/Tours.mjs.map +1 -1
- package/dist/admin/admin/src/components/LanguageProvider.js +5 -1
- package/dist/admin/admin/src/components/LanguageProvider.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +3 -2
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
- package/dist/admin/admin/src/components/LeftMenu.js +3 -2
- package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.js +4 -3
- package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
- package/dist/admin/admin/src/components/PageHelpers.js +3 -2
- package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
- package/dist/admin/admin/src/components/Pagination.js +3 -2
- package/dist/admin/admin/src/components/Pagination.js.map +1 -1
- package/dist/admin/admin/src/components/PluginsInitializer.js +3 -2
- package/dist/admin/admin/src/components/PluginsInitializer.js.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.js +3 -2
- package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
- package/dist/admin/admin/src/components/ResizeIndicator.js +3 -2
- package/dist/admin/admin/src/components/ResizeIndicator.js.map +1 -1
- package/dist/admin/admin/src/components/SearchInput.js +3 -2
- package/dist/admin/admin/src/components/SearchInput.js.map +1 -1
- package/dist/admin/admin/src/components/Table.js +3 -2
- package/dist/admin/admin/src/components/Table.js.map +1 -1
- package/dist/admin/admin/src/components/Theme.js +3 -2
- package/dist/admin/admin/src/components/Theme.js.map +1 -1
- package/dist/admin/admin/src/components/WidgetRoot.js +9 -5
- package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -1
- package/dist/admin/admin/src/core/apis/CustomFields.js +14 -10
- package/dist/admin/admin/src/core/apis/CustomFields.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.js +8 -4
- package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
- package/dist/admin/admin/src/core/apis/router.js +20 -16
- package/dist/admin/admin/src/core/apis/router.js.map +1 -1
- package/dist/admin/admin/src/core/apis/router.mjs.map +1 -1
- package/dist/admin/admin/src/features/Auth.js +78 -6
- package/dist/admin/admin/src/features/Auth.js.map +1 -1
- package/dist/admin/admin/src/features/Auth.mjs +77 -6
- package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
- package/dist/admin/admin/src/features/BackButton.js +3 -2
- package/dist/admin/admin/src/features/BackButton.js.map +1 -1
- package/dist/admin/admin/src/features/Configuration.js +3 -2
- package/dist/admin/admin/src/features/Configuration.js.map +1 -1
- package/dist/admin/admin/src/features/Notifications.js +3 -2
- package/dist/admin/admin/src/features/Notifications.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js +7 -3
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Widgets.js +3 -2
- package/dist/admin/admin/src/features/Widgets.js.map +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.js +3 -2
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.js.map +1 -1
- package/dist/admin/admin/src/hooks/useAdminRoles.js +3 -2
- package/dist/admin/admin/src/hooks/useAdminRoles.js.map +1 -1
- package/dist/admin/admin/src/hooks/useControllableState.js +3 -2
- package/dist/admin/admin/src/hooks/useControllableState.js.map +1 -1
- package/dist/admin/admin/src/hooks/useDebounce.js +3 -2
- package/dist/admin/admin/src/hooks/useDebounce.js.map +1 -1
- package/dist/admin/admin/src/hooks/useDeviceType.js +3 -2
- package/dist/admin/admin/src/hooks/useDeviceType.js.map +1 -1
- package/dist/admin/admin/src/hooks/useElementOnScreen.js +3 -2
- package/dist/admin/admin/src/hooks/useElementOnScreen.js.map +1 -1
- package/dist/admin/admin/src/hooks/useEnterprise.js +3 -2
- package/dist/admin/admin/src/hooks/useEnterprise.js.map +1 -1
- package/dist/admin/admin/src/hooks/useFetchClient.js +3 -2
- package/dist/admin/admin/src/hooks/useFetchClient.js.map +1 -1
- package/dist/admin/admin/src/hooks/useForceUpdate.js +3 -2
- package/dist/admin/admin/src/hooks/useForceUpdate.js.map +1 -1
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.js +85 -15
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.js.map +1 -1
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs +82 -14
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useIsMounted.js +3 -2
- package/dist/admin/admin/src/hooks/useIsMounted.js.map +1 -1
- package/dist/admin/admin/src/hooks/useMediaQuery.js +3 -2
- package/dist/admin/admin/src/hooks/useMediaQuery.js.map +1 -1
- package/dist/admin/admin/src/hooks/useMenu.js +7 -3
- package/dist/admin/admin/src/hooks/useMenu.js.map +1 -1
- package/dist/admin/admin/src/hooks/useOnce.js +3 -2
- package/dist/admin/admin/src/hooks/useOnce.js.map +1 -1
- package/dist/admin/admin/src/hooks/useRBAC.js +7 -3
- package/dist/admin/admin/src/hooks/useRBAC.js.map +1 -1
- package/dist/admin/admin/src/hooks/useSettingsMenu.js +7 -3
- package/dist/admin/admin/src/hooks/useSettingsMenu.js.map +1 -1
- package/dist/admin/admin/src/hooks/useThrottledCallback.js +5 -1
- package/dist/admin/admin/src/hooks/useThrottledCallback.js.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +11 -5
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/ForgotPassword.js +3 -2
- package/dist/admin/admin/src/pages/Auth/components/ForgotPassword.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Login.js +8 -4
- package/dist/admin/admin/src/pages/Auth/components/Login.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Oops.js +3 -2
- package/dist/admin/admin/src/pages/Auth/components/Oops.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js +9 -5
- package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js +4 -3
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js +3 -2
- package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js +8 -4
- package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js +7 -3
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js +7 -3
- package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.js +8 -4
- package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +3 -2
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +3 -2
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.js +3 -2
- package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.js +3 -2
- package/dist/admin/admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.js +4 -3
- package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js +7 -2
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +5 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.js +6 -2
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +4 -3
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js +7 -3
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +4 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js +4 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +10 -6
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js +13 -7
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +15 -9
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js +9 -5
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +33 -25
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js +10 -6
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/difference.js +9 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/difference.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.js +8 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/layouts.js +6 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/layouts.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateConditionsToFalse.js +8 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateConditionsToFalse.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +4 -3
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js +4 -3
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js +9 -5
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +4 -3
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js +4 -3
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +3 -2
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js +4 -3
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.js +3 -2
- package/dist/admin/admin/src/pages/UseCasePage.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.js +7 -2
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/locales.js +3 -2
- package/dist/admin/admin/src/utils/locales.js.map +1 -1
- package/dist/admin/admin/src/utils/objects.js +9 -4
- package/dist/admin/admin/src/utils/objects.js.map +1 -1
- package/dist/admin/admin/src/utils/rulesEngine.js +5 -1
- package/dist/admin/admin/src/utils/rulesEngine.js.map +1 -1
- package/dist/admin/admin/src/utils/urls.js +5 -1
- package/dist/admin/admin/src/utils/urls.js.map +1 -1
- package/dist/admin/admin/tests/utils.js +3 -2
- package/dist/admin/admin/tests/utils.js.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js +7 -3
- package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useLicenseLimits.js +3 -2
- package/dist/admin/ee/admin/src/hooks/useLicenseLimits.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthResponse.js +3 -2
- package/dist/admin/ee/admin/src/pages/AuthResponse.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js +3 -2
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js +3 -2
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.js +5 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js +3 -2
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.js +7 -3
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.js.map +1 -1
- package/dist/admin/src/StrapiApp.d.ts +7 -1
- package/dist/admin/src/core/apis/router.d.ts +1 -2
- package/dist/admin/src/hooks/useIdleSessionLogout.d.ts +66 -12
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js +5 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication.js +5 -1
- package/dist/server/ee/server/src/controllers/authentication.js.map +1 -1
- package/dist/server/ee/server/src/controllers/user.js +6 -2
- package/dist/server/ee/server/src/controllers/user.js.map +1 -1
- package/dist/server/ee/server/src/services/auth.js +5 -1
- package/dist/server/ee/server/src/services/auth.js.map +1 -1
- package/dist/server/ee/server/src/services/user.js +8 -4
- package/dist/server/ee/server/src/services/user.js.map +1 -1
- package/dist/server/index.js +6 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/server/src/ai/services/ai.js +10 -4
- package/dist/server/server/src/ai/services/ai.js.map +1 -1
- package/dist/server/server/src/controllers/admin.js +9 -4
- package/dist/server/server/src/controllers/admin.js.map +1 -1
- package/dist/server/server/src/controllers/authentication.js +7 -2
- package/dist/server/server/src/controllers/authentication.js.map +1 -1
- package/dist/server/server/src/controllers/user.js +3 -2
- package/dist/server/server/src/controllers/user.js.map +1 -1
- package/dist/server/server/src/controllers/webhooks.js +7 -2
- package/dist/server/server/src/controllers/webhooks.js.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.js +7 -2
- package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
- package/dist/server/server/src/policies/hasPermissions.js +7 -3
- package/dist/server/server/src/policies/hasPermissions.js.map +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.js +8 -3
- package/dist/server/server/src/routes/serve-admin-panel.js.map +1 -1
- package/dist/server/server/src/services/api-token.js +7 -3
- package/dist/server/server/src/services/api-token.js.map +1 -1
- package/dist/server/server/src/services/auth.js +8 -3
- package/dist/server/server/src/services/auth.js.map +1 -1
- package/dist/server/server/src/services/content-type.js +6 -2
- package/dist/server/server/src/services/content-type.js.map +1 -1
- package/dist/server/server/src/services/encryption.js +8 -4
- package/dist/server/server/src/services/encryption.js.map +1 -1
- package/dist/server/server/src/services/passport.js +6 -2
- package/dist/server/server/src/services/passport.js.map +1 -1
- package/dist/server/server/src/services/permission/engine.js +5 -1
- package/dist/server/server/src/services/permission/engine.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/index.js +5 -1
- package/dist/server/server/src/services/permission/permissions-manager/index.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/query-builders.js +14 -10
- package/dist/server/server/src/services/permission/permissions-manager/query-builders.js.map +1 -1
- package/dist/server/server/src/services/permission/queries.js +5 -1
- package/dist/server/server/src/services/permission/queries.js.map +1 -1
- package/dist/server/server/src/services/project-settings.js +6 -2
- package/dist/server/server/src/services/project-settings.js.map +1 -1
- package/dist/server/server/src/services/role.js +8 -4
- package/dist/server/server/src/services/role.js.map +1 -1
- package/dist/server/server/src/services/token.js +7 -2
- package/dist/server/server/src/services/token.js.map +1 -1
- package/dist/server/server/src/services/transfer/permission.js +5 -1
- package/dist/server/server/src/services/transfer/permission.js.map +1 -1
- package/dist/server/server/src/services/transfer/token.js +10 -5
- package/dist/server/server/src/services/transfer/token.js.map +1 -1
- package/dist/server/server/src/services/user.js +10 -6
- package/dist/server/server/src/services/user.js.map +1 -1
- package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.js +5 -1
- package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.js.map +1 -1
- package/dist/server/server/src/validation/common-functions/check-fields-dont-have-duplicates.js +6 -2
- package/dist/server/server/src/validation/common-functions/check-fields-dont-have-duplicates.js.map +1 -1
- package/dist/server/server/src/validation/common-validators.js +6 -2
- package/dist/server/server/src/validation/common-validators.js.map +1 -1
- package/dist/server/server/src/validation/policies/hasPermissions.js +6 -2
- package/dist/server/server/src/validation/policies/hasPermissions.js.map +1 -1
- package/dist/server/shared/utils/session-auth.js +5 -1
- package/dist/server/shared/utils/session-auth.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfilePage.js","sources":["../../../../../admin/src/pages/ProfilePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, useNotifyAT, Grid, Typography, FlexProps } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { Form, FormHelpers } from '../components/Form';\nimport { InputRenderer } from '../components/FormInputs/Renderer';\nimport { useGuidedTour } from '../components/GuidedTour/Context';\nimport { Layouts } from '../components/Layouts/Layout';\nimport { Page } from '../components/PageHelpers';\nimport { useTypedDispatch, useTypedSelector } from '../core/store/hooks';\nimport { useAuth } from '../features/Auth';\nimport { useNotification } from '../features/Notifications';\nimport { useTracking } from '../features/Tracking';\nimport { useAPIErrorHandler } from '../hooks/useAPIErrorHandler';\nimport { useIsDesktop } from '../hooks/useMediaQuery';\nimport { AppState, setAppTheme } from '../reducer';\nimport { useIsSSOLockedQuery, useUpdateMeMutation } from '../services/auth';\nimport { isBaseQueryError } from '../utils/baseQuery';\nimport { translatedErrors } from '../utils/translatedErrors';\nimport { getDisplayName } from '../utils/users';\n\nimport { COMMON_USER_SCHEMA } from './Settings/pages/Users/utils/validation';\n\nimport type { UpdateMe } from '../../../shared/contracts/users';\n\nconst PROFILE_VALIDTION_SCHEMA = yup.object().shape({\n ...COMMON_USER_SCHEMA,\n currentPassword: yup\n .string()\n // @ts-expect-error – no idea why this is failing.\n .when(['password', 'confirmPassword'], (password, confirmPassword, passSchema) => {\n return password || confirmPassword\n ? passSchema\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n })\n .nullable()\n : passSchema;\n }),\n preferedLanguage: yup.string().nullable(),\n});\n\n/* -------------------------------------------------------------------------------------------------\n * ProfilePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst Panel = ({ children, ...flexProps }: FlexProps) => {\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4} {...flexProps}>\n {children}\n </Flex>\n </Box>\n );\n};\n\nconst ProfilePage = () => {\n const isDesktop = useIsDesktop();\n const localeNames = useTypedSelector((state) => state.admin_app.language.localeNames);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const { notifyStatus } = useNotifyAT();\n const currentTheme = useTypedSelector((state) => state.admin_app.theme.currentTheme);\n const dispatch = useTypedDispatch();\n const {\n _unstableFormatValidationErrors: formatValidationErrors,\n _unstableFormatAPIError: formatApiError,\n } = useAPIErrorHandler();\n\n const user = useAuth('ProfilePage', (state) => state.user);\n\n React.useEffect(() => {\n if (user) {\n notifyStatus(\n formatMessage({\n id: 'Settings.profile.form.notify.data.loaded',\n defaultMessage: 'Your profile data has been loaded',\n })\n );\n } else {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }, [formatMessage, notifyStatus, toggleNotification, user]);\n\n const [updateMe, { isLoading: isSubmittingForm }] = useUpdateMeMutation();\n\n const {\n isLoading,\n data: dataSSO,\n error,\n } = useIsSSOLockedQuery(undefined, {\n skip: !(window.strapi.isEE && window.strapi.features.isEnabled('sso')),\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'Settings.permissions.users.sso.provider.error' }),\n });\n }\n }, [error, formatMessage, toggleNotification]);\n\n type UpdateUsersMeBody = UpdateMe.Request['body'] & {\n confirmPassword: string;\n currentTheme: AppState['theme']['currentTheme'];\n };\n\n const handleSubmit = async (\n body: UpdateUsersMeBody,\n { setErrors }: FormHelpers<UpdateUsersMeBody>\n ) => {\n const { confirmPassword: _confirmPassword, currentTheme, ...bodyRest } = body;\n let dataToSend = bodyRest;\n\n // The password fields are optional. If the user didn't touch them, don't send any password\n // to the API, because an empty string would throw a validation error\n if (dataToSend.password === '') {\n const {\n password: _password,\n currentPassword: _currentPassword,\n ...passwordRequestBodyRest\n } = dataToSend;\n dataToSend = passwordRequestBodyRest;\n }\n\n const res = await updateMe(dataToSend);\n\n if ('data' in res) {\n dispatch(setAppTheme(currentTheme));\n\n trackUsage('didChangeMode', { newMode: currentTheme });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),\n });\n }\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n setErrors(formatValidationErrors(res.error));\n } else if (isBaseQueryError(res.error)) {\n toggleNotification({\n type: 'danger',\n message: formatApiError(res.error),\n });\n } else {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n const hasLockedRole = dataSSO?.isSSOLocked ?? false;\n const { email, firstname, lastname, username, preferedLanguage } = user ?? {};\n const initialData = {\n email: email ?? '',\n firstname: firstname ?? '',\n lastname: lastname ?? '',\n username: username ?? '',\n preferedLanguage,\n currentTheme,\n confirmPassword: '',\n password: '',\n };\n\n return (\n <>\n <Page.Main aria-busy={isSubmittingForm}>\n <Page.Title>\n {formatMessage({\n id: 'Settings.profile.form.section.head.title',\n defaultMessage: 'User profile',\n })}\n </Page.Title>\n <Form\n method=\"PUT\"\n onSubmit={handleSubmit}\n initialValues={initialData}\n validationSchema={PROFILE_VALIDTION_SCHEMA}\n >\n {({ isSubmitting, modified }) => (\n <>\n <Layouts.Header\n title={getDisplayName(user)}\n primaryAction={\n <Button\n startIcon={<Check />}\n loading={isSubmitting}\n type=\"submit\"\n disabled={!modified}\n fullWidth\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n />\n <Box paddingBottom={6}>\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <UserInfoSection />\n {!hasLockedRole && <PasswordSection />}\n <PreferencesSection localeNames={localeNames} />\n </Flex>\n </Layouts.Content>\n </Box>\n </>\n )}\n </Form>\n {isDesktop && process.env.NODE_ENV === 'development' && (\n <Box paddingBottom={6}>\n <Layouts.Content>\n <GuidedTourSection />\n </Layouts.Content>\n </Box>\n )}\n </Page.Main>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PasswordSection\n * -----------------------------------------------------------------------------------------------*/\n\nconst PasswordSection = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Panel>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.change-password',\n defaultMessage: 'Change password',\n })}\n </Typography>\n {[\n [\n {\n label: formatMessage({\n id: 'Auth.form.currentPassword.label',\n defaultMessage: 'Current Password',\n }),\n name: 'currentPassword',\n size: 6,\n type: 'password' as const,\n },\n ],\n [\n {\n autoComplete: 'new-password',\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n size: 6,\n type: 'password' as const,\n },\n {\n autoComplete: 'new-password',\n label: formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n }),\n name: 'confirmPassword',\n size: 6,\n type: 'password' as const,\n },\n ],\n ].map((row, index) => (\n <Grid.Root key={index} gap={5}>\n {row.map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n xs={12}\n m={6}\n col={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n ))}\n </Panel>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PreferencesSection\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PreferencesSectionProps {\n localeNames: Record<string, string>;\n}\n\nconst PreferencesSection = ({ localeNames }: PreferencesSectionProps) => {\n const { formatMessage } = useIntl();\n const themesToDisplay = useTypedSelector((state) => state.admin_app.theme.availableThemes);\n\n return (\n <Panel>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'Settings.profile.form.section.experience.title',\n defaultMessage: 'Experience',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'Settings.profile.form.section.experience.interfaceLanguageHelp',\n defaultMessage:\n 'Preference changes will apply only to you. More information is available {here}.',\n },\n {\n here: (\n <Box\n tag=\"a\"\n color=\"primary600\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#locales\"\n >\n {formatMessage({\n id: 'Settings.profile.form.section.experience.here',\n defaultMessage: 'here',\n })}\n </Box>\n ),\n }\n )}\n </Typography>\n </Flex>\n <Grid.Root gap={5}>\n {[\n {\n hint: formatMessage({\n id: 'Settings.profile.form.section.experience.interfaceLanguage.hint',\n defaultMessage: 'This will only display your own interface in the chosen language.',\n }),\n label: formatMessage({\n id: 'Settings.profile.form.section.experience.interfaceLanguage',\n defaultMessage: 'Interface language',\n }),\n name: 'preferedLanguage',\n options: Object.entries(localeNames).map(([value, label]) => ({\n label,\n value,\n })),\n placeholder: formatMessage({\n id: 'global.select',\n defaultMessage: 'Select',\n }),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.profile.form.section.experience.mode.hint',\n defaultMessage: 'Displays your interface in the chosen mode.',\n }),\n label: formatMessage({\n id: 'Settings.profile.form.section.experience.mode.label',\n defaultMessage: 'Interface mode',\n }),\n name: 'currentTheme',\n options: [\n {\n label: formatMessage({\n id: 'Settings.profile.form.section.experience.mode.option-system-label',\n defaultMessage: 'Use system settings',\n }),\n value: 'system',\n },\n ...themesToDisplay.map((theme) => ({\n label: formatMessage(\n {\n id: 'Settings.profile.form.section.experience.mode.option-label',\n defaultMessage: '{name} mode',\n },\n {\n name: formatMessage({\n id: theme,\n defaultMessage: upperFirst(theme),\n }),\n }\n ),\n value: theme,\n })),\n ],\n placeholder: formatMessage({\n id: 'app.components.Select.placeholder',\n defaultMessage: 'Select',\n }),\n size: 6,\n type: 'enumeration' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n xs={12}\n m={6}\n col={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Panel>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * UserInfoSection\n * -----------------------------------------------------------------------------------------------*/\n\nconst UserInfoSection = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Panel>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.profile',\n defaultMessage: 'Profile',\n })}\n </Typography>\n <Grid.Root gap={5}>\n {[\n {\n label: formatMessage({\n id: 'Auth.form.firstname.label',\n defaultMessage: 'First name',\n }),\n name: 'firstname',\n required: true,\n size: 6,\n type: 'string' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Last name',\n }),\n name: 'lastname',\n size: 6,\n type: 'string' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n }),\n name: 'email',\n required: true,\n size: 6,\n type: 'email' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.username.label',\n defaultMessage: 'Username',\n }),\n name: 'username',\n size: 6,\n type: 'string' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n xs={12}\n m={6}\n col={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Panel>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourSection\n * -----------------------------------------------------------------------------------------------*/\n\nconst GuidedTourSection = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const dispatch = useGuidedTour('ProfilePage', (s) => s.dispatch);\n\n const onClickReset = () => {\n dispatch({ type: 'reset_all_tours' });\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'tours.profile.notification.success.reset',\n defaultMessage: 'Guided tour reset',\n }),\n });\n };\n\n return (\n <Panel alignItems=\"start\">\n <Flex direction=\"column\" alignItems=\"start\" gap={1}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'tours.profile.title',\n defaultMessage: 'Guided tour',\n })}\n </Typography>\n <Typography variant=\"pi\">\n {formatMessage({\n id: 'tours.profile.description',\n defaultMessage: 'You can reset the guided tour at any time.',\n })}\n </Typography>\n </Flex>\n <Button variant=\"tertiary\" onClick={onClickReset}>\n {formatMessage({\n id: 'tours.profile.reset',\n defaultMessage: 'Reset guided tour',\n })}\n </Button>\n </Panel>\n );\n};\n\nexport { ProfilePage };\n"],"names":["PROFILE_VALIDTION_SCHEMA","yup","object","shape","COMMON_USER_SCHEMA","currentPassword","string","when","password","confirmPassword","passSchema","required","id","translatedErrors","defaultMessage","nullable","preferedLanguage","Panel","children","flexProps","_jsx","Box","background","hasRadius","shadow","paddingTop","paddingBottom","paddingLeft","paddingRight","Flex","direction","alignItems","gap","ProfilePage","isDesktop","useIsDesktop","localeNames","useTypedSelector","state","admin_app","language","formatMessage","useIntl","trackUsage","useTracking","toggleNotification","useNotification","notifyStatus","useNotifyAT","currentTheme","theme","dispatch","useTypedDispatch","_unstableFormatValidationErrors","formatValidationErrors","_unstableFormatAPIError","formatApiError","useAPIErrorHandler","user","useAuth","React","useEffect","type","message","updateMe","isLoading","isSubmittingForm","useUpdateMeMutation","data","dataSSO","error","useIsSSOLockedQuery","undefined","skip","window","strapi","isEE","features","isEnabled","handleSubmit","body","setErrors","_confirmPassword","bodyRest","dataToSend","_password","_currentPassword","passwordRequestBodyRest","res","setAppTheme","newMode","isBaseQueryError","name","Page","Loading","hasLockedRole","isSSOLocked","email","firstname","lastname","username","initialData","_Fragment","_jsxs","Main","aria-busy","Title","Form","method","onSubmit","initialValues","validationSchema","isSubmitting","modified","Layouts","Header","title","getDisplayName","primaryAction","Button","startIcon","Check","loading","disabled","fullWidth","Content","UserInfoSection","PasswordSection","PreferencesSection","process","env","NODE_ENV","GuidedTourSection","Typography","variant","tag","label","size","autoComplete","map","row","index","Grid","Root","field","Item","xs","m","col","InputRenderer","themesToDisplay","availableThemes","here","color","target","rel","href","hint","options","Object","entries","value","placeholder","upperFirst","useGuidedTour","s","onClickReset","onClick"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProfilePage.js","sources":["../../../../../admin/src/pages/ProfilePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, useNotifyAT, Grid, Typography, FlexProps } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { Form, FormHelpers } from '../components/Form';\nimport { InputRenderer } from '../components/FormInputs/Renderer';\nimport { useGuidedTour } from '../components/GuidedTour/Context';\nimport { Layouts } from '../components/Layouts/Layout';\nimport { Page } from '../components/PageHelpers';\nimport { useTypedDispatch, useTypedSelector } from '../core/store/hooks';\nimport { useAuth } from '../features/Auth';\nimport { useNotification } from '../features/Notifications';\nimport { useTracking } from '../features/Tracking';\nimport { useAPIErrorHandler } from '../hooks/useAPIErrorHandler';\nimport { useIsDesktop } from '../hooks/useMediaQuery';\nimport { AppState, setAppTheme } from '../reducer';\nimport { useIsSSOLockedQuery, useUpdateMeMutation } from '../services/auth';\nimport { isBaseQueryError } from '../utils/baseQuery';\nimport { translatedErrors } from '../utils/translatedErrors';\nimport { getDisplayName } from '../utils/users';\n\nimport { COMMON_USER_SCHEMA } from './Settings/pages/Users/utils/validation';\n\nimport type { UpdateMe } from '../../../shared/contracts/users';\n\nconst PROFILE_VALIDTION_SCHEMA = yup.object().shape({\n ...COMMON_USER_SCHEMA,\n currentPassword: yup\n .string()\n // @ts-expect-error – no idea why this is failing.\n .when(['password', 'confirmPassword'], (password, confirmPassword, passSchema) => {\n return password || confirmPassword\n ? passSchema\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n })\n .nullable()\n : passSchema;\n }),\n preferedLanguage: yup.string().nullable(),\n});\n\n/* -------------------------------------------------------------------------------------------------\n * ProfilePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst Panel = ({ children, ...flexProps }: FlexProps) => {\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4} {...flexProps}>\n {children}\n </Flex>\n </Box>\n );\n};\n\nconst ProfilePage = () => {\n const isDesktop = useIsDesktop();\n const localeNames = useTypedSelector((state) => state.admin_app.language.localeNames);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { toggleNotification } = useNotification();\n const { notifyStatus } = useNotifyAT();\n const currentTheme = useTypedSelector((state) => state.admin_app.theme.currentTheme);\n const dispatch = useTypedDispatch();\n const {\n _unstableFormatValidationErrors: formatValidationErrors,\n _unstableFormatAPIError: formatApiError,\n } = useAPIErrorHandler();\n\n const user = useAuth('ProfilePage', (state) => state.user);\n\n React.useEffect(() => {\n if (user) {\n notifyStatus(\n formatMessage({\n id: 'Settings.profile.form.notify.data.loaded',\n defaultMessage: 'Your profile data has been loaded',\n })\n );\n } else {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }, [formatMessage, notifyStatus, toggleNotification, user]);\n\n const [updateMe, { isLoading: isSubmittingForm }] = useUpdateMeMutation();\n\n const {\n isLoading,\n data: dataSSO,\n error,\n } = useIsSSOLockedQuery(undefined, {\n skip: !(window.strapi.isEE && window.strapi.features.isEnabled('sso')),\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'Settings.permissions.users.sso.provider.error' }),\n });\n }\n }, [error, formatMessage, toggleNotification]);\n\n type UpdateUsersMeBody = UpdateMe.Request['body'] & {\n confirmPassword: string;\n currentTheme: AppState['theme']['currentTheme'];\n };\n\n const handleSubmit = async (\n body: UpdateUsersMeBody,\n { setErrors }: FormHelpers<UpdateUsersMeBody>\n ) => {\n const { confirmPassword: _confirmPassword, currentTheme, ...bodyRest } = body;\n let dataToSend = bodyRest;\n\n // The password fields are optional. If the user didn't touch them, don't send any password\n // to the API, because an empty string would throw a validation error\n if (dataToSend.password === '') {\n const {\n password: _password,\n currentPassword: _currentPassword,\n ...passwordRequestBodyRest\n } = dataToSend;\n dataToSend = passwordRequestBodyRest;\n }\n\n const res = await updateMe(dataToSend);\n\n if ('data' in res) {\n dispatch(setAppTheme(currentTheme));\n\n trackUsage('didChangeMode', { newMode: currentTheme });\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),\n });\n }\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n setErrors(formatValidationErrors(res.error));\n } else if (isBaseQueryError(res.error)) {\n toggleNotification({\n type: 'danger',\n message: formatApiError(res.error),\n });\n } else {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n }\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n const hasLockedRole = dataSSO?.isSSOLocked ?? false;\n const { email, firstname, lastname, username, preferedLanguage } = user ?? {};\n const initialData = {\n email: email ?? '',\n firstname: firstname ?? '',\n lastname: lastname ?? '',\n username: username ?? '',\n preferedLanguage,\n currentTheme,\n confirmPassword: '',\n password: '',\n };\n\n return (\n <>\n <Page.Main aria-busy={isSubmittingForm}>\n <Page.Title>\n {formatMessage({\n id: 'Settings.profile.form.section.head.title',\n defaultMessage: 'User profile',\n })}\n </Page.Title>\n <Form\n method=\"PUT\"\n onSubmit={handleSubmit}\n initialValues={initialData}\n validationSchema={PROFILE_VALIDTION_SCHEMA}\n >\n {({ isSubmitting, modified }) => (\n <>\n <Layouts.Header\n title={getDisplayName(user)}\n primaryAction={\n <Button\n startIcon={<Check />}\n loading={isSubmitting}\n type=\"submit\"\n disabled={!modified}\n fullWidth\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n />\n <Box paddingBottom={6}>\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <UserInfoSection />\n {!hasLockedRole && <PasswordSection />}\n <PreferencesSection localeNames={localeNames} />\n </Flex>\n </Layouts.Content>\n </Box>\n </>\n )}\n </Form>\n {isDesktop && process.env.NODE_ENV === 'development' && (\n <Box paddingBottom={6}>\n <Layouts.Content>\n <GuidedTourSection />\n </Layouts.Content>\n </Box>\n )}\n </Page.Main>\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PasswordSection\n * -----------------------------------------------------------------------------------------------*/\n\nconst PasswordSection = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Panel>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.change-password',\n defaultMessage: 'Change password',\n })}\n </Typography>\n {[\n [\n {\n label: formatMessage({\n id: 'Auth.form.currentPassword.label',\n defaultMessage: 'Current Password',\n }),\n name: 'currentPassword',\n size: 6,\n type: 'password' as const,\n },\n ],\n [\n {\n autoComplete: 'new-password',\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n size: 6,\n type: 'password' as const,\n },\n {\n autoComplete: 'new-password',\n label: formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n }),\n name: 'confirmPassword',\n size: 6,\n type: 'password' as const,\n },\n ],\n ].map((row, index) => (\n <Grid.Root key={index} gap={5}>\n {row.map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n xs={12}\n m={6}\n col={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n ))}\n </Panel>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PreferencesSection\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PreferencesSectionProps {\n localeNames: Record<string, string>;\n}\n\nconst PreferencesSection = ({ localeNames }: PreferencesSectionProps) => {\n const { formatMessage } = useIntl();\n const themesToDisplay = useTypedSelector((state) => state.admin_app.theme.availableThemes);\n\n return (\n <Panel>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'Settings.profile.form.section.experience.title',\n defaultMessage: 'Experience',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'Settings.profile.form.section.experience.interfaceLanguageHelp',\n defaultMessage:\n 'Preference changes will apply only to you. More information is available {here}.',\n },\n {\n here: (\n <Box\n tag=\"a\"\n color=\"primary600\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#locales\"\n >\n {formatMessage({\n id: 'Settings.profile.form.section.experience.here',\n defaultMessage: 'here',\n })}\n </Box>\n ),\n }\n )}\n </Typography>\n </Flex>\n <Grid.Root gap={5}>\n {[\n {\n hint: formatMessage({\n id: 'Settings.profile.form.section.experience.interfaceLanguage.hint',\n defaultMessage: 'This will only display your own interface in the chosen language.',\n }),\n label: formatMessage({\n id: 'Settings.profile.form.section.experience.interfaceLanguage',\n defaultMessage: 'Interface language',\n }),\n name: 'preferedLanguage',\n options: Object.entries(localeNames).map(([value, label]) => ({\n label,\n value,\n })),\n placeholder: formatMessage({\n id: 'global.select',\n defaultMessage: 'Select',\n }),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.profile.form.section.experience.mode.hint',\n defaultMessage: 'Displays your interface in the chosen mode.',\n }),\n label: formatMessage({\n id: 'Settings.profile.form.section.experience.mode.label',\n defaultMessage: 'Interface mode',\n }),\n name: 'currentTheme',\n options: [\n {\n label: formatMessage({\n id: 'Settings.profile.form.section.experience.mode.option-system-label',\n defaultMessage: 'Use system settings',\n }),\n value: 'system',\n },\n ...themesToDisplay.map((theme) => ({\n label: formatMessage(\n {\n id: 'Settings.profile.form.section.experience.mode.option-label',\n defaultMessage: '{name} mode',\n },\n {\n name: formatMessage({\n id: theme,\n defaultMessage: upperFirst(theme),\n }),\n }\n ),\n value: theme,\n })),\n ],\n placeholder: formatMessage({\n id: 'app.components.Select.placeholder',\n defaultMessage: 'Select',\n }),\n size: 6,\n type: 'enumeration' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n xs={12}\n m={6}\n col={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Panel>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * UserInfoSection\n * -----------------------------------------------------------------------------------------------*/\n\nconst UserInfoSection = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Panel>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.profile',\n defaultMessage: 'Profile',\n })}\n </Typography>\n <Grid.Root gap={5}>\n {[\n {\n label: formatMessage({\n id: 'Auth.form.firstname.label',\n defaultMessage: 'First name',\n }),\n name: 'firstname',\n required: true,\n size: 6,\n type: 'string' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Last name',\n }),\n name: 'lastname',\n size: 6,\n type: 'string' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n }),\n name: 'email',\n required: true,\n size: 6,\n type: 'email' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.username.label',\n defaultMessage: 'Username',\n }),\n name: 'username',\n size: 6,\n type: 'string' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n xs={12}\n m={6}\n col={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Panel>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * GuidedTourSection\n * -----------------------------------------------------------------------------------------------*/\n\nconst GuidedTourSection = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const dispatch = useGuidedTour('ProfilePage', (s) => s.dispatch);\n\n const onClickReset = () => {\n dispatch({ type: 'reset_all_tours' });\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'tours.profile.notification.success.reset',\n defaultMessage: 'Guided tour reset',\n }),\n });\n };\n\n return (\n <Panel alignItems=\"start\">\n <Flex direction=\"column\" alignItems=\"start\" gap={1}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'tours.profile.title',\n defaultMessage: 'Guided tour',\n })}\n </Typography>\n <Typography variant=\"pi\">\n {formatMessage({\n id: 'tours.profile.description',\n defaultMessage: 'You can reset the guided tour at any time.',\n })}\n </Typography>\n </Flex>\n <Button variant=\"tertiary\" onClick={onClickReset}>\n {formatMessage({\n id: 'tours.profile.reset',\n defaultMessage: 'Reset guided tour',\n })}\n </Button>\n </Panel>\n );\n};\n\nexport { ProfilePage };\n"],"names":["PROFILE_VALIDTION_SCHEMA","yup","object","shape","COMMON_USER_SCHEMA","currentPassword","string","when","password","confirmPassword","passSchema","required","id","translatedErrors","defaultMessage","nullable","preferedLanguage","Panel","children","flexProps","_jsx","Box","background","hasRadius","shadow","paddingTop","paddingBottom","paddingLeft","paddingRight","Flex","direction","alignItems","gap","ProfilePage","isDesktop","useIsDesktop","localeNames","useTypedSelector","state","admin_app","language","formatMessage","useIntl","trackUsage","useTracking","toggleNotification","useNotification","notifyStatus","useNotifyAT","currentTheme","theme","dispatch","useTypedDispatch","_unstableFormatValidationErrors","formatValidationErrors","_unstableFormatAPIError","formatApiError","useAPIErrorHandler","user","useAuth","React","useEffect","type","message","updateMe","isLoading","isSubmittingForm","useUpdateMeMutation","data","dataSSO","error","useIsSSOLockedQuery","undefined","skip","window","strapi","isEE","features","isEnabled","handleSubmit","body","setErrors","_confirmPassword","bodyRest","dataToSend","_password","_currentPassword","passwordRequestBodyRest","res","setAppTheme","newMode","isBaseQueryError","name","Page","Loading","hasLockedRole","isSSOLocked","email","firstname","lastname","username","initialData","_Fragment","_jsxs","Main","aria-busy","Title","Form","method","onSubmit","initialValues","validationSchema","isSubmitting","modified","Layouts","Header","title","getDisplayName","primaryAction","Button","startIcon","Check","loading","disabled","fullWidth","Content","UserInfoSection","PasswordSection","PreferencesSection","process","env","NODE_ENV","GuidedTourSection","Typography","variant","tag","label","size","autoComplete","map","row","index","Grid","Root","field","Item","xs","m","col","InputRenderer","themesToDisplay","availableThemes","here","color","target","rel","href","hint","options","Object","entries","value","placeholder","upperFirst","useGuidedTour","s","onClickReset","onClick"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,MAAMA,wBAAAA,GAA2BC,cAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;AAClD,IAAA,GAAGC,6BAAkB;IACrBC,eAAAA,EAAiBJ,cAAAA,CACdK,MAAM,EACP;AACCC,KAAAA,IAAI,CAAC;AAAC,QAAA,UAAA;AAAY,QAAA;KAAkB,EAAE,CAACC,UAAUC,eAAAA,EAAiBC,UAAAA,GAAAA;AACjE,QAAA,OAAOF,QAAAA,IAAYC,eAAAA,GACfC,UAAAA,CACGC,QAAQ,CAAC;YACRC,EAAAA,EAAIC,iCAAAA,CAAiBF,QAAQ,CAACC,EAAE;YAChCE,cAAAA,EAAgB;AAClB,SAAA,CAAA,CACCC,QAAQ,EAAA,GACXL,UAAAA;AACN,IAAA,CAAA,CAAA;IACFM,gBAAAA,EAAkBf,cAAAA,CAAIK,MAAM,EAAA,CAAGS,QAAQ;AACzC,CAAA,CAAA;AAEA;;AAEkG,qGAElG,MAAME,KAAAA,GAAQ,CAAC,EAAEC,QAAQ,EAAE,GAAGC,SAAAA,EAAsB,GAAA;AAClD,IAAA,qBACEC,cAAA,CAACC,gBAAAA,EAAAA;QACCC,UAAAA,EAAW,UAAA;QACXC,SAAS,EAAA,IAAA;QACTC,MAAAA,EAAO,cAAA;QACPC,UAAAA,EAAY,CAAA;QACZC,aAAAA,EAAe,CAAA;QACfC,WAAAA,EAAa,CAAA;QACbC,YAAAA,EAAc,CAAA;AAEd,QAAA,QAAA,gBAAAR,cAAA,CAACS,iBAAAA,EAAAA;YAAKC,SAAAA,EAAU,QAAA;YAASC,UAAAA,EAAW,SAAA;YAAUC,GAAAA,EAAK,CAAA;AAAI,YAAA,GAAGb,SAAS;AAChED,YAAAA,QAAAA,EAAAA;;;AAIT,CAAA;AAEA,MAAMe,WAAAA,GAAc,IAAA;AAClB,IAAA,MAAMC,SAAAA,GAAYC,0BAAAA,EAAAA;IAClB,MAAMC,WAAAA,GAAcC,uBAAiB,CAACC,KAAAA,GAAUA,MAAMC,SAAS,CAACC,QAAQ,CAACJ,WAAW,CAAA;IACpF,MAAM,EAAEK,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,UAAU,EAAE,GAAGC,oBAAAA,EAAAA;IACvB,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,6BAAAA,EAAAA;IAC/B,MAAM,EAAEC,YAAY,EAAE,GAAGC,wBAAAA,EAAAA;IACzB,MAAMC,YAAAA,GAAeZ,uBAAiB,CAACC,KAAAA,GAAUA,MAAMC,SAAS,CAACW,KAAK,CAACD,YAAY,CAAA;AACnF,IAAA,MAAME,QAAAA,GAAWC,sBAAAA,EAAAA;AACjB,IAAA,MAAM,EACJC,+BAAAA,EAAiCC,sBAAsB,EACvDC,uBAAAA,EAAyBC,cAAc,EACxC,GAAGC,qCAAAA,EAAAA;AAEJ,IAAA,MAAMC,OAAOC,YAAAA,CAAQ,aAAA,EAAe,CAACrB,KAAAA,GAAUA,MAAMoB,IAAI,CAAA;AAEzDE,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIH,IAAAA,EAAM;AACRX,YAAAA,YAAAA,CACEN,aAAAA,CAAc;gBACZ7B,EAAAA,EAAI,0CAAA;gBACJE,cAAAA,EAAgB;AAClB,aAAA,CAAA,CAAA;QAEJ,CAAA,MAAO;YACL+B,kBAAAA,CAAmB;gBACjBiB,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAAStB,aAAAA,CAAc;oBAAE7B,EAAAA,EAAI,oBAAA;oBAAsBE,cAAAA,EAAgB;AAAoB,iBAAA;AACzF,aAAA,CAAA;AACF,QAAA;IACF,CAAA,EAAG;AAAC2B,QAAAA,aAAAA;AAAeM,QAAAA,YAAAA;AAAcF,QAAAA,kBAAAA;AAAoBa,QAAAA;AAAK,KAAA,CAAA;AAE1D,IAAA,MAAM,CAACM,QAAAA,EAAU,EAAEC,WAAWC,gBAAgB,EAAE,CAAC,GAAGC,wBAAAA,EAAAA;IAEpD,MAAM,EACJF,SAAS,EACTG,IAAAA,EAAMC,OAAO,EACbC,KAAK,EACN,GAAGC,wBAAAA,CAAoBC,SAAAA,EAAW;AACjCC,QAAAA,IAAAA,EAAM,EAAEC,MAAAA,CAAOC,MAAM,CAACC,IAAI,IAAIF,MAAAA,CAAOC,MAAM,CAACE,QAAQ,CAACC,SAAS,CAAC,KAAA,CAAK;AACtE,KAAA,CAAA;AAEAlB,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIS,KAAAA,EAAO;YACTzB,kBAAAA,CAAmB;gBACjBiB,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAAStB,aAAAA,CAAc;oBAAE7B,EAAAA,EAAI;AAAgD,iBAAA;AAC/E,aAAA,CAAA;AACF,QAAA;IACF,CAAA,EAAG;AAAC0D,QAAAA,KAAAA;AAAO7B,QAAAA,aAAAA;AAAeI,QAAAA;AAAmB,KAAA,CAAA;AAO7C,IAAA,MAAMkC,YAAAA,GAAe,OACnBC,IAAAA,EACA,EAAEC,SAAS,EAAkC,GAAA;QAE7C,MAAM,EAAExE,iBAAiByE,gBAAgB,EAAEjC,YAAY,EAAE,GAAGkC,UAAU,GAAGH,IAAAA;AACzE,QAAA,IAAII,UAAAA,GAAaD,QAAAA;;;QAIjB,IAAIC,UAAAA,CAAW5E,QAAQ,KAAK,EAAA,EAAI;YAC9B,MAAM,EACJA,UAAU6E,SAAS,EACnBhF,iBAAiBiF,gBAAgB,EACjC,GAAGC,uBAAAA,EACJ,GAAGH,UAAAA;YACJA,UAAAA,GAAaG,uBAAAA;AACf,QAAA;QAEA,MAAMC,GAAAA,GAAM,MAAMxB,QAAAA,CAASoB,UAAAA,CAAAA;AAE3B,QAAA,IAAI,UAAUI,GAAAA,EAAK;AACjBrC,YAAAA,QAAAA,CAASsC,mBAAAA,CAAYxC,YAAAA,CAAAA,CAAAA;AAErBN,YAAAA,UAAAA,CAAW,eAAA,EAAiB;gBAAE+C,OAAAA,EAASzC;AAAa,aAAA,CAAA;YAEpDJ,kBAAAA,CAAmB;gBACjBiB,IAAAA,EAAM,SAAA;AACNC,gBAAAA,OAAAA,EAAStB,aAAAA,CAAc;oBAAE7B,EAAAA,EAAI,4BAAA;oBAA8BE,cAAAA,EAAgB;AAAQ,iBAAA;AACrF,aAAA,CAAA;AACF,QAAA;AAEA,QAAA,IAAI,WAAW0E,GAAAA,EAAK;YAClB,IAAIG,0BAAAA,CAAiBH,IAAIlB,KAAK,CAAA,IAAKkB,IAAIlB,KAAK,CAACsB,IAAI,KAAK,iBAAA,EAAmB;gBACvEX,SAAAA,CAAU3B,sBAAAA,CAAuBkC,IAAIlB,KAAK,CAAA,CAAA;AAC5C,YAAA,CAAA,MAAO,IAAIqB,0BAAAA,CAAiBH,GAAAA,CAAIlB,KAAK,CAAA,EAAG;gBACtCzB,kBAAAA,CAAmB;oBACjBiB,IAAAA,EAAM,QAAA;oBACNC,OAAAA,EAASP,cAAAA,CAAegC,IAAIlB,KAAK;AACnC,iBAAA,CAAA;YACF,CAAA,MAAO;gBACLzB,kBAAAA,CAAmB;oBACjBiB,IAAAA,EAAM,QAAA;AACNC,oBAAAA,OAAAA,EAAStB,aAAAA,CAAc;wBAAE7B,EAAAA,EAAI,oBAAA;wBAAsBE,cAAAA,EAAgB;AAAoB,qBAAA;AACzF,iBAAA,CAAA;AACF,YAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,IAAImD,SAAAA,EAAW;QACb,qBAAO7C,cAAA,CAACyE,iBAAKC,OAAO,EAAA,EAAA,CAAA;AACtB,IAAA;IAEA,MAAMC,aAAAA,GAAgB1B,SAAS2B,WAAAA,IAAe,KAAA;AAC9C,IAAA,MAAM,EAAEC,KAAK,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,QAAQ,EAAEpF,gBAAgB,EAAE,GAAG0C,QAAQ,EAAC;AAC5E,IAAA,MAAM2C,WAAAA,GAAc;AAClBJ,QAAAA,KAAAA,EAAOA,KAAAA,IAAS,EAAA;AAChBC,QAAAA,SAAAA,EAAWA,SAAAA,IAAa,EAAA;AACxBC,QAAAA,QAAAA,EAAUA,QAAAA,IAAY,EAAA;AACtBC,QAAAA,QAAAA,EAAUA,QAAAA,IAAY,EAAA;AACtBpF,QAAAA,gBAAAA;AACAiC,QAAAA,YAAAA;QACAxC,eAAAA,EAAiB,EAAA;QACjBD,QAAAA,EAAU;AACZ,KAAA;IAEA,qBACEY,cAAA,CAAAkF,mBAAA,EAAA;gCACEC,eAAA,CAACV,iBAAKW,IAAI,EAAA;YAACC,WAAAA,EAAWvC,gBAAAA;;AACpB,8BAAA9C,cAAA,CAACyE,iBAAKa,KAAK,EAAA;8BACRjE,aAAAA,CAAc;wBACb7B,EAAAA,EAAI,0CAAA;wBACJE,cAAAA,EAAgB;AAClB,qBAAA;;8BAEFM,cAAA,CAACuF,SAAAA,EAAAA;oBACCC,MAAAA,EAAO,KAAA;oBACPC,QAAAA,EAAU9B,YAAAA;oBACV+B,aAAAA,EAAeT,WAAAA;oBACfU,gBAAAA,EAAkB/G,wBAAAA;AAEjB,oBAAA,QAAA,EAAA,CAAC,EAAEgH,YAAY,EAAEC,QAAQ,EAAE,iBAC1BV,eAAA,CAAAD,mBAAA,EAAA;;AACE,8CAAAlF,cAAA,CAAC8F,eAAQC,MAAM,EAAA;AACbC,oCAAAA,KAAAA,EAAOC,oBAAAA,CAAe3D,IAAAA,CAAAA;AACtB4D,oCAAAA,aAAAA,gBACElG,cAAA,CAACmG,mBAAAA,EAAAA;AACCC,wCAAAA,SAAAA,gBAAWpG,cAAA,CAACqG,WAAAA,EAAAA,EAAAA,CAAAA;wCACZC,OAAAA,EAASV,YAAAA;wCACTlD,IAAAA,EAAK,QAAA;AACL6D,wCAAAA,QAAAA,EAAU,CAACV,QAAAA;wCACXW,SAAS,EAAA,IAAA;kDAERnF,aAAAA,CAAc;4CAAE7B,EAAAA,EAAI,aAAA;4CAAeE,cAAAA,EAAgB;AAAO,yCAAA;;;8CAIjEM,cAAA,CAACC,gBAAAA,EAAAA;oCAAIK,aAAAA,EAAe,CAAA;4DAClBN,cAAA,CAAC8F,eAAQW,OAAO,EAAA;AACd,wCAAA,QAAA,gBAAAtB,eAAA,CAAC1E,iBAAAA,EAAAA;4CAAKC,SAAAA,EAAU,QAAA;4CAASC,UAAAA,EAAW,SAAA;4CAAUC,GAAAA,EAAK,CAAA;;8DACjDZ,cAAA,CAAC0G,eAAAA,EAAAA,EAAAA,CAAAA;AACA,gDAAA,CAAC/B,+BAAiB3E,cAAA,CAAC2G,eAAAA,EAAAA,EAAAA,CAAAA;8DACpB3G,cAAA,CAAC4G,kBAAAA,EAAAA;oDAAmB5F,WAAAA,EAAaA;;;;;;;;;AAO5CF,gBAAAA,SAAAA,IAAa+F,QAAQC,GAAG,CAACC,QAAQ,KAAK,+BACrC/G,cAAA,CAACC,gBAAAA,EAAAA;oBAAIK,aAAAA,EAAe,CAAA;4CAClBN,cAAA,CAAC8F,eAAQW,OAAO,EAAA;AACd,wBAAA,QAAA,gBAAAzG,cAAA,CAACgH,iBAAAA,EAAAA,EAAAA;;;;;;AAOf;AAEA;;AAEkG,qGAElG,MAAML,eAAAA,GAAkB,IAAA;IACtB,MAAM,EAAEtF,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,qBACE6D,eAAA,CAACtF,KAAAA,EAAAA;;0BACCG,cAAA,CAACiH,uBAAAA,EAAAA;gBAAWC,OAAAA,EAAQ,OAAA;gBAAQC,GAAAA,EAAI,IAAA;0BAC7B9F,aAAAA,CAAc;oBACb7B,EAAAA,EAAI,wBAAA;oBACJE,cAAAA,EAAgB;AAClB,iBAAA;;AAED,YAAA;AACC,gBAAA;AACE,oBAAA;AACE0H,wBAAAA,KAAAA,EAAO/F,aAAAA,CAAc;4BACnB7B,EAAAA,EAAI,iCAAA;4BACJE,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACA8E,IAAAA,EAAM,iBAAA;wBACN6C,IAAAA,EAAM,CAAA;wBACN3E,IAAAA,EAAM;AACR;AACD,iBAAA;AACD,gBAAA;AACE,oBAAA;wBACE4E,YAAAA,EAAc,cAAA;AACdF,wBAAAA,KAAAA,EAAO/F,aAAAA,CAAc;4BACnB7B,EAAAA,EAAI,iBAAA;4BACJE,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACA8E,IAAAA,EAAM,UAAA;wBACN6C,IAAAA,EAAM,CAAA;wBACN3E,IAAAA,EAAM;AACR,qBAAA;AACA,oBAAA;wBACE4E,YAAAA,EAAc,cAAA;AACdF,wBAAAA,KAAAA,EAAO/F,aAAAA,CAAc;4BACnB7B,EAAAA,EAAI,iCAAA;4BACJE,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACA8E,IAAAA,EAAM,iBAAA;wBACN6C,IAAAA,EAAM,CAAA;wBACN3E,IAAAA,EAAM;AACR;AACD;AACF,aAAA,CAAC6E,GAAG,CAAC,CAACC,KAAKC,KAAAA,iBACVzH,cAAA,CAAC0H,kBAAKC,IAAI,EAAA;oBAAa/G,GAAAA,EAAK,CAAA;8BACzB4G,GAAAA,CAAID,GAAG,CAAC,CAAC,EAAEF,IAAI,EAAE,GAAGO,KAAAA,EAAO,iBAC1B5H,cAAA,CAAC0H,iBAAAA,CAAKG,IAAI,EAAA;4BAERC,EAAAA,EAAI,EAAA;4BACJC,CAAAA,EAAG,CAAA;4BACHC,GAAAA,EAAKX,IAAAA;4BACL3G,SAAAA,EAAU,QAAA;4BACVC,UAAAA,EAAW,SAAA;AAEX,4BAAA,QAAA,gBAAAX,cAAA,CAACiI,sBAAAA,EAAAA;AAAe,gCAAA,GAAGL;;AAPdA,yBAAAA,EAAAA,KAAAA,CAAMpD,IAAI,CAAA;AAHLiD,iBAAAA,EAAAA,KAAAA,CAAAA;;;AAiBxB,CAAA;AAUA,MAAMb,kBAAAA,GAAqB,CAAC,EAAE5F,WAAW,EAA2B,GAAA;IAClE,MAAM,EAAEK,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM4G,eAAAA,GAAkBjH,uBAAiB,CAACC,KAAAA,GAAUA,MAAMC,SAAS,CAACW,KAAK,CAACqG,eAAe,CAAA;AAEzF,IAAA,qBACEhD,eAAA,CAACtF,KAAAA,EAAAA;;0BACCsF,eAAA,CAAC1E,iBAAAA,EAAAA;gBAAKC,SAAAA,EAAU,QAAA;gBAASC,UAAAA,EAAW,SAAA;gBAAUC,GAAAA,EAAK,CAAA;;kCACjDZ,cAAA,CAACiH,uBAAAA,EAAAA;wBAAWC,OAAAA,EAAQ,OAAA;wBAAQC,GAAAA,EAAI,IAAA;kCAC7B9F,aAAAA,CAAc;4BACb7B,EAAAA,EAAI,gDAAA;4BACJE,cAAAA,EAAgB;AAClB,yBAAA;;kCAEFM,cAAA,CAACiH,uBAAAA,EAAAA;kCACE5F,aAAAA,CACC;4BACE7B,EAAAA,EAAI,gEAAA;4BACJE,cAAAA,EACE;yBACJ,EACA;AACE0I,4BAAAA,IAAAA,gBACEpI,cAAA,CAACC,gBAAAA,EAAAA;gCACCkH,GAAAA,EAAI,GAAA;gCACJkB,KAAAA,EAAM,YAAA;gCACNC,MAAAA,EAAO,QAAA;gCACPC,GAAAA,EAAI,qBAAA;gCACJC,IAAAA,EAAK,2FAAA;0CAEJnH,aAAAA,CAAc;oCACb7B,EAAAA,EAAI,+CAAA;oCACJE,cAAAA,EAAgB;AAClB,iCAAA;;AAGN,yBAAA;;;;AAIN,0BAAAM,cAAA,CAAC0H,kBAAKC,IAAI,EAAA;gBAAC/G,GAAAA,EAAK,CAAA;AACb,gBAAA,QAAA,EAAA;AACC,oBAAA;AACE6H,wBAAAA,IAAAA,EAAMpH,aAAAA,CAAc;4BAClB7B,EAAAA,EAAI,iEAAA;4BACJE,cAAAA,EAAgB;AAClB,yBAAA,CAAA;AACA0H,wBAAAA,KAAAA,EAAO/F,aAAAA,CAAc;4BACnB7B,EAAAA,EAAI,4DAAA;4BACJE,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACA8E,IAAAA,EAAM,kBAAA;wBACNkE,OAAAA,EAASC,MAAAA,CAAOC,OAAO,CAAC5H,WAAAA,CAAAA,CAAauG,GAAG,CAAC,CAAC,CAACsB,KAAAA,EAAOzB,KAAAA,CAAM,IAAM;AAC5DA,gCAAAA,KAAAA;AACAyB,gCAAAA;6BACF,CAAA,CAAA;AACAC,wBAAAA,WAAAA,EAAazH,aAAAA,CAAc;4BACzB7B,EAAAA,EAAI,eAAA;4BACJE,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACA2H,IAAAA,EAAM,CAAA;wBACN3E,IAAAA,EAAM;AACR,qBAAA;AACA,oBAAA;AACE+F,wBAAAA,IAAAA,EAAMpH,aAAAA,CAAc;4BAClB7B,EAAAA,EAAI,oDAAA;4BACJE,cAAAA,EAAgB;AAClB,yBAAA,CAAA;AACA0H,wBAAAA,KAAAA,EAAO/F,aAAAA,CAAc;4BACnB7B,EAAAA,EAAI,qDAAA;4BACJE,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACA8E,IAAAA,EAAM,cAAA;wBACNkE,OAAAA,EAAS;AACP,4BAAA;AACEtB,gCAAAA,KAAAA,EAAO/F,aAAAA,CAAc;oCACnB7B,EAAAA,EAAI,mEAAA;oCACJE,cAAAA,EAAgB;AAClB,iCAAA,CAAA;gCACAmJ,KAAAA,EAAO;AACT,6BAAA;AACGX,4BAAAA,GAAAA,eAAAA,CAAgBX,GAAG,CAAC,CAACzF,KAAAA,IAAW;AACjCsF,oCAAAA,KAAAA,EAAO/F,aAAAA,CACL;wCACE7B,EAAAA,EAAI,4DAAA;wCACJE,cAAAA,EAAgB;qCAClB,EACA;AACE8E,wCAAAA,IAAAA,EAAMnD,aAAAA,CAAc;4CAClB7B,EAAAA,EAAIsC,KAAAA;AACJpC,4CAAAA,cAAAA,EAAgBqJ,2BAAAA,CAAWjH,KAAAA;AAC7B,yCAAA;AACF,qCAAA,CAAA;oCAEF+G,KAAAA,EAAO/G;iCACT,CAAA;AACD,yBAAA;AACDgH,wBAAAA,WAAAA,EAAazH,aAAAA,CAAc;4BACzB7B,EAAAA,EAAI,mCAAA;4BACJE,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACA2H,IAAAA,EAAM,CAAA;wBACN3E,IAAAA,EAAM;AACR;iBACD,CAAC6E,GAAG,CAAC,CAAC,EAAEF,IAAI,EAAE,GAAGO,KAAAA,EAAO,iBACvB5H,cAAA,CAAC0H,iBAAAA,CAAKG,IAAI,EAAA;wBAERC,EAAAA,EAAI,EAAA;wBACJC,CAAAA,EAAG,CAAA;wBACHC,GAAAA,EAAKX,IAAAA;wBACL3G,SAAAA,EAAU,QAAA;wBACVC,UAAAA,EAAW,SAAA;AAEX,wBAAA,QAAA,gBAAAX,cAAA,CAACiI,sBAAAA,EAAAA;AAAe,4BAAA,GAAGL;;AAPdA,qBAAAA,EAAAA,KAAAA,CAAMpD,IAAI,CAAA;;;;AAa3B,CAAA;AAEA;;AAEkG,qGAElG,MAAMkC,eAAAA,GAAkB,IAAA;IACtB,MAAM,EAAErF,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,qBACE6D,eAAA,CAACtF,KAAAA,EAAAA;;0BACCG,cAAA,CAACiH,uBAAAA,EAAAA;gBAAWC,OAAAA,EAAQ,OAAA;gBAAQC,GAAAA,EAAI,IAAA;0BAC7B9F,aAAAA,CAAc;oBACb7B,EAAAA,EAAI,gBAAA;oBACJE,cAAAA,EAAgB;AAClB,iBAAA;;AAEF,0BAAAM,cAAA,CAAC0H,kBAAKC,IAAI,EAAA;gBAAC/G,GAAAA,EAAK,CAAA;AACb,gBAAA,QAAA,EAAA;AACC,oBAAA;AACEwG,wBAAAA,KAAAA,EAAO/F,aAAAA,CAAc;4BACnB7B,EAAAA,EAAI,2BAAA;4BACJE,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACA8E,IAAAA,EAAM,WAAA;wBACNjF,QAAAA,EAAU,IAAA;wBACV8H,IAAAA,EAAM,CAAA;wBACN3E,IAAAA,EAAM;AACR,qBAAA;AACA,oBAAA;AACE0E,wBAAAA,KAAAA,EAAO/F,aAAAA,CAAc;4BACnB7B,EAAAA,EAAI,0BAAA;4BACJE,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACA8E,IAAAA,EAAM,UAAA;wBACN6C,IAAAA,EAAM,CAAA;wBACN3E,IAAAA,EAAM;AACR,qBAAA;AACA,oBAAA;AACE0E,wBAAAA,KAAAA,EAAO/F,aAAAA,CAAc;4BACnB7B,EAAAA,EAAI,uBAAA;4BACJE,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACA8E,IAAAA,EAAM,OAAA;wBACNjF,QAAAA,EAAU,IAAA;wBACV8H,IAAAA,EAAM,CAAA;wBACN3E,IAAAA,EAAM;AACR,qBAAA;AACA,oBAAA;AACE0E,wBAAAA,KAAAA,EAAO/F,aAAAA,CAAc;4BACnB7B,EAAAA,EAAI,0BAAA;4BACJE,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACA8E,IAAAA,EAAM,UAAA;wBACN6C,IAAAA,EAAM,CAAA;wBACN3E,IAAAA,EAAM;AACR;iBACD,CAAC6E,GAAG,CAAC,CAAC,EAAEF,IAAI,EAAE,GAAGO,KAAAA,EAAO,iBACvB5H,cAAA,CAAC0H,iBAAAA,CAAKG,IAAI,EAAA;wBAERC,EAAAA,EAAI,EAAA;wBACJC,CAAAA,EAAG,CAAA;wBACHC,GAAAA,EAAKX,IAAAA;wBACL3G,SAAAA,EAAU,QAAA;wBACVC,UAAAA,EAAW,SAAA;AAEX,wBAAA,QAAA,gBAAAX,cAAA,CAACiI,sBAAAA,EAAAA;AAAe,4BAAA,GAAGL;;AAPdA,qBAAAA,EAAAA,KAAAA,CAAMpD,IAAI,CAAA;;;;AAa3B,CAAA;AAEA;;AAEkG,qGAElG,MAAMwC,iBAAAA,GAAoB,IAAA;IACxB,MAAM,EAAE3F,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEG,kBAAkB,EAAE,GAAGC,6BAAAA,EAAAA;AAC/B,IAAA,MAAMK,WAAWiH,qBAAAA,CAAc,aAAA,EAAe,CAACC,CAAAA,GAAMA,EAAElH,QAAQ,CAAA;AAE/D,IAAA,MAAMmH,YAAAA,GAAe,IAAA;QACnBnH,QAAAA,CAAS;YAAEW,IAAAA,EAAM;AAAkB,SAAA,CAAA;QACnCjB,kBAAAA,CAAmB;YACjBiB,IAAAA,EAAM,SAAA;AACNC,YAAAA,OAAAA,EAAStB,aAAAA,CAAc;gBACrB7B,EAAAA,EAAI,0CAAA;gBACJE,cAAAA,EAAgB;AAClB,aAAA;AACF,SAAA,CAAA;AACF,IAAA,CAAA;AAEA,IAAA,qBACEyF,eAAA,CAACtF,KAAAA,EAAAA;QAAMc,UAAAA,EAAW,OAAA;;0BAChBwE,eAAA,CAAC1E,iBAAAA,EAAAA;gBAAKC,SAAAA,EAAU,QAAA;gBAASC,UAAAA,EAAW,OAAA;gBAAQC,GAAAA,EAAK,CAAA;;kCAC/CZ,cAAA,CAACiH,uBAAAA,EAAAA;wBAAWC,OAAAA,EAAQ,OAAA;wBAAQC,GAAAA,EAAI,IAAA;kCAC7B9F,aAAAA,CAAc;4BACb7B,EAAAA,EAAI,qBAAA;4BACJE,cAAAA,EAAgB;AAClB,yBAAA;;kCAEFM,cAAA,CAACiH,uBAAAA,EAAAA;wBAAWC,OAAAA,EAAQ,IAAA;kCACjB7F,aAAAA,CAAc;4BACb7B,EAAAA,EAAI,2BAAA;4BACJE,cAAAA,EAAgB;AAClB,yBAAA;;;;0BAGJM,cAAA,CAACmG,mBAAAA,EAAAA;gBAAOe,OAAAA,EAAQ,UAAA;gBAAWiC,OAAAA,EAASD,YAAAA;0BACjC7H,aAAAA,CAAc;oBACb7B,EAAAA,EAAI,qBAAA;oBACJE,cAAAA,EAAgB;AAClB,iBAAA;;;;AAIR,CAAA;;;;"}
|
|
@@ -14,7 +14,8 @@ var Notifications = require('../../../../features/Notifications.js');
|
|
|
14
14
|
var useAPIErrorHandler = require('../../../../hooks/useAPIErrorHandler.js');
|
|
15
15
|
var transferTokens = require('../../../../services/transferTokens.js');
|
|
16
16
|
|
|
17
|
-
function
|
|
17
|
+
function _interopNamespace(e) {
|
|
18
|
+
if (e && e.__esModule) return e;
|
|
18
19
|
var n = Object.create(null);
|
|
19
20
|
if (e) {
|
|
20
21
|
Object.keys(e).forEach(function (k) {
|
|
@@ -31,7 +32,7 @@ function _interopNamespaceDefault(e) {
|
|
|
31
32
|
return Object.freeze(n);
|
|
32
33
|
}
|
|
33
34
|
|
|
34
|
-
var React__namespace = /*#__PURE__*/
|
|
35
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
35
36
|
|
|
36
37
|
const ActionButton = styled.styled(designSystem.Button)`
|
|
37
38
|
white-space: nowrap;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormHead.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/FormHead.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Dialog, Flex, Tooltip } from '@strapi/design-system';\nimport { Check, ArrowClockwise, Eye, EyeStriked } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useRegenerateTokenMutation } from '../../../../services/transferTokens';\n\nimport type { Data } from '@strapi/types';\n\ninterface RegenerateProps {\n onRegenerate?: (newKey: string) => void;\n url: string;\n}\n\nconst ActionButton = styled(Button)`\n white-space: nowrap;\n`;\n\nconst Regenerate = ({ onRegenerate, url }: RegenerateProps) => {\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n\n const [isLoadingConfirmation, setIsLoadingConfirmation] = React.useState(false);\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [regenerateToken] = useRegenerateTokenMutation();\n\n const regenerateData = async () => {\n try {\n const res = await regenerateToken(url);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n if (onRegenerate) {\n onRegenerate(res.data.accessKey);\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n } finally {\n setIsLoadingConfirmation(false);\n }\n };\n\n const handleConfirmRegeneration = async () => {\n regenerateData();\n setShowConfirmDialog(false);\n };\n\n return (\n <Dialog.Root open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>\n <Dialog.Trigger>\n <ActionButton\n startIcon={<ArrowClockwise />}\n type=\"button\"\n size=\"S\"\n variant=\"tertiary\"\n onClick={() => setShowConfirmDialog(true)}\n name=\"regenerate\"\n fullWidth\n >\n {formatMessage({\n id: 'Settings.tokens.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </ActionButton>\n </Dialog.Trigger>\n\n <ConfirmDialog\n title={formatMessage({\n id: 'Settings.tokens.RegenerateDialog.title',\n defaultMessage: 'Regenerate token',\n })}\n endAction={\n <Button\n startIcon={<ArrowClockwise />}\n loading={isLoadingConfirmation}\n onClick={handleConfirmRegeneration}\n >\n {formatMessage({\n id: 'Settings.tokens.Button.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Button>\n }\n >\n {formatMessage({\n id: 'Settings.tokens.popUpWarning.message',\n defaultMessage: 'Are you sure you want to regenerate this token?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n\ninterface Token {\n id: Data.ID;\n name: string;\n}\n\ninterface FormHeadProps<TToken extends Token | null> {\n title: MessageDescriptor;\n token: TToken;\n canEditInputs: boolean;\n canRegenerate: boolean;\n canShowToken?: boolean;\n setToken: (token: TToken) => void;\n toggleToken?: () => void;\n showToken?: boolean;\n isSubmitting: boolean;\n regenerateUrl: string;\n}\n\nexport const FormHead = <TToken extends Token | null>({\n title,\n token,\n setToken,\n toggleToken,\n showToken,\n canShowToken,\n canEditInputs,\n canRegenerate,\n isSubmitting,\n regenerateUrl,\n}: FormHeadProps<TToken>) => {\n const { formatMessage } = useIntl();\n const handleRegenerate = (newKey: string) => {\n setToken({\n ...token,\n accessKey: newKey,\n });\n toggleToken?.();\n };\n\n return (\n <Layouts.Header\n title={token?.name || formatMessage(title)}\n primaryAction={\n canEditInputs ? (\n <Flex width=\"100%\" gap={2} wrap={{ initial: 'wrap', medium: 'nowrap' }}>\n {canRegenerate && token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )}\n <Flex width=\"100%\" gap={2}>\n {token?.id && toggleToken && canShowToken === true && (\n <tours.apiTokens.ViewAPIToken>\n <Tooltip\n label={\n !canShowToken &&\n formatMessage({\n id: 'Settings.tokens.encryptionKeyMissing',\n defaultMessage:\n 'In order to view the token, you need a valid encryption key in the admin configuration',\n })\n }\n >\n <ActionButton\n type=\"button\"\n startIcon={showToken ? <EyeStriked /> : <Eye />}\n variant=\"secondary\"\n onClick={() => toggleToken?.()}\n disabled={!canShowToken}\n fullWidth\n >\n {formatMessage({\n id: 'Settings.tokens.viewToken',\n defaultMessage: 'View token',\n })}\n </ActionButton>\n </Tooltip>\n </tours.apiTokens.ViewAPIToken>\n )}\n <ActionButton\n disabled={isSubmitting}\n loading={isSubmitting}\n startIcon={<Check />}\n type=\"submit\"\n size=\"S\"\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </ActionButton>\n </Flex>\n </Flex>\n ) : (\n canRegenerate &&\n token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )\n )\n }\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton />\n </Box>\n }\n ellipsis\n />\n );\n};\n"],"names":["ActionButton","styled","Button","Regenerate","onRegenerate","url","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","React","useState","isLoadingConfirmation","setIsLoadingConfirmation","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","regenerateToken","useRegenerateTokenMutation","regenerateData","res","type","message","error","data","accessKey","id","defaultMessage","handleConfirmRegeneration","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Trigger","startIcon","ArrowClockwise","size","variant","onClick","name","fullWidth","ConfirmDialog","title","endAction","loading","FormHead","token","setToken","toggleToken","showToken","canShowToken","canEditInputs","canRegenerate","isSubmitting","regenerateUrl","handleRegenerate","newKey","Layouts","Header","primaryAction","Flex","width","gap","wrap","initial","medium","tours","apiTokens","ViewAPIToken","Tooltip","label","EyeStriked","Eye","disabled","Check","navigationAction","Box","display","BackButton","ellipsis"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FormHead.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/FormHead.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Dialog, Flex, Tooltip } from '@strapi/design-system';\nimport { Check, ArrowClockwise, Eye, EyeStriked } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useRegenerateTokenMutation } from '../../../../services/transferTokens';\n\nimport type { Data } from '@strapi/types';\n\ninterface RegenerateProps {\n onRegenerate?: (newKey: string) => void;\n url: string;\n}\n\nconst ActionButton = styled(Button)`\n white-space: nowrap;\n`;\n\nconst Regenerate = ({ onRegenerate, url }: RegenerateProps) => {\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n\n const [isLoadingConfirmation, setIsLoadingConfirmation] = React.useState(false);\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [regenerateToken] = useRegenerateTokenMutation();\n\n const regenerateData = async () => {\n try {\n const res = await regenerateToken(url);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n if (onRegenerate) {\n onRegenerate(res.data.accessKey);\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n } finally {\n setIsLoadingConfirmation(false);\n }\n };\n\n const handleConfirmRegeneration = async () => {\n regenerateData();\n setShowConfirmDialog(false);\n };\n\n return (\n <Dialog.Root open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>\n <Dialog.Trigger>\n <ActionButton\n startIcon={<ArrowClockwise />}\n type=\"button\"\n size=\"S\"\n variant=\"tertiary\"\n onClick={() => setShowConfirmDialog(true)}\n name=\"regenerate\"\n fullWidth\n >\n {formatMessage({\n id: 'Settings.tokens.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </ActionButton>\n </Dialog.Trigger>\n\n <ConfirmDialog\n title={formatMessage({\n id: 'Settings.tokens.RegenerateDialog.title',\n defaultMessage: 'Regenerate token',\n })}\n endAction={\n <Button\n startIcon={<ArrowClockwise />}\n loading={isLoadingConfirmation}\n onClick={handleConfirmRegeneration}\n >\n {formatMessage({\n id: 'Settings.tokens.Button.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Button>\n }\n >\n {formatMessage({\n id: 'Settings.tokens.popUpWarning.message',\n defaultMessage: 'Are you sure you want to regenerate this token?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n\ninterface Token {\n id: Data.ID;\n name: string;\n}\n\ninterface FormHeadProps<TToken extends Token | null> {\n title: MessageDescriptor;\n token: TToken;\n canEditInputs: boolean;\n canRegenerate: boolean;\n canShowToken?: boolean;\n setToken: (token: TToken) => void;\n toggleToken?: () => void;\n showToken?: boolean;\n isSubmitting: boolean;\n regenerateUrl: string;\n}\n\nexport const FormHead = <TToken extends Token | null>({\n title,\n token,\n setToken,\n toggleToken,\n showToken,\n canShowToken,\n canEditInputs,\n canRegenerate,\n isSubmitting,\n regenerateUrl,\n}: FormHeadProps<TToken>) => {\n const { formatMessage } = useIntl();\n const handleRegenerate = (newKey: string) => {\n setToken({\n ...token,\n accessKey: newKey,\n });\n toggleToken?.();\n };\n\n return (\n <Layouts.Header\n title={token?.name || formatMessage(title)}\n primaryAction={\n canEditInputs ? (\n <Flex width=\"100%\" gap={2} wrap={{ initial: 'wrap', medium: 'nowrap' }}>\n {canRegenerate && token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )}\n <Flex width=\"100%\" gap={2}>\n {token?.id && toggleToken && canShowToken === true && (\n <tours.apiTokens.ViewAPIToken>\n <Tooltip\n label={\n !canShowToken &&\n formatMessage({\n id: 'Settings.tokens.encryptionKeyMissing',\n defaultMessage:\n 'In order to view the token, you need a valid encryption key in the admin configuration',\n })\n }\n >\n <ActionButton\n type=\"button\"\n startIcon={showToken ? <EyeStriked /> : <Eye />}\n variant=\"secondary\"\n onClick={() => toggleToken?.()}\n disabled={!canShowToken}\n fullWidth\n >\n {formatMessage({\n id: 'Settings.tokens.viewToken',\n defaultMessage: 'View token',\n })}\n </ActionButton>\n </Tooltip>\n </tours.apiTokens.ViewAPIToken>\n )}\n <ActionButton\n disabled={isSubmitting}\n loading={isSubmitting}\n startIcon={<Check />}\n type=\"submit\"\n size=\"S\"\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </ActionButton>\n </Flex>\n </Flex>\n ) : (\n canRegenerate &&\n token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )\n )\n }\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton />\n </Box>\n }\n ellipsis\n />\n );\n};\n"],"names":["ActionButton","styled","Button","Regenerate","onRegenerate","url","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","React","useState","isLoadingConfirmation","setIsLoadingConfirmation","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","regenerateToken","useRegenerateTokenMutation","regenerateData","res","type","message","error","data","accessKey","id","defaultMessage","handleConfirmRegeneration","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Trigger","startIcon","ArrowClockwise","size","variant","onClick","name","fullWidth","ConfirmDialog","title","endAction","loading","FormHead","token","setToken","toggleToken","showToken","canShowToken","canEditInputs","canRegenerate","isSubmitting","regenerateUrl","handleRegenerate","newKey","Layouts","Header","primaryAction","Flex","width","gap","wrap","initial","medium","tours","apiTokens","ViewAPIToken","Tooltip","label","EyeStriked","Eye","disabled","Check","navigationAction","Box","display","BackButton","ellipsis"],"mappings":"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"}
|
|
@@ -14,7 +14,8 @@ var Table$1 = require('../../../../components/Table.js');
|
|
|
14
14
|
var Tracking = require('../../../../features/Tracking.js');
|
|
15
15
|
var useQueryParams = require('../../../../hooks/useQueryParams.js');
|
|
16
16
|
|
|
17
|
-
function
|
|
17
|
+
function _interopNamespace(e) {
|
|
18
|
+
if (e && e.__esModule) return e;
|
|
18
19
|
var n = Object.create(null);
|
|
19
20
|
if (e) {
|
|
20
21
|
Object.keys(e).forEach(function (k) {
|
|
@@ -31,7 +32,7 @@ function _interopNamespaceDefault(e) {
|
|
|
31
32
|
return Object.freeze(n);
|
|
32
33
|
}
|
|
33
34
|
|
|
34
|
-
var React__namespace = /*#__PURE__*/
|
|
35
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
35
36
|
|
|
36
37
|
const formatAdminUserName = (owner)=>{
|
|
37
38
|
const full = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/Table.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n IconButton,\n Typography,\n useCollator,\n Dialog,\n LinkButton,\n} from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { ApiToken } from '../../../../../../shared/contracts/api-token';\nimport { SanitizedTransferToken } from '../../../../../../shared/contracts/transfer';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { RelativeTime } from '../../../../components/RelativeTime';\nimport { Table as TableImpl } from '../../../../components/Table';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useQueryParams } from '../../../../hooks/useQueryParams';\n\nimport type { AdminTokenOwner } from '../../../../../../shared/contracts/shared';\nimport type { Data } from '@strapi/types';\n\nconst formatAdminUserName = (\n owner: Pick<AdminTokenOwner, 'firstname' | 'lastname' | 'email' | 'username'>\n): string => {\n const full = [owner.firstname, owner.lastname].filter(Boolean).join(' ');\n return full || owner.username || owner.email || '';\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Table\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableProps\n extends Pick<TableImpl.Props<SanitizedTransferToken | ApiToken>, 'headers' | 'isLoading'> {\n onConfirmDelete: (id: Data.ID) => void;\n permissions: {\n canRead: boolean;\n canDelete: boolean;\n canUpdate: boolean;\n };\n tokens: SanitizedTransferToken[] | ApiToken[];\n tokenType: 'api-token' | 'transfer-token';\n showOwner?: boolean;\n}\n\nconst Table = ({\n permissions,\n headers = [],\n isLoading = false,\n tokens = [],\n onConfirmDelete,\n tokenType,\n showOwner = false,\n}: TableProps) => {\n const [{ query }] = useQueryParams<{ sort?: string }>();\n const { formatMessage, locale } = useIntl();\n const [, sortOrder] = query && query.sort ? query.sort.split(':') : [undefined, 'ASC'];\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const formatter = useCollator(locale);\n\n const sortedTokens = [...tokens].sort((a, b) => {\n return sortOrder === 'DESC'\n ? formatter.compare(b.name, a.name)\n : formatter.compare(a.name, b.name);\n });\n\n const { canDelete, canUpdate, canRead } = permissions;\n\n const handleRowClick = (id: Data.ID) => () => {\n if (canRead) {\n trackUsage('willEditTokenFromList', {\n tokenType,\n });\n navigate(id.toString());\n }\n };\n\n return (\n <TableImpl.Root headers={headers} rows={sortedTokens} isLoading={isLoading}>\n <TableImpl.Content>\n <TableImpl.Head>\n {headers.map((header) => (\n <TableImpl.HeaderCell key={header.name} {...header} />\n ))}\n </TableImpl.Head>\n <TableImpl.Empty />\n <TableImpl.Loading />\n <TableImpl.Body>\n {sortedTokens.map((token) => {\n const GuidedTourTooltip =\n token.name === 'Read Only' ? tours.apiTokens.ManageAPIToken : React.Fragment;\n return (\n <TableImpl.Row key={token.id} onClick={handleRowClick(token.id)}>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {token.name}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" ellipsis>\n {token.description}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n <Typography textColor=\"neutral800\">\n {/* @ts-expect-error One of the tokens doesn't have createdAt */}\n <RelativeTime timestamp={new Date(token.createdAt)} />\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n {token.lastUsedAt && (\n <Typography textColor=\"neutral800\">\n <RelativeTime\n timestamp={new Date(token.lastUsedAt)}\n customIntervals={[\n {\n unit: 'hours',\n threshold: 1,\n text: formatMessage({\n id: 'Settings.apiTokens.lastHour',\n defaultMessage: 'last hour',\n }),\n },\n ]}\n />\n </Typography>\n )}\n </TableImpl.Cell>\n {showOwner === true &&\n (() => {\n const apiToken = token as ApiToken;\n const owner = apiToken.kind === 'admin' ? apiToken.adminUserOwner : undefined;\n const ownerName =\n owner !== undefined && owner !== null && typeof owner === 'object'\n ? formatAdminUserName(owner)\n : '';\n return (\n <TableImpl.Cell maxWidth=\"20rem\">\n <Typography textColor=\"neutral800\" ellipsis>\n {ownerName}\n </Typography>\n </TableImpl.Cell>\n );\n })()}\n {canUpdate || canRead || canDelete ? (\n <TableImpl.Cell>\n <Flex justifyContent=\"end\">\n <GuidedTourTooltip>\n {canUpdate && <UpdateButton tokenName={token.name} tokenId={token.id} />}\n </GuidedTourTooltip>\n {canDelete && (\n <DeleteButton\n tokenName={token.name}\n onClickDelete={() => onConfirmDelete?.(token.id)}\n tokenType={tokenType}\n />\n )}\n </Flex>\n </TableImpl.Cell>\n ) : null}\n </TableImpl.Row>\n );\n })}\n </TableImpl.Body>\n </TableImpl.Content>\n </TableImpl.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CRUD Buttons\n * -----------------------------------------------------------------------------------------------*/\n\nconst MESSAGES_MAP = {\n edit: {\n id: 'app.component.table.edit',\n defaultMessage: 'Edit {target}',\n },\n read: {\n id: 'app.component.table.read',\n defaultMessage: 'Read {target}',\n },\n};\n\ninterface DefaultButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n buttonType?: 'edit' | 'read';\n children: React.ReactNode;\n}\n\nconst DefaultButton = ({\n tokenName,\n tokenId,\n buttonType = 'edit',\n children,\n}: DefaultButtonProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <LinkButtonStyled\n tag={NavLink}\n to={tokenId.toString()}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n title={formatMessage(MESSAGES_MAP[buttonType], { target: tokenName })}\n variant=\"ghost\"\n size=\"S\"\n >\n {children}\n </LinkButtonStyled>\n );\n};\n\nconst LinkButtonStyled = styled(LinkButton)`\n padding: 0.7rem;\n\n & > span {\n display: flex;\n }\n`;\n\ninterface DeleteButtonProps extends Pick<ButtonProps, 'tokenName'>, Pick<TableProps, 'tokenType'> {\n onClickDelete: () => void;\n}\n\nconst DeleteButton = ({ tokenName, onClickDelete, tokenType }: DeleteButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const handleClickDelete = () => {\n trackUsage('willDeleteToken', {\n tokenType,\n });\n onClickDelete();\n };\n\n return (\n <Dialog.Root>\n <Box<'div'> paddingLeft={1} onClick={(e) => e.stopPropagation()}>\n <Dialog.Trigger>\n <IconButton\n label={formatMessage(\n {\n id: 'global.delete-target',\n defaultMessage: 'Delete {target}',\n },\n { target: `${tokenName}` }\n )}\n name=\"delete\"\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleClickDelete} />\n </Box>\n </Dialog.Root>\n );\n};\n\ninterface ButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n}\n\nconst UpdateButton = ({ tokenName, tokenId }: ButtonProps) => {\n return (\n <DefaultButton tokenName={tokenName} tokenId={tokenId}>\n <Pencil />\n </DefaultButton>\n );\n};\n\nexport { Table };\nexport type { TableProps };\n"],"names":["formatAdminUserName","owner","full","firstname","lastname","filter","Boolean","join","username","email","Table","permissions","headers","isLoading","tokens","onConfirmDelete","tokenType","showOwner","query","useQueryParams","formatMessage","locale","useIntl","sortOrder","sort","split","undefined","navigate","useNavigate","trackUsage","useTracking","formatter","useCollator","sortedTokens","a","b","compare","name","canDelete","canUpdate","canRead","handleRowClick","id","toString","_jsx","TableImpl","Root","rows","_jsxs","Content","Head","map","header","HeaderCell","Empty","Loading","Body","token","GuidedTourTooltip","tours","apiTokens","ManageAPIToken","React","Fragment","Row","onClick","Cell","maxWidth","Typography","textColor","fontWeight","ellipsis","description","RelativeTime","timestamp","Date","createdAt","lastUsedAt","customIntervals","unit","threshold","text","defaultMessage","apiToken","kind","adminUserOwner","ownerName","Flex","justifyContent","UpdateButton","tokenName","tokenId","DeleteButton","onClickDelete","MESSAGES_MAP","edit","read","DefaultButton","buttonType","children","LinkButtonStyled","tag","NavLink","to","e","stopPropagation","title","target","variant","size","styled","LinkButton","handleClickDelete","Dialog","Box","paddingLeft","Trigger","IconButton","label","Trash","ConfirmDialog","onConfirm","Pencil"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Table.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/Table.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Flex,\n IconButton,\n Typography,\n useCollator,\n Dialog,\n LinkButton,\n} from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { ApiToken } from '../../../../../../shared/contracts/api-token';\nimport { SanitizedTransferToken } from '../../../../../../shared/contracts/transfer';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { RelativeTime } from '../../../../components/RelativeTime';\nimport { Table as TableImpl } from '../../../../components/Table';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useQueryParams } from '../../../../hooks/useQueryParams';\n\nimport type { AdminTokenOwner } from '../../../../../../shared/contracts/shared';\nimport type { Data } from '@strapi/types';\n\nconst formatAdminUserName = (\n owner: Pick<AdminTokenOwner, 'firstname' | 'lastname' | 'email' | 'username'>\n): string => {\n const full = [owner.firstname, owner.lastname].filter(Boolean).join(' ');\n return full || owner.username || owner.email || '';\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Table\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableProps\n extends Pick<TableImpl.Props<SanitizedTransferToken | ApiToken>, 'headers' | 'isLoading'> {\n onConfirmDelete: (id: Data.ID) => void;\n permissions: {\n canRead: boolean;\n canDelete: boolean;\n canUpdate: boolean;\n };\n tokens: SanitizedTransferToken[] | ApiToken[];\n tokenType: 'api-token' | 'transfer-token';\n showOwner?: boolean;\n}\n\nconst Table = ({\n permissions,\n headers = [],\n isLoading = false,\n tokens = [],\n onConfirmDelete,\n tokenType,\n showOwner = false,\n}: TableProps) => {\n const [{ query }] = useQueryParams<{ sort?: string }>();\n const { formatMessage, locale } = useIntl();\n const [, sortOrder] = query && query.sort ? query.sort.split(':') : [undefined, 'ASC'];\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const formatter = useCollator(locale);\n\n const sortedTokens = [...tokens].sort((a, b) => {\n return sortOrder === 'DESC'\n ? formatter.compare(b.name, a.name)\n : formatter.compare(a.name, b.name);\n });\n\n const { canDelete, canUpdate, canRead } = permissions;\n\n const handleRowClick = (id: Data.ID) => () => {\n if (canRead) {\n trackUsage('willEditTokenFromList', {\n tokenType,\n });\n navigate(id.toString());\n }\n };\n\n return (\n <TableImpl.Root headers={headers} rows={sortedTokens} isLoading={isLoading}>\n <TableImpl.Content>\n <TableImpl.Head>\n {headers.map((header) => (\n <TableImpl.HeaderCell key={header.name} {...header} />\n ))}\n </TableImpl.Head>\n <TableImpl.Empty />\n <TableImpl.Loading />\n <TableImpl.Body>\n {sortedTokens.map((token) => {\n const GuidedTourTooltip =\n token.name === 'Read Only' ? tours.apiTokens.ManageAPIToken : React.Fragment;\n return (\n <TableImpl.Row key={token.id} onClick={handleRowClick(token.id)}>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" fontWeight=\"bold\" ellipsis>\n {token.name}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell maxWidth=\"25rem\">\n <Typography textColor=\"neutral800\" ellipsis>\n {token.description}\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n <Typography textColor=\"neutral800\">\n {/* @ts-expect-error One of the tokens doesn't have createdAt */}\n <RelativeTime timestamp={new Date(token.createdAt)} />\n </Typography>\n </TableImpl.Cell>\n <TableImpl.Cell>\n {token.lastUsedAt && (\n <Typography textColor=\"neutral800\">\n <RelativeTime\n timestamp={new Date(token.lastUsedAt)}\n customIntervals={[\n {\n unit: 'hours',\n threshold: 1,\n text: formatMessage({\n id: 'Settings.apiTokens.lastHour',\n defaultMessage: 'last hour',\n }),\n },\n ]}\n />\n </Typography>\n )}\n </TableImpl.Cell>\n {showOwner === true &&\n (() => {\n const apiToken = token as ApiToken;\n const owner = apiToken.kind === 'admin' ? apiToken.adminUserOwner : undefined;\n const ownerName =\n owner !== undefined && owner !== null && typeof owner === 'object'\n ? formatAdminUserName(owner)\n : '';\n return (\n <TableImpl.Cell maxWidth=\"20rem\">\n <Typography textColor=\"neutral800\" ellipsis>\n {ownerName}\n </Typography>\n </TableImpl.Cell>\n );\n })()}\n {canUpdate || canRead || canDelete ? (\n <TableImpl.Cell>\n <Flex justifyContent=\"end\">\n <GuidedTourTooltip>\n {canUpdate && <UpdateButton tokenName={token.name} tokenId={token.id} />}\n </GuidedTourTooltip>\n {canDelete && (\n <DeleteButton\n tokenName={token.name}\n onClickDelete={() => onConfirmDelete?.(token.id)}\n tokenType={tokenType}\n />\n )}\n </Flex>\n </TableImpl.Cell>\n ) : null}\n </TableImpl.Row>\n );\n })}\n </TableImpl.Body>\n </TableImpl.Content>\n </TableImpl.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CRUD Buttons\n * -----------------------------------------------------------------------------------------------*/\n\nconst MESSAGES_MAP = {\n edit: {\n id: 'app.component.table.edit',\n defaultMessage: 'Edit {target}',\n },\n read: {\n id: 'app.component.table.read',\n defaultMessage: 'Read {target}',\n },\n};\n\ninterface DefaultButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n buttonType?: 'edit' | 'read';\n children: React.ReactNode;\n}\n\nconst DefaultButton = ({\n tokenName,\n tokenId,\n buttonType = 'edit',\n children,\n}: DefaultButtonProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <LinkButtonStyled\n tag={NavLink}\n to={tokenId.toString()}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n title={formatMessage(MESSAGES_MAP[buttonType], { target: tokenName })}\n variant=\"ghost\"\n size=\"S\"\n >\n {children}\n </LinkButtonStyled>\n );\n};\n\nconst LinkButtonStyled = styled(LinkButton)`\n padding: 0.7rem;\n\n & > span {\n display: flex;\n }\n`;\n\ninterface DeleteButtonProps extends Pick<ButtonProps, 'tokenName'>, Pick<TableProps, 'tokenType'> {\n onClickDelete: () => void;\n}\n\nconst DeleteButton = ({ tokenName, onClickDelete, tokenType }: DeleteButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const handleClickDelete = () => {\n trackUsage('willDeleteToken', {\n tokenType,\n });\n onClickDelete();\n };\n\n return (\n <Dialog.Root>\n <Box<'div'> paddingLeft={1} onClick={(e) => e.stopPropagation()}>\n <Dialog.Trigger>\n <IconButton\n label={formatMessage(\n {\n id: 'global.delete-target',\n defaultMessage: 'Delete {target}',\n },\n { target: `${tokenName}` }\n )}\n name=\"delete\"\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n </Dialog.Trigger>\n <ConfirmDialog onConfirm={handleClickDelete} />\n </Box>\n </Dialog.Root>\n );\n};\n\ninterface ButtonProps {\n tokenName: string;\n tokenId: Data.ID;\n}\n\nconst UpdateButton = ({ tokenName, tokenId }: ButtonProps) => {\n return (\n <DefaultButton tokenName={tokenName} tokenId={tokenId}>\n <Pencil />\n </DefaultButton>\n );\n};\n\nexport { Table };\nexport type { TableProps };\n"],"names":["formatAdminUserName","owner","full","firstname","lastname","filter","Boolean","join","username","email","Table","permissions","headers","isLoading","tokens","onConfirmDelete","tokenType","showOwner","query","useQueryParams","formatMessage","locale","useIntl","sortOrder","sort","split","undefined","navigate","useNavigate","trackUsage","useTracking","formatter","useCollator","sortedTokens","a","b","compare","name","canDelete","canUpdate","canRead","handleRowClick","id","toString","_jsx","TableImpl","Root","rows","_jsxs","Content","Head","map","header","HeaderCell","Empty","Loading","Body","token","GuidedTourTooltip","tours","apiTokens","ManageAPIToken","React","Fragment","Row","onClick","Cell","maxWidth","Typography","textColor","fontWeight","ellipsis","description","RelativeTime","timestamp","Date","createdAt","lastUsedAt","customIntervals","unit","threshold","text","defaultMessage","apiToken","kind","adminUserOwner","ownerName","Flex","justifyContent","UpdateButton","tokenName","tokenId","DeleteButton","onClickDelete","MESSAGES_MAP","edit","read","DefaultButton","buttonType","children","LinkButtonStyled","tag","NavLink","to","e","stopPropagation","title","target","variant","size","styled","LinkButton","handleClickDelete","Dialog","Box","paddingLeft","Trigger","IconButton","label","Trash","ConfirmDialog","onConfirm","Pencil"],"mappings":"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"}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
var yup = require('yup');
|
|
4
4
|
var translatedErrors = require('../../../../utils/translatedErrors.js');
|
|
5
5
|
|
|
6
|
-
function
|
|
6
|
+
function _interopNamespace(e) {
|
|
7
|
+
if (e && e.__esModule) return e;
|
|
7
8
|
var n = Object.create(null);
|
|
8
9
|
if (e) {
|
|
9
10
|
Object.keys(e).forEach(function (k) {
|
|
@@ -20,7 +21,7 @@ function _interopNamespaceDefault(e) {
|
|
|
20
21
|
return Object.freeze(n);
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
var yup__namespace = /*#__PURE__*/
|
|
24
|
+
var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
|
|
24
25
|
|
|
25
26
|
const API_TOKEN_TYPE = 'api-token';
|
|
26
27
|
const TRANSFER_TOKEN_TYPE = 'transfer-token';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/constants.ts"],"sourcesContent":["import * as yup from 'yup';\n\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nexport const API_TOKEN_TYPE = 'api-token';\nexport const TRANSFER_TOKEN_TYPE = 'transfer-token';\n\nexport const apiTokenInformationSchema = yup.object().shape({\n name: yup.string().max(100).required(translatedErrors.required.id),\n type: yup.string().oneOf(['read-only', 'full-access', 'custom']).optional(),\n description: yup.string().nullable(),\n lifespan: yup.number().integer().min(0).nullable().defined(translatedErrors.required.id),\n});\n"],"names":["API_TOKEN_TYPE","TRANSFER_TOKEN_TYPE","apiTokenInformationSchema","yup","object","shape","name","string","max","required","translatedErrors","id","type","oneOf","optional","description","nullable","lifespan","number","integer","min","defined"],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/constants.ts"],"sourcesContent":["import * as yup from 'yup';\n\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nexport const API_TOKEN_TYPE = 'api-token';\nexport const TRANSFER_TOKEN_TYPE = 'transfer-token';\n\nexport const apiTokenInformationSchema = yup.object().shape({\n name: yup.string().max(100).required(translatedErrors.required.id),\n type: yup.string().oneOf(['read-only', 'full-access', 'custom']).optional(),\n description: yup.string().nullable(),\n lifespan: yup.number().integer().min(0).nullable().defined(translatedErrors.required.id),\n});\n"],"names":["API_TOKEN_TYPE","TRANSFER_TOKEN_TYPE","apiTokenInformationSchema","yup","object","shape","name","string","max","required","translatedErrors","id","type","oneOf","optional","description","nullable","lifespan","number","integer","min","defined"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIO,MAAMA,iBAAiB;AACvB,MAAMC,sBAAsB;MAEtBC,yBAAAA,GAA4BC,cAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;IAC1DC,IAAAA,EAAMH,cAAAA,CAAII,MAAM,EAAA,CAAGC,GAAG,CAAC,GAAA,CAAA,CAAKC,QAAQ,CAACC,iCAAAA,CAAiBD,QAAQ,CAACE,EAAE,CAAA;AACjEC,IAAAA,IAAAA,EAAMT,cAAAA,CAAII,MAAM,EAAA,CAAGM,KAAK,CAAC;AAAC,QAAA,WAAA;AAAa,QAAA,aAAA;AAAe,QAAA;AAAS,KAAA,CAAA,CAAEC,QAAQ,EAAA;IACzEC,WAAAA,EAAaZ,cAAAA,CAAII,MAAM,EAAA,CAAGS,QAAQ,EAAA;AAClCC,IAAAA,QAAAA,EAAUd,cAAAA,CAAIe,MAAM,EAAA,CAAGC,OAAO,GAAGC,GAAG,CAAC,CAAA,CAAA,CAAGJ,QAAQ,GAAGK,OAAO,CAACX,iCAAAA,CAAiBD,QAAQ,CAACE,EAAE;AACzF,CAAA;;;;;;"}
|
|
@@ -4,7 +4,8 @@ var dateFns = require('date-fns');
|
|
|
4
4
|
var locales = require('date-fns/locale');
|
|
5
5
|
var locales$1 = require('../../../../../utils/locales.js');
|
|
6
6
|
|
|
7
|
-
function
|
|
7
|
+
function _interopNamespace(e) {
|
|
8
|
+
if (e && e.__esModule) return e;
|
|
8
9
|
var n = Object.create(null);
|
|
9
10
|
if (e) {
|
|
10
11
|
Object.keys(e).forEach(function (k) {
|
|
@@ -21,7 +22,7 @@ function _interopNamespaceDefault(e) {
|
|
|
21
22
|
return Object.freeze(n);
|
|
22
23
|
}
|
|
23
24
|
|
|
24
|
-
var locales__namespace = /*#__PURE__*/
|
|
25
|
+
var locales__namespace = /*#__PURE__*/_interopNamespace(locales);
|
|
25
26
|
|
|
26
27
|
const getDateOfExpiration = (createdAt, duration, language = 'en')=>{
|
|
27
28
|
if (duration && typeof duration === 'number') {
|
package/dist/admin/admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDateOfExpiration.js","sources":["../../../../../../../../../admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.ts"],"sourcesContent":["import { addDays, format } from 'date-fns';\nimport * as locales from 'date-fns/locale';\n\nimport { getDateFnsLocaleName } from '../../../../../utils/locales';\n\nexport const getDateOfExpiration = (\n createdAt: string,\n duration: number | null,\n language: string = 'en'\n) => {\n if (duration && typeof duration === 'number') {\n const durationInDays = duration / 24 / 60 / 60 / 1000;\n\n return format(addDays(new Date(createdAt), durationInDays), 'PPP', {\n locale: locales[getDateFnsLocaleName(language)],\n });\n }\n\n return 'Unlimited';\n};\n"],"names":["getDateOfExpiration","createdAt","duration","language","durationInDays","format","addDays","Date","locale","locales","getDateFnsLocaleName"],"mappings":"
|
|
1
|
+
{"version":3,"file":"getDateOfExpiration.js","sources":["../../../../../../../../../admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.ts"],"sourcesContent":["import { addDays, format } from 'date-fns';\nimport * as locales from 'date-fns/locale';\n\nimport { getDateFnsLocaleName } from '../../../../../utils/locales';\n\nexport const getDateOfExpiration = (\n createdAt: string,\n duration: number | null,\n language: string = 'en'\n) => {\n if (duration && typeof duration === 'number') {\n const durationInDays = duration / 24 / 60 / 60 / 1000;\n\n return format(addDays(new Date(createdAt), durationInDays), 'PPP', {\n locale: locales[getDateFnsLocaleName(language)],\n });\n }\n\n return 'Unlimited';\n};\n"],"names":["getDateOfExpiration","createdAt","duration","language","durationInDays","format","addDays","Date","locale","locales","getDateFnsLocaleName"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;MAKaA,mBAAAA,GAAsB,CACjCC,SAAAA,EACAC,QAAAA,EACAC,WAAmB,IAAI,GAAA;IAEvB,IAAID,QAAAA,IAAY,OAAOA,QAAAA,KAAa,QAAA,EAAU;AAC5C,QAAA,MAAME,cAAAA,GAAiBF,QAAAA,GAAW,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,IAAA;AAEjD,QAAA,OAAOG,eAAOC,eAAAA,CAAQ,IAAIC,IAAAA,CAAKN,SAAAA,CAAAA,EAAYG,iBAAiB,KAAA,EAAO;YACjEI,MAAAA,EAAQC,kBAAO,CAACC,8BAAAA,CAAqBP,QAAAA,CAAAA;AACvC,SAAA,CAAA;AACF,IAAA;IAEA,OAAO,WAAA;AACT;;;;"}
|
|
@@ -22,7 +22,8 @@ var FormHead = require('../../../components/Tokens/FormHead.js');
|
|
|
22
22
|
var TokenBox = require('../../../components/Tokens/TokenBox.js');
|
|
23
23
|
var AdminPermissions = require('./components/AdminPermissions.js');
|
|
24
24
|
|
|
25
|
-
function
|
|
25
|
+
function _interopNamespace(e) {
|
|
26
|
+
if (e && e.__esModule) return e;
|
|
26
27
|
var n = Object.create(null);
|
|
27
28
|
if (e) {
|
|
28
29
|
Object.keys(e).forEach(function (k) {
|
|
@@ -39,7 +40,7 @@ function _interopNamespaceDefault(e) {
|
|
|
39
40
|
return Object.freeze(n);
|
|
40
41
|
}
|
|
41
42
|
|
|
42
|
-
var React__namespace = /*#__PURE__*/
|
|
43
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
43
44
|
|
|
44
45
|
const getOwnerId = (owner)=>{
|
|
45
46
|
if (owner === undefined || owner === null) return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditViewPage.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Box } from '@strapi/design-system';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useMatch, useNavigate } from 'react-router-dom';\n\nimport { Layouts } from '../../../../../components/Layouts/Layout';\nimport { Page } from '../../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport { useAuth } from '../../../../../features/Auth';\nimport { useNotification } from '../../../../../features/Notifications';\nimport { useTracking } from '../../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../hooks/useRBAC';\nimport {\n useCreateAdminTokenMutation,\n useGetAdminTokenQuery,\n useUpdateAdminTokenMutation,\n} from '../../../../../services/apiTokens';\nimport { isBaseQueryError } from '../../../../../utils/baseQuery';\nimport { API_TOKEN_TYPE, apiTokenInformationSchema } from '../../../components/Tokens/constants';\nimport { FormApiTokenContainer } from '../../../components/Tokens/FormApiTokenContainer';\nimport { FormHead } from '../../../components/Tokens/FormHead';\nimport { ApiTokenBox } from '../../../components/Tokens/TokenBox';\n\nimport { AdminPermissions } from './components/AdminPermissions';\n\nimport type { AdminApiToken, Get } from '../../../../../../../shared/contracts/admin-token';\nimport type { ApiToken } from '../../../../../../../shared/contracts/api-token';\nimport type { AuthContextValue } from '../../../../../features/Auth';\nimport type { PermissionsAPI } from '../../Roles/components/Permissions';\nimport type { Data } from '@strapi/types';\n\nconst getOwnerId = (owner: AdminApiToken['adminUserOwner']): Data.ID | null => {\n if (owner === undefined || owner === null) return null;\n return typeof owner === 'object' ? owner.id : owner;\n};\n\nconst isCurrentUserTokenOwner = (\n apiToken: ApiToken | null,\n currentUserId: Data.ID | undefined\n): boolean => {\n if (apiToken === null || apiToken.kind !== 'admin') return true;\n const ownerId = getOwnerId(apiToken.adminUserOwner);\n if (ownerId === null) return true;\n return currentUserId !== undefined && ownerId === currentUserId;\n};\n\nexport const EditView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { state: locationState } = useLocation();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [apiToken, setApiToken] = React.useState<ApiToken | null>(\n locationState?.apiToken?.accessKey !== undefined && locationState?.apiToken?.accessKey !== ''\n ? { ...locationState.apiToken }\n : null\n );\n\n const [showToken, setShowToken] = React.useState(\n locationState?.apiToken?.accessKey !== undefined && locationState?.apiToken?.accessKey !== ''\n );\n const hideTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const adminPermissionsRef = React.useRef<PermissionsAPI>(null);\n const { trackUsage } = useTracking();\n const currentUser = useAuth('EditView', (state: AuthContextValue) => state.user);\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings?.['admin-tokens']);\n const match = useMatch('/settings/admin-tokens/:id');\n const id = match?.params?.id;\n const isCreating = id === 'create';\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const navigate = useNavigate();\n\n React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error, isLoading } = useGetAdminTokenQuery(id!, {\n skip: !id || isCreating,\n refetchOnMountOrArgChange: true,\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (data) {\n setApiToken(data);\n }\n }, [data]);\n\n React.useEffect(() => {\n if (showToken) {\n hideTimerRef.current = setTimeout(() => {\n setShowToken(false);\n }, 30000); // 30 seconds\n\n return () => {\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n }\n }, [showToken]);\n\n const [createToken] = useCreateAdminTokenMutation();\n const [updateToken] = useUpdateAdminTokenMutation();\n\n interface FormValues extends Pick<Get.Response['data'], 'name' | 'description'> {\n lifespan: Get.Response['data']['lifespan'] | undefined;\n type: undefined;\n }\n\n const buildLifespan = (raw: FormValues['lifespan']): number | null =>\n raw && raw !== '0' ? parseInt(raw.toString(), 10) : null;\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: API_TOKEN_TYPE,\n });\n\n const adminPermissionsToSend =\n adminPermissionsRef.current?.getPermissions().permissionsToSend ?? [];\n\n try {\n if (isCreating) {\n const res = await createToken({\n name: body.name,\n description: body.description,\n lifespan: buildLifespan(body.lifespan),\n adminPermissions: adminPermissionsToSend,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.adminTokenCreated',\n defaultMessage: 'Admin Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n kind: 'admin',\n tokenType: API_TOKEN_TYPE,\n });\n\n adminPermissionsRef.current?.setFormAfterSubmit();\n\n navigate(`../admin-tokens/${res.data.id.toString()}`, {\n state: { apiToken: res.data },\n replace: true,\n });\n } else {\n const res = await updateToken({\n id: id!,\n name: body.name,\n description: body.description,\n adminPermissions: adminPermissionsToSend,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.adminTokenEdited',\n defaultMessage: 'Admin Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n kind: 'admin',\n tokenType: API_TOKEN_TYPE,\n });\n\n adminPermissionsRef.current?.setFormAfterSubmit();\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n const toggleToken = () => {\n setShowToken((prev) => !prev);\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n const canShowToken = apiToken?.accessKey !== undefined && apiToken.accessKey !== '';\n const canRegenerateToken = canRegenerate && isCurrentUserTokenOwner(apiToken, currentUser?.id);\n\n const initialAdminPermissions =\n apiToken !== null && apiToken.kind === 'admin' ? (apiToken.adminPermissions ?? []) : [];\n\n const ownerUserId =\n apiToken !== null && apiToken.kind === 'admin' ? getOwnerId(apiToken.adminUserOwner) : null;\n\n if (isLoading || (!isCreating && apiToken === null)) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'Admin Tokens' }\n )}\n </Page.Title>\n <Formik\n validationSchema={apiTokenInformationSchema}\n validateOnChange={false}\n initialValues={{\n name: apiToken?.name || '',\n description: apiToken?.description || '',\n type: undefined,\n lifespan: apiToken?.lifespan,\n }}\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body as FormValues, actions)}\n >\n {({ errors, handleChange, isSubmitting, values }) => (\n <Form>\n <FormHead\n title={\n isCreating\n ? {\n id: 'Settings.adminTokens.createPage.title',\n defaultMessage: 'Create Admin Token',\n }\n : {\n id: 'Settings.adminTokens.editPage.title',\n defaultMessage: 'Edit Admin Token',\n }\n }\n token={apiToken}\n setToken={setApiToken}\n toggleToken={toggleToken}\n showToken={showToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerateToken}\n canShowToken={canShowToken}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/admin-tokens/\"\n />\n\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {apiToken?.accessKey !== undefined &&\n apiToken.accessKey !== '' &&\n showToken === true && (\n <>\n <ApiTokenBox token={apiToken.accessKey} tokenType={API_TOKEN_TYPE} />\n </>\n )}\n\n <FormApiTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n apiToken={apiToken}\n kind=\"admin\"\n onDispatch={() => {}}\n setHasChangedPermissions={() => {}}\n />\n\n <Box shadow=\"filterShadow\" hasRadius>\n <AdminPermissions\n ref={adminPermissionsRef}\n disabled={!canEditInputs}\n initialAdminPermissions={initialAdminPermissions}\n tokenId={!isCreating && id ? id : undefined}\n ownerUserId={ownerUserId}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </Form>\n )}\n </Formik>\n </Page.Main>\n );\n};\n\nexport const ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['admin-tokens']?.read\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditView />\n </Page.Protect>\n );\n};\n"],"names":["getOwnerId","owner","undefined","id","isCurrentUserTokenOwner","apiToken","currentUserId","kind","ownerId","adminUserOwner","EditView","formatMessage","useIntl","toggleNotification","useNotification","state","locationState","useLocation","permissions","useTypedSelector","admin_app","setApiToken","React","useState","accessKey","showToken","setShowToken","hideTimerRef","useRef","adminPermissionsRef","trackUsage","useTracking","currentUser","useAuth","user","allowedActions","canCreate","canUpdate","canRegenerate","useRBAC","settings","match","useMatch","params","isCreating","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","navigate","useNavigate","useEffect","tokenType","API_TOKEN_TYPE","data","error","isLoading","useGetAdminTokenQuery","skip","refetchOnMountOrArgChange","type","message","current","setTimeout","clearTimeout","createToken","useCreateAdminTokenMutation","updateToken","useUpdateAdminTokenMutation","buildLifespan","raw","parseInt","toString","handleSubmit","body","formik","adminPermissionsToSend","getPermissions","permissionsToSend","res","name","description","lifespan","adminPermissions","isBaseQueryError","setErrors","defaultMessage","setFormAfterSubmit","replace","toggleToken","prev","canEditInputs","canShowToken","canRegenerateToken","initialAdminPermissions","ownerUserId","_jsx","Page","Loading","_jsxs","Main","Title","Formik","validationSchema","apiTokenInformationSchema","validateOnChange","initialValues","enableReinitialize","onSubmit","actions","errors","handleChange","isSubmitting","values","Form","FormHead","title","token","setToken","regenerateUrl","Layouts","Content","Flex","direction","alignItems","gap","_Fragment","ApiTokenBox","FormApiTokenContainer","onChange","onDispatch","setHasChangedPermissions","Box","shadow","hasRadius","AdminPermissions","ref","disabled","tokenId","ProtectedEditView","read","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EditViewPage.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Box } from '@strapi/design-system';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useMatch, useNavigate } from 'react-router-dom';\n\nimport { Layouts } from '../../../../../components/Layouts/Layout';\nimport { Page } from '../../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport { useAuth } from '../../../../../features/Auth';\nimport { useNotification } from '../../../../../features/Notifications';\nimport { useTracking } from '../../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../hooks/useRBAC';\nimport {\n useCreateAdminTokenMutation,\n useGetAdminTokenQuery,\n useUpdateAdminTokenMutation,\n} from '../../../../../services/apiTokens';\nimport { isBaseQueryError } from '../../../../../utils/baseQuery';\nimport { API_TOKEN_TYPE, apiTokenInformationSchema } from '../../../components/Tokens/constants';\nimport { FormApiTokenContainer } from '../../../components/Tokens/FormApiTokenContainer';\nimport { FormHead } from '../../../components/Tokens/FormHead';\nimport { ApiTokenBox } from '../../../components/Tokens/TokenBox';\n\nimport { AdminPermissions } from './components/AdminPermissions';\n\nimport type { AdminApiToken, Get } from '../../../../../../../shared/contracts/admin-token';\nimport type { ApiToken } from '../../../../../../../shared/contracts/api-token';\nimport type { AuthContextValue } from '../../../../../features/Auth';\nimport type { PermissionsAPI } from '../../Roles/components/Permissions';\nimport type { Data } from '@strapi/types';\n\nconst getOwnerId = (owner: AdminApiToken['adminUserOwner']): Data.ID | null => {\n if (owner === undefined || owner === null) return null;\n return typeof owner === 'object' ? owner.id : owner;\n};\n\nconst isCurrentUserTokenOwner = (\n apiToken: ApiToken | null,\n currentUserId: Data.ID | undefined\n): boolean => {\n if (apiToken === null || apiToken.kind !== 'admin') return true;\n const ownerId = getOwnerId(apiToken.adminUserOwner);\n if (ownerId === null) return true;\n return currentUserId !== undefined && ownerId === currentUserId;\n};\n\nexport const EditView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { state: locationState } = useLocation();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [apiToken, setApiToken] = React.useState<ApiToken | null>(\n locationState?.apiToken?.accessKey !== undefined && locationState?.apiToken?.accessKey !== ''\n ? { ...locationState.apiToken }\n : null\n );\n\n const [showToken, setShowToken] = React.useState(\n locationState?.apiToken?.accessKey !== undefined && locationState?.apiToken?.accessKey !== ''\n );\n const hideTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const adminPermissionsRef = React.useRef<PermissionsAPI>(null);\n const { trackUsage } = useTracking();\n const currentUser = useAuth('EditView', (state: AuthContextValue) => state.user);\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings?.['admin-tokens']);\n const match = useMatch('/settings/admin-tokens/:id');\n const id = match?.params?.id;\n const isCreating = id === 'create';\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const navigate = useNavigate();\n\n React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error, isLoading } = useGetAdminTokenQuery(id!, {\n skip: !id || isCreating,\n refetchOnMountOrArgChange: true,\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (data) {\n setApiToken(data);\n }\n }, [data]);\n\n React.useEffect(() => {\n if (showToken) {\n hideTimerRef.current = setTimeout(() => {\n setShowToken(false);\n }, 30000); // 30 seconds\n\n return () => {\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n }\n }, [showToken]);\n\n const [createToken] = useCreateAdminTokenMutation();\n const [updateToken] = useUpdateAdminTokenMutation();\n\n interface FormValues extends Pick<Get.Response['data'], 'name' | 'description'> {\n lifespan: Get.Response['data']['lifespan'] | undefined;\n type: undefined;\n }\n\n const buildLifespan = (raw: FormValues['lifespan']): number | null =>\n raw && raw !== '0' ? parseInt(raw.toString(), 10) : null;\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: API_TOKEN_TYPE,\n });\n\n const adminPermissionsToSend =\n adminPermissionsRef.current?.getPermissions().permissionsToSend ?? [];\n\n try {\n if (isCreating) {\n const res = await createToken({\n name: body.name,\n description: body.description,\n lifespan: buildLifespan(body.lifespan),\n adminPermissions: adminPermissionsToSend,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.adminTokenCreated',\n defaultMessage: 'Admin Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n kind: 'admin',\n tokenType: API_TOKEN_TYPE,\n });\n\n adminPermissionsRef.current?.setFormAfterSubmit();\n\n navigate(`../admin-tokens/${res.data.id.toString()}`, {\n state: { apiToken: res.data },\n replace: true,\n });\n } else {\n const res = await updateToken({\n id: id!,\n name: body.name,\n description: body.description,\n adminPermissions: adminPermissionsToSend,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.adminTokenEdited',\n defaultMessage: 'Admin Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n kind: 'admin',\n tokenType: API_TOKEN_TYPE,\n });\n\n adminPermissionsRef.current?.setFormAfterSubmit();\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n const toggleToken = () => {\n setShowToken((prev) => !prev);\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n const canShowToken = apiToken?.accessKey !== undefined && apiToken.accessKey !== '';\n const canRegenerateToken = canRegenerate && isCurrentUserTokenOwner(apiToken, currentUser?.id);\n\n const initialAdminPermissions =\n apiToken !== null && apiToken.kind === 'admin' ? (apiToken.adminPermissions ?? []) : [];\n\n const ownerUserId =\n apiToken !== null && apiToken.kind === 'admin' ? getOwnerId(apiToken.adminUserOwner) : null;\n\n if (isLoading || (!isCreating && apiToken === null)) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'Admin Tokens' }\n )}\n </Page.Title>\n <Formik\n validationSchema={apiTokenInformationSchema}\n validateOnChange={false}\n initialValues={{\n name: apiToken?.name || '',\n description: apiToken?.description || '',\n type: undefined,\n lifespan: apiToken?.lifespan,\n }}\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body as FormValues, actions)}\n >\n {({ errors, handleChange, isSubmitting, values }) => (\n <Form>\n <FormHead\n title={\n isCreating\n ? {\n id: 'Settings.adminTokens.createPage.title',\n defaultMessage: 'Create Admin Token',\n }\n : {\n id: 'Settings.adminTokens.editPage.title',\n defaultMessage: 'Edit Admin Token',\n }\n }\n token={apiToken}\n setToken={setApiToken}\n toggleToken={toggleToken}\n showToken={showToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerateToken}\n canShowToken={canShowToken}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/admin-tokens/\"\n />\n\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {apiToken?.accessKey !== undefined &&\n apiToken.accessKey !== '' &&\n showToken === true && (\n <>\n <ApiTokenBox token={apiToken.accessKey} tokenType={API_TOKEN_TYPE} />\n </>\n )}\n\n <FormApiTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n apiToken={apiToken}\n kind=\"admin\"\n onDispatch={() => {}}\n setHasChangedPermissions={() => {}}\n />\n\n <Box shadow=\"filterShadow\" hasRadius>\n <AdminPermissions\n ref={adminPermissionsRef}\n disabled={!canEditInputs}\n initialAdminPermissions={initialAdminPermissions}\n tokenId={!isCreating && id ? id : undefined}\n ownerUserId={ownerUserId}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </Form>\n )}\n </Formik>\n </Page.Main>\n );\n};\n\nexport const ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['admin-tokens']?.read\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditView />\n </Page.Protect>\n );\n};\n"],"names":["getOwnerId","owner","undefined","id","isCurrentUserTokenOwner","apiToken","currentUserId","kind","ownerId","adminUserOwner","EditView","formatMessage","useIntl","toggleNotification","useNotification","state","locationState","useLocation","permissions","useTypedSelector","admin_app","setApiToken","React","useState","accessKey","showToken","setShowToken","hideTimerRef","useRef","adminPermissionsRef","trackUsage","useTracking","currentUser","useAuth","user","allowedActions","canCreate","canUpdate","canRegenerate","useRBAC","settings","match","useMatch","params","isCreating","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","navigate","useNavigate","useEffect","tokenType","API_TOKEN_TYPE","data","error","isLoading","useGetAdminTokenQuery","skip","refetchOnMountOrArgChange","type","message","current","setTimeout","clearTimeout","createToken","useCreateAdminTokenMutation","updateToken","useUpdateAdminTokenMutation","buildLifespan","raw","parseInt","toString","handleSubmit","body","formik","adminPermissionsToSend","getPermissions","permissionsToSend","res","name","description","lifespan","adminPermissions","isBaseQueryError","setErrors","defaultMessage","setFormAfterSubmit","replace","toggleToken","prev","canEditInputs","canShowToken","canRegenerateToken","initialAdminPermissions","ownerUserId","_jsx","Page","Loading","_jsxs","Main","Title","Formik","validationSchema","apiTokenInformationSchema","validateOnChange","initialValues","enableReinitialize","onSubmit","actions","errors","handleChange","isSubmitting","values","Form","FormHead","title","token","setToken","regenerateUrl","Layouts","Content","Flex","direction","alignItems","gap","_Fragment","ApiTokenBox","FormApiTokenContainer","onChange","onDispatch","setHasChangedPermissions","Box","shadow","hasRadius","AdminPermissions","ref","disabled","tokenId","ProtectedEditView","read","Protect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,MAAMA,aAAa,CAACC,KAAAA,GAAAA;AAClB,IAAA,IAAIA,KAAAA,KAAUC,SAAAA,IAAaD,KAAAA,KAAU,IAAA,EAAM,OAAO,IAAA;AAClD,IAAA,OAAO,OAAOA,KAAAA,KAAU,QAAA,GAAWA,KAAAA,CAAME,EAAE,GAAGF,KAAAA;AAChD,CAAA;AAEA,MAAMG,uBAAAA,GAA0B,CAC9BC,QAAAA,EACAC,aAAAA,GAAAA;AAEA,IAAA,IAAID,aAAa,IAAA,IAAQA,QAAAA,CAASE,IAAI,KAAK,SAAS,OAAO,IAAA;IAC3D,MAAMC,OAAAA,GAAUR,UAAAA,CAAWK,QAAAA,CAASI,cAAc,CAAA;IAClD,IAAID,OAAAA,KAAY,MAAM,OAAO,IAAA;IAC7B,OAAOF,aAAAA,KAAkBJ,aAAaM,OAAAA,KAAYF,aAAAA;AACpD,CAAA;MAEaI,QAAAA,GAAW,IAAA;IACtB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,6BAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAEC,KAAAA,EAAOC,aAAa,EAAE,GAAGC,0BAAAA,EAAAA;AACjC,IAAA,MAAMC,cAAcC,sBAAAA,CAAiB,CAACJ,QAAUA,KAAAA,CAAMK,SAAS,CAACF,WAAW,CAAA;AAC3E,IAAA,MAAM,CAACb,QAAAA,EAAUgB,WAAAA,CAAY,GAAGC,iBAAMC,QAAQ,CAC5CP,aAAAA,EAAeX,QAAAA,EAAUmB,SAAAA,KAActB,SAAAA,IAAac,aAAAA,EAAeX,QAAAA,EAAUmB,cAAc,EAAA,GACvF;AAAE,QAAA,GAAGR,cAAcX;KAAS,GAC5B,IAAA,CAAA;AAGN,IAAA,MAAM,CAACoB,SAAAA,EAAWC,YAAAA,CAAa,GAAGJ,gBAAAA,CAAMC,QAAQ,CAC9CP,aAAAA,EAAeX,QAAAA,EAAUmB,SAAAA,KAActB,SAAAA,IAAac,aAAAA,EAAeX,UAAUmB,SAAAA,KAAc,EAAA,CAAA;IAE7F,MAAMG,YAAAA,GAAeL,gBAAAA,CAAMM,MAAM,CAAuC,IAAA,CAAA;IACxE,MAAMC,mBAAAA,GAAsBP,gBAAAA,CAAMM,MAAM,CAAiB,IAAA,CAAA;IACzD,MAAM,EAAEE,UAAU,EAAE,GAAGC,oBAAAA,EAAAA;AACvB,IAAA,MAAMC,cAAcC,YAAAA,CAAQ,UAAA,EAAY,CAAClB,KAAAA,GAA4BA,MAAMmB,IAAI,CAAA;AAC/E,IAAA,MAAM,EACJC,cAAAA,EAAgB,EAAEC,SAAS,EAAEC,SAAS,EAAEC,aAAa,EAAE,EACxD,GAAGC,eAAAA,CAAQrB,WAAAA,CAAYsB,QAAQ,GAAG,cAAA,CAAe,CAAA;AAClD,IAAA,MAAMC,QAAQC,uBAAAA,CAAS,4BAAA,CAAA;IACvB,MAAMvC,EAAAA,GAAKsC,OAAOE,MAAAA,EAAQxC,EAAAA;AAC1B,IAAA,MAAMyC,aAAazC,EAAAA,KAAO,QAAA;AAC1B,IAAA,MAAM,EACJ0C,uBAAAA,EAAyBC,cAAc,EACvCC,+BAAAA,EAAiCC,sBAAsB,EACxD,GAAGC,qCAAAA,EAAAA;AAEJ,IAAA,MAAMC,QAAAA,GAAWC,0BAAAA,EAAAA;AAEjB7B,IAAAA,gBAAAA,CAAM8B,SAAS,CAAC,IAAA;QACdtB,UAAAA,CAAWc,UAAAA,GAAa,wBAAwB,sBAAA,EAAwB;YACtES,SAAAA,EAAWC;AACb,SAAA,CAAA;IACF,CAAA,EAAG;AAACV,QAAAA,UAAAA;AAAYd,QAAAA;AAAW,KAAA,CAAA;IAE3B,MAAM,EAAEyB,IAAI,EAAEC,KAAK,EAAEC,SAAS,EAAE,GAAGC,+BAAAA,CAAsBvD,EAAAA,EAAK;AAC5DwD,QAAAA,IAAAA,EAAM,CAACxD,EAAAA,IAAMyC,UAAAA;QACbgB,yBAAAA,EAA2B;AAC7B,KAAA,CAAA;AAEAtC,IAAAA,gBAAAA,CAAM8B,SAAS,CAAC,IAAA;AACd,QAAA,IAAII,KAAAA,EAAO;YACT3C,kBAAAA,CAAmB;gBACjBgD,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAAShB,cAAAA,CAAeU,KAAAA;AAC1B,aAAA,CAAA;AACF,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA,KAAAA;AAAOV,QAAAA,cAAAA;AAAgBjC,QAAAA;AAAmB,KAAA,CAAA;AAE9CS,IAAAA,gBAAAA,CAAM8B,SAAS,CAAC,IAAA;AACd,QAAA,IAAIG,IAAAA,EAAM;YACRlC,WAAAA,CAAYkC,IAAAA,CAAAA;AACd,QAAA;IACF,CAAA,EAAG;AAACA,QAAAA;AAAK,KAAA,CAAA;AAETjC,IAAAA,gBAAAA,CAAM8B,SAAS,CAAC,IAAA;AACd,QAAA,IAAI3B,SAAAA,EAAW;YACbE,YAAAA,CAAaoC,OAAO,GAAGC,UAAAA,CAAW,IAAA;gBAChCtC,YAAAA,CAAa,KAAA,CAAA;AACf,YAAA,CAAA,EAAG;YAEH,OAAO,IAAA;gBACL,IAAIC,YAAAA,CAAaoC,OAAO,EAAE;AACxBE,oBAAAA,YAAAA,CAAatC,aAAaoC,OAAO,CAAA;AACjCpC,oBAAAA,YAAAA,CAAaoC,OAAO,GAAG,IAAA;AACzB,gBAAA;AACF,YAAA,CAAA;AACF,QAAA;IACF,CAAA,EAAG;AAACtC,QAAAA;AAAU,KAAA,CAAA;IAEd,MAAM,CAACyC,YAAY,GAAGC,qCAAAA,EAAAA;IACtB,MAAM,CAACC,YAAY,GAAGC,qCAAAA,EAAAA;IAOtB,MAAMC,aAAAA,GAAgB,CAACC,GAAAA,GACrBA,GAAAA,IAAOA,GAAAA,KAAQ,MAAMC,QAAAA,CAASD,GAAAA,CAAIE,QAAQ,EAAA,EAAI,EAAA,CAAA,GAAM,IAAA;IAEtD,MAAMC,YAAAA,GAAe,OAAOC,IAAAA,EAAkBC,MAAAA,GAAAA;QAC5C9C,UAAAA,CAAWc,UAAAA,GAAa,oBAAoB,eAAA,EAAiB;YAC3DS,SAAAA,EAAWC;AACb,SAAA,CAAA;AAEA,QAAA,MAAMuB,yBACJhD,mBAAAA,CAAoBkC,OAAO,EAAEe,cAAAA,EAAAA,CAAiBC,qBAAqB,EAAE;QAEvE,IAAI;AACF,YAAA,IAAInC,UAAAA,EAAY;gBACd,MAAMoC,GAAAA,GAAM,MAAMd,WAAAA,CAAY;AAC5Be,oBAAAA,IAAAA,EAAMN,KAAKM,IAAI;AACfC,oBAAAA,WAAAA,EAAaP,KAAKO,WAAW;oBAC7BC,QAAAA,EAAUb,aAAAA,CAAcK,KAAKQ,QAAQ,CAAA;oBACrCC,gBAAAA,EAAkBP;AACpB,iBAAA,CAAA;AAEA,gBAAA,IAAI,WAAWG,GAAAA,EAAK;oBAClB,IAAIK,0BAAAA,CAAiBL,IAAIxB,KAAK,CAAA,IAAKwB,IAAIxB,KAAK,CAACyB,IAAI,KAAK,iBAAA,EAAmB;AACvEL,wBAAAA,MAAAA,CAAOU,SAAS,CAACtC,sBAAAA,CAAuBgC,GAAAA,CAAIxB,KAAK,CAAA,CAAA;oBACnD,CAAA,MAAO;wBACL3C,kBAAAA,CAAmB;4BACjBgD,IAAAA,EAAM,QAAA;4BACNC,OAAAA,EAAShB,cAAAA,CAAekC,IAAIxB,KAAK;AACnC,yBAAA,CAAA;AACF,oBAAA;AAEA,oBAAA;AACF,gBAAA;gBAEA3C,kBAAAA,CAAmB;oBACjBgD,IAAAA,EAAM,SAAA;AACNC,oBAAAA,OAAAA,EAASnD,aAAAA,CAAc;wBACrBR,EAAAA,EAAI,wCAAA;wBACJoF,cAAAA,EAAgB;AAClB,qBAAA;AACF,iBAAA,CAAA;AAEAzD,gBAAAA,UAAAA,CAAW,gBAAA,EAAkB;oBAC3BvB,IAAAA,EAAM,OAAA;oBACN8C,SAAAA,EAAWC;AACb,iBAAA,CAAA;AAEAzB,gBAAAA,mBAAAA,CAAoBkC,OAAO,EAAEyB,kBAAAA,EAAAA;gBAE7BtC,QAAAA,CAAS,CAAC,gBAAgB,EAAE8B,GAAAA,CAAIzB,IAAI,CAACpD,EAAE,CAACsE,QAAQ,EAAA,CAAA,CAAI,EAAE;oBACpD1D,KAAAA,EAAO;AAAEV,wBAAAA,QAAAA,EAAU2E,IAAIzB;AAAK,qBAAA;oBAC5BkC,OAAAA,EAAS;AACX,iBAAA,CAAA;YACF,CAAA,MAAO;gBACL,MAAMT,GAAAA,GAAM,MAAMZ,WAAAA,CAAY;oBAC5BjE,EAAAA,EAAIA,EAAAA;AACJ8E,oBAAAA,IAAAA,EAAMN,KAAKM,IAAI;AACfC,oBAAAA,WAAAA,EAAaP,KAAKO,WAAW;oBAC7BE,gBAAAA,EAAkBP;AACpB,iBAAA,CAAA;AAEA,gBAAA,IAAI,WAAWG,GAAAA,EAAK;oBAClB,IAAIK,0BAAAA,CAAiBL,IAAIxB,KAAK,CAAA,IAAKwB,IAAIxB,KAAK,CAACyB,IAAI,KAAK,iBAAA,EAAmB;AACvEL,wBAAAA,MAAAA,CAAOU,SAAS,CAACtC,sBAAAA,CAAuBgC,GAAAA,CAAIxB,KAAK,CAAA,CAAA;oBACnD,CAAA,MAAO;wBACL3C,kBAAAA,CAAmB;4BACjBgD,IAAAA,EAAM,QAAA;4BACNC,OAAAA,EAAShB,cAAAA,CAAekC,IAAIxB,KAAK;AACnC,yBAAA,CAAA;AACF,oBAAA;AAEA,oBAAA;AACF,gBAAA;gBAEA3C,kBAAAA,CAAmB;oBACjBgD,IAAAA,EAAM,SAAA;AACNC,oBAAAA,OAAAA,EAASnD,aAAAA,CAAc;wBACrBR,EAAAA,EAAI,uCAAA;wBACJoF,cAAAA,EAAgB;AAClB,qBAAA;AACF,iBAAA,CAAA;AAEAzD,gBAAAA,UAAAA,CAAW,cAAA,EAAgB;oBACzBvB,IAAAA,EAAM,OAAA;oBACN8C,SAAAA,EAAWC;AACb,iBAAA,CAAA;AAEAzB,gBAAAA,mBAAAA,CAAoBkC,OAAO,EAAEyB,kBAAAA,EAAAA;AAC/B,YAAA;AACF,QAAA,CAAA,CAAE,OAAM;YACN3E,kBAAAA,CAAmB;gBACjBgD,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAASnD,aAAAA,CAAc;oBACrBR,EAAAA,EAAI,oBAAA;oBACJoF,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMG,WAAAA,GAAc,IAAA;QAClBhE,YAAAA,CAAa,CAACiE,OAAS,CAACA,IAAAA,CAAAA;QACxB,IAAIhE,YAAAA,CAAaoC,OAAO,EAAE;AACxBE,YAAAA,YAAAA,CAAatC,aAAaoC,OAAO,CAAA;AACjCpC,YAAAA,YAAAA,CAAaoC,OAAO,GAAG,IAAA;AACzB,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAM6B,aAAAA,GAAiBvD,SAAAA,IAAa,CAACO,cAAgBR,SAAAA,IAAaQ,UAAAA;AAClE,IAAA,MAAMiD,eAAexF,QAAAA,EAAUmB,SAAAA,KAActB,SAAAA,IAAaG,QAAAA,CAASmB,SAAS,KAAK,EAAA;AACjF,IAAA,MAAMsE,kBAAAA,GAAqBxD,aAAAA,IAAiBlC,uBAAAA,CAAwBC,QAAAA,EAAU2B,WAAAA,EAAa7B,EAAAA,CAAAA;AAE3F,IAAA,MAAM4F,uBAAAA,GACJ1F,QAAAA,KAAa,IAAA,IAAQA,QAAAA,CAASE,IAAI,KAAK,OAAA,GAAWF,QAAAA,CAAS+E,gBAAgB,IAAI,EAAE,GAAI,EAAE;IAEzF,MAAMY,WAAAA,GACJ3F,QAAAA,KAAa,IAAA,IAAQA,QAAAA,CAASE,IAAI,KAAK,OAAA,GAAUP,UAAAA,CAAWK,QAAAA,CAASI,cAAc,CAAA,GAAI,IAAA;AAEzF,IAAA,IAAIgD,SAAAA,IAAc,CAACb,UAAAA,IAAcvC,QAAAA,KAAa,IAAA,EAAO;QACnD,qBAAO4F,cAAA,CAACC,iBAAKC,OAAO,EAAA,EAAA,CAAA;AACtB,IAAA;IAEA,qBACEC,eAAA,CAACF,iBAAKG,IAAI,EAAA;;AACR,0BAAAJ,cAAA,CAACC,iBAAKI,KAAK,EAAA;0BACR3F,aAAAA,CACC;oBAAER,EAAAA,EAAI,oBAAA;oBAAsBoF,cAAAA,EAAgB;iBAAoB,EAChE;oBAAEN,IAAAA,EAAM;AAAe,iBAAA;;0BAG3BgB,cAAA,CAACM,aAAAA,EAAAA;gBACCC,gBAAAA,EAAkBC,mCAAAA;gBAClBC,gBAAAA,EAAkB,KAAA;gBAClBC,aAAAA,EAAe;AACb1B,oBAAAA,IAAAA,EAAM5E,UAAU4E,IAAAA,IAAQ,EAAA;AACxBC,oBAAAA,WAAAA,EAAa7E,UAAU6E,WAAAA,IAAe,EAAA;oBACtCrB,IAAAA,EAAM3D,SAAAA;AACNiF,oBAAAA,QAAAA,EAAU9E,QAAAA,EAAU8E;AACtB,iBAAA;gBACAyB,kBAAkB,EAAA,IAAA;AAClBC,gBAAAA,QAAAA,EAAU,CAAClC,IAAAA,EAAMmC,OAAAA,GAAYpC,YAAAA,CAAaC,IAAAA,EAAoBmC,OAAAA,CAAAA;0BAE7D,CAAC,EAAEC,MAAM,EAAEC,YAAY,EAAEC,YAAY,EAAEC,MAAM,EAAE,iBAC9Cd,eAAA,CAACe,WAAAA,EAAAA;;0CACClB,cAAA,CAACmB,iBAAAA,EAAAA;AACCC,gCAAAA,KAAAA,EACEzE,UAAAA,GACI;oCACEzC,EAAAA,EAAI,uCAAA;oCACJoF,cAAAA,EAAgB;iCAClB,GACA;oCACEpF,EAAAA,EAAI,qCAAA;oCACJoF,cAAAA,EAAgB;AAClB,iCAAA;gCAEN+B,KAAAA,EAAOjH,QAAAA;gCACPkH,QAAAA,EAAUlG,WAAAA;gCACVqE,WAAAA,EAAaA,WAAAA;gCACbjE,SAAAA,EAAWA,SAAAA;gCACXmE,aAAAA,EAAeA,aAAAA;gCACftD,aAAAA,EAAewD,kBAAAA;gCACfD,YAAAA,EAAcA,YAAAA;gCACdoB,YAAAA,EAAcA,YAAAA;gCACdO,aAAAA,EAAc;;AAGhB,0CAAAvB,cAAA,CAACwB,eAAQC,OAAO,EAAA;AACd,gCAAA,QAAA,gBAAAtB,eAAA,CAACuB,iBAAAA,EAAAA;oCAAKC,SAAAA,EAAU,QAAA;oCAASC,UAAAA,EAAW,SAAA;oCAAUC,GAAAA,EAAK,CAAA;;AAChDzH,wCAAAA,QAAAA,EAAUmB,cAActB,SAAAA,IACvBG,QAAAA,CAASmB,SAAS,KAAK,EAAA,IACvBC,cAAc,IAAA,kBACZwE,cAAA,CAAA8B,mBAAA,EAAA;AACE,4CAAA,QAAA,gBAAA9B,cAAA,CAAC+B,oBAAAA,EAAAA;AAAYV,gDAAAA,KAAAA,EAAOjH,SAASmB,SAAS;gDAAE6B,SAAAA,EAAWC;;;sDAIzD2C,cAAA,CAACgC,2CAAAA,EAAAA;4CACClB,MAAAA,EAAQA,MAAAA;4CACRmB,QAAAA,EAAUlB,YAAAA;4CACVpB,aAAAA,EAAeA,aAAAA;4CACfhD,UAAAA,EAAYA,UAAAA;4CACZsE,MAAAA,EAAQA,MAAAA;4CACR7G,QAAAA,EAAUA,QAAAA;4CACVE,IAAAA,EAAK,OAAA;AACL4H,4CAAAA,UAAAA,EAAY,IAAA,CAAO,CAAA;AACnBC,4CAAAA,wBAAAA,EAA0B,IAAA,CAAO;;sDAGnCnC,cAAA,CAACoC,gBAAAA,EAAAA;4CAAIC,MAAAA,EAAO,cAAA;4CAAeC,SAAS,EAAA,IAAA;AAClC,4CAAA,QAAA,gBAAAtC,cAAA,CAACuC,iCAAAA,EAAAA;gDACCC,GAAAA,EAAK5G,mBAAAA;AACL6G,gDAAAA,QAAAA,EAAU,CAAC9C,aAAAA;gDACXG,uBAAAA,EAAyBA,uBAAAA;gDACzB4C,OAAAA,EAAS,CAAC/F,UAAAA,IAAczC,EAAAA,GAAKA,EAAAA,GAAKD,SAAAA;gDAClC8F,WAAAA,EAAaA;;;;;;;;;;;AAUjC;MAEa4C,iBAAAA,GAAoB,IAAA;AAC/B,IAAA,MAAM1H,WAAAA,GAAcC,sBAAAA,CAClB,CAACJ,KAAAA,GAAUA,KAAAA,CAAMK,SAAS,CAACF,WAAW,CAACsB,QAAQ,GAAG,eAAe,EAAEqG,IAAAA,CAAAA;IAGrE,qBACE5C,cAAA,CAACC,iBAAK4C,OAAO,EAAA;QAAC5H,WAAAA,EAAaA,WAAAA;AACzB,QAAA,QAAA,gBAAA+E,cAAA,CAACvF,QAAAA,EAAAA,EAAAA;;AAGP;;;;;"}
|