@strapi/admin 5.50.0 → 5.50.2
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/components/ConfirmDialog.js +2 -2
- package/dist/admin/admin/src/components/ConfirmDialog.js.map +1 -1
- package/dist/admin/admin/src/components/ContentBox.js +3 -3
- package/dist/admin/admin/src/components/ContentBox.js.map +1 -1
- package/dist/admin/admin/src/components/DescriptionComponentRenderer.js +8 -8
- package/dist/admin/admin/src/components/DescriptionComponentRenderer.js.map +1 -1
- package/dist/admin/admin/src/components/DescriptionComponentRenderer.mjs +8 -8
- package/dist/admin/admin/src/components/DescriptionComponentRenderer.mjs.map +1 -1
- package/dist/admin/admin/src/components/ErrorElement.js +4 -4
- package/dist/admin/admin/src/components/ErrorElement.js.map +1 -1
- package/dist/admin/admin/src/components/Form.js +41 -27
- package/dist/admin/admin/src/components/Form.js.map +1 -1
- package/dist/admin/admin/src/components/Form.mjs +41 -27
- package/dist/admin/admin/src/components/Form.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Date.js +1 -1
- package/dist/admin/admin/src/components/FormInputs/Date.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Date.mjs +1 -1
- package/dist/admin/admin/src/components/FormInputs/Date.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Email.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Email.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js +4 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +4 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Json.js +2 -1
- package/dist/admin/admin/src/components/FormInputs/Json.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Json.mjs +2 -1
- package/dist/admin/admin/src/components/FormInputs/Json.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Password.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Password.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Renderer.js +18 -26
- package/dist/admin/admin/src/components/FormInputs/Renderer.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Renderer.mjs +20 -28
- package/dist/admin/admin/src/components/FormInputs/Renderer.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/String.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/String.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Textarea.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Textarea.mjs.map +1 -1
- package/dist/admin/admin/src/components/GapDropZone.js +2 -2
- package/dist/admin/admin/src/components/GapDropZone.js.map +1 -1
- package/dist/admin/admin/src/components/GradientBadge.js +3 -3
- package/dist/admin/admin/src/components/GradientBadge.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Overview.js +8 -8
- package/dist/admin/admin/src/components/GuidedTour/Overview.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js +4 -4
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Tours.js +2 -2
- package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/ActionLayout.js +2 -2
- package/dist/admin/admin/src/components/Layouts/ActionLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/GridLayout.js +2 -2
- package/dist/admin/admin/src/components/Layouts/GridLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/Layout.js +4 -4
- package/dist/admin/admin/src/components/Layouts/Layout.js.map +1 -1
- package/dist/admin/admin/src/components/LeftMenu.js +3 -3
- package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/MainNav.js +2 -2
- package/dist/admin/admin/src/components/MainNav/MainNav.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/MainNavLinks.js +4 -4
- package/dist/admin/admin/src/components/MainNav/MainNavLinks.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavBrand.js +2 -2
- package/dist/admin/admin/src/components/MainNav/NavBrand.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.js +3 -3
- package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavLink.js +8 -8
- package/dist/admin/admin/src/components/MainNav/NavLink.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavUser.js +7 -7
- package/dist/admin/admin/src/components/MainNav/NavUser.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/TrialCountdown.js +3 -3
- package/dist/admin/admin/src/components/MainNav/TrialCountdown.js.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.js +2 -2
- package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
- package/dist/admin/admin/src/components/ResizeIndicator.js +6 -6
- package/dist/admin/admin/src/components/ResizeIndicator.js.map +1 -1
- package/dist/admin/admin/src/components/SubNav.js +11 -9
- package/dist/admin/admin/src/components/SubNav.js.map +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs +4 -2
- package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
- package/dist/admin/admin/src/components/Table.js +9 -5
- package/dist/admin/admin/src/components/Table.js.map +1 -1
- package/dist/admin/admin/src/components/Table.mjs +6 -2
- package/dist/admin/admin/src/components/Table.mjs.map +1 -1
- package/dist/admin/admin/src/components/Theme.js +2 -2
- package/dist/admin/admin/src/components/Theme.js.map +1 -1
- package/dist/admin/admin/src/components/UnauthenticatedLogo.js +2 -2
- package/dist/admin/admin/src/components/UnauthenticatedLogo.js.map +1 -1
- package/dist/admin/admin/src/components/UpsellBanner.js +3 -3
- package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
- package/dist/admin/admin/src/components/WidgetRoot.js +4 -7
- package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -1
- package/dist/admin/admin/src/components/WidgetRoot.mjs +1 -1
- package/dist/admin/admin/src/components/WidgetRoot.mjs.map +1 -1
- package/dist/admin/admin/src/components/Widgets.js +5 -5
- package/dist/admin/admin/src/components/Widgets.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Plugin.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Plugin.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.js +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.mjs +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/core/store/configure.js.map +1 -1
- package/dist/admin/admin/src/core/store/configure.mjs.map +1 -1
- package/dist/admin/admin/src/core/utils/createHook.js.map +1 -1
- package/dist/admin/admin/src/core/utils/createHook.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js +3 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs +3 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/features/Widgets.js.map +1 -1
- package/dist/admin/admin/src/features/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useMediaQuery.js +4 -4
- package/dist/admin/admin/src/hooks/useMediaQuery.js.map +1 -1
- package/dist/admin/admin/src/hooks/useMenu.js +6 -4
- package/dist/admin/admin/src/hooks/useMenu.js.map +1 -1
- package/dist/admin/admin/src/hooks/useMenu.mjs +6 -4
- package/dist/admin/admin/src/hooks/useMenu.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useQueryParams.js.map +1 -1
- package/dist/admin/admin/src/hooks/useQueryParams.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useRBAC.js +1 -1
- package/dist/admin/admin/src/hooks/useRBAC.js.map +1 -1
- package/dist/admin/admin/src/hooks/useRBAC.mjs +1 -1
- package/dist/admin/admin/src/hooks/useRBAC.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useThrottledCallback.js.map +1 -1
- package/dist/admin/admin/src/hooks/useThrottledCallback.mjs.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
- package/dist/admin/admin/src/layouts/UnauthenticatedLayout.js +3 -3
- package/dist/admin/admin/src/layouts/UnauthenticatedLayout.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js +17 -9
- package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs +15 -7
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js +2 -2
- package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js +3 -6
- package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.mjs +1 -1
- package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js +4 -8
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js +4 -8
- package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.mjs +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js +2 -2
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +2 -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 +2 -2
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +2 -2
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js +2 -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 +4 -4
- 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.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +3 -11
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +3 -11
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js +2 -2
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +2 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.js +2 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +10 -10
- 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 -3
- 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/ContentTypeCollapses.js +5 -5
- 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/HiddenAction.js +2 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/HiddenAction.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js +3 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createArrayOfValues.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createArrayOfValues.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/SelectRoles.js +3 -3
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/SelectRoles.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js +2 -2
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +2 -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/HeadersInput.mjs.map +1 -1
- package/dist/admin/admin/src/reducer.js +3 -3
- package/dist/admin/admin/src/reducer.js.map +1 -1
- package/dist/admin/admin/src/reducer.mjs +4 -4
- package/dist/admin/admin/src/reducer.mjs.map +1 -1
- package/dist/admin/admin/src/render.js +6 -2
- package/dist/admin/admin/src/render.js.map +1 -1
- package/dist/admin/admin/src/render.mjs +6 -2
- package/dist/admin/admin/src/render.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +1 -2
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +1 -2
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/ja.json.js +693 -687
- package/dist/admin/admin/src/translations/ja.json.js.map +1 -1
- package/dist/admin/admin/src/translations/ja.json.mjs +693 -687
- package/dist/admin/admin/src/translations/ja.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/ko.json.js +157 -1
- package/dist/admin/admin/src/translations/ko.json.js.map +1 -1
- package/dist/admin/admin/src/translations/ko.json.mjs +157 -1
- package/dist/admin/admin/src/translations/ko.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/pl.json.js +22 -0
- package/dist/admin/admin/src/translations/pl.json.js.map +1 -1
- package/dist/admin/admin/src/translations/pl.json.mjs +22 -0
- package/dist/admin/admin/src/translations/pl.json.mjs.map +1 -1
- package/dist/admin/admin/src/utils/arrays.js.map +1 -1
- package/dist/admin/admin/src/utils/arrays.mjs.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.js +1 -1
- package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.mjs +1 -1
- package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
- package/dist/admin/admin/src/utils/cookies.js +7 -0
- package/dist/admin/admin/src/utils/cookies.js.map +1 -1
- package/dist/admin/admin/src/utils/cookies.mjs +7 -1
- package/dist/admin/admin/src/utils/cookies.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.js +2 -2
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs +3 -3
- package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getProjectType.js +22 -0
- package/dist/admin/admin/src/utils/getProjectType.js.map +1 -0
- package/dist/admin/admin/src/utils/getProjectType.mjs +20 -0
- package/dist/admin/admin/src/utils/getProjectType.mjs.map +1 -0
- package/dist/admin/admin/src/utils/objects.js +43 -11
- package/dist/admin/admin/src/utils/objects.js.map +1 -1
- package/dist/admin/admin/src/utils/objects.mjs +43 -11
- package/dist/admin/admin/src/utils/objects.mjs.map +1 -1
- package/dist/admin/admin/src/utils/once.js.map +1 -1
- package/dist/admin/admin/src/utils/once.mjs.map +1 -1
- package/dist/admin/admin/src/utils/rulesEngine.js +2 -1
- package/dist/admin/admin/src/utils/rulesEngine.js.map +1 -1
- package/dist/admin/admin/src/utils/rulesEngine.mjs +2 -1
- package/dist/admin/admin/src/utils/rulesEngine.mjs.map +1 -1
- package/dist/admin/admin/src/utils/shims.js.map +1 -1
- package/dist/admin/admin/src/utils/shims.mjs.map +1 -1
- package/dist/admin/admin/src/utils/widgetVisibility.js +16 -1
- package/dist/admin/admin/src/utils/widgetVisibility.js.map +1 -1
- package/dist/admin/admin/src/utils/widgetVisibility.mjs +14 -2
- package/dist/admin/admin/src/utils/widgetVisibility.mjs.map +1 -1
- package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js +2 -2
- package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js +2 -2
- package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.mjs +2 -2
- package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/Login.js +2 -2
- package/dist/admin/ee/admin/src/pages/AuthPage/components/Login.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/Providers.js +2 -2
- package/dist/admin/ee/admin/src/pages/AuthPage/components/Providers.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.js +3 -3
- package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthResponse.js +1 -1
- package/dist/admin/ee/admin/src/pages/AuthResponse.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthResponse.mjs +2 -2
- package/dist/admin/ee/admin/src/pages/AuthResponse.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +3 -3
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js +2 -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/SingleSignOnPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs.map +1 -1
- package/dist/admin/shared/utils/auth-cookie-name.js +31 -0
- package/dist/admin/shared/utils/auth-cookie-name.js.map +1 -0
- package/dist/admin/shared/utils/auth-cookie-name.mjs +28 -0
- package/dist/admin/shared/utils/auth-cookie-name.mjs.map +1 -0
- package/dist/admin/src/StrapiApp.d.ts +2 -2
- package/dist/admin/src/components/DescriptionComponentRenderer.d.ts +2 -1
- package/dist/admin/src/components/Form.d.ts +14 -12
- package/dist/admin/src/components/FormInputs/Renderer.d.ts +1 -1
- package/dist/admin/src/components/GuidedTour/Steps/Step.d.ts +1 -1
- package/dist/admin/src/components/SubNav.d.ts +1 -1
- package/dist/admin/src/components/Table.d.ts +3 -2
- package/dist/admin/src/core/apis/Plugin.d.ts +1 -1
- package/dist/admin/src/core/utils/createHook.d.ts +6 -6
- package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
- package/dist/admin/src/hooks/useMenu.d.ts +1 -1
- package/dist/admin/src/hooks/useQueryParams.d.ts +2 -1
- package/dist/admin/src/hooks/useThrottledCallback.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/Roles/utils/createArrayOfValues.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +5 -5
- package/dist/admin/src/services/admin.d.ts +6 -6
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/apiTokens.d.ts +2 -2
- package/dist/admin/src/services/auth.d.ts +12 -12
- package/dist/admin/src/services/contentApi.d.ts +1 -1
- package/dist/admin/src/services/contentManager.d.ts +1 -1
- package/dist/admin/src/services/homepage.d.ts +3 -3
- package/dist/admin/src/services/transferTokens.d.ts +1 -1
- package/dist/admin/src/services/users.d.ts +8 -8
- package/dist/admin/src/services/webhooks.d.ts +3 -3
- package/dist/admin/src/utils/arrays.d.ts +1 -1
- package/dist/admin/src/utils/baseQuery.d.ts +1 -1
- package/dist/admin/src/utils/cookies.d.ts +5 -0
- package/dist/admin/src/utils/getFetchClient.d.ts +7 -7
- package/dist/admin/src/utils/getProjectType.d.ts +16 -0
- package/dist/admin/src/utils/objects.d.ts +6 -4
- package/dist/admin/src/utils/once.d.ts +1 -1
- package/dist/admin/src/utils/widgetVisibility.d.ts +11 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.d.ts +1 -1
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/tableHeaders.d.ts +2 -1
- package/dist/ee/admin/src/services/ai.d.ts +3 -3
- package/dist/ee/admin/src/services/auditLogs.d.ts +1 -1
- package/dist/ee/server/src/audit-logs/routes/audit-logs.d.ts +1 -1
- package/dist/ee/server/src/controllers/admin.d.ts +2 -0
- package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/authentication-utils/middlewares.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/index.d.ts +2 -0
- package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts +2 -0
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/ee/server/src/routes/index.d.ts +2 -2
- package/dist/ee/server/src/routes/sso.d.ts +2 -2
- package/dist/ee/server/src/services/index.d.ts +2 -2
- package/dist/server/ee/server/src/controllers/admin.js +1 -0
- package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.mjs +1 -0
- package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs +2 -2
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/handlers.js +9 -2
- package/dist/server/server/src/services/permission/sections-builder/handlers.js.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/handlers.mjs +9 -2
- package/dist/server/server/src/services/permission/sections-builder/handlers.mjs.map +1 -1
- package/dist/server/server/src/services/role.js +5 -1
- package/dist/server/server/src/services/role.js.map +1 -1
- package/dist/server/server/src/services/role.mjs +5 -1
- package/dist/server/server/src/services/role.mjs.map +1 -1
- package/dist/server/server/src/validation/common-validators.js +19 -11
- package/dist/server/server/src/validation/common-validators.js.map +1 -1
- package/dist/server/server/src/validation/common-validators.mjs +19 -11
- package/dist/server/server/src/validation/common-validators.mjs.map +1 -1
- package/dist/server/server/src/validation/permission.js +1 -1
- package/dist/server/server/src/validation/permission.js.map +1 -1
- package/dist/server/server/src/validation/permission.mjs +1 -1
- package/dist/server/server/src/validation/permission.mjs.map +1 -1
- package/dist/server/server/src/validation/role.js +2 -2
- package/dist/server/server/src/validation/role.js.map +1 -1
- package/dist/server/server/src/validation/role.mjs +2 -2
- package/dist/server/server/src/validation/role.mjs.map +1 -1
- package/dist/server/shared/utils/auth-cookie-name.js +31 -0
- package/dist/server/shared/utils/auth-cookie-name.js.map +1 -0
- package/dist/server/shared/utils/auth-cookie-name.mjs +28 -0
- package/dist/server/shared/utils/auth-cookie-name.mjs.map +1 -0
- package/dist/server/shared/utils/session-auth.js +6 -0
- package/dist/server/shared/utils/session-auth.js.map +1 -1
- package/dist/server/shared/utils/session-auth.mjs +6 -1
- package/dist/server/shared/utils/session-auth.mjs.map +1 -1
- package/dist/server/src/controllers/admin.d.ts +3 -3
- package/dist/server/src/controllers/index.d.ts +3 -3
- package/dist/server/src/domain/user.d.ts +1 -1
- package/dist/server/src/index.d.ts +19 -19
- package/dist/server/src/middlewares/index.d.ts +1 -1
- package/dist/server/src/services/index.d.ts +13 -13
- package/dist/server/src/services/permission/sections-builder/handlers.d.ts.map +1 -1
- package/dist/server/src/services/role.d.ts.map +1 -1
- package/dist/server/src/validation/common-validators.d.ts.map +1 -1
- package/dist/server/src/validation/role.d.ts.map +1 -1
- package/dist/shared/utils/__tests__/auth-cookie-name.test.d.ts +1 -0
- package/dist/shared/utils/__tests__/auth-cookie-name.test.d.ts.map +1 -0
- package/dist/shared/utils/__tests__/session-auth.test.d.ts +1 -0
- package/dist/shared/utils/__tests__/session-auth.test.d.ts.map +1 -0
- package/dist/shared/utils/auth-cookie-name.d.ts +14 -0
- package/dist/shared/utils/auth-cookie-name.d.ts.map +1 -0
- package/dist/shared/utils/session-auth.d.ts +1 -0
- package/dist/shared/utils/session-auth.d.ts.map +1 -1
- package/package.json +20 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Register.mjs","sources":["../../../../../../../admin/src/pages/Auth/components/Register.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Typography, Link } from '@strapi/design-system';\nimport omit from 'lodash/omit';\nimport { type MessageDescriptor, type PrimitiveType, useIntl } from 'react-intl';\nimport { NavLink, Navigate, useNavigate, useMatch, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\nimport { ValidationError } from 'yup';\n\nimport {\n Register as RegisterUser,\n RegisterAdmin,\n} from '../../../../../shared/contracts/authentication';\nimport { Form, FormHelpers } from '../../../components/Form';\nimport { InputRenderer } from '../../../components/FormInputs/Renderer';\nimport { useNpsSurveySettings } from '../../../components/NpsSurvey';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport { useTypedDispatch } from '../../../core/store/hooks';\nimport { useNotification } from '../../../features/Notifications';\nimport { useTracking } from '../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../hooks/useAPIErrorHandler';\nimport { LayoutContent, UnauthenticatedLayout } from '../../../layouts/UnauthenticatedLayout';\nimport { login } from '../../../reducer';\nimport {\n useGetRegistrationInfoQuery,\n useRegisterAdminMutation,\n useRegisterUserMutation,\n} from '../../../services/auth';\nimport { isBaseQueryError } from '../../../utils/baseQuery';\nimport { getOrCreateDeviceId } from '../../../utils/deviceId';\nimport { getByteSize } from '../../../utils/strings';\nimport { translatedErrors } from '../../../utils/translatedErrors';\n\nconst REGISTER_USER_SCHEMA = yup.object().shape({\n firstname: yup.string().trim().required(translatedErrors.required).nullable(),\n lastname: yup.string().nullable(),\n password: yup\n .string()\n .min(8, {\n id: translatedErrors.minLength.id,\n defaultMessage: 'Password must be at least 8 characters',\n values: { min: 8 },\n })\n .test(\n 'max-bytes',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value || typeof value !== 'string') return true; // validated elsewhere\n\n const byteSize = getByteSize(value);\n return byteSize <= 72;\n }\n )\n .test(\n 'lowercase',\n {\n message: {\n id: 'components.Input.error.contain.lowercase',\n defaultMessage: 'Password must contain at least 1 lowercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[a-z]/.test(value);\n }\n )\n .test(\n 'uppercase',\n {\n message: {\n id: 'components.Input.error.contain.uppercase',\n defaultMessage: 'Password must contain at least 1 uppercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[A-Z]/.test(value);\n }\n )\n .test(\n 'number',\n {\n message: {\n id: 'components.Input.error.contain.number',\n defaultMessage: 'Password must contain at least 1 number',\n },\n },\n (value) => {\n if (!value) return true;\n return /\\d/.test(value);\n }\n )\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Password is required',\n })\n .nullable(),\n confirmPassword: yup\n .string()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Confirm password is required',\n })\n .oneOf([yup.ref('password'), null], {\n id: 'components.Input.error.password.noMatch',\n defaultMessage: 'Passwords must match',\n })\n .nullable(),\n registrationToken: yup.string().required({\n id: translatedErrors.required.id,\n defaultMessage: 'Registration token is required',\n }),\n});\n\nconst REGISTER_ADMIN_SCHEMA = yup.object().shape({\n firstname: yup\n .string()\n .trim()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Firstname is required',\n })\n .nullable(),\n lastname: yup.string().nullable(),\n password: yup\n .string()\n .min(8, {\n id: translatedErrors.minLength.id,\n defaultMessage: 'Password must be at least 8 characters',\n values: { min: 8 },\n })\n .test(\n 'max-bytes',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value) return true;\n return new TextEncoder().encode(value).length <= 72;\n }\n )\n .test(\n 'lowercase',\n {\n message: {\n id: 'components.Input.error.contain.lowercase',\n defaultMessage: 'Password must contain at least 1 lowercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[a-z]/.test(value);\n }\n )\n .test(\n 'uppercase',\n {\n message: {\n id: 'components.Input.error.contain.uppercase',\n defaultMessage: 'Password must contain at least 1 uppercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[A-Z]/.test(value);\n }\n )\n .test(\n 'number',\n {\n message: {\n id: 'components.Input.error.contain.number',\n defaultMessage: 'Password must contain at least 1 number',\n },\n },\n (value) => {\n if (!value) return true;\n return /\\d/.test(value);\n }\n )\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Password is required',\n })\n .nullable(),\n confirmPassword: yup\n .string()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Confirm password is required',\n })\n .nullable()\n .oneOf([yup.ref('password'), null], {\n id: 'components.Input.error.password.noMatch',\n defaultMessage: 'Passwords must match',\n }),\n email: yup\n .string()\n .email({\n id: translatedErrors.email.id,\n defaultMessage: 'Not a valid email',\n })\n .strict()\n .lowercase({\n id: translatedErrors.lowercase.id,\n defaultMessage: 'Email must be lowercase',\n })\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Email is required',\n })\n .nullable(),\n});\n\ninterface RegisterProps {\n hasAdmin?: boolean;\n}\n\ninterface RegisterFormValues {\n firstname: string;\n lastname: string;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n}\n\ninterface IntlFormattedMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\nconst Register = ({ hasAdmin }: RegisterProps) => {\n const { toggleNotification } = useNotification();\n const navigate = useNavigate();\n const [submitCount, setSubmitCount] = React.useState(0);\n const [apiError, setApiError] = React.useState<string>();\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { search: searchString } = useLocation();\n const query = React.useMemo(() => new URLSearchParams(searchString), [searchString]);\n const match = useMatch('/auth/:authType');\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const { setNpsSurveySettings } = useNpsSurveySettings();\n\n const registrationToken = query.get('registrationToken');\n\n const { data: userInfo, error } = useGetRegistrationInfoQuery(registrationToken as string, {\n skip: !registrationToken,\n });\n\n React.useEffect(() => {\n if (error) {\n const message: string = isBaseQueryError(error)\n ? formatAPIError(error)\n : (error.message ?? '');\n\n toggleNotification({\n type: 'danger',\n message,\n });\n\n navigate(`/auth/oops?info=${encodeURIComponent(message)}`);\n }\n }, [error, formatAPIError, navigate, toggleNotification]);\n\n const [registerAdmin] = useRegisterAdminMutation();\n const [registerUser] = useRegisterUserMutation();\n const dispatch = useTypedDispatch();\n\n const handleRegisterAdmin = async (\n { news, ...body }: RegisterAdmin.Request['body'] & { news: boolean },\n setFormErrors: FormHelpers<RegisterFormValues>['setErrors']\n ) => {\n const res = await registerAdmin({ ...body, deviceId: getOrCreateDeviceId() });\n\n if ('data' in res) {\n dispatch(login({ token: res.data.token }));\n\n if (news) {\n // Only enable EE survey if user accepted the newsletter\n setNpsSurveySettings((s) => ({ ...s, enabled: true }));\n\n navigate({\n pathname: '/usecase',\n search: `?hasAdmin=${true}`,\n });\n } else {\n navigate('/');\n }\n } else {\n if (isBaseQueryError(res.error)) {\n trackUsage('didNotCreateFirstAdmin');\n\n if (res.error.name === 'ValidationError') {\n setFormErrors(formatValidationErrors(res.error));\n return;\n }\n\n setApiError(formatAPIError(res.error));\n }\n }\n };\n\n const handleRegisterUser = async (\n { news, ...body }: RegisterUser.Request['body'] & { news: boolean },\n setFormErrors: FormHelpers<RegisterFormValues>['setErrors']\n ) => {\n const res = await registerUser({ ...body, deviceId: getOrCreateDeviceId() });\n\n if ('data' in res) {\n dispatch(login({ token: res.data.token }));\n\n if (news) {\n // Only enable EE survey if user accepted the newsletter\n setNpsSurveySettings((s) => ({ ...s, enabled: true }));\n\n navigate({\n pathname: '/usecase',\n search: `?hasAdmin=${hasAdmin}`,\n });\n } else {\n navigate('/');\n }\n } else {\n if (isBaseQueryError(res.error)) {\n trackUsage('didNotCreateFirstAdmin');\n\n if (res.error.name === 'ValidationError') {\n setFormErrors(formatValidationErrors(res.error));\n return;\n }\n\n setApiError(formatAPIError(res.error));\n }\n }\n };\n\n if (\n !match ||\n (match.params.authType !== 'register' && match.params.authType !== 'register-admin')\n ) {\n return <Navigate to=\"/\" />;\n }\n\n const isAdminRegistration = match.params.authType === 'register-admin';\n\n const schema = isAdminRegistration ? REGISTER_ADMIN_SCHEMA : REGISTER_USER_SCHEMA;\n\n return (\n <UnauthenticatedLayout>\n <LayoutContent>\n <Flex direction=\"column\" alignItems=\"center\" gap={3}>\n <Logo />\n\n <Typography tag=\"h1\" variant=\"alpha\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.welcome.title',\n defaultMessage: 'Welcome to Strapi!',\n })}\n </Typography>\n <Typography variant=\"epsilon\" textColor=\"neutral600\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.register.subtitle',\n defaultMessage:\n 'Credentials are only used to authenticate in Strapi. All saved data will be stored in your database.',\n })}\n </Typography>\n {apiError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {apiError}\n </Typography>\n ) : null}\n </Flex>\n <Form\n method=\"POST\"\n initialValues={\n {\n firstname: userInfo?.firstname || '',\n lastname: userInfo?.lastname || '',\n email: userInfo?.email || '',\n password: '',\n confirmPassword: '',\n registrationToken: registrationToken || undefined,\n news: false,\n } satisfies RegisterFormValues\n }\n onSubmit={async (data, helpers) => {\n const normalizedData = normalizeData(data);\n\n try {\n await schema.validate(normalizedData, { abortEarly: false });\n\n if (submitCount > 0 && isAdminRegistration) {\n trackUsage('didSubmitWithErrorsFirstAdmin', { count: submitCount.toString() });\n }\n\n if (normalizedData.registrationToken) {\n handleRegisterUser(\n {\n userInfo: omit(normalizedData, [\n 'registrationToken',\n 'confirmPassword',\n 'email',\n 'news',\n ]),\n registrationToken: normalizedData.registrationToken,\n news: normalizedData.news,\n },\n helpers.setErrors\n );\n } else {\n await handleRegisterAdmin(\n omit(normalizedData, ['registrationToken', 'confirmPassword']),\n helpers.setErrors\n );\n }\n } catch (err) {\n if (err instanceof ValidationError) {\n const formatDescriptor = (msg: any) => {\n try {\n if (!msg) return '';\n if (typeof msg === 'string') return msg;\n // Direct descriptor\n if ('id' in msg && 'defaultMessage' in msg) return formatMessage(msg as any);\n // Wrapped descriptor: { message: { id, defaultMessage } }\n if (msg.message && typeof msg.message === 'object' && 'id' in msg.message) {\n return formatMessage(msg.message as any);\n }\n // errors array: [{ id, defaultMessage }]\n if (Array.isArray(msg.errors) && msg.errors.length > 0) {\n const first = msg.errors[0];\n if (typeof first === 'string') return first;\n if (first && typeof first === 'object' && 'id' in first)\n return formatMessage(first as any);\n }\n // fallback to defaultMessage if present\n if ('defaultMessage' in msg) return msg.defaultMessage;\n return String(msg);\n } catch (e) {\n return String(msg);\n }\n };\n\n const computed = err.inner.reduce<Record<string, string>>(\n (acc, { message, path }) => {\n if (!path) return acc;\n acc[path] = formatDescriptor(message);\n return acc;\n },\n {}\n );\n\n helpers.setErrors(computed);\n }\n\n setSubmitCount(submitCount + 1);\n }\n }}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6} marginTop={7}>\n <Grid.Root gap={4}>\n {[\n {\n label: formatMessage({\n id: 'Auth.form.firstname.label',\n defaultMessage: 'Firstname',\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: 'Lastname',\n }),\n name: 'lastname',\n size: 6,\n type: 'string' as const,\n },\n {\n disabled: !isAdminRegistration,\n label: formatMessage({\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n }),\n name: 'email',\n required: true,\n size: 12,\n type: 'email' as const,\n },\n {\n hint: formatMessage({\n id: 'Auth.form.password.hint',\n defaultMessage:\n 'Must be at least 8 characters, 1 uppercase, 1 lowercase & 1 number',\n }),\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n required: true,\n size: 12,\n type: 'password' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n }),\n name: 'confirmPassword',\n required: true,\n size: 12,\n type: 'password' as const,\n },\n {\n label: formatMessage(\n {\n id: 'Auth.form.register.news.label',\n defaultMessage:\n 'Keep me updated about new features & upcoming improvements (by doing this you accept the {terms} and the {policy}).',\n },\n {\n terms: (\n <A target=\"_blank\" href=\"https://strapi.io/terms\" rel=\"noreferrer\">\n {formatMessage({\n id: 'Auth.privacy-policy-agreement.terms',\n defaultMessage: 'terms',\n })}\n </A>\n ),\n policy: (\n <A target=\"_blank\" href=\"https://strapi.io/privacy\" rel=\"noreferrer\">\n {formatMessage({\n id: 'Auth.privacy-policy-agreement.policy',\n defaultMessage: 'policy',\n })}\n </A>\n ),\n }\n ),\n name: 'news',\n size: 12,\n type: 'checkbox' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n xs={12}\n m={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n <Button fullWidth size=\"L\" type=\"submit\">\n {formatMessage({\n id: 'Auth.form.button.register',\n defaultMessage: \"Let's start\",\n })}\n </Button>\n </Flex>\n </Form>\n {match?.params.authType === 'register' && (\n <Box paddingTop={4}>\n <Flex justifyContent=\"center\">\n <Link tag={NavLink} to=\"/auth/login\">\n {formatMessage({\n id: 'Auth.link.signin.account',\n defaultMessage: 'Already have an account?',\n })}\n </Link>\n </Flex>\n </Box>\n )}\n </LayoutContent>\n </UnauthenticatedLayout>\n );\n};\n\ntype StringKeys<T> = {\n [K in keyof T]: T[K] extends string | undefined ? K : never;\n}[keyof T];\n\n/**\n * @description Trims all values but the password & sets lastName to null if it's a falsey value.\n */\nfunction normalizeData(data: RegisterFormValues) {\n return Object.entries(data).reduce(\n (acc, [key, value]) => {\n type PasswordKeys = Extract<keyof RegisterFormValues, 'password' | 'confirmPassword'>;\n type RegisterFormStringValues = Exclude<\n keyof Pick<RegisterFormValues, StringKeys<RegisterFormValues>>,\n PasswordKeys\n >;\n\n if (!['password', 'confirmPassword'].includes(key) && typeof value === 'string') {\n acc[key as RegisterFormStringValues] = value.trim();\n\n if (key === 'lastname') {\n acc[key] = value || undefined;\n }\n } else {\n acc[key as PasswordKeys] = value;\n }\n\n return acc;\n },\n {} as {\n firstname: string;\n lastname: string | undefined;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n }\n );\n}\n\nconst A = styled.a`\n color: ${({ theme }) => theme.colors.primary600};\n`;\n\nexport { Register };\nexport type { RegisterProps };\n"],"names":["REGISTER_USER_SCHEMA","yup","object","shape","firstname","string","trim","required","translatedErrors","nullable","lastname","password","min","id","minLength","defaultMessage","values","test","value","byteSize","getByteSize","message","confirmPassword","oneOf","ref","registrationToken","REGISTER_ADMIN_SCHEMA","TextEncoder","encode","length","email","strict","lowercase","Register","hasAdmin","toggleNotification","useNotification","navigate","useNavigate","submitCount","setSubmitCount","React","useState","apiError","setApiError","trackUsage","useTracking","formatMessage","useIntl","search","searchString","useLocation","query","useMemo","URLSearchParams","match","useMatch","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","setNpsSurveySettings","useNpsSurveySettings","get","data","userInfo","error","useGetRegistrationInfoQuery","skip","useEffect","isBaseQueryError","type","encodeURIComponent","registerAdmin","useRegisterAdminMutation","registerUser","useRegisterUserMutation","dispatch","useTypedDispatch","handleRegisterAdmin","news","body","setFormErrors","res","deviceId","getOrCreateDeviceId","login","token","s","enabled","pathname","name","handleRegisterUser","params","authType","_jsx","Navigate","to","isAdminRegistration","schema","UnauthenticatedLayout","_jsxs","LayoutContent","Flex","direction","alignItems","gap","Logo","Typography","tag","variant","textAlign","textColor","role","tabIndex","Form","method","initialValues","undefined","onSubmit","helpers","normalizedData","normalizeData","validate","abortEarly","count","toString","omit","setErrors","err","ValidationError","formatDescriptor","msg","Array","isArray","errors","first","String","e","computed","inner","reduce","acc","path","marginTop","Grid","Root","label","size","disabled","hint","terms","A","target","href","rel","policy","map","field","Item","xs","m","InputRenderer","Button","fullWidth","Box","paddingTop","justifyContent","Link","NavLink","Object","entries","key","includes","styled","a","theme","colors","primary600"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Register.mjs","sources":["../../../../../../../admin/src/pages/Auth/components/Register.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Typography, Link } from '@strapi/design-system';\nimport omit from 'lodash/omit';\nimport { useIntl, type MessageDescriptor } from 'react-intl';\nimport { NavLink, Navigate, useNavigate, useMatch, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\nimport { ValidationError } from 'yup';\n\nimport {\n Register as RegisterUser,\n RegisterAdmin,\n} from '../../../../../shared/contracts/authentication';\nimport { Form, FormHelpers } from '../../../components/Form';\nimport { InputRenderer } from '../../../components/FormInputs/Renderer';\nimport { useNpsSurveySettings } from '../../../components/NpsSurvey';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport { useTypedDispatch } from '../../../core/store/hooks';\nimport { useNotification } from '../../../features/Notifications';\nimport { useTracking } from '../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../hooks/useAPIErrorHandler';\nimport { LayoutContent, UnauthenticatedLayout } from '../../../layouts/UnauthenticatedLayout';\nimport { login } from '../../../reducer';\nimport {\n useGetRegistrationInfoQuery,\n useRegisterAdminMutation,\n useRegisterUserMutation,\n} from '../../../services/auth';\nimport { isBaseQueryError } from '../../../utils/baseQuery';\nimport { getOrCreateDeviceId } from '../../../utils/deviceId';\nimport { getByteSize } from '../../../utils/strings';\nimport { translatedErrors } from '../../../utils/translatedErrors';\n\nconst REGISTER_USER_SCHEMA = yup.object().shape({\n firstname: yup.string().trim().required(translatedErrors.required).nullable(),\n lastname: yup.string().nullable(),\n password: yup\n .string()\n .min(8, {\n id: translatedErrors.minLength.id,\n defaultMessage: 'Password must be at least 8 characters',\n values: { min: 8 },\n })\n .test(\n 'max-bytes',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value || typeof value !== 'string') return true; // validated elsewhere\n\n const byteSize = getByteSize(value);\n return byteSize <= 72;\n }\n )\n .test(\n 'lowercase',\n {\n message: {\n id: 'components.Input.error.contain.lowercase',\n defaultMessage: 'Password must contain at least 1 lowercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[a-z]/.test(value);\n }\n )\n .test(\n 'uppercase',\n {\n message: {\n id: 'components.Input.error.contain.uppercase',\n defaultMessage: 'Password must contain at least 1 uppercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[A-Z]/.test(value);\n }\n )\n .test(\n 'number',\n {\n message: {\n id: 'components.Input.error.contain.number',\n defaultMessage: 'Password must contain at least 1 number',\n },\n },\n (value) => {\n if (!value) return true;\n return /\\d/.test(value);\n }\n )\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Password is required',\n })\n .nullable(),\n confirmPassword: yup\n .string()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Confirm password is required',\n })\n .oneOf([yup.ref('password'), null], {\n id: 'components.Input.error.password.noMatch',\n defaultMessage: 'Passwords must match',\n })\n .nullable(),\n registrationToken: yup.string().required({\n id: translatedErrors.required.id,\n defaultMessage: 'Registration token is required',\n }),\n});\n\nconst REGISTER_ADMIN_SCHEMA = yup.object().shape({\n firstname: yup\n .string()\n .trim()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Firstname is required',\n })\n .nullable(),\n lastname: yup.string().nullable(),\n password: yup\n .string()\n .min(8, {\n id: translatedErrors.minLength.id,\n defaultMessage: 'Password must be at least 8 characters',\n values: { min: 8 },\n })\n .test(\n 'max-bytes',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value) return true;\n return new TextEncoder().encode(value).length <= 72;\n }\n )\n .test(\n 'lowercase',\n {\n message: {\n id: 'components.Input.error.contain.lowercase',\n defaultMessage: 'Password must contain at least 1 lowercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[a-z]/.test(value);\n }\n )\n .test(\n 'uppercase',\n {\n message: {\n id: 'components.Input.error.contain.uppercase',\n defaultMessage: 'Password must contain at least 1 uppercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[A-Z]/.test(value);\n }\n )\n .test(\n 'number',\n {\n message: {\n id: 'components.Input.error.contain.number',\n defaultMessage: 'Password must contain at least 1 number',\n },\n },\n (value) => {\n if (!value) return true;\n return /\\d/.test(value);\n }\n )\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Password is required',\n })\n .nullable(),\n confirmPassword: yup\n .string()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Confirm password is required',\n })\n .nullable()\n .oneOf([yup.ref('password'), null], {\n id: 'components.Input.error.password.noMatch',\n defaultMessage: 'Passwords must match',\n }),\n email: yup\n .string()\n .email({\n id: translatedErrors.email.id,\n defaultMessage: 'Not a valid email',\n })\n .strict()\n .lowercase({\n id: translatedErrors.lowercase.id,\n defaultMessage: 'Email must be lowercase',\n })\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Email is required',\n })\n .nullable(),\n});\n\ninterface RegisterProps {\n hasAdmin?: boolean;\n}\n\ninterface RegisterFormValues {\n firstname: string;\n lastname: string;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && !Array.isArray(value) && value !== null;\n};\n\nconst isMessageDescriptor = (value: unknown): value is MessageDescriptor => {\n return (\n isRecord(value) && typeof value.id === 'string' && typeof value.defaultMessage === 'string'\n );\n};\n\nconst Register = ({ hasAdmin }: RegisterProps) => {\n const { toggleNotification } = useNotification();\n const navigate = useNavigate();\n const [submitCount, setSubmitCount] = React.useState(0);\n const [apiError, setApiError] = React.useState<string>();\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { search: searchString } = useLocation();\n const query = React.useMemo(() => new URLSearchParams(searchString), [searchString]);\n const match = useMatch('/auth/:authType');\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const { setNpsSurveySettings } = useNpsSurveySettings();\n\n const registrationToken = query.get('registrationToken');\n\n const { data: userInfo, error } = useGetRegistrationInfoQuery(registrationToken as string, {\n skip: !registrationToken,\n });\n\n React.useEffect(() => {\n if (error) {\n const message: string = isBaseQueryError(error)\n ? formatAPIError(error)\n : (error.message ?? '');\n\n toggleNotification({\n type: 'danger',\n message,\n });\n\n navigate(`/auth/oops?info=${encodeURIComponent(message)}`);\n }\n }, [error, formatAPIError, navigate, toggleNotification]);\n\n const [registerAdmin] = useRegisterAdminMutation();\n const [registerUser] = useRegisterUserMutation();\n const dispatch = useTypedDispatch();\n\n const handleRegisterAdmin = async (\n { news, ...body }: RegisterAdmin.Request['body'] & { news: boolean },\n setFormErrors: FormHelpers<RegisterFormValues>['setErrors']\n ) => {\n const res = await registerAdmin({ ...body, deviceId: getOrCreateDeviceId() });\n\n if ('data' in res) {\n dispatch(login({ token: res.data.token }));\n\n if (news) {\n // Only enable EE survey if user accepted the newsletter\n setNpsSurveySettings((s) => ({ ...s, enabled: true }));\n\n navigate({\n pathname: '/usecase',\n search: `?hasAdmin=${true}`,\n });\n } else {\n navigate('/');\n }\n } else {\n if (isBaseQueryError(res.error)) {\n trackUsage('didNotCreateFirstAdmin');\n\n if (res.error.name === 'ValidationError') {\n setFormErrors(formatValidationErrors(res.error));\n return;\n }\n\n setApiError(formatAPIError(res.error));\n }\n }\n };\n\n const handleRegisterUser = async (\n { news, ...body }: RegisterUser.Request['body'] & { news: boolean },\n setFormErrors: FormHelpers<RegisterFormValues>['setErrors']\n ) => {\n const res = await registerUser({ ...body, deviceId: getOrCreateDeviceId() });\n\n if ('data' in res) {\n dispatch(login({ token: res.data.token }));\n\n if (news) {\n // Only enable EE survey if user accepted the newsletter\n setNpsSurveySettings((s) => ({ ...s, enabled: true }));\n\n navigate({\n pathname: '/usecase',\n search: `?hasAdmin=${hasAdmin}`,\n });\n } else {\n navigate('/');\n }\n } else {\n if (isBaseQueryError(res.error)) {\n trackUsage('didNotCreateFirstAdmin');\n\n if (res.error.name === 'ValidationError') {\n setFormErrors(formatValidationErrors(res.error));\n return;\n }\n\n setApiError(formatAPIError(res.error));\n }\n }\n };\n\n if (\n !match ||\n (match.params.authType !== 'register' && match.params.authType !== 'register-admin')\n ) {\n return <Navigate to=\"/\" />;\n }\n\n const isAdminRegistration = match.params.authType === 'register-admin';\n\n const schema = isAdminRegistration ? REGISTER_ADMIN_SCHEMA : REGISTER_USER_SCHEMA;\n\n return (\n <UnauthenticatedLayout>\n <LayoutContent>\n <Flex direction=\"column\" alignItems=\"center\" gap={3}>\n <Logo />\n\n <Typography tag=\"h1\" variant=\"alpha\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.welcome.title',\n defaultMessage: 'Welcome to Strapi!',\n })}\n </Typography>\n <Typography variant=\"epsilon\" textColor=\"neutral600\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.register.subtitle',\n defaultMessage:\n 'Credentials are only used to authenticate in Strapi. All saved data will be stored in your database.',\n })}\n </Typography>\n {apiError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {apiError}\n </Typography>\n ) : null}\n </Flex>\n <Form\n method=\"POST\"\n initialValues={\n {\n firstname: userInfo?.firstname || '',\n lastname: userInfo?.lastname || '',\n email: userInfo?.email || '',\n password: '',\n confirmPassword: '',\n registrationToken: registrationToken || undefined,\n news: false,\n } satisfies RegisterFormValues\n }\n onSubmit={async (data, helpers) => {\n const normalizedData = normalizeData(data);\n\n try {\n await schema.validate(normalizedData, { abortEarly: false });\n\n if (submitCount > 0 && isAdminRegistration) {\n trackUsage('didSubmitWithErrorsFirstAdmin', { count: submitCount.toString() });\n }\n\n if (normalizedData.registrationToken) {\n handleRegisterUser(\n {\n userInfo: omit(normalizedData, [\n 'registrationToken',\n 'confirmPassword',\n 'email',\n 'news',\n ]),\n registrationToken: normalizedData.registrationToken,\n news: normalizedData.news,\n },\n helpers.setErrors\n );\n } else {\n await handleRegisterAdmin(\n omit(normalizedData, ['registrationToken', 'confirmPassword']),\n helpers.setErrors\n );\n }\n } catch (err) {\n if (err instanceof ValidationError) {\n const formatDescriptor = (msg: unknown) => {\n try {\n if (msg === undefined || msg === null) return '';\n if (typeof msg === 'string') return msg;\n // Direct descriptor\n if (isMessageDescriptor(msg)) return formatMessage(msg);\n // Wrapped descriptor: { message: { id, defaultMessage } }\n if (isRecord(msg) && isMessageDescriptor(msg.message)) {\n return formatMessage(msg.message);\n }\n // errors array: [{ id, defaultMessage }]\n if (isRecord(msg) && Array.isArray(msg.errors) && msg.errors.length > 0) {\n const first = msg.errors[0];\n if (typeof first === 'string') return first;\n if (isMessageDescriptor(first)) return formatMessage(first);\n }\n // fallback to defaultMessage if present\n if (isRecord(msg) && typeof msg.defaultMessage === 'string') {\n return msg.defaultMessage;\n }\n return String(msg);\n } catch {\n return String(msg);\n }\n };\n\n const computed = err.inner.reduce<Record<string, string>>(\n (acc, { message, path }) => {\n if (!path) return acc;\n acc[path] = formatDescriptor(message);\n return acc;\n },\n {}\n );\n\n helpers.setErrors(computed);\n }\n\n setSubmitCount(submitCount + 1);\n }\n }}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6} marginTop={7}>\n <Grid.Root gap={4}>\n {[\n {\n label: formatMessage({\n id: 'Auth.form.firstname.label',\n defaultMessage: 'Firstname',\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: 'Lastname',\n }),\n name: 'lastname',\n size: 6,\n type: 'string' as const,\n },\n {\n disabled: !isAdminRegistration,\n label: formatMessage({\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n }),\n name: 'email',\n required: true,\n size: 12,\n type: 'email' as const,\n },\n {\n hint: formatMessage({\n id: 'Auth.form.password.hint',\n defaultMessage:\n 'Must be at least 8 characters, 1 uppercase, 1 lowercase & 1 number',\n }),\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n required: true,\n size: 12,\n type: 'password' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n }),\n name: 'confirmPassword',\n required: true,\n size: 12,\n type: 'password' as const,\n },\n {\n label: formatMessage(\n {\n id: 'Auth.form.register.news.label',\n defaultMessage:\n 'Keep me updated about new features & upcoming improvements (by doing this you accept the {terms} and the {policy}).',\n },\n {\n terms: (\n <A target=\"_blank\" href=\"https://strapi.io/terms\" rel=\"noreferrer\">\n {formatMessage({\n id: 'Auth.privacy-policy-agreement.terms',\n defaultMessage: 'terms',\n })}\n </A>\n ),\n policy: (\n <A target=\"_blank\" href=\"https://strapi.io/privacy\" rel=\"noreferrer\">\n {formatMessage({\n id: 'Auth.privacy-policy-agreement.policy',\n defaultMessage: 'policy',\n })}\n </A>\n ),\n }\n ),\n name: 'news',\n size: 12,\n type: 'checkbox' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n xs={12}\n m={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n <Button fullWidth size=\"L\" type=\"submit\">\n {formatMessage({\n id: 'Auth.form.button.register',\n defaultMessage: \"Let's start\",\n })}\n </Button>\n </Flex>\n </Form>\n {match?.params.authType === 'register' && (\n <Box paddingTop={4}>\n <Flex justifyContent=\"center\">\n <Link tag={NavLink} to=\"/auth/login\">\n {formatMessage({\n id: 'Auth.link.signin.account',\n defaultMessage: 'Already have an account?',\n })}\n </Link>\n </Flex>\n </Box>\n )}\n </LayoutContent>\n </UnauthenticatedLayout>\n );\n};\n\ntype StringKeys<T> = {\n [K in keyof T]: T[K] extends string | undefined ? K : never;\n}[keyof T];\n\n/**\n * @description Trims all values but the password & sets lastName to null if it's a falsey value.\n */\nfunction normalizeData(data: RegisterFormValues) {\n return Object.entries(data).reduce(\n (acc, [key, value]) => {\n type PasswordKeys = Extract<keyof RegisterFormValues, 'password' | 'confirmPassword'>;\n type RegisterFormStringValues = Exclude<\n keyof Pick<RegisterFormValues, StringKeys<RegisterFormValues>>,\n PasswordKeys\n >;\n\n if (!['password', 'confirmPassword'].includes(key) && typeof value === 'string') {\n acc[key as RegisterFormStringValues] = value.trim();\n\n if (key === 'lastname') {\n acc[key] = value || undefined;\n }\n } else {\n acc[key as PasswordKeys] = value;\n }\n\n return acc;\n },\n {} as {\n firstname: string;\n lastname: string | undefined;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n }\n );\n}\n\nconst A = styled.a`\n color: ${({ theme }) => theme.colors.primary600};\n`;\n\nexport { Register };\nexport type { RegisterProps };\n"],"names":["REGISTER_USER_SCHEMA","yup","object","shape","firstname","string","trim","required","translatedErrors","nullable","lastname","password","min","id","minLength","defaultMessage","values","test","value","byteSize","getByteSize","message","confirmPassword","oneOf","ref","registrationToken","REGISTER_ADMIN_SCHEMA","TextEncoder","encode","length","email","strict","lowercase","isRecord","Array","isArray","isMessageDescriptor","Register","hasAdmin","toggleNotification","useNotification","navigate","useNavigate","submitCount","setSubmitCount","React","useState","apiError","setApiError","trackUsage","useTracking","formatMessage","useIntl","search","searchString","useLocation","query","useMemo","URLSearchParams","match","useMatch","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","setNpsSurveySettings","useNpsSurveySettings","get","data","userInfo","error","useGetRegistrationInfoQuery","skip","useEffect","isBaseQueryError","type","encodeURIComponent","registerAdmin","useRegisterAdminMutation","registerUser","useRegisterUserMutation","dispatch","useTypedDispatch","handleRegisterAdmin","news","body","setFormErrors","res","deviceId","getOrCreateDeviceId","login","token","s","enabled","pathname","name","handleRegisterUser","params","authType","_jsx","Navigate","to","isAdminRegistration","schema","UnauthenticatedLayout","_jsxs","LayoutContent","Flex","direction","alignItems","gap","Logo","Typography","tag","variant","textAlign","textColor","role","tabIndex","Form","method","initialValues","undefined","onSubmit","helpers","normalizedData","normalizeData","validate","abortEarly","count","toString","omit","setErrors","err","ValidationError","formatDescriptor","msg","errors","first","String","computed","inner","reduce","acc","path","marginTop","Grid","Root","label","size","disabled","hint","terms","A","target","href","rel","policy","map","field","Item","xs","m","InputRenderer","Button","fullWidth","Box","paddingTop","justifyContent","Link","NavLink","Object","entries","key","includes","styled","a","theme","colors","primary600"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ var React = require('react');
|
|
|
5
5
|
var designSystem = require('@strapi/design-system');
|
|
6
6
|
var icons = require('@strapi/icons');
|
|
7
7
|
var reactIntl = require('react-intl');
|
|
8
|
-
var
|
|
8
|
+
var styledComponents = require('styled-components');
|
|
9
9
|
var DragLayer = require('../../components/DragLayer.js');
|
|
10
10
|
var GapDropZone = require('../../components/GapDropZone.js');
|
|
11
11
|
var Overview = require('../../components/GuidedTour/Overview.js');
|
|
@@ -57,7 +57,7 @@ const getWidgetPermissionsCacheKey = (permissions)=>{
|
|
|
57
57
|
})).sort().join('|');
|
|
58
58
|
};
|
|
59
59
|
// Styled wrapper for the drag preview
|
|
60
|
-
const DragPreviewWrapper =
|
|
60
|
+
const DragPreviewWrapper = styledComponents.styled.div`
|
|
61
61
|
max-width: ${(props)=>props.$maxWidth};
|
|
62
62
|
overflow: hidden;
|
|
63
63
|
opacity: 0.9;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HomePage.js","sources":["../../../../../../admin/src/pages/Home/HomePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Main } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { DragLayer, isWidgetDragItem } from '../../components/DragLayer';\nimport { GapDropZoneManager } from '../../components/GapDropZone';\nimport { GuidedTourHomepageOverview } from '../../components/GuidedTour/Overview';\nimport { Layouts } from '../../components/Layouts/Layout';\nimport { Page } from '../../components/PageHelpers';\nimport { WidgetResizeHandle } from '../../components/ResizeIndicator';\nimport { Widget } from '../../components/WidgetHelpers';\nimport { WidgetRoot } from '../../components/WidgetRoot';\nimport { useEnterprise } from '../../ee';\nimport { useAppInfo } from '../../features/AppInfo';\nimport { useAuth } from '../../features/Auth';\nimport { useStrapiApp } from '../../features/StrapiApp';\nimport { useWidgets } from '../../features/Widgets';\nimport {\n useGetCountDocumentsQuery,\n useGetHomepageLayoutQuery,\n useGetKeyStatisticsQuery,\n} from '../../services/homepage';\nimport {\n getWidgetElement,\n WIDGET_DATA_ATTRIBUTES,\n applyHomepageLayout,\n createDefaultWidgetWidths,\n isLastWidgetInRow,\n canResizeBetweenWidgets,\n getWidgetWidth,\n} from '../../utils/widgetLayout';\nimport { hideDeployNowWidgetInProduction } from '../../utils/widgetVisibility';\n\nimport { AddWidgetModal } from './components/AddWidgetModal';\nimport { FreeTrialEndedModal } from './components/FreeTrialEndedModal';\nimport { FreeTrialWelcomeModal } from './components/FreeTrialWelcomeModal';\n\nimport type { WidgetWithUID } from '../../core/apis/Widgets';\n\ntype WidgetPermissionStatus = 'allowed' | 'denied' | 'loading';\n\nconst getWidgetPermissionsCacheKey = (permissions: NonNullable<WidgetWithUID['permissions']>) => {\n return permissions\n .map((permission) =>\n JSON.stringify({\n action: permission.action,\n subject: permission.subject,\n conditions: permission.conditions ?? [],\n properties: permission.properties ?? {},\n })\n )\n .sort()\n .join('|');\n};\n\n// Styled wrapper for the drag preview\nconst DragPreviewWrapper = styled.div<{ $maxWidth: string }>`\n max-width: ${(props) => props.$maxWidth};\n overflow: hidden;\n opacity: 0.9;\n border: 2px solid ${({ theme }) => theme.colors.primary500};\n border-radius: ${({ theme }) => theme.borderRadius};\n pointer-events: none;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * UnstableHomePageCe\n * -----------------------------------------------------------------------------------------------*/\n\nexport const WidgetComponent = ({\n component,\n columnWidth,\n}: {\n component: () => Promise<React.ComponentType>;\n columnWidth: number;\n}) => {\n const [loadedComponent, setLoadedComponent] = React.useState<React.ComponentType<{\n columnWidth?: number;\n }> | null>(null);\n\n React.useEffect(() => {\n const loadComponent = async () => {\n const resolvedComponent = await component();\n\n setLoadedComponent(() => resolvedComponent);\n };\n\n loadComponent();\n }, [component]);\n\n const Component = loadedComponent;\n\n if (!Component) {\n return <Widget.Loading />;\n }\n\n return <Component {...({ columnWidth } as Record<string, unknown>)} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HomePageCE\n * -----------------------------------------------------------------------------------------------*/\n\nconst HomePageCE = () => {\n const { formatMessage } = useIntl();\n const user = useAuth('HomePageCE', (state) => state.user);\n const displayName = user?.firstname ?? user?.username ?? user?.email;\n const getAllWidgets = useStrapiApp('UnstableHomepageCe', (state) => state.widgets.getAll);\n const currentEnvironment = useAppInfo('HomePageCE', (state) => state.currentEnvironment);\n const allWidgets = React.useMemo(\n () => hideDeployNowWidgetInProduction(getAllWidgets(), currentEnvironment),\n [getAllWidgets, currentEnvironment]\n );\n const checkUserHasPermissions = useAuth('WidgetRoot', (state) => state.checkUserHasPermissions);\n const { data: homepageLayout, isLoading: _isLoadingLayout } = useGetHomepageLayoutQuery();\n // Prefetch expensive widget data as soon as the homepage route is active.\n useGetCountDocumentsQuery();\n useGetKeyStatisticsQuery();\n const [filteredWidgets, setFilteredWidgets] = React.useState<WidgetWithUID[]>([]);\n const [widgetPermissionStatus, setWidgetPermissionStatus] = React.useState<\n Record<string, WidgetPermissionStatus>\n >(() =>\n allWidgets.reduce<Record<string, WidgetPermissionStatus>>((acc, widget) => {\n acc[widget.uid] =\n !widget.permissions || widget.permissions.length === 0 ? 'allowed' : 'loading';\n return acc;\n }, {})\n );\n const [isAddWidgetModalOpen, setIsAddWidgetModalOpen] = React.useState(false);\n\n // Use custom hook for widget management\n const {\n findWidget,\n deleteWidget,\n addWidget,\n moveWidget,\n columnWidths,\n setColumnWidths,\n handleWidgetResize,\n saveLayout,\n isDraggingWidget,\n draggedWidgetId,\n handleDragStart,\n handleDragEnd,\n } = useWidgets({\n filteredWidgets,\n setFilteredWidgets,\n });\n\n React.useEffect(() => {\n const initialPermissionStatus = allWidgets.reduce<Record<string, WidgetPermissionStatus>>(\n (acc, widget) => {\n acc[widget.uid] =\n !widget.permissions || widget.permissions.length === 0 ? 'allowed' : 'loading';\n return acc;\n },\n {}\n );\n\n setWidgetPermissionStatus(initialPermissionStatus);\n\n const widgetsWithPermissions = allWidgets.filter(\n (widget) => widget.permissions && widget.permissions.length > 0\n );\n\n if (widgetsWithPermissions.length === 0) {\n return;\n }\n\n const groupedPermissions = widgetsWithPermissions.reduce<\n Map<string, { permissions: NonNullable<WidgetWithUID['permissions']>; uids: string[] }>\n >((acc, widget) => {\n const permissions = widget.permissions ?? [];\n const key = getWidgetPermissionsCacheKey(permissions);\n const existingGroup = acc.get(key);\n\n if (existingGroup) {\n existingGroup.uids.push(widget.uid);\n } else {\n acc.set(key, { permissions, uids: [widget.uid] });\n }\n\n return acc;\n }, new Map());\n\n let isMounted = true;\n\n const checkWidgetsPermissions = async () => {\n try {\n const permissionResults = await Promise.all(\n Array.from(groupedPermissions.values()).map(async ({ permissions, uids }) => {\n const matchingPermissions = await checkUserHasPermissions(permissions);\n const status: WidgetPermissionStatus =\n matchingPermissions.length >= permissions.length ? 'allowed' : 'denied';\n\n return { uids, status };\n })\n );\n\n if (!isMounted) return;\n\n setWidgetPermissionStatus((prev) => {\n const next = { ...prev };\n\n permissionResults.forEach(({ uids, status }) => {\n uids.forEach((uid) => {\n next[uid] = status;\n });\n });\n\n return next;\n });\n } catch {\n if (!isMounted) return;\n\n // Keep the UI responsive even when permission checks fail.\n setWidgetPermissionStatus((prev) => {\n const next = { ...prev };\n widgetsWithPermissions.forEach((widget) => {\n next[widget.uid] = 'denied';\n });\n return next;\n });\n }\n };\n\n checkWidgetsPermissions();\n\n return () => {\n isMounted = false;\n };\n }, [allWidgets, checkUserHasPermissions]);\n\n const allAvailableWidgets = React.useMemo(() => {\n return allWidgets.filter((widget) => widgetPermissionStatus[widget.uid] === 'allowed');\n }, [allWidgets, widgetPermissionStatus]);\n\n const renderableWidgets = React.useMemo(() => {\n return allWidgets.filter((widget) => widgetPermissionStatus[widget.uid] !== 'denied');\n }, [allWidgets, widgetPermissionStatus]);\n\n React.useEffect(() => {\n // If user has customized the homepage layout, apply it\n if (homepageLayout && homepageLayout.widgets) {\n const { filteredWidgets, widths: homepageWidths } = applyHomepageLayout(\n renderableWidgets,\n homepageLayout\n );\n\n setFilteredWidgets(filteredWidgets);\n setColumnWidths(homepageWidths);\n } else {\n // Set default layout when no custom layout exists\n setFilteredWidgets(renderableWidgets);\n setColumnWidths(createDefaultWidgetWidths(renderableWidgets));\n }\n }, [homepageLayout, renderableWidgets, setColumnWidths]);\n\n const widgetLayout = React.useMemo(() => {\n return filteredWidgets.map((widget, index) => {\n const rightWidgetId = filteredWidgets[index + 1]?.uid;\n const widgetWidth = getWidgetWidth(columnWidths, widget.uid);\n const rightWidgetWidth = getWidgetWidth(columnWidths, rightWidgetId);\n\n return {\n widget,\n index,\n isLastInRow: isLastWidgetInRow(index, filteredWidgets, columnWidths),\n rightWidgetId,\n widgetWidth,\n rightWidgetWidth,\n canResize:\n rightWidgetId &&\n canResizeBetweenWidgets(widget.uid, rightWidgetId, columnWidths, filteredWidgets),\n };\n });\n }, [filteredWidgets, columnWidths]);\n\n return (\n <Layouts.Root>\n <Main>\n <Page.Title>\n {formatMessage({ id: 'HomePage.head.title', defaultMessage: 'Homepage' })}\n </Page.Title>\n <Layouts.Header\n title={formatMessage(\n { id: 'HomePage.header.title', defaultMessage: 'Hello {name}' },\n { name: displayName }\n )}\n subtitle={formatMessage({\n id: 'HomePage.header.subtitle',\n defaultMessage: 'Welcome to your administration panel',\n })}\n primaryAction={\n <Button\n variant=\"tertiary\"\n size=\"S\"\n startIcon={<Plus />}\n onClick={() => setIsAddWidgetModalOpen(true)}\n fullWidth\n >\n {formatMessage({\n id: 'HomePage.addWidget.button',\n defaultMessage: 'Add Widget',\n })}\n </Button>\n }\n />\n <FreeTrialWelcomeModal />\n <FreeTrialEndedModal />\n <AddWidgetModal\n isOpen={isAddWidgetModalOpen}\n onClose={() => setIsAddWidgetModalOpen(false)}\n onAddWidget={addWidget}\n currentWidgets={filteredWidgets}\n availableWidgets={allAvailableWidgets}\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={8} paddingBottom={10}>\n <GuidedTourHomepageOverview />\n <Box position=\"relative\" {...{ [WIDGET_DATA_ATTRIBUTES.GRID_CONTAINER]: true }}>\n <Grid.Root gap={5}>\n {widgetLayout.map(\n ({\n widget,\n isLastInRow,\n rightWidgetId,\n widgetWidth,\n rightWidgetWidth,\n canResize,\n }) => (\n <React.Fragment key={widget.uid}>\n <Grid.Item col={widgetWidth} xs={12}>\n <WidgetRoot\n uid={widget.uid}\n title={widget.title}\n icon={widget.icon}\n link={widget.link}\n findWidget={findWidget}\n deleteWidget={deleteWidget}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n component={widget.component}\n >\n {widgetPermissionStatus[widget.uid] === 'loading' ? (\n <Widget.Loading />\n ) : (\n <WidgetComponent\n component={widget.component}\n columnWidth={widgetWidth}\n />\n )}\n </WidgetRoot>\n </Grid.Item>\n\n {!isLastInRow && canResize && rightWidgetId && (\n <WidgetResizeHandle\n key={`resize-${widget.uid}`}\n leftWidgetId={widget.uid}\n rightWidgetId={rightWidgetId}\n leftWidgetWidth={widgetWidth}\n rightWidgetWidth={rightWidgetWidth}\n onResize={handleWidgetResize}\n saveLayout={saveLayout}\n filteredWidgets={filteredWidgets}\n />\n )}\n </React.Fragment>\n )\n )}\n </Grid.Root>\n\n {isDraggingWidget && (\n <GapDropZoneManager\n filteredWidgets={filteredWidgets}\n columnWidths={columnWidths}\n draggedWidgetId={draggedWidgetId}\n moveWidget={moveWidget}\n />\n )}\n </Box>\n </Flex>\n </Layouts.Content>\n\n {/* Add the DragLayer to handle custom drag previews */}\n <DragLayer\n renderItem={({ type: _type, item }) => {\n if (!isWidgetDragItem(item)) {\n return null;\n }\n\n const widgetElement = getWidgetElement(item.id);\n const maxWidth = `${widgetElement?.clientWidth}px`;\n\n return (\n <DragPreviewWrapper $maxWidth={maxWidth}>\n <WidgetRoot\n uid={item.id as WidgetWithUID['uid']}\n title={item.title || { id: `${item.id}`, defaultMessage: item.id }}\n icon={item.icon}\n link={item.link}\n >\n <WidgetComponent component={item.component} columnWidth={4} />\n </WidgetRoot>\n </DragPreviewWrapper>\n );\n }}\n />\n </Main>\n </Layouts.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HomePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst HomePage = () => {\n const Page = useEnterprise(\n HomePageCE,\n // eslint-disable-next-line import/no-cycle\n async () => (await import('../../../../ee/admin/src/pages/HomePage')).HomePageEE\n );\n\n // block rendering until the EE component is fully loaded\n if (!Page) {\n return null;\n }\n\n return <Page />;\n};\n\nexport { HomePage, HomePageCE };\n"],"names":["getWidgetPermissionsCacheKey","permissions","map","permission","JSON","stringify","action","subject","conditions","properties","sort","join","DragPreviewWrapper","styled","div","props","$maxWidth","theme","colors","primary500","borderRadius","WidgetComponent","component","columnWidth","loadedComponent","setLoadedComponent","React","useState","useEffect","loadComponent","resolvedComponent","Component","_jsx","Widget","Loading","HomePageCE","formatMessage","useIntl","user","useAuth","state","displayName","firstname","username","email","getAllWidgets","useStrapiApp","widgets","getAll","currentEnvironment","useAppInfo","allWidgets","useMemo","hideDeployNowWidgetInProduction","checkUserHasPermissions","data","homepageLayout","isLoading","_isLoadingLayout","useGetHomepageLayoutQuery","useGetCountDocumentsQuery","useGetKeyStatisticsQuery","filteredWidgets","setFilteredWidgets","widgetPermissionStatus","setWidgetPermissionStatus","reduce","acc","widget","uid","length","isAddWidgetModalOpen","setIsAddWidgetModalOpen","findWidget","deleteWidget","addWidget","moveWidget","columnWidths","setColumnWidths","handleWidgetResize","saveLayout","isDraggingWidget","draggedWidgetId","handleDragStart","handleDragEnd","useWidgets","initialPermissionStatus","widgetsWithPermissions","filter","groupedPermissions","key","existingGroup","get","uids","push","set","Map","isMounted","checkWidgetsPermissions","permissionResults","Promise","all","Array","from","values","matchingPermissions","status","prev","next","forEach","allAvailableWidgets","renderableWidgets","widths","homepageWidths","applyHomepageLayout","createDefaultWidgetWidths","widgetLayout","index","rightWidgetId","widgetWidth","getWidgetWidth","rightWidgetWidth","isLastInRow","isLastWidgetInRow","canResize","canResizeBetweenWidgets","Layouts","Root","_jsxs","Main","Page","Title","id","defaultMessage","Header","title","name","subtitle","primaryAction","Button","variant","size","startIcon","Plus","onClick","fullWidth","FreeTrialWelcomeModal","FreeTrialEndedModal","AddWidgetModal","isOpen","onClose","onAddWidget","currentWidgets","availableWidgets","Content","Flex","direction","alignItems","gap","paddingBottom","GuidedTourHomepageOverview","Box","position","WIDGET_DATA_ATTRIBUTES","GRID_CONTAINER","Grid","Fragment","Item","col","xs","WidgetRoot","icon","link","onDragStart","onDragEnd","WidgetResizeHandle","leftWidgetId","leftWidgetWidth","onResize","GapDropZoneManager","DragLayer","renderItem","type","_type","item","isWidgetDragItem","widgetElement","getWidgetElement","maxWidth","clientWidth","HomePage","useEnterprise","HomePageEE"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HomePage.js","sources":["../../../../../../admin/src/pages/Home/HomePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Main } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { DragLayer, isWidgetDragItem } from '../../components/DragLayer';\nimport { GapDropZoneManager } from '../../components/GapDropZone';\nimport { GuidedTourHomepageOverview } from '../../components/GuidedTour/Overview';\nimport { Layouts } from '../../components/Layouts/Layout';\nimport { Page } from '../../components/PageHelpers';\nimport { WidgetResizeHandle } from '../../components/ResizeIndicator';\nimport { Widget } from '../../components/WidgetHelpers';\nimport { WidgetRoot } from '../../components/WidgetRoot';\nimport { useEnterprise } from '../../ee';\nimport { useAppInfo } from '../../features/AppInfo';\nimport { useAuth } from '../../features/Auth';\nimport { useStrapiApp } from '../../features/StrapiApp';\nimport { useWidgets } from '../../features/Widgets';\nimport {\n useGetCountDocumentsQuery,\n useGetHomepageLayoutQuery,\n useGetKeyStatisticsQuery,\n} from '../../services/homepage';\nimport {\n getWidgetElement,\n WIDGET_DATA_ATTRIBUTES,\n applyHomepageLayout,\n createDefaultWidgetWidths,\n isLastWidgetInRow,\n canResizeBetweenWidgets,\n getWidgetWidth,\n} from '../../utils/widgetLayout';\nimport { hideDeployNowWidgetInProduction } from '../../utils/widgetVisibility';\n\nimport { AddWidgetModal } from './components/AddWidgetModal';\nimport { FreeTrialEndedModal } from './components/FreeTrialEndedModal';\nimport { FreeTrialWelcomeModal } from './components/FreeTrialWelcomeModal';\n\nimport type { WidgetWithUID } from '../../core/apis/Widgets';\n\ntype WidgetPermissionStatus = 'allowed' | 'denied' | 'loading';\n\nconst getWidgetPermissionsCacheKey = (permissions: NonNullable<WidgetWithUID['permissions']>) => {\n return permissions\n .map((permission) =>\n JSON.stringify({\n action: permission.action,\n subject: permission.subject,\n conditions: permission.conditions ?? [],\n properties: permission.properties ?? {},\n })\n )\n .sort()\n .join('|');\n};\n\n// Styled wrapper for the drag preview\nconst DragPreviewWrapper = styled.div<{ $maxWidth: string }>`\n max-width: ${(props) => props.$maxWidth};\n overflow: hidden;\n opacity: 0.9;\n border: 2px solid ${({ theme }) => theme.colors.primary500};\n border-radius: ${({ theme }) => theme.borderRadius};\n pointer-events: none;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * UnstableHomePageCe\n * -----------------------------------------------------------------------------------------------*/\n\nexport const WidgetComponent = ({\n component,\n columnWidth,\n}: {\n component: () => Promise<React.ComponentType>;\n columnWidth: number;\n}) => {\n const [loadedComponent, setLoadedComponent] = React.useState<React.ComponentType<{\n columnWidth?: number;\n }> | null>(null);\n\n React.useEffect(() => {\n const loadComponent = async () => {\n const resolvedComponent = await component();\n\n setLoadedComponent(() => resolvedComponent);\n };\n\n loadComponent();\n }, [component]);\n\n const Component = loadedComponent;\n\n if (!Component) {\n return <Widget.Loading />;\n }\n\n return <Component {...({ columnWidth } as Record<string, unknown>)} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HomePageCE\n * -----------------------------------------------------------------------------------------------*/\n\nconst HomePageCE = () => {\n const { formatMessage } = useIntl();\n const user = useAuth('HomePageCE', (state) => state.user);\n const displayName = user?.firstname ?? user?.username ?? user?.email;\n const getAllWidgets = useStrapiApp('UnstableHomepageCe', (state) => state.widgets.getAll);\n const currentEnvironment = useAppInfo('HomePageCE', (state) => state.currentEnvironment);\n const allWidgets = React.useMemo(\n () => hideDeployNowWidgetInProduction(getAllWidgets(), currentEnvironment),\n [getAllWidgets, currentEnvironment]\n );\n const checkUserHasPermissions = useAuth('WidgetRoot', (state) => state.checkUserHasPermissions);\n const { data: homepageLayout, isLoading: _isLoadingLayout } = useGetHomepageLayoutQuery();\n // Prefetch expensive widget data as soon as the homepage route is active.\n useGetCountDocumentsQuery();\n useGetKeyStatisticsQuery();\n const [filteredWidgets, setFilteredWidgets] = React.useState<WidgetWithUID[]>([]);\n const [widgetPermissionStatus, setWidgetPermissionStatus] = React.useState<\n Record<string, WidgetPermissionStatus>\n >(() =>\n allWidgets.reduce<Record<string, WidgetPermissionStatus>>((acc, widget) => {\n acc[widget.uid] =\n !widget.permissions || widget.permissions.length === 0 ? 'allowed' : 'loading';\n return acc;\n }, {})\n );\n const [isAddWidgetModalOpen, setIsAddWidgetModalOpen] = React.useState(false);\n\n // Use custom hook for widget management\n const {\n findWidget,\n deleteWidget,\n addWidget,\n moveWidget,\n columnWidths,\n setColumnWidths,\n handleWidgetResize,\n saveLayout,\n isDraggingWidget,\n draggedWidgetId,\n handleDragStart,\n handleDragEnd,\n } = useWidgets({\n filteredWidgets,\n setFilteredWidgets,\n });\n\n React.useEffect(() => {\n const initialPermissionStatus = allWidgets.reduce<Record<string, WidgetPermissionStatus>>(\n (acc, widget) => {\n acc[widget.uid] =\n !widget.permissions || widget.permissions.length === 0 ? 'allowed' : 'loading';\n return acc;\n },\n {}\n );\n\n setWidgetPermissionStatus(initialPermissionStatus);\n\n const widgetsWithPermissions = allWidgets.filter(\n (widget) => widget.permissions && widget.permissions.length > 0\n );\n\n if (widgetsWithPermissions.length === 0) {\n return;\n }\n\n const groupedPermissions = widgetsWithPermissions.reduce<\n Map<string, { permissions: NonNullable<WidgetWithUID['permissions']>; uids: string[] }>\n >((acc, widget) => {\n const permissions = widget.permissions ?? [];\n const key = getWidgetPermissionsCacheKey(permissions);\n const existingGroup = acc.get(key);\n\n if (existingGroup) {\n existingGroup.uids.push(widget.uid);\n } else {\n acc.set(key, { permissions, uids: [widget.uid] });\n }\n\n return acc;\n }, new Map());\n\n let isMounted = true;\n\n const checkWidgetsPermissions = async () => {\n try {\n const permissionResults = await Promise.all(\n Array.from(groupedPermissions.values()).map(async ({ permissions, uids }) => {\n const matchingPermissions = await checkUserHasPermissions(permissions);\n const status: WidgetPermissionStatus =\n matchingPermissions.length >= permissions.length ? 'allowed' : 'denied';\n\n return { uids, status };\n })\n );\n\n if (!isMounted) return;\n\n setWidgetPermissionStatus((prev) => {\n const next = { ...prev };\n\n permissionResults.forEach(({ uids, status }) => {\n uids.forEach((uid) => {\n next[uid] = status;\n });\n });\n\n return next;\n });\n } catch {\n if (!isMounted) return;\n\n // Keep the UI responsive even when permission checks fail.\n setWidgetPermissionStatus((prev) => {\n const next = { ...prev };\n widgetsWithPermissions.forEach((widget) => {\n next[widget.uid] = 'denied';\n });\n return next;\n });\n }\n };\n\n checkWidgetsPermissions();\n\n return () => {\n isMounted = false;\n };\n }, [allWidgets, checkUserHasPermissions]);\n\n const allAvailableWidgets = React.useMemo(() => {\n return allWidgets.filter((widget) => widgetPermissionStatus[widget.uid] === 'allowed');\n }, [allWidgets, widgetPermissionStatus]);\n\n const renderableWidgets = React.useMemo(() => {\n return allWidgets.filter((widget) => widgetPermissionStatus[widget.uid] !== 'denied');\n }, [allWidgets, widgetPermissionStatus]);\n\n React.useEffect(() => {\n // If user has customized the homepage layout, apply it\n if (homepageLayout && homepageLayout.widgets) {\n const { filteredWidgets, widths: homepageWidths } = applyHomepageLayout(\n renderableWidgets,\n homepageLayout\n );\n\n setFilteredWidgets(filteredWidgets);\n setColumnWidths(homepageWidths);\n } else {\n // Set default layout when no custom layout exists\n setFilteredWidgets(renderableWidgets);\n setColumnWidths(createDefaultWidgetWidths(renderableWidgets));\n }\n }, [homepageLayout, renderableWidgets, setColumnWidths]);\n\n const widgetLayout = React.useMemo(() => {\n return filteredWidgets.map((widget, index) => {\n const rightWidgetId = filteredWidgets[index + 1]?.uid;\n const widgetWidth = getWidgetWidth(columnWidths, widget.uid);\n const rightWidgetWidth = getWidgetWidth(columnWidths, rightWidgetId);\n\n return {\n widget,\n index,\n isLastInRow: isLastWidgetInRow(index, filteredWidgets, columnWidths),\n rightWidgetId,\n widgetWidth,\n rightWidgetWidth,\n canResize:\n rightWidgetId &&\n canResizeBetweenWidgets(widget.uid, rightWidgetId, columnWidths, filteredWidgets),\n };\n });\n }, [filteredWidgets, columnWidths]);\n\n return (\n <Layouts.Root>\n <Main>\n <Page.Title>\n {formatMessage({ id: 'HomePage.head.title', defaultMessage: 'Homepage' })}\n </Page.Title>\n <Layouts.Header\n title={formatMessage(\n { id: 'HomePage.header.title', defaultMessage: 'Hello {name}' },\n { name: displayName }\n )}\n subtitle={formatMessage({\n id: 'HomePage.header.subtitle',\n defaultMessage: 'Welcome to your administration panel',\n })}\n primaryAction={\n <Button\n variant=\"tertiary\"\n size=\"S\"\n startIcon={<Plus />}\n onClick={() => setIsAddWidgetModalOpen(true)}\n fullWidth\n >\n {formatMessage({\n id: 'HomePage.addWidget.button',\n defaultMessage: 'Add Widget',\n })}\n </Button>\n }\n />\n <FreeTrialWelcomeModal />\n <FreeTrialEndedModal />\n <AddWidgetModal\n isOpen={isAddWidgetModalOpen}\n onClose={() => setIsAddWidgetModalOpen(false)}\n onAddWidget={addWidget}\n currentWidgets={filteredWidgets}\n availableWidgets={allAvailableWidgets}\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={8} paddingBottom={10}>\n <GuidedTourHomepageOverview />\n <Box position=\"relative\" {...{ [WIDGET_DATA_ATTRIBUTES.GRID_CONTAINER]: true }}>\n <Grid.Root gap={5}>\n {widgetLayout.map(\n ({\n widget,\n isLastInRow,\n rightWidgetId,\n widgetWidth,\n rightWidgetWidth,\n canResize,\n }) => (\n <React.Fragment key={widget.uid}>\n <Grid.Item col={widgetWidth} xs={12}>\n <WidgetRoot\n uid={widget.uid}\n title={widget.title}\n icon={widget.icon}\n link={widget.link}\n findWidget={findWidget}\n deleteWidget={deleteWidget}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n component={widget.component}\n >\n {widgetPermissionStatus[widget.uid] === 'loading' ? (\n <Widget.Loading />\n ) : (\n <WidgetComponent\n component={widget.component}\n columnWidth={widgetWidth}\n />\n )}\n </WidgetRoot>\n </Grid.Item>\n\n {!isLastInRow && canResize && rightWidgetId && (\n <WidgetResizeHandle\n key={`resize-${widget.uid}`}\n leftWidgetId={widget.uid}\n rightWidgetId={rightWidgetId}\n leftWidgetWidth={widgetWidth}\n rightWidgetWidth={rightWidgetWidth}\n onResize={handleWidgetResize}\n saveLayout={saveLayout}\n filteredWidgets={filteredWidgets}\n />\n )}\n </React.Fragment>\n )\n )}\n </Grid.Root>\n\n {isDraggingWidget && (\n <GapDropZoneManager\n filteredWidgets={filteredWidgets}\n columnWidths={columnWidths}\n draggedWidgetId={draggedWidgetId}\n moveWidget={moveWidget}\n />\n )}\n </Box>\n </Flex>\n </Layouts.Content>\n\n {/* Add the DragLayer to handle custom drag previews */}\n <DragLayer\n renderItem={({ type: _type, item }) => {\n if (!isWidgetDragItem(item)) {\n return null;\n }\n\n const widgetElement = getWidgetElement(item.id);\n const maxWidth = `${widgetElement?.clientWidth}px`;\n\n return (\n <DragPreviewWrapper $maxWidth={maxWidth}>\n <WidgetRoot\n uid={item.id as WidgetWithUID['uid']}\n title={item.title || { id: `${item.id}`, defaultMessage: item.id }}\n icon={item.icon}\n link={item.link}\n >\n <WidgetComponent component={item.component} columnWidth={4} />\n </WidgetRoot>\n </DragPreviewWrapper>\n );\n }}\n />\n </Main>\n </Layouts.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HomePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst HomePage = () => {\n const Page = useEnterprise(\n HomePageCE,\n // eslint-disable-next-line import/no-cycle\n async () => (await import('../../../../ee/admin/src/pages/HomePage')).HomePageEE\n );\n\n // block rendering until the EE component is fully loaded\n if (!Page) {\n return null;\n }\n\n return <Page />;\n};\n\nexport { HomePage, HomePageCE };\n"],"names":["getWidgetPermissionsCacheKey","permissions","map","permission","JSON","stringify","action","subject","conditions","properties","sort","join","DragPreviewWrapper","styled","div","props","$maxWidth","theme","colors","primary500","borderRadius","WidgetComponent","component","columnWidth","loadedComponent","setLoadedComponent","React","useState","useEffect","loadComponent","resolvedComponent","Component","_jsx","Widget","Loading","HomePageCE","formatMessage","useIntl","user","useAuth","state","displayName","firstname","username","email","getAllWidgets","useStrapiApp","widgets","getAll","currentEnvironment","useAppInfo","allWidgets","useMemo","hideDeployNowWidgetInProduction","checkUserHasPermissions","data","homepageLayout","isLoading","_isLoadingLayout","useGetHomepageLayoutQuery","useGetCountDocumentsQuery","useGetKeyStatisticsQuery","filteredWidgets","setFilteredWidgets","widgetPermissionStatus","setWidgetPermissionStatus","reduce","acc","widget","uid","length","isAddWidgetModalOpen","setIsAddWidgetModalOpen","findWidget","deleteWidget","addWidget","moveWidget","columnWidths","setColumnWidths","handleWidgetResize","saveLayout","isDraggingWidget","draggedWidgetId","handleDragStart","handleDragEnd","useWidgets","initialPermissionStatus","widgetsWithPermissions","filter","groupedPermissions","key","existingGroup","get","uids","push","set","Map","isMounted","checkWidgetsPermissions","permissionResults","Promise","all","Array","from","values","matchingPermissions","status","prev","next","forEach","allAvailableWidgets","renderableWidgets","widths","homepageWidths","applyHomepageLayout","createDefaultWidgetWidths","widgetLayout","index","rightWidgetId","widgetWidth","getWidgetWidth","rightWidgetWidth","isLastInRow","isLastWidgetInRow","canResize","canResizeBetweenWidgets","Layouts","Root","_jsxs","Main","Page","Title","id","defaultMessage","Header","title","name","subtitle","primaryAction","Button","variant","size","startIcon","Plus","onClick","fullWidth","FreeTrialWelcomeModal","FreeTrialEndedModal","AddWidgetModal","isOpen","onClose","onAddWidget","currentWidgets","availableWidgets","Content","Flex","direction","alignItems","gap","paddingBottom","GuidedTourHomepageOverview","Box","position","WIDGET_DATA_ATTRIBUTES","GRID_CONTAINER","Grid","Fragment","Item","col","xs","WidgetRoot","icon","link","onDragStart","onDragEnd","WidgetResizeHandle","leftWidgetId","leftWidgetWidth","onResize","GapDropZoneManager","DragLayer","renderItem","type","_type","item","isWidgetDragItem","widgetElement","getWidgetElement","maxWidth","clientWidth","HomePage","useEnterprise","HomePageEE"],"mappings":"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"}
|
|
@@ -5,11 +5,9 @@ var React = require('react');
|
|
|
5
5
|
var designSystem = require('@strapi/design-system');
|
|
6
6
|
var icons = require('@strapi/icons');
|
|
7
7
|
var reactIntl = require('react-intl');
|
|
8
|
-
var
|
|
8
|
+
var styledComponents = require('styled-components');
|
|
9
9
|
var HomePage = require('../HomePage.js');
|
|
10
10
|
|
|
11
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
-
|
|
13
11
|
function _interopNamespace(e) {
|
|
14
12
|
if (e && e.__esModule) return e;
|
|
15
13
|
var n = Object.create(null);
|
|
@@ -29,10 +27,9 @@ function _interopNamespace(e) {
|
|
|
29
27
|
}
|
|
30
28
|
|
|
31
29
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
32
|
-
var styled__default = /*#__PURE__*/_interopDefault(styled);
|
|
33
30
|
|
|
34
31
|
// Hide scrollbars in widget previews
|
|
35
|
-
const WidgetWrapper =
|
|
32
|
+
const WidgetWrapper = styledComponents.styled(designSystem.Box)`
|
|
36
33
|
* {
|
|
37
34
|
scrollbar-width: none;
|
|
38
35
|
-ms-overflow-style: none;
|
|
@@ -43,7 +40,7 @@ const WidgetWrapper = styled__default.default(designSystem.Box)`
|
|
|
43
40
|
}
|
|
44
41
|
`;
|
|
45
42
|
// Interactive widget preview container
|
|
46
|
-
const WidgetPreviewContainer =
|
|
43
|
+
const WidgetPreviewContainer = styledComponents.styled(designSystem.Box)`
|
|
47
44
|
&:hover {
|
|
48
45
|
background-color: ${({ theme })=>theme.colors.primary100};
|
|
49
46
|
border-color: ${({ theme })=>theme.colors.primary200};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddWidgetModal.js","sources":["../../../../../../../admin/src/pages/Home/components/AddWidgetModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Modal, Typography } from '@strapi/design-system';\nimport { PuzzlePiece } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { WidgetComponent } from '../HomePage';\n\nimport type { WidgetWithUID } from '../../../core/apis/Widgets';\n\n// Hide scrollbars in widget previews\nconst WidgetWrapper = styled(Box)`\n * {\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n\n *::-webkit-scrollbar {\n display: none;\n }\n`;\n\n// Interactive widget preview container\nconst WidgetPreviewContainer = styled(Box)`\n &:hover {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n }\n\n &:focus-visible {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n outline-offset: 0;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * AddWidgetModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AddWidgetModalProps {\n isOpen: boolean;\n onClose: () => void;\n onAddWidget: (widget: WidgetWithUID) => void;\n currentWidgets: WidgetWithUID[];\n availableWidgets: WidgetWithUID[];\n}\n\ninterface WidgetPreviewProps {\n widget: WidgetWithUID;\n onSelect: () => void;\n}\n\nconst WidgetPreview = ({ widget, onSelect }: WidgetPreviewProps) => {\n const { formatMessage } = useIntl();\n const Icon = widget.icon || PuzzlePiece;\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onSelect();\n }\n };\n\n return (\n <WidgetPreviewContainer\n padding={4}\n background=\"neutral0\"\n borderColor=\"neutral200\"\n hasRadius\n shadow=\"tableShadow\"\n onClick={onSelect}\n onKeyDown={handleKeyDown}\n width={'100%'}\n cursor=\"pointer\"\n tabIndex={0}\n role=\"button\"\n aria-label={formatMessage(\n {\n id: 'HomePage.addWidget.selectWidget',\n defaultMessage: 'Select {widgetName} widget',\n },\n { widgetName: formatMessage(widget.title) }\n )}\n >\n <Flex direction=\"column\" alignItems=\"center\" gap={3}>\n <Flex gap={2} marginRight=\"auto\">\n <Icon fill=\"neutral500\" aria-hidden />\n <Typography textColor=\"neutral500\" variant=\"sigma\" tag=\"h2\">\n {formatMessage(widget.title)}\n </Typography>\n </Flex>\n <WidgetWrapper\n width={'100%'}\n style={{\n pointerEvents: 'none',\n }}\n >\n <WidgetComponent component={widget.component} columnWidth={4} />\n </WidgetWrapper>\n </Flex>\n </WidgetPreviewContainer>\n );\n};\n\nexport const AddWidgetModal = ({\n isOpen,\n onClose,\n onAddWidget,\n currentWidgets,\n availableWidgets,\n}: AddWidgetModalProps) => {\n const { formatMessage } = useIntl();\n\n const currentWidgetUids = React.useMemo(\n () => new Set(currentWidgets.map((widget) => widget.uid)),\n [currentWidgets]\n );\n\n const handleWidgetSelect = (widget: WidgetWithUID) => {\n if (!currentWidgetUids.has(widget.uid)) {\n onAddWidget(widget);\n onClose();\n }\n };\n\n const addableWidgets = availableWidgets.filter((widget) => !currentWidgetUids.has(widget.uid));\n\n return (\n <Modal.Root open={isOpen} onOpenChange={onClose}>\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: 'HomePage.addWidget.title',\n defaultMessage: 'Add Widget',\n })}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Box>\n {addableWidgets.length === 0 ? (\n <Flex direction=\"column\" alignItems=\"center\" gap={4}>\n <PuzzlePiece width=\"4rem\" height=\"4rem\" fill=\"neutral300\" />\n <Typography textColor=\"neutral500\" textAlign=\"center\">\n {formatMessage({\n id: 'HomePage.addWidget.noWidgetsAvailable',\n defaultMessage: 'No widgets available to add',\n })}\n </Typography>\n </Flex>\n ) : (\n <Flex direction=\"column\" gap={3} justifyContent=\"center\">\n {addableWidgets.map((widget) => (\n <WidgetPreview\n key={widget.uid}\n widget={widget}\n onSelect={() => handleWidgetSelect(widget)}\n />\n ))}\n </Flex>\n )}\n </Box>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["WidgetWrapper","styled","Box","WidgetPreviewContainer","theme","colors","primary100","primary200","WidgetPreview","widget","onSelect","formatMessage","useIntl","Icon","icon","PuzzlePiece","handleKeyDown","event","key","preventDefault","_jsx","padding","background","borderColor","hasRadius","shadow","onClick","onKeyDown","width","cursor","tabIndex","role","aria-label","id","defaultMessage","widgetName","title","_jsxs","Flex","direction","alignItems","gap","marginRight","fill","aria-hidden","Typography","textColor","variant","tag","style","pointerEvents","WidgetComponent","component","columnWidth","AddWidgetModal","isOpen","onClose","onAddWidget","currentWidgets","availableWidgets","currentWidgetUids","React","useMemo","Set","map","uid","handleWidgetSelect","has","addableWidgets","filter","Modal","Root","open","onOpenChange","Content","Header","Title","Body","length","height","textAlign","justifyContent","Footer","Button"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA;AACA,MAAMA,aAAAA,GAAgBC,uBAAAA,CAAOC,gBAAAA,CAAI;;;;;;;;;AASjC,CAAC;AAED;AACA,MAAMC,sBAAAA,GAAyBF,uBAAAA,CAAOC,gBAAAA,CAAI;;sBAEpB,EAAE,CAAC,EAAEE,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;kBAC7C,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACE,UAAU,CAAC;;;;sBAIrC,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;kBAC7C,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACE,UAAU,CAAC;;;AAG3D,CAAC;AAmBD,MAAMC,gBAAgB,CAAC,EAAEC,MAAM,EAAEC,QAAQ,EAAsB,GAAA;IAC7D,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAMC,IAAAA,GAAOJ,MAAAA,CAAOK,IAAI,IAAIC,iBAAAA;AAE5B,IAAA,MAAMC,gBAAgB,CAACC,KAAAA,GAAAA;AACrB,QAAA,IAAIA,MAAMC,GAAG,KAAK,WAAWD,KAAAA,CAAMC,GAAG,KAAK,GAAA,EAAK;AAC9CD,YAAAA,KAAAA,CAAME,cAAc,EAAA;AACpBT,YAAAA,QAAAA,EAAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,qBACEU,cAAA,CAACjB,sBAAAA,EAAAA;QACCkB,OAAAA,EAAS,CAAA;QACTC,UAAAA,EAAW,UAAA;QACXC,WAAAA,EAAY,YAAA;QACZC,SAAS,EAAA,IAAA;QACTC,MAAAA,EAAO,aAAA;QACPC,OAAAA,EAAShB,QAAAA;QACTiB,SAAAA,EAAWX,aAAAA;QACXY,KAAAA,EAAO,MAAA;QACPC,MAAAA,EAAO,SAAA;QACPC,QAAAA,EAAU,CAAA;QACVC,IAAAA,EAAK,QAAA;AACLC,QAAAA,YAAAA,EAAYrB,aAAAA,CACV;YACEsB,EAAAA,EAAI,iCAAA;YACJC,cAAAA,EAAgB;SAClB,EACA;YAAEC,UAAAA,EAAYxB,aAAAA,CAAcF,OAAO2B,KAAK;AAAE,SAAA,CAAA;AAG5C,QAAA,QAAA,gBAAAC,eAAA,CAACC,iBAAAA,EAAAA;YAAKC,SAAAA,EAAU,QAAA;YAASC,UAAAA,EAAW,QAAA;YAASC,GAAAA,EAAK,CAAA;;8BAChDJ,eAAA,CAACC,iBAAAA,EAAAA;oBAAKG,GAAAA,EAAK,CAAA;oBAAGC,WAAAA,EAAY,MAAA;;sCACxBtB,cAAA,CAACP,IAAAA,EAAAA;4BAAK8B,IAAAA,EAAK,YAAA;4BAAaC,aAAW,EAAA;;sCACnCxB,cAAA,CAACyB,uBAAAA,EAAAA;4BAAWC,SAAAA,EAAU,YAAA;4BAAaC,OAAAA,EAAQ,OAAA;4BAAQC,GAAAA,EAAI,IAAA;AACpDrC,4BAAAA,QAAAA,EAAAA,aAAAA,CAAcF,OAAO2B,KAAK;;;;8BAG/BhB,cAAA,CAACpB,aAAAA,EAAAA;oBACC4B,KAAAA,EAAO,MAAA;oBACPqB,KAAAA,EAAO;wBACLC,aAAAA,EAAe;AACjB,qBAAA;AAEA,oBAAA,QAAA,gBAAA9B,cAAA,CAAC+B,wBAAAA,EAAAA;AAAgBC,wBAAAA,SAAAA,EAAW3C,OAAO2C,SAAS;wBAAEC,WAAAA,EAAa;;;;;;AAKrE,CAAA;AAEO,MAAMC,cAAAA,GAAiB,CAAC,EAC7BC,MAAM,EACNC,OAAO,EACPC,WAAW,EACXC,cAAc,EACdC,gBAAgB,EACI,GAAA;IACpB,MAAM,EAAEhD,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,MAAMgD,iBAAAA,GAAoBC,gBAAAA,CAAMC,OAAO,CACrC,IAAM,IAAIC,GAAAA,CAAIL,cAAAA,CAAeM,GAAG,CAAC,CAACvD,MAAAA,GAAWA,MAAAA,CAAOwD,GAAG,CAAA,CAAA,EACvD;AAACP,QAAAA;AAAe,KAAA,CAAA;AAGlB,IAAA,MAAMQ,qBAAqB,CAACzD,MAAAA,GAAAA;AAC1B,QAAA,IAAI,CAACmD,iBAAAA,CAAkBO,GAAG,CAAC1D,MAAAA,CAAOwD,GAAG,CAAA,EAAG;YACtCR,WAAAA,CAAYhD,MAAAA,CAAAA;AACZ+C,YAAAA,OAAAA,EAAAA;AACF,QAAA;AACF,IAAA,CAAA;IAEA,MAAMY,cAAAA,GAAiBT,gBAAAA,CAAiBU,MAAM,CAAC,CAAC5D,MAAAA,GAAW,CAACmD,iBAAAA,CAAkBO,GAAG,CAAC1D,MAAAA,CAAOwD,GAAG,CAAA,CAAA;IAE5F,qBACE7C,cAAA,CAACkD,mBAAMC,IAAI,EAAA;QAACC,IAAAA,EAAMjB,MAAAA;QAAQkB,YAAAA,EAAcjB,OAAAA;gCACtCnB,eAAA,CAACiC,mBAAMI,OAAO,EAAA;;AACZ,8BAAAtD,cAAA,CAACkD,mBAAMK,MAAM,EAAA;4CACXvD,cAAA,CAACkD,mBAAMM,KAAK,EAAA;kCACTjE,aAAAA,CAAc;4BACbsB,EAAAA,EAAI,0BAAA;4BACJC,cAAAA,EAAgB;AAClB,yBAAA;;;AAGJ,8BAAAd,cAAA,CAACkD,mBAAMO,IAAI,EAAA;AACT,oBAAA,QAAA,gBAAAzD,cAAA,CAAClB,gBAAAA,EAAAA;kCACEkE,cAAAA,CAAeU,MAAM,KAAK,CAAA,iBACzBzC,eAAA,CAACC,iBAAAA,EAAAA;4BAAKC,SAAAA,EAAU,QAAA;4BAASC,UAAAA,EAAW,QAAA;4BAASC,GAAAA,EAAK,CAAA;;8CAChDrB,cAAA,CAACL,iBAAAA,EAAAA;oCAAYa,KAAAA,EAAM,MAAA;oCAAOmD,MAAAA,EAAO,MAAA;oCAAOpC,IAAAA,EAAK;;8CAC7CvB,cAAA,CAACyB,uBAAAA,EAAAA;oCAAWC,SAAAA,EAAU,YAAA;oCAAakC,SAAAA,EAAU,QAAA;8CAC1CrE,aAAAA,CAAc;wCACbsB,EAAAA,EAAI,uCAAA;wCACJC,cAAAA,EAAgB;AAClB,qCAAA;;;2CAIJd,cAAA,CAACkB,iBAAAA,EAAAA;4BAAKC,SAAAA,EAAU,QAAA;4BAASE,GAAAA,EAAK,CAAA;4BAAGwC,cAAAA,EAAe,QAAA;AAC7Cb,4BAAAA,QAAAA,EAAAA,cAAAA,CAAeJ,GAAG,CAAC,CAACvD,MAAAA,iBACnBW,cAAA,CAACZ,aAAAA,EAAAA;oCAECC,MAAAA,EAAQA,MAAAA;AACRC,oCAAAA,QAAAA,EAAU,IAAMwD,kBAAAA,CAAmBzD,MAAAA;AAF9BA,iCAAAA,EAAAA,MAAAA,CAAOwD,GAAG,CAAA;;;;AAS3B,8BAAA7C,cAAA,CAACkD,mBAAMY,MAAM,EAAA;AACX,oBAAA,QAAA,gBAAA9D,cAAA,CAAC+D,mBAAAA,EAAAA;wBAAOzD,OAAAA,EAAS8B,OAAAA;wBAAST,OAAAA,EAAQ,UAAA;kCAC/BpC,aAAAA,CAAc;4BAAEsB,EAAAA,EAAI,8BAAA;4BAAgCC,cAAAA,EAAgB;AAAS,yBAAA;;;;;;AAM1F;;;;"}
|
|
1
|
+
{"version":3,"file":"AddWidgetModal.js","sources":["../../../../../../../admin/src/pages/Home/components/AddWidgetModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Modal, Typography } from '@strapi/design-system';\nimport { PuzzlePiece } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { WidgetComponent } from '../HomePage';\n\nimport type { WidgetWithUID } from '../../../core/apis/Widgets';\n\n// Hide scrollbars in widget previews\nconst WidgetWrapper = styled(Box)`\n * {\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n\n *::-webkit-scrollbar {\n display: none;\n }\n`;\n\n// Interactive widget preview container\nconst WidgetPreviewContainer = styled(Box)`\n &:hover {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n }\n\n &:focus-visible {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n outline-offset: 0;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * AddWidgetModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AddWidgetModalProps {\n isOpen: boolean;\n onClose: () => void;\n onAddWidget: (widget: WidgetWithUID) => void;\n currentWidgets: WidgetWithUID[];\n availableWidgets: WidgetWithUID[];\n}\n\ninterface WidgetPreviewProps {\n widget: WidgetWithUID;\n onSelect: () => void;\n}\n\nconst WidgetPreview = ({ widget, onSelect }: WidgetPreviewProps) => {\n const { formatMessage } = useIntl();\n const Icon = widget.icon || PuzzlePiece;\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onSelect();\n }\n };\n\n return (\n <WidgetPreviewContainer\n padding={4}\n background=\"neutral0\"\n borderColor=\"neutral200\"\n hasRadius\n shadow=\"tableShadow\"\n onClick={onSelect}\n onKeyDown={handleKeyDown}\n width={'100%'}\n cursor=\"pointer\"\n tabIndex={0}\n role=\"button\"\n aria-label={formatMessage(\n {\n id: 'HomePage.addWidget.selectWidget',\n defaultMessage: 'Select {widgetName} widget',\n },\n { widgetName: formatMessage(widget.title) }\n )}\n >\n <Flex direction=\"column\" alignItems=\"center\" gap={3}>\n <Flex gap={2} marginRight=\"auto\">\n <Icon fill=\"neutral500\" aria-hidden />\n <Typography textColor=\"neutral500\" variant=\"sigma\" tag=\"h2\">\n {formatMessage(widget.title)}\n </Typography>\n </Flex>\n <WidgetWrapper\n width={'100%'}\n style={{\n pointerEvents: 'none',\n }}\n >\n <WidgetComponent component={widget.component} columnWidth={4} />\n </WidgetWrapper>\n </Flex>\n </WidgetPreviewContainer>\n );\n};\n\nexport const AddWidgetModal = ({\n isOpen,\n onClose,\n onAddWidget,\n currentWidgets,\n availableWidgets,\n}: AddWidgetModalProps) => {\n const { formatMessage } = useIntl();\n\n const currentWidgetUids = React.useMemo(\n () => new Set(currentWidgets.map((widget) => widget.uid)),\n [currentWidgets]\n );\n\n const handleWidgetSelect = (widget: WidgetWithUID) => {\n if (!currentWidgetUids.has(widget.uid)) {\n onAddWidget(widget);\n onClose();\n }\n };\n\n const addableWidgets = availableWidgets.filter((widget) => !currentWidgetUids.has(widget.uid));\n\n return (\n <Modal.Root open={isOpen} onOpenChange={onClose}>\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: 'HomePage.addWidget.title',\n defaultMessage: 'Add Widget',\n })}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Box>\n {addableWidgets.length === 0 ? (\n <Flex direction=\"column\" alignItems=\"center\" gap={4}>\n <PuzzlePiece width=\"4rem\" height=\"4rem\" fill=\"neutral300\" />\n <Typography textColor=\"neutral500\" textAlign=\"center\">\n {formatMessage({\n id: 'HomePage.addWidget.noWidgetsAvailable',\n defaultMessage: 'No widgets available to add',\n })}\n </Typography>\n </Flex>\n ) : (\n <Flex direction=\"column\" gap={3} justifyContent=\"center\">\n {addableWidgets.map((widget) => (\n <WidgetPreview\n key={widget.uid}\n widget={widget}\n onSelect={() => handleWidgetSelect(widget)}\n />\n ))}\n </Flex>\n )}\n </Box>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["WidgetWrapper","styled","Box","WidgetPreviewContainer","theme","colors","primary100","primary200","WidgetPreview","widget","onSelect","formatMessage","useIntl","Icon","icon","PuzzlePiece","handleKeyDown","event","key","preventDefault","_jsx","padding","background","borderColor","hasRadius","shadow","onClick","onKeyDown","width","cursor","tabIndex","role","aria-label","id","defaultMessage","widgetName","title","_jsxs","Flex","direction","alignItems","gap","marginRight","fill","aria-hidden","Typography","textColor","variant","tag","style","pointerEvents","WidgetComponent","component","columnWidth","AddWidgetModal","isOpen","onClose","onAddWidget","currentWidgets","availableWidgets","currentWidgetUids","React","useMemo","Set","map","uid","handleWidgetSelect","has","addableWidgets","filter","Modal","Root","open","onOpenChange","Content","Header","Title","Body","length","height","textAlign","justifyContent","Footer","Button"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import * as React from 'react';
|
|
|
3
3
|
import { Modal, Box, Flex, Typography, Button } from '@strapi/design-system';
|
|
4
4
|
import { PuzzlePiece } from '@strapi/icons';
|
|
5
5
|
import { useIntl } from 'react-intl';
|
|
6
|
-
import styled from 'styled-components';
|
|
6
|
+
import { styled } from 'styled-components';
|
|
7
7
|
import { WidgetComponent } from '../HomePage.mjs';
|
|
8
8
|
|
|
9
9
|
// Hide scrollbars in widget previews
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddWidgetModal.mjs","sources":["../../../../../../../admin/src/pages/Home/components/AddWidgetModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Modal, Typography } from '@strapi/design-system';\nimport { PuzzlePiece } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { WidgetComponent } from '../HomePage';\n\nimport type { WidgetWithUID } from '../../../core/apis/Widgets';\n\n// Hide scrollbars in widget previews\nconst WidgetWrapper = styled(Box)`\n * {\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n\n *::-webkit-scrollbar {\n display: none;\n }\n`;\n\n// Interactive widget preview container\nconst WidgetPreviewContainer = styled(Box)`\n &:hover {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n }\n\n &:focus-visible {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n outline-offset: 0;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * AddWidgetModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AddWidgetModalProps {\n isOpen: boolean;\n onClose: () => void;\n onAddWidget: (widget: WidgetWithUID) => void;\n currentWidgets: WidgetWithUID[];\n availableWidgets: WidgetWithUID[];\n}\n\ninterface WidgetPreviewProps {\n widget: WidgetWithUID;\n onSelect: () => void;\n}\n\nconst WidgetPreview = ({ widget, onSelect }: WidgetPreviewProps) => {\n const { formatMessage } = useIntl();\n const Icon = widget.icon || PuzzlePiece;\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onSelect();\n }\n };\n\n return (\n <WidgetPreviewContainer\n padding={4}\n background=\"neutral0\"\n borderColor=\"neutral200\"\n hasRadius\n shadow=\"tableShadow\"\n onClick={onSelect}\n onKeyDown={handleKeyDown}\n width={'100%'}\n cursor=\"pointer\"\n tabIndex={0}\n role=\"button\"\n aria-label={formatMessage(\n {\n id: 'HomePage.addWidget.selectWidget',\n defaultMessage: 'Select {widgetName} widget',\n },\n { widgetName: formatMessage(widget.title) }\n )}\n >\n <Flex direction=\"column\" alignItems=\"center\" gap={3}>\n <Flex gap={2} marginRight=\"auto\">\n <Icon fill=\"neutral500\" aria-hidden />\n <Typography textColor=\"neutral500\" variant=\"sigma\" tag=\"h2\">\n {formatMessage(widget.title)}\n </Typography>\n </Flex>\n <WidgetWrapper\n width={'100%'}\n style={{\n pointerEvents: 'none',\n }}\n >\n <WidgetComponent component={widget.component} columnWidth={4} />\n </WidgetWrapper>\n </Flex>\n </WidgetPreviewContainer>\n );\n};\n\nexport const AddWidgetModal = ({\n isOpen,\n onClose,\n onAddWidget,\n currentWidgets,\n availableWidgets,\n}: AddWidgetModalProps) => {\n const { formatMessage } = useIntl();\n\n const currentWidgetUids = React.useMemo(\n () => new Set(currentWidgets.map((widget) => widget.uid)),\n [currentWidgets]\n );\n\n const handleWidgetSelect = (widget: WidgetWithUID) => {\n if (!currentWidgetUids.has(widget.uid)) {\n onAddWidget(widget);\n onClose();\n }\n };\n\n const addableWidgets = availableWidgets.filter((widget) => !currentWidgetUids.has(widget.uid));\n\n return (\n <Modal.Root open={isOpen} onOpenChange={onClose}>\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: 'HomePage.addWidget.title',\n defaultMessage: 'Add Widget',\n })}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Box>\n {addableWidgets.length === 0 ? (\n <Flex direction=\"column\" alignItems=\"center\" gap={4}>\n <PuzzlePiece width=\"4rem\" height=\"4rem\" fill=\"neutral300\" />\n <Typography textColor=\"neutral500\" textAlign=\"center\">\n {formatMessage({\n id: 'HomePage.addWidget.noWidgetsAvailable',\n defaultMessage: 'No widgets available to add',\n })}\n </Typography>\n </Flex>\n ) : (\n <Flex direction=\"column\" gap={3} justifyContent=\"center\">\n {addableWidgets.map((widget) => (\n <WidgetPreview\n key={widget.uid}\n widget={widget}\n onSelect={() => handleWidgetSelect(widget)}\n />\n ))}\n </Flex>\n )}\n </Box>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["WidgetWrapper","styled","Box","WidgetPreviewContainer","theme","colors","primary100","primary200","WidgetPreview","widget","onSelect","formatMessage","useIntl","Icon","icon","PuzzlePiece","handleKeyDown","event","key","preventDefault","_jsx","padding","background","borderColor","hasRadius","shadow","onClick","onKeyDown","width","cursor","tabIndex","role","aria-label","id","defaultMessage","widgetName","title","_jsxs","Flex","direction","alignItems","gap","marginRight","fill","aria-hidden","Typography","textColor","variant","tag","style","pointerEvents","WidgetComponent","component","columnWidth","AddWidgetModal","isOpen","onClose","onAddWidget","currentWidgets","availableWidgets","currentWidgetUids","React","useMemo","Set","map","uid","handleWidgetSelect","has","addableWidgets","filter","Modal","Root","open","onOpenChange","Content","Header","Title","Body","length","height","textAlign","justifyContent","Footer","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AddWidgetModal.mjs","sources":["../../../../../../../admin/src/pages/Home/components/AddWidgetModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Modal, Typography } from '@strapi/design-system';\nimport { PuzzlePiece } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { WidgetComponent } from '../HomePage';\n\nimport type { WidgetWithUID } from '../../../core/apis/Widgets';\n\n// Hide scrollbars in widget previews\nconst WidgetWrapper = styled(Box)`\n * {\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n\n *::-webkit-scrollbar {\n display: none;\n }\n`;\n\n// Interactive widget preview container\nconst WidgetPreviewContainer = styled(Box)`\n &:hover {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n }\n\n &:focus-visible {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n outline-offset: 0;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * AddWidgetModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AddWidgetModalProps {\n isOpen: boolean;\n onClose: () => void;\n onAddWidget: (widget: WidgetWithUID) => void;\n currentWidgets: WidgetWithUID[];\n availableWidgets: WidgetWithUID[];\n}\n\ninterface WidgetPreviewProps {\n widget: WidgetWithUID;\n onSelect: () => void;\n}\n\nconst WidgetPreview = ({ widget, onSelect }: WidgetPreviewProps) => {\n const { formatMessage } = useIntl();\n const Icon = widget.icon || PuzzlePiece;\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onSelect();\n }\n };\n\n return (\n <WidgetPreviewContainer\n padding={4}\n background=\"neutral0\"\n borderColor=\"neutral200\"\n hasRadius\n shadow=\"tableShadow\"\n onClick={onSelect}\n onKeyDown={handleKeyDown}\n width={'100%'}\n cursor=\"pointer\"\n tabIndex={0}\n role=\"button\"\n aria-label={formatMessage(\n {\n id: 'HomePage.addWidget.selectWidget',\n defaultMessage: 'Select {widgetName} widget',\n },\n { widgetName: formatMessage(widget.title) }\n )}\n >\n <Flex direction=\"column\" alignItems=\"center\" gap={3}>\n <Flex gap={2} marginRight=\"auto\">\n <Icon fill=\"neutral500\" aria-hidden />\n <Typography textColor=\"neutral500\" variant=\"sigma\" tag=\"h2\">\n {formatMessage(widget.title)}\n </Typography>\n </Flex>\n <WidgetWrapper\n width={'100%'}\n style={{\n pointerEvents: 'none',\n }}\n >\n <WidgetComponent component={widget.component} columnWidth={4} />\n </WidgetWrapper>\n </Flex>\n </WidgetPreviewContainer>\n );\n};\n\nexport const AddWidgetModal = ({\n isOpen,\n onClose,\n onAddWidget,\n currentWidgets,\n availableWidgets,\n}: AddWidgetModalProps) => {\n const { formatMessage } = useIntl();\n\n const currentWidgetUids = React.useMemo(\n () => new Set(currentWidgets.map((widget) => widget.uid)),\n [currentWidgets]\n );\n\n const handleWidgetSelect = (widget: WidgetWithUID) => {\n if (!currentWidgetUids.has(widget.uid)) {\n onAddWidget(widget);\n onClose();\n }\n };\n\n const addableWidgets = availableWidgets.filter((widget) => !currentWidgetUids.has(widget.uid));\n\n return (\n <Modal.Root open={isOpen} onOpenChange={onClose}>\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: 'HomePage.addWidget.title',\n defaultMessage: 'Add Widget',\n })}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Box>\n {addableWidgets.length === 0 ? (\n <Flex direction=\"column\" alignItems=\"center\" gap={4}>\n <PuzzlePiece width=\"4rem\" height=\"4rem\" fill=\"neutral300\" />\n <Typography textColor=\"neutral500\" textAlign=\"center\">\n {formatMessage({\n id: 'HomePage.addWidget.noWidgetsAvailable',\n defaultMessage: 'No widgets available to add',\n })}\n </Typography>\n </Flex>\n ) : (\n <Flex direction=\"column\" gap={3} justifyContent=\"center\">\n {addableWidgets.map((widget) => (\n <WidgetPreview\n key={widget.uid}\n widget={widget}\n onSelect={() => handleWidgetSelect(widget)}\n />\n ))}\n </Flex>\n )}\n </Box>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["WidgetWrapper","styled","Box","WidgetPreviewContainer","theme","colors","primary100","primary200","WidgetPreview","widget","onSelect","formatMessage","useIntl","Icon","icon","PuzzlePiece","handleKeyDown","event","key","preventDefault","_jsx","padding","background","borderColor","hasRadius","shadow","onClick","onKeyDown","width","cursor","tabIndex","role","aria-label","id","defaultMessage","widgetName","title","_jsxs","Flex","direction","alignItems","gap","marginRight","fill","aria-hidden","Typography","textColor","variant","tag","style","pointerEvents","WidgetComponent","component","columnWidth","AddWidgetModal","isOpen","onClose","onAddWidget","currentWidgets","availableWidgets","currentWidgetUids","React","useMemo","Set","map","uid","handleWidgetSelect","has","addableWidgets","filter","Modal","Root","open","onOpenChange","Content","Header","Title","Body","length","height","textAlign","justifyContent","Footer","Button"],"mappings":"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"}
|
|
@@ -6,18 +6,14 @@ var designSystem = require('@strapi/design-system');
|
|
|
6
6
|
var icons = require('@strapi/icons');
|
|
7
7
|
var dateFns = require('date-fns');
|
|
8
8
|
var reactIntl = require('react-intl');
|
|
9
|
-
var
|
|
9
|
+
var styledComponents = require('styled-components');
|
|
10
10
|
var useLicenseLimits = require('../../../../../ee/admin/src/hooks/useLicenseLimits.js');
|
|
11
11
|
var usePersistentState = require('../../../hooks/usePersistentState.js');
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
var styled__default = /*#__PURE__*/_interopDefault(styled);
|
|
16
|
-
|
|
17
|
-
const StyledModalContent = styled__default.default(designSystem.Modal.Content)`
|
|
13
|
+
const StyledModalContent = styledComponents.styled(designSystem.Modal.Content)`
|
|
18
14
|
max-width: 51.6rem;
|
|
19
15
|
`;
|
|
20
|
-
const StyledModalBody =
|
|
16
|
+
const StyledModalBody = styledComponents.styled(designSystem.Modal.Body)`
|
|
21
17
|
padding: 0;
|
|
22
18
|
position: relative;
|
|
23
19
|
|
|
@@ -25,7 +21,7 @@ const StyledModalBody = styled__default.default(designSystem.Modal.Body)`
|
|
|
25
21
|
padding: 0;
|
|
26
22
|
}
|
|
27
23
|
`;
|
|
28
|
-
const StyledButton =
|
|
24
|
+
const StyledButton = styledComponents.styled(designSystem.Button)`
|
|
29
25
|
border: 0;
|
|
30
26
|
border-radius: 50%;
|
|
31
27
|
`;
|