@strapi/admin 5.30.0 → 5.30.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin/src/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/components/ContentBox.js.map +1 -1
- package/dist/admin/admin/src/components/ContentBox.mjs.map +1 -1
- package/dist/admin/admin/src/components/DescriptionComponentRenderer.js.map +1 -1
- package/dist/admin/admin/src/components/DescriptionComponentRenderer.mjs.map +1 -1
- package/dist/admin/admin/src/components/Filters.js +1 -1
- package/dist/admin/admin/src/components/Filters.js.map +1 -1
- package/dist/admin/admin/src/components/Filters.mjs +1 -1
- package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
- package/dist/admin/admin/src/components/Form.js +8 -3
- package/dist/admin/admin/src/components/Form.js.map +1 -1
- package/dist/admin/admin/src/components/Form.mjs +8 -3
- package/dist/admin/admin/src/components/Form.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Number.js +1 -1
- package/dist/admin/admin/src/components/FormInputs/Number.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Number.mjs +1 -1
- package/dist/admin/admin/src/components/FormInputs/Number.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Renderer.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Renderer.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Time.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Time.mjs.map +1 -1
- package/dist/admin/admin/src/components/GapDropZone.js.map +1 -1
- package/dist/admin/admin/src/components/GapDropZone.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Overview.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Overview.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs.map +1 -1
- 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/Layouts/GridLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/GridLayout.mjs.map +1 -1
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +8 -4
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs +8 -4
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.js +5 -3
- package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.mjs +5 -3
- package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
- package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
- package/dist/admin/admin/src/components/PageHelpers.mjs.map +1 -1
- package/dist/admin/admin/src/components/PrivateRoute.js.map +1 -1
- package/dist/admin/admin/src/components/PrivateRoute.mjs.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
- package/dist/admin/admin/src/components/ResizeIndicator.js.map +1 -1
- package/dist/admin/admin/src/components/ResizeIndicator.mjs.map +1 -1
- package/dist/admin/admin/src/components/Table.js +1 -1
- package/dist/admin/admin/src/components/Table.js.map +1 -1
- package/dist/admin/admin/src/components/Table.mjs +1 -1
- package/dist/admin/admin/src/components/Table.mjs.map +1 -1
- package/dist/admin/admin/src/components/Widgets.js.map +1 -1
- package/dist/admin/admin/src/components/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/CustomFields.js.map +1 -1
- package/dist/admin/admin/src/core/apis/CustomFields.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/Plugin.js +0 -1
- package/dist/admin/admin/src/core/apis/Plugin.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Plugin.mjs +0 -1
- package/dist/admin/admin/src/core/apis/Plugin.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/rbac.js.map +1 -1
- package/dist/admin/admin/src/core/apis/rbac.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/router.js.map +1 -1
- package/dist/admin/admin/src/core/apis/router.mjs.map +1 -1
- package/dist/admin/admin/src/features/BackButton.js.map +1 -1
- package/dist/admin/admin/src/features/BackButton.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -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/usePersistentState.js.map +1 -1
- package/dist/admin/admin/src/hooks/usePersistentState.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useRBAC.js.map +1 -1
- package/dist/admin/admin/src/hooks/useRBAC.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.js +2 -2
- package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.mjs +2 -2
- package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.js.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.js.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.js.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.js.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.mjs.map +1 -1
- 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 +8 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +9 -2
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +2 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +2 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
- 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.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/utils/files.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/utils/files.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +9 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs +9 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js +9 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs +9 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.mjs.map +1 -1
- 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/CollapsePropertyMatrix.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs.map +1 -1
- 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/ContentTypeCollapses.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/permissions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/permissions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js +2 -0
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.mjs +2 -0
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js +9 -2
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs +9 -2
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +3 -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 +3 -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/MagicLinkCE.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/MagicLinkCE.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/SelectRoles.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/SelectRoles.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.mjs.map +1 -1
- 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/pages/Settings/pages/Webhooks/components/WebhookForm.js +9 -2
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs +9 -2
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.js.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.mjs.map +1 -1
- package/dist/admin/admin/src/services/api.js +2 -1
- package/dist/admin/admin/src/services/api.js.map +1 -1
- package/dist/admin/admin/src/services/api.mjs +2 -1
- package/dist/admin/admin/src/services/api.mjs.map +1 -1
- package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
- package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
- package/dist/admin/admin/src/services/transferTokens.js.map +1 -1
- package/dist/admin/admin/src/services/transferTokens.mjs.map +1 -1
- package/dist/admin/admin/src/services/users.js.map +1 -1
- package/dist/admin/admin/src/services/users.mjs.map +1 -1
- package/dist/admin/admin/src/services/webhooks.js.map +1 -1
- package/dist/admin/admin/src/services/webhooks.mjs.map +1 -1
- package/dist/admin/admin/src/utils/cookies.js.map +1 -1
- package/dist/admin/admin/src/utils/cookies.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getPrefixedId.js.map +1 -1
- package/dist/admin/admin/src/utils/getPrefixedId.mjs.map +1 -1
- package/dist/admin/admin/src/utils/rulesEngine.js.map +1 -1
- package/dist/admin/admin/src/utils/rulesEngine.mjs.map +1 -1
- package/dist/admin/admin/src/utils/urls.js.map +1 -1
- package/dist/admin/admin/src/utils/urls.mjs.map +1 -1
- package/dist/admin/admin/src/utils/users.js.map +1 -1
- package/dist/admin/admin/src/utils/users.mjs.map +1 -1
- package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js.map +1 -1
- package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.mjs.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthResponse.js.map +1 -1
- 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.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js +3 -3
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs +3 -3
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/MagicLinkEE.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/MagicLinkEE.mjs.map +1 -1
- package/dist/admin/ee/admin/src/services/ai.js +14 -1
- package/dist/admin/ee/admin/src/services/ai.js.map +1 -1
- package/dist/admin/ee/admin/src/services/ai.mjs +14 -2
- package/dist/admin/ee/admin/src/services/ai.mjs.map +1 -1
- package/dist/admin/ee/admin/src/services/auditLogs.js.map +1 -1
- package/dist/admin/ee/admin/src/services/auditLogs.mjs.map +1 -1
- package/dist/admin/ee.js +1 -0
- package/dist/admin/ee.js.map +1 -1
- package/dist/admin/ee.mjs +1 -1
- package/dist/admin/src/components/Form.d.ts +1 -1
- package/dist/admin/src/core/store/configure.d.ts +2 -2
- package/dist/admin/src/core/store/hooks.d.ts +2 -2
- package/dist/admin/src/ee.d.ts +1 -1
- package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +4 -4
- package/dist/admin/src/selectors.d.ts +2 -2
- 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 +1 -1
- package/dist/admin/src/services/auth.d.ts +13 -13
- 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 +2 -2
- package/dist/admin/tests/utils.d.ts +1 -1
- package/dist/ee/admin/src/services/ai.d.ts +6 -3
- package/dist/ee/admin/src/services/auditLogs.d.ts +1 -1
- package/dist/ee/server/src/ai/containers/ai.d.ts +11 -0
- package/dist/ee/server/src/ai/containers/ai.d.ts.map +1 -0
- package/dist/ee/server/src/ai/controllers/ai.d.ts +1 -0
- package/dist/ee/server/src/ai/controllers/ai.d.ts.map +1 -1
- package/dist/ee/server/src/ai/routes/ai.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts +1 -0
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/server/ee/server/src/ai/containers/ai.js +18 -0
- package/dist/server/ee/server/src/ai/containers/ai.js.map +1 -0
- package/dist/server/ee/server/src/ai/containers/ai.mjs +16 -0
- package/dist/server/ee/server/src/ai/containers/ai.mjs.map +1 -0
- package/dist/server/ee/server/src/ai/controllers/ai.js +6 -0
- package/dist/server/ee/server/src/ai/controllers/ai.js.map +1 -1
- package/dist/server/ee/server/src/ai/controllers/ai.mjs +6 -0
- package/dist/server/ee/server/src/ai/controllers/ai.mjs.map +1 -1
- package/dist/server/ee/server/src/ai/routes/ai.js +11 -0
- package/dist/server/ee/server/src/ai/routes/ai.js.map +1 -1
- package/dist/server/ee/server/src/ai/routes/ai.mjs +11 -0
- package/dist/server/ee/server/src/ai/routes/ai.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/constants.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/constants.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/utils.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/user.js.map +1 -1
- package/dist/server/ee/server/src/controllers/user.mjs.map +1 -1
- package/dist/server/ee/server/src/index.js +7 -0
- package/dist/server/ee/server/src/index.js.map +1 -1
- package/dist/server/ee/server/src/index.mjs +7 -0
- package/dist/server/ee/server/src/index.mjs.map +1 -1
- package/dist/server/ee/server/src/services/auth.js.map +1 -1
- package/dist/server/ee/server/src/services/auth.mjs.map +1 -1
- package/dist/server/ee/server/src/services/passport/sso.js.map +1 -1
- package/dist/server/ee/server/src/services/passport/sso.mjs.map +1 -1
- package/dist/server/ee/server/src/utils/index.js.map +1 -1
- package/dist/server/ee/server/src/utils/index.mjs.map +1 -1
- package/dist/server/server/src/controllers/transfer/index.js.map +1 -1
- package/dist/server/server/src/controllers/transfer/index.mjs.map +1 -1
- package/dist/server/server/src/controllers/user.js +10 -0
- package/dist/server/server/src/controllers/user.js.map +1 -1
- package/dist/server/server/src/controllers/user.mjs +10 -0
- package/dist/server/server/src/controllers/user.mjs.map +1 -1
- package/dist/server/server/src/domain/action/index.js.map +1 -1
- package/dist/server/server/src/domain/action/index.mjs.map +1 -1
- package/dist/server/server/src/domain/condition/index.js.map +1 -1
- package/dist/server/server/src/domain/condition/index.mjs.map +1 -1
- package/dist/server/server/src/domain/permission/index.js.map +1 -1
- package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.mjs.map +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.js.map +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.mjs.map +1 -1
- package/dist/server/server/src/services/api-token.js.map +1 -1
- package/dist/server/server/src/services/api-token.mjs.map +1 -1
- package/dist/server/server/src/services/auth.js.map +1 -1
- package/dist/server/server/src/services/auth.mjs.map +1 -1
- package/dist/server/server/src/services/content-type.js.map +1 -1
- package/dist/server/server/src/services/content-type.mjs.map +1 -1
- package/dist/server/server/src/services/encryption.js.map +1 -1
- package/dist/server/server/src/services/encryption.mjs.map +1 -1
- package/dist/server/server/src/services/homepage.js.map +1 -1
- package/dist/server/server/src/services/homepage.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/validate.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/validate.mjs.map +1 -1
- package/dist/server/server/src/services/role.js.map +1 -1
- package/dist/server/server/src/services/role.mjs.map +1 -1
- package/dist/server/server/src/services/transfer/token.js.map +1 -1
- package/dist/server/server/src/services/transfer/token.mjs.map +1 -1
- package/dist/server/server/src/services/user.js.map +1 -1
- package/dist/server/server/src/services/user.mjs.map +1 -1
- package/dist/server/server/src/utils/index.js.map +1 -1
- package/dist/server/server/src/utils/index.mjs.map +1 -1
- package/dist/server/server/src/validation/action-provider.js.map +1 -1
- package/dist/server/server/src/validation/action-provider.mjs.map +1 -1
- package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.js.map +1 -1
- package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.mjs.map +1 -1
- package/dist/server/server/src/validation/common-validators.js.map +1 -1
- package/dist/server/server/src/validation/common-validators.mjs.map +1 -1
- package/dist/server/src/controllers/user.d.ts.map +1 -1
- package/dist/shared/contracts/ai.d.ts +16 -0
- package/dist/shared/contracts/ai.d.ts.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResizeIndicator.mjs","sources":["../../../../../admin/src/components/ResizeIndicator.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport {\n isValidResize,\n calculateTargetWidths,\n shouldTriggerResize,\n calculateResizeHandlePosition,\n calculateRowBounds,\n} from '../utils/resizeHandlers';\nimport { getWidgetElement, getWidgetGridContainer } from '../utils/widgetLayout';\n\nimport type { WidgetWithUID } from '../core/apis/Widgets';\n\nconst INDICATOR_SIZE = 20;\n\ninterface ResizeIndicatorProps {\n isVisible: boolean;\n position: { left: number; top: number; height: number };\n currentLeftWidth: number;\n currentRightWidth: number;\n totalColumns?: number;\n rowPosition?: { left: number; top: number; width: number; height: number } | null;\n}\n\nconst IndicatorContainer = styled(Box)<{ $isVisible: boolean }>`\n position: absolute;\n z-index: 1;\n pointer-events: none;\n opacity: ${({ $isVisible }) => ($isVisible ? 1 : 0)};\n transition: opacity 0.2s ease-in-out;\n background: transparent;\n height: ${INDICATOR_SIZE}px;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst DotContainer = styled(Box)<{ $position: number }>`\n position: absolute;\n top: 50%;\n left: ${({ $position }) => $position}%;\n transform: translate(-50%, -50%);\n`;\n\nconst Dot = styled(Box)<{ $isActive: boolean; $isCurrent: boolean }>`\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: ${({ $isActive, $isCurrent, theme }) => {\n if ($isCurrent) return theme.colors.primary600;\n if ($isActive) return theme.colors.primary500;\n return theme.colors.neutral300;\n }};\n transition: all 0.2s ease-in-out;\n box-shadow: ${({ $isCurrent, theme }) =>\n $isCurrent ? `0 0 0 3px ${theme.colors.primary100}` : 'none'};\n transform: ${({ $isCurrent }) => ($isCurrent ? 'scale(1.2)' : 'scale(1)')};\n`;\n\nconst calculateGapAdjustment = (rowWidth: number, leftColumns: number): number => {\n const dotWidth = 6;\n const gapAdjustmentPixels = dotWidth / 2; // Half dot width to center on boundary\n const gapAdjustmentPercent = (gapAdjustmentPixels / rowWidth) * 100;\n\n // Different adjustments for different positions\n switch (leftColumns) {\n case 4:\n return -gapAdjustmentPercent; // Left dot\n case 8:\n return gapAdjustmentPercent; // Right dot\n default: // Center dot\n return 0;\n }\n};\n\nconst ResizeIndicator = ({\n isVisible,\n position,\n currentLeftWidth,\n currentRightWidth,\n totalColumns = 12,\n rowPosition,\n}: ResizeIndicatorProps) => {\n // Calculate available resize positions accounting for grid gaps\n const availablePositions = React.useMemo(() => {\n const rowWidth = rowPosition?.width || 800;\n\n return [4, 6, 8].map((left) => {\n const right = totalColumns - left;\n const basePosition = (left / totalColumns) * 100;\n const gapAdjustment = calculateGapAdjustment(rowWidth, left);\n const positionPercent = basePosition + gapAdjustment;\n\n return { left, right, positionPercent };\n });\n }, [totalColumns, rowPosition?.width]);\n\n // Find the current position index\n const currentPositionIndex = React.useMemo(() => {\n return availablePositions.findIndex(\n (pos) => pos.left === currentLeftWidth && pos.right === currentRightWidth\n );\n }, [availablePositions, currentLeftWidth, currentRightWidth]);\n\n if (!isVisible) {\n return null;\n }\n\n // Calculate positioning - indicator always spans the full row width\n const indicatorTop = rowPosition\n ? rowPosition.top - INDICATOR_SIZE\n : Math.max(10, position.top + position.height / 2 - 40);\n const isCurrent = (index: number) => index === currentPositionIndex;\n const isActive = (index: number) => Math.abs(index - currentPositionIndex) <= 1;\n\n return (\n <IndicatorContainer\n $isVisible={isVisible}\n style={{\n left: rowPosition ? `${rowPosition.left}px` : `${position.left + 10}px`,\n top: `${indicatorTop}px`,\n width: rowPosition ? `${rowPosition.width}px` : 'auto',\n }}\n >\n {availablePositions.map((pos, index) => {\n return (\n <DotContainer key={`${pos.left}-${pos.right}`} $position={pos.positionPercent}>\n <Dot $isActive={isActive(index)} $isCurrent={isCurrent(index)} />\n </DotContainer>\n );\n })}\n </IndicatorContainer>\n );\n};\nconst ResizeHandleContainer = styled(Box)<{ $isDragging?: boolean }>`\n position: absolute;\n top: 0;\n bottom: 0;\n width: ${INDICATOR_SIZE}px;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0.8;\n transition: opacity 0.2s ease-in-out;\n cursor: col-resize;\n background-color: ${({ $isDragging }) => ($isDragging ? 'rgba(0, 0, 0, 0.1)' : 'transparent')};\n`;\n\nconst ResizeHandleBar = styled(Box)<{ $isDragging?: boolean }>`\n width: 2px;\n height: 100%;\n background-color: ${({ theme }) => theme.colors.primary500};\n border-radius: 1px;\n opacity: 0;\n transition: opacity 0.2s ease-in-out;\n\n ${ResizeHandleContainer}:hover & {\n opacity: 0.8;\n }\n\n ${({ $isDragging }) => $isDragging && `opacity: 0.8;`}\n`;\n\ninterface WidgetResizeHandleProps {\n leftWidgetId: string;\n rightWidgetId: string;\n leftWidgetWidth: number;\n rightWidgetWidth: number;\n onResize: (\n leftWidgetId: string,\n rightWidgetId: string,\n newLeftWidth: number,\n newRightWidth: number\n ) => void;\n saveLayout: () => void;\n filteredWidgets?: WidgetWithUID[];\n}\n\nexport const WidgetResizeHandle = ({\n leftWidgetId,\n rightWidgetId,\n leftWidgetWidth,\n rightWidgetWidth,\n onResize,\n saveLayout,\n}: WidgetResizeHandleProps) => {\n const [state, setState] = React.useState({\n isDragging: false,\n startX: 0,\n startLeftWidth: 0,\n startRightWidth: 0,\n position: { left: 0, top: 0, height: 0 },\n lastResizeValues: { leftWidth: 0, rightWidth: 0 },\n currentResizeValues: { leftWidth: leftWidgetWidth, rightWidth: rightWidgetWidth },\n rowPosition: null as { left: number; top: number; width: number; height: number } | null,\n });\n\n const throttleRef = React.useRef<NodeJS.Timeout | null>(null);\n\n const handleResize = React.useCallback(\n (deltaColumns: number) => {\n // Only resize if there's significant movement (dead zone)\n if (Math.abs(deltaColumns) < 0.25) {\n return;\n }\n\n // Calculate target widths\n const { targetLeftWidth, targetRightWidth } = calculateTargetWidths(\n deltaColumns,\n state.startLeftWidth,\n state.startRightWidth\n );\n\n // Validate the resize\n if (!isValidResize(targetLeftWidth, targetRightWidth)) {\n return;\n }\n\n // Update current resize values for the indicator\n setState((prev) => ({\n ...prev,\n currentResizeValues: { leftWidth: targetLeftWidth, rightWidth: targetRightWidth },\n }));\n\n // Only trigger resize if values have changed\n if (shouldTriggerResize(targetLeftWidth, targetRightWidth, state.lastResizeValues)) {\n setState((prev) => ({\n ...prev,\n lastResizeValues: { leftWidth: targetLeftWidth, rightWidth: targetRightWidth },\n }));\n onResize(leftWidgetId, rightWidgetId, targetLeftWidth, targetRightWidth);\n }\n },\n [\n leftWidgetId,\n rightWidgetId,\n onResize,\n state.startLeftWidth,\n state.startRightWidth,\n state.lastResizeValues,\n ]\n );\n\n const handlePointerMove = React.useCallback(\n (e: PointerEvent) => {\n if (!state.isDragging) return;\n\n // Clear any existing throttle timeout\n if (throttleRef.current) {\n clearTimeout(throttleRef.current);\n }\n\n // Throttle the resize calls to prevent excessive updates\n throttleRef.current = setTimeout(() => {\n const deltaX = e.clientX - state.startX;\n const threshold = 120; // Pixels per column unit\n const deltaColumns = Math.round(deltaX / threshold);\n\n handleResize(deltaColumns);\n }, 0);\n },\n [state.isDragging, state.startX, handleResize]\n );\n\n // Handle pointer up to end drag\n const handlePointerUp = React.useCallback(() => {\n // Clear any pending throttle timeout\n if (throttleRef.current) {\n clearTimeout(throttleRef.current);\n throttleRef.current = null;\n }\n\n // Save the layout\n saveLayout();\n\n // Reset last resize values and stop dragging\n setState((prev) => ({\n ...prev,\n lastResizeValues: { leftWidth: 0, rightWidth: 0 },\n currentResizeValues: { leftWidth: leftWidgetWidth, rightWidth: rightWidgetWidth },\n isDragging: false,\n }));\n }, [leftWidgetWidth, rightWidgetWidth, saveLayout]);\n\n // Handle pointer down to start drag\n const handlePointerDown = React.useCallback(\n (e: React.PointerEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n setState((prev) => ({\n ...prev,\n isDragging: true,\n startX: e.clientX,\n startLeftWidth: leftWidgetWidth,\n startRightWidth: rightWidgetWidth,\n }));\n },\n [leftWidgetWidth, rightWidgetWidth]\n );\n\n // Set up drag event listeners\n React.useEffect(() => {\n if (state.isDragging) {\n document.addEventListener('pointermove', handlePointerMove);\n document.addEventListener('pointerup', handlePointerUp);\n\n return () => {\n document.removeEventListener('pointermove', handlePointerMove);\n document.removeEventListener('pointerup', handlePointerUp);\n };\n }\n }, [state.isDragging, handlePointerMove, handlePointerUp]);\n\n // Set up resize observer for position updates - watching widgets and grid container\n React.useLayoutEffect(() => {\n const leftElement = getWidgetElement(leftWidgetId);\n const rightElement = getWidgetElement(rightWidgetId);\n const containerElement = getWidgetGridContainer();\n\n const updatePosition = () => {\n const position = calculateResizeHandlePosition(leftElement, rightElement, containerElement);\n const rowPosition = calculateRowBounds(leftElement, rightElement, containerElement);\n\n setState((prev) => ({\n ...prev,\n position,\n rowPosition,\n }));\n };\n\n // Create ResizeObserver to watch widgets and grid container\n const resizeObserver = new ResizeObserver(updatePosition);\n\n // Observe all relevant elements\n if (leftElement) resizeObserver.observe(leftElement);\n if (rightElement) resizeObserver.observe(rightElement);\n if (containerElement) resizeObserver.observe(containerElement);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [leftWidgetId, rightWidgetId]);\n\n // Cleanup throttle timeout on unmount\n React.useEffect(() => {\n return () => {\n if (throttleRef.current) {\n clearTimeout(throttleRef.current);\n }\n };\n }, []);\n\n return (\n <>\n <ResizeHandleContainer\n onPointerDown={handlePointerDown}\n style={{\n transform: `translate(${state.position.left}px, ${state.position.top}px)`,\n height: `${state.position.height}px`,\n }}\n >\n <ResizeHandleBar $isDragging={state.isDragging} />\n </ResizeHandleContainer>\n\n <ResizeIndicator\n isVisible={state.isDragging}\n position={state.position}\n currentLeftWidth={state.currentResizeValues.leftWidth}\n currentRightWidth={state.currentResizeValues.rightWidth}\n rowPosition={state.rowPosition}\n />\n </>\n );\n};\n"],"names":["INDICATOR_SIZE","IndicatorContainer","styled","Box","$isVisible","DotContainer","$position","Dot","$isActive","$isCurrent","theme","colors","primary600","primary500","neutral300","primary100","calculateGapAdjustment","rowWidth","leftColumns","dotWidth","gapAdjustmentPixels","gapAdjustmentPercent","ResizeIndicator","isVisible","position","currentLeftWidth","currentRightWidth","totalColumns","rowPosition","availablePositions","React","useMemo","width","map","left","right","basePosition","gapAdjustment","positionPercent","currentPositionIndex","findIndex","pos","indicatorTop","top","Math","max","height","isCurrent","index","isActive","abs","_jsx","style","ResizeHandleContainer","$isDragging","ResizeHandleBar","WidgetResizeHandle","leftWidgetId","rightWidgetId","leftWidgetWidth","rightWidgetWidth","onResize","saveLayout","state","setState","useState","isDragging","startX","startLeftWidth","startRightWidth","lastResizeValues","leftWidth","rightWidth","currentResizeValues","throttleRef","useRef","handleResize","useCallback","deltaColumns","targetLeftWidth","targetRightWidth","calculateTargetWidths","isValidResize","prev","shouldTriggerResize","handlePointerMove","e","current","clearTimeout","setTimeout","deltaX","clientX","threshold","round","handlePointerUp","handlePointerDown","preventDefault","stopPropagation","useEffect","document","addEventListener","removeEventListener","useLayoutEffect","leftElement","getWidgetElement","rightElement","containerElement","getWidgetGridContainer","updatePosition","calculateResizeHandlePosition","calculateRowBounds","resizeObserver","ResizeObserver","observe","disconnect","_jsxs","_Fragment","onPointerDown","transform"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ResizeIndicator.mjs","sources":["../../../../../admin/src/components/ResizeIndicator.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport {\n isValidResize,\n calculateTargetWidths,\n shouldTriggerResize,\n calculateResizeHandlePosition,\n calculateRowBounds,\n} from '../utils/resizeHandlers';\nimport { getWidgetElement, getWidgetGridContainer } from '../utils/widgetLayout';\n\nimport type { WidgetWithUID } from '../core/apis/Widgets';\n\nconst INDICATOR_SIZE = 20;\n\ninterface ResizeIndicatorProps {\n isVisible: boolean;\n position: { left: number; top: number; height: number };\n currentLeftWidth: number;\n currentRightWidth: number;\n totalColumns?: number;\n rowPosition?: { left: number; top: number; width: number; height: number } | null;\n}\n\nconst IndicatorContainer = styled(Box)<{ $isVisible: boolean }>`\n position: absolute;\n z-index: 1;\n pointer-events: none;\n opacity: ${({ $isVisible }) => ($isVisible ? 1 : 0)};\n transition: opacity 0.2s ease-in-out;\n background: transparent;\n height: ${INDICATOR_SIZE}px;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst DotContainer = styled(Box)<{ $position: number }>`\n position: absolute;\n top: 50%;\n left: ${({ $position }) => $position}%;\n transform: translate(-50%, -50%);\n`;\n\nconst Dot = styled(Box)<{ $isActive: boolean; $isCurrent: boolean }>`\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: ${({ $isActive, $isCurrent, theme }) => {\n if ($isCurrent) return theme.colors.primary600;\n if ($isActive) return theme.colors.primary500;\n return theme.colors.neutral300;\n }};\n transition: all 0.2s ease-in-out;\n box-shadow: ${({ $isCurrent, theme }) =>\n $isCurrent ? `0 0 0 3px ${theme.colors.primary100}` : 'none'};\n transform: ${({ $isCurrent }) => ($isCurrent ? 'scale(1.2)' : 'scale(1)')};\n`;\n\nconst calculateGapAdjustment = (rowWidth: number, leftColumns: number): number => {\n const dotWidth = 6;\n const gapAdjustmentPixels = dotWidth / 2; // Half dot width to center on boundary\n const gapAdjustmentPercent = (gapAdjustmentPixels / rowWidth) * 100;\n\n // Different adjustments for different positions\n switch (leftColumns) {\n case 4:\n return -gapAdjustmentPercent; // Left dot\n case 8:\n return gapAdjustmentPercent; // Right dot\n default: // Center dot\n return 0;\n }\n};\n\nconst ResizeIndicator = ({\n isVisible,\n position,\n currentLeftWidth,\n currentRightWidth,\n totalColumns = 12,\n rowPosition,\n}: ResizeIndicatorProps) => {\n // Calculate available resize positions accounting for grid gaps\n const availablePositions = React.useMemo(() => {\n const rowWidth = rowPosition?.width || 800;\n\n return [4, 6, 8].map((left) => {\n const right = totalColumns - left;\n const basePosition = (left / totalColumns) * 100;\n const gapAdjustment = calculateGapAdjustment(rowWidth, left);\n const positionPercent = basePosition + gapAdjustment;\n\n return { left, right, positionPercent };\n });\n }, [totalColumns, rowPosition?.width]);\n\n // Find the current position index\n const currentPositionIndex = React.useMemo(() => {\n return availablePositions.findIndex(\n (pos) => pos.left === currentLeftWidth && pos.right === currentRightWidth\n );\n }, [availablePositions, currentLeftWidth, currentRightWidth]);\n\n if (!isVisible) {\n return null;\n }\n\n // Calculate positioning - indicator always spans the full row width\n const indicatorTop = rowPosition\n ? rowPosition.top - INDICATOR_SIZE\n : Math.max(10, position.top + position.height / 2 - 40);\n const isCurrent = (index: number) => index === currentPositionIndex;\n const isActive = (index: number) => Math.abs(index - currentPositionIndex) <= 1;\n\n return (\n <IndicatorContainer\n $isVisible={isVisible}\n style={{\n left: rowPosition ? `${rowPosition.left}px` : `${position.left + 10}px`,\n top: `${indicatorTop}px`,\n width: rowPosition ? `${rowPosition.width}px` : 'auto',\n }}\n >\n {availablePositions.map((pos, index) => {\n return (\n <DotContainer key={`${pos.left}-${pos.right}`} $position={pos.positionPercent}>\n <Dot $isActive={isActive(index)} $isCurrent={isCurrent(index)} />\n </DotContainer>\n );\n })}\n </IndicatorContainer>\n );\n};\nconst ResizeHandleContainer = styled(Box)<{ $isDragging?: boolean }>`\n position: absolute;\n top: 0;\n bottom: 0;\n width: ${INDICATOR_SIZE}px;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0.8;\n transition: opacity 0.2s ease-in-out;\n cursor: col-resize;\n background-color: ${({ $isDragging }) => ($isDragging ? 'rgba(0, 0, 0, 0.1)' : 'transparent')};\n`;\n\nconst ResizeHandleBar = styled(Box)<{ $isDragging?: boolean }>`\n width: 2px;\n height: 100%;\n background-color: ${({ theme }) => theme.colors.primary500};\n border-radius: 1px;\n opacity: 0;\n transition: opacity 0.2s ease-in-out;\n\n ${ResizeHandleContainer}:hover & {\n opacity: 0.8;\n }\n\n ${({ $isDragging }) => $isDragging && `opacity: 0.8;`}\n`;\n\ninterface WidgetResizeHandleProps {\n leftWidgetId: string;\n rightWidgetId: string;\n leftWidgetWidth: number;\n rightWidgetWidth: number;\n onResize: (\n leftWidgetId: string,\n rightWidgetId: string,\n newLeftWidth: number,\n newRightWidth: number\n ) => void;\n saveLayout: () => void;\n filteredWidgets?: WidgetWithUID[];\n}\n\nexport const WidgetResizeHandle = ({\n leftWidgetId,\n rightWidgetId,\n leftWidgetWidth,\n rightWidgetWidth,\n onResize,\n saveLayout,\n}: WidgetResizeHandleProps) => {\n const [state, setState] = React.useState({\n isDragging: false,\n startX: 0,\n startLeftWidth: 0,\n startRightWidth: 0,\n position: { left: 0, top: 0, height: 0 },\n lastResizeValues: { leftWidth: 0, rightWidth: 0 },\n currentResizeValues: { leftWidth: leftWidgetWidth, rightWidth: rightWidgetWidth },\n rowPosition: null as { left: number; top: number; width: number; height: number } | null,\n });\n\n const throttleRef = React.useRef<NodeJS.Timeout | null>(null);\n\n const handleResize = React.useCallback(\n (deltaColumns: number) => {\n // Only resize if there's significant movement (dead zone)\n if (Math.abs(deltaColumns) < 0.25) {\n return;\n }\n\n // Calculate target widths\n const { targetLeftWidth, targetRightWidth } = calculateTargetWidths(\n deltaColumns,\n state.startLeftWidth,\n state.startRightWidth\n );\n\n // Validate the resize\n if (!isValidResize(targetLeftWidth, targetRightWidth)) {\n return;\n }\n\n // Update current resize values for the indicator\n setState((prev) => ({\n ...prev,\n currentResizeValues: { leftWidth: targetLeftWidth, rightWidth: targetRightWidth },\n }));\n\n // Only trigger resize if values have changed\n if (shouldTriggerResize(targetLeftWidth, targetRightWidth, state.lastResizeValues)) {\n setState((prev) => ({\n ...prev,\n lastResizeValues: { leftWidth: targetLeftWidth, rightWidth: targetRightWidth },\n }));\n onResize(leftWidgetId, rightWidgetId, targetLeftWidth, targetRightWidth);\n }\n },\n [\n leftWidgetId,\n rightWidgetId,\n onResize,\n state.startLeftWidth,\n state.startRightWidth,\n state.lastResizeValues,\n ]\n );\n\n const handlePointerMove = React.useCallback(\n (e: PointerEvent) => {\n if (!state.isDragging) return;\n\n // Clear any existing throttle timeout\n if (throttleRef.current) {\n clearTimeout(throttleRef.current);\n }\n\n // Throttle the resize calls to prevent excessive updates\n throttleRef.current = setTimeout(() => {\n const deltaX = e.clientX - state.startX;\n const threshold = 120; // Pixels per column unit\n const deltaColumns = Math.round(deltaX / threshold);\n\n handleResize(deltaColumns);\n }, 0);\n },\n [state.isDragging, state.startX, handleResize]\n );\n\n // Handle pointer up to end drag\n const handlePointerUp = React.useCallback(() => {\n // Clear any pending throttle timeout\n if (throttleRef.current) {\n clearTimeout(throttleRef.current);\n throttleRef.current = null;\n }\n\n // Save the layout\n saveLayout();\n\n // Reset last resize values and stop dragging\n setState((prev) => ({\n ...prev,\n lastResizeValues: { leftWidth: 0, rightWidth: 0 },\n currentResizeValues: { leftWidth: leftWidgetWidth, rightWidth: rightWidgetWidth },\n isDragging: false,\n }));\n }, [leftWidgetWidth, rightWidgetWidth, saveLayout]);\n\n // Handle pointer down to start drag\n const handlePointerDown = React.useCallback(\n (e: React.PointerEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n setState((prev) => ({\n ...prev,\n isDragging: true,\n startX: e.clientX,\n startLeftWidth: leftWidgetWidth,\n startRightWidth: rightWidgetWidth,\n }));\n },\n [leftWidgetWidth, rightWidgetWidth]\n );\n\n // Set up drag event listeners\n React.useEffect(() => {\n if (state.isDragging) {\n document.addEventListener('pointermove', handlePointerMove);\n document.addEventListener('pointerup', handlePointerUp);\n\n return () => {\n document.removeEventListener('pointermove', handlePointerMove);\n document.removeEventListener('pointerup', handlePointerUp);\n };\n }\n }, [state.isDragging, handlePointerMove, handlePointerUp]);\n\n // Set up resize observer for position updates - watching widgets and grid container\n React.useLayoutEffect(() => {\n const leftElement = getWidgetElement(leftWidgetId);\n const rightElement = getWidgetElement(rightWidgetId);\n const containerElement = getWidgetGridContainer();\n\n const updatePosition = () => {\n const position = calculateResizeHandlePosition(leftElement, rightElement, containerElement);\n const rowPosition = calculateRowBounds(leftElement, rightElement, containerElement);\n\n setState((prev) => ({\n ...prev,\n position,\n rowPosition,\n }));\n };\n\n // Create ResizeObserver to watch widgets and grid container\n const resizeObserver = new ResizeObserver(updatePosition);\n\n // Observe all relevant elements\n if (leftElement) resizeObserver.observe(leftElement);\n if (rightElement) resizeObserver.observe(rightElement);\n if (containerElement) resizeObserver.observe(containerElement);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [leftWidgetId, rightWidgetId]);\n\n // Cleanup throttle timeout on unmount\n React.useEffect(() => {\n return () => {\n if (throttleRef.current) {\n clearTimeout(throttleRef.current);\n }\n };\n }, []);\n\n return (\n <>\n <ResizeHandleContainer\n onPointerDown={handlePointerDown}\n style={{\n transform: `translate(${state.position.left}px, ${state.position.top}px)`,\n height: `${state.position.height}px`,\n }}\n >\n <ResizeHandleBar $isDragging={state.isDragging} />\n </ResizeHandleContainer>\n\n <ResizeIndicator\n isVisible={state.isDragging}\n position={state.position}\n currentLeftWidth={state.currentResizeValues.leftWidth}\n currentRightWidth={state.currentResizeValues.rightWidth}\n rowPosition={state.rowPosition}\n />\n </>\n );\n};\n"],"names":["INDICATOR_SIZE","IndicatorContainer","styled","Box","$isVisible","DotContainer","$position","Dot","$isActive","$isCurrent","theme","colors","primary600","primary500","neutral300","primary100","calculateGapAdjustment","rowWidth","leftColumns","dotWidth","gapAdjustmentPixels","gapAdjustmentPercent","ResizeIndicator","isVisible","position","currentLeftWidth","currentRightWidth","totalColumns","rowPosition","availablePositions","React","useMemo","width","map","left","right","basePosition","gapAdjustment","positionPercent","currentPositionIndex","findIndex","pos","indicatorTop","top","Math","max","height","isCurrent","index","isActive","abs","_jsx","style","ResizeHandleContainer","$isDragging","ResizeHandleBar","WidgetResizeHandle","leftWidgetId","rightWidgetId","leftWidgetWidth","rightWidgetWidth","onResize","saveLayout","state","setState","useState","isDragging","startX","startLeftWidth","startRightWidth","lastResizeValues","leftWidth","rightWidth","currentResizeValues","throttleRef","useRef","handleResize","useCallback","deltaColumns","targetLeftWidth","targetRightWidth","calculateTargetWidths","isValidResize","prev","shouldTriggerResize","handlePointerMove","e","current","clearTimeout","setTimeout","deltaX","clientX","threshold","round","handlePointerUp","handlePointerDown","preventDefault","stopPropagation","useEffect","document","addEventListener","removeEventListener","useLayoutEffect","leftElement","getWidgetElement","rightElement","containerElement","getWidgetGridContainer","updatePosition","calculateResizeHandlePosition","calculateRowBounds","resizeObserver","ResizeObserver","observe","disconnect","_jsxs","_Fragment","onPointerDown","transform"],"mappings":"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"}
|
|
@@ -113,7 +113,7 @@ const Root = ({ children, defaultSelectedRows, footer, headers = [], isLoading =
|
|
|
113
113
|
if (sortable) {
|
|
114
114
|
setQuery({
|
|
115
115
|
sort: `${name}:${isSorted && sortOrder === 'ASC' ? 'DESC' : 'ASC'}`
|
|
116
|
-
});
|
|
116
|
+
}, 'push', true);
|
|
117
117
|
}
|
|
118
118
|
};
|
|
119
119
|
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Th, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.js","sources":["../../../../../admin/src/components/Table.tsx"],"sourcesContent":["/**\n * TODO: honestly, half of this stuff should come straight from\n * the design-system and then we can just wrap round the bits for\n * the i18n & router interactions.\n *\n * So we'll do that in v2 of the DS.\n */\n\nimport * as React from 'react';\n\nimport {\n Flex,\n Typography,\n Th,\n Tbody,\n Td,\n Tooltip,\n IconButton,\n Thead,\n Tr,\n RawTrProps,\n Checkbox,\n Loader,\n Table as DSTable,\n EmptyStateLayout,\n EmptyStateLayoutProps,\n TableProps,\n RawTdProps,\n} from '@strapi/design-system';\nimport { CaretDown } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useControllableState } from '../hooks/useControllableState';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseRow {\n id: string | number;\n [key: string]: any;\n}\n\ninterface TableHeader<TData = object, THeader = object> {\n /**\n * Typically used by plugins to render a custom cell\n */\n cellFormatter?: (data: TData, header: Omit<THeader, 'cellFormatter'>) => React.ReactNode;\n label: string;\n name: string;\n searchable?: boolean;\n sortable?: boolean;\n}\n\ninterface TableContextValue<TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>\n extends Pick<TableProps, 'footer'> {\n colCount: number;\n hasHeaderCheckbox: boolean;\n headers: THeader[];\n isLoading: boolean;\n rowCount: number;\n rows: TRow[];\n setHasHeaderCheckbox: (value: boolean) => void;\n selectedRows: TRow[];\n selectRow: (row: TRow | TRow[]) => void;\n}\n\nconst [TableProvider, useTable] = createContext<TableContextValue<any, any>>('Table');\n\ninterface RootProps<TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>\n extends Partial<\n Pick<\n TableContextValue<TRow, THeader>,\n 'footer' | 'headers' | 'isLoading' | 'rows' | 'selectedRows'\n >\n > {\n children?: React.ReactNode;\n defaultSelectedRows?: TRow[];\n onSelectedRowsChange?: (selectedRows: TRow[]) => void;\n}\n\nconst Root = <TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>({\n children,\n defaultSelectedRows,\n footer,\n headers = [],\n isLoading = false,\n onSelectedRowsChange,\n rows = [],\n selectedRows: selectedRowsProps,\n}: RootProps<TRow, THeader>) => {\n const [selectedRows = [], setSelectedRows] = useControllableState({\n prop: selectedRowsProps,\n defaultProp: defaultSelectedRows,\n onChange: onSelectedRowsChange,\n });\n const [hasHeaderCheckbox, setHasHeaderCheckbox] = React.useState(false);\n\n const rowCount = rows.length + 1;\n const colCount = hasHeaderCheckbox ? headers.length + 1 : headers.length;\n\n const selectRow: TableContextValue<TRow, THeader>['selectRow'] = (row) => {\n if (Array.isArray(row)) {\n setSelectedRows(row);\n } else {\n setSelectedRows((prev = []) => {\n const currentRowIndex = prev.findIndex((r) => r.id === row.id);\n if (currentRowIndex > -1) {\n return prev.toSpliced(currentRowIndex, 1);\n }\n\n return [...prev, row];\n });\n }\n };\n\n return (\n <TableProvider\n colCount={colCount}\n hasHeaderCheckbox={hasHeaderCheckbox}\n setHasHeaderCheckbox={setHasHeaderCheckbox}\n footer={footer}\n headers={headers}\n isLoading={isLoading}\n rowCount={rowCount}\n rows={rows}\n selectedRows={selectedRows}\n selectRow={selectRow}\n >\n {children}\n </TableProvider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Content\n * -----------------------------------------------------------------------------------------------*/\n\nconst Content = ({ children }: Table.ContentProps) => {\n const rowCount = useTable('Content', (state) => state.rowCount);\n const colCount = useTable('Content', (state) => state.colCount);\n const footer = useTable('Content', (state) => state.footer);\n\n return (\n <DSTable rowCount={rowCount} colCount={colCount} footer={footer}>\n {children}\n </DSTable>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Head\n * -----------------------------------------------------------------------------------------------*/\n\nconst Head = ({ children }: Table.HeadProps) => {\n return (\n <Thead>\n <Tr>{children}</Tr>\n </Thead>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderCell\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @description A header cell in your table, internally will set the query params for sorting to\n * be passed to your data-fetching function.\n */\nconst HeaderCell = <TData, THead>({ name, label, sortable }: TableHeader<TData, THead>) => {\n const [{ query }, setQuery] = useQueryParams<{ sort?: `${string}:${'ASC' | 'DESC'}` }>();\n const sort = query?.sort ?? '';\n const [sortBy, sortOrder] = sort.split(':');\n const { formatMessage } = useIntl();\n const isSorted = sortBy === name;\n\n const sortLabel = formatMessage(\n { id: 'components.TableHeader.sort', defaultMessage: 'Sort on {label}' },\n { label }\n );\n\n const handleClickSort = () => {\n if (sortable) {\n setQuery({\n sort: `${name}:${isSorted && sortOrder === 'ASC' ? 'DESC' : 'ASC'}`,\n });\n }\n };\n\n return (\n <Th\n action={\n isSorted &&\n sortable && (\n <IconButton label={sortLabel} onClick={handleClickSort} variant=\"ghost\">\n <SortIcon $isUp={sortOrder === 'ASC'} />\n </IconButton>\n )\n }\n >\n <Tooltip label={sortable ? sortLabel : label}>\n <Typography\n textColor=\"neutral600\"\n tag={!isSorted && sortable ? 'button' : 'span'}\n onClick={handleClickSort}\n variant=\"sigma\"\n >\n {label}\n </Typography>\n </Tooltip>\n </Th>\n );\n};\n\nconst SortIcon = styled(CaretDown)<{\n $isUp: boolean;\n}>`\n transform: ${({ $isUp }) => `rotate(${$isUp ? '180' : '0'}deg)`};\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ActionBar\n * -----------------------------------------------------------------------------------------------*/\n\nconst ActionBar = ({ children }: Table.ActionBarProps) => {\n const { formatMessage } = useIntl();\n const selectedRows = useTable('ActionBar', (state) => state.selectedRows);\n\n if (selectedRows.length === 0) return null;\n\n return (\n <Flex gap={2}>\n <Typography variant=\"omega\" textColor=\"neutral500\">\n {formatMessage(\n {\n id: 'content-manager.components.TableDelete.label',\n defaultMessage: '{number, plural, one {# row} other {# rows}} selected',\n },\n { number: selectedRows.length }\n )}\n </Typography>\n {children}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderCheckboxCell\n * -----------------------------------------------------------------------------------------------*/\n\nconst HeaderCheckboxCell = () => {\n const rows = useTable('HeaderCheckboxCell', (state) => state.rows);\n const selectedRows = useTable('HeaderCheckboxCell', (state) => state.selectedRows);\n const selectRow = useTable('HeaderCheckboxCell', (state) => state.selectRow);\n const setHasHeaderCheckbox = useTable(\n 'HeaderCheckboxCell',\n (state) => state.setHasHeaderCheckbox\n );\n\n const { formatMessage } = useIntl();\n\n const areAllEntriesSelected = selectedRows.length === rows.length && rows.length > 0;\n const isIndeterminate = !areAllEntriesSelected && selectedRows.length > 0;\n\n React.useEffect(() => {\n setHasHeaderCheckbox(true);\n\n return () => setHasHeaderCheckbox(false);\n }, [setHasHeaderCheckbox]);\n\n const handleSelectAll = () => {\n if (!areAllEntriesSelected) {\n selectRow(rows);\n } else {\n selectRow([]);\n }\n };\n\n return (\n <Th>\n <Checkbox\n aria-label={formatMessage({\n id: 'global.select-all-entries',\n defaultMessage: 'Select all entries',\n })}\n disabled={rows.length === 0}\n checked={isIndeterminate ? 'indeterminate' : areAllEntriesSelected}\n onCheckedChange={handleSelectAll}\n />\n </Th>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Empty\n * -----------------------------------------------------------------------------------------------*/\n\nconst Empty = (props: Table.EmptyProps) => {\n const { formatMessage } = useIntl();\n\n const rows = useTable('Empty', (state) => state.rows);\n const isLoading = useTable('Empty', (state) => state.isLoading);\n const colCount = useTable('Empty', (state) => state.colCount);\n\n /**\n * If we're loading or we have some data, we don't show the empty state.\n */\n if (rows.length > 0 || isLoading) {\n return null;\n }\n\n return (\n <Tbody>\n <Tr>\n <Td colSpan={colCount}>\n <EmptyStateLayout\n content={formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n {...props}\n />\n </Td>\n </Tr>\n </Tbody>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LoadingBody\n * -----------------------------------------------------------------------------------------------*/\n\nconst Loading = ({ children = 'Loading content' }: Table.LoadingProps) => {\n const isLoading = useTable('Loading', (state) => state.isLoading);\n const colCount = useTable('Loading', (state) => state.colCount);\n\n if (!isLoading) {\n return null;\n }\n\n return (\n <Tbody>\n <Tr>\n <Td colSpan={colCount}>\n <Flex justifyContent=\"center\" padding={11} background=\"neutral0\">\n <Loader>{children}</Loader>\n </Flex>\n </Td>\n </Tr>\n </Tbody>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Body\n * -----------------------------------------------------------------------------------------------*/\n\nconst Body = ({ children }: Table.BodyProps) => {\n const isLoading = useTable('Body', (state) => state.isLoading);\n const rows = useTable('Body', (state) => state.rows);\n\n if (isLoading || rows.length === 0) {\n return null;\n }\n\n return <Tbody>{children}</Tbody>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\nconst Row = (props: Table.RowProps) => {\n return <Tr {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Cell\n * -----------------------------------------------------------------------------------------------*/\nconst Cell = (props: Table.CellProps) => {\n return <Td {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\nconst CheckboxCell = ({ id, ...props }: Table.CheckboxCellProps) => {\n const rows = useTable('CheckboxCell', (state) => state.rows);\n const selectedRows = useTable('CheckboxCell', (state) => state.selectedRows);\n const selectRow = useTable('CheckboxCell', (state) => state.selectRow);\n\n const { formatMessage } = useIntl();\n\n const handleSelectRow = () => {\n selectRow(rows.find((row) => row.id === id));\n };\n\n const isChecked = selectedRows.findIndex((row) => row.id === id) > -1;\n\n return (\n <Cell {...props} onClick={(e) => e.stopPropagation()}>\n <Checkbox\n aria-label={formatMessage(\n {\n id: 'app.component.table.select.one-entry',\n defaultMessage: `Select {target}`,\n },\n { target: id }\n )}\n disabled={rows.length === 0}\n checked={isChecked}\n onCheckedChange={handleSelectRow}\n />\n </Cell>\n );\n};\n/* -------------------------------------------------------------------------------------------------\n * Exports\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @alpha we may move this component to the design-system.\n * @public\n * @description A generic table component composition. Internally handles the state of the table\n * such as selected rows, loading state, and more assuming the correct pieces are put togther.\n * @example\n * ```tsx\n * interace Data {\n * id: string;\n * name: string;\n * email: string;\n * }\n *\n * const ListView = () => {\n * const { data, isLoading } = useGetData<Data>();\n *\n * const headers: Table.Header<Data>[] = [\n * {\n * label: 'Name',\n * name: 'name',\n * sortable: true,\n * },\n * {\n * label: 'Email',\n * name: 'email',\n * sortable: true,\n * },\n * ];\n *\n * return (\n * <Table.Root rows={data} headers={headers} isLoading={isLoading}>\n * <Table.Content>\n * <Table.Head>\n * {headers.map((head) => (\n * <Table.HeaderCell key={head.name} {...head} />\n * ))}\n * </Table.Head>\n * <Table.Body>\n * <Table.Loading />\n * <Table.Empty />\n * {data.map((row) => (\n * <Table.Row key={row.id}>\n * <Table.Cell>{row.name}</Table.Cell>\n * <Table.Cell>{row.email}</Table.Cell>\n * </Table.Row>\n * ))}\n * </Table.Body>\n * </Table.Content>\n * </Table.Root>\n * );\n * };\n * ```\n */\nconst Table = {\n Root,\n Content,\n ActionBar,\n Head,\n HeaderCell,\n HeaderCheckboxCell,\n Body,\n CheckboxCell,\n Cell,\n Row,\n Loading,\n Empty,\n};\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Table {\n export type Props<\n TData extends BaseRow,\n THeader extends TableHeader<TData, THeader> = TableHeader<TData, TableHeader>,\n > = RootProps<TData, THeader>;\n export interface ActionBarProps {\n children?: React.ReactNode;\n }\n\n export interface ContentProps {\n children: React.ReactNode;\n }\n\n export type Header<TData, THeader> = TableHeader<TData, THeader>;\n\n export interface HeadProps {\n children: React.ReactNode;\n }\n\n export interface EmptyProps extends Partial<EmptyStateLayoutProps> {}\n\n export interface LoadingProps {\n children?: React.ReactNode;\n }\n\n export interface BodyProps {\n children: React.ReactNode;\n }\n\n export interface RowProps extends RawTrProps {}\n\n export interface CellProps extends RawTdProps {}\n\n export interface CheckboxCellProps extends Pick<BaseRow, 'id'>, Omit<RawTdProps, 'id'> {}\n}\n\nexport { Table, useTable };\n"],"names":["TableProvider","useTable","createContext","Root","children","defaultSelectedRows","footer","headers","isLoading","onSelectedRowsChange","rows","selectedRows","selectedRowsProps","setSelectedRows","useControllableState","prop","defaultProp","onChange","hasHeaderCheckbox","setHasHeaderCheckbox","React","useState","rowCount","length","colCount","selectRow","row","Array","isArray","prev","currentRowIndex","findIndex","r","id","toSpliced","_jsx","Content","state","DSTable","Head","Thead","Tr","HeaderCell","name","label","sortable","query","setQuery","useQueryParams","sort","sortBy","sortOrder","split","formatMessage","useIntl","isSorted","sortLabel","defaultMessage","handleClickSort","Th","action","IconButton","onClick","variant","SortIcon","$isUp","Tooltip","Typography","textColor","tag","styled","CaretDown","ActionBar","_jsxs","Flex","gap","number","HeaderCheckboxCell","areAllEntriesSelected","isIndeterminate","useEffect","handleSelectAll","Checkbox","aria-label","disabled","checked","onCheckedChange","Empty","props","Tbody","Td","colSpan","EmptyStateLayout","content","hasRadius","icon","EmptyDocuments","width","Loading","justifyContent","padding","background","Loader","Body","Row","Cell","CheckboxCell","handleSelectRow","find","isChecked","e","stopPropagation","target","Table"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Table.js","sources":["../../../../../admin/src/components/Table.tsx"],"sourcesContent":["/**\n * TODO: honestly, half of this stuff should come straight from\n * the design-system and then we can just wrap round the bits for\n * the i18n & router interactions.\n *\n * So we'll do that in v2 of the DS.\n */\n\nimport * as React from 'react';\n\nimport {\n Flex,\n Typography,\n Th,\n Tbody,\n Td,\n Tooltip,\n IconButton,\n Thead,\n Tr,\n RawTrProps,\n Checkbox,\n Loader,\n Table as DSTable,\n EmptyStateLayout,\n EmptyStateLayoutProps,\n TableProps,\n RawTdProps,\n} from '@strapi/design-system';\nimport { CaretDown } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useControllableState } from '../hooks/useControllableState';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseRow {\n id: string | number;\n [key: string]: any;\n}\n\ninterface TableHeader<TData = object, THeader = object> {\n /**\n * Typically used by plugins to render a custom cell\n */\n cellFormatter?: (data: TData, header: Omit<THeader, 'cellFormatter'>) => React.ReactNode;\n label: string;\n name: string;\n searchable?: boolean;\n sortable?: boolean;\n}\n\ninterface TableContextValue<TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>\n extends Pick<TableProps, 'footer'> {\n colCount: number;\n hasHeaderCheckbox: boolean;\n headers: THeader[];\n isLoading: boolean;\n rowCount: number;\n rows: TRow[];\n setHasHeaderCheckbox: (value: boolean) => void;\n selectedRows: TRow[];\n selectRow: (row: TRow | TRow[]) => void;\n}\n\nconst [TableProvider, useTable] = createContext<TableContextValue<any, any>>('Table');\n\ninterface RootProps<TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>\n extends Partial<\n Pick<\n TableContextValue<TRow, THeader>,\n 'footer' | 'headers' | 'isLoading' | 'rows' | 'selectedRows'\n >\n > {\n children?: React.ReactNode;\n defaultSelectedRows?: TRow[];\n onSelectedRowsChange?: (selectedRows: TRow[]) => void;\n}\n\nconst Root = <TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>({\n children,\n defaultSelectedRows,\n footer,\n headers = [],\n isLoading = false,\n onSelectedRowsChange,\n rows = [],\n selectedRows: selectedRowsProps,\n}: RootProps<TRow, THeader>) => {\n const [selectedRows = [], setSelectedRows] = useControllableState({\n prop: selectedRowsProps,\n defaultProp: defaultSelectedRows,\n onChange: onSelectedRowsChange,\n });\n const [hasHeaderCheckbox, setHasHeaderCheckbox] = React.useState(false);\n\n const rowCount = rows.length + 1;\n const colCount = hasHeaderCheckbox ? headers.length + 1 : headers.length;\n\n const selectRow: TableContextValue<TRow, THeader>['selectRow'] = (row) => {\n if (Array.isArray(row)) {\n setSelectedRows(row);\n } else {\n setSelectedRows((prev = []) => {\n const currentRowIndex = prev.findIndex((r) => r.id === row.id);\n if (currentRowIndex > -1) {\n return prev.toSpliced(currentRowIndex, 1);\n }\n\n return [...prev, row];\n });\n }\n };\n\n return (\n <TableProvider\n colCount={colCount}\n hasHeaderCheckbox={hasHeaderCheckbox}\n setHasHeaderCheckbox={setHasHeaderCheckbox}\n footer={footer}\n headers={headers}\n isLoading={isLoading}\n rowCount={rowCount}\n rows={rows}\n selectedRows={selectedRows}\n selectRow={selectRow}\n >\n {children}\n </TableProvider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Content\n * -----------------------------------------------------------------------------------------------*/\n\nconst Content = ({ children }: Table.ContentProps) => {\n const rowCount = useTable('Content', (state) => state.rowCount);\n const colCount = useTable('Content', (state) => state.colCount);\n const footer = useTable('Content', (state) => state.footer);\n\n return (\n <DSTable rowCount={rowCount} colCount={colCount} footer={footer}>\n {children}\n </DSTable>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Head\n * -----------------------------------------------------------------------------------------------*/\n\nconst Head = ({ children }: Table.HeadProps) => {\n return (\n <Thead>\n <Tr>{children}</Tr>\n </Thead>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderCell\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @description A header cell in your table, internally will set the query params for sorting to\n * be passed to your data-fetching function.\n */\nconst HeaderCell = <TData, THead>({ name, label, sortable }: TableHeader<TData, THead>) => {\n const [{ query }, setQuery] = useQueryParams<{ sort?: `${string}:${'ASC' | 'DESC'}` }>();\n const sort = query?.sort ?? '';\n const [sortBy, sortOrder] = sort.split(':');\n const { formatMessage } = useIntl();\n const isSorted = sortBy === name;\n\n const sortLabel = formatMessage(\n { id: 'components.TableHeader.sort', defaultMessage: 'Sort on {label}' },\n { label }\n );\n\n const handleClickSort = () => {\n if (sortable) {\n setQuery(\n {\n sort: `${name}:${isSorted && sortOrder === 'ASC' ? 'DESC' : 'ASC'}`,\n },\n 'push',\n true\n );\n }\n };\n\n return (\n <Th\n action={\n isSorted &&\n sortable && (\n <IconButton label={sortLabel} onClick={handleClickSort} variant=\"ghost\">\n <SortIcon $isUp={sortOrder === 'ASC'} />\n </IconButton>\n )\n }\n >\n <Tooltip label={sortable ? sortLabel : label}>\n <Typography\n textColor=\"neutral600\"\n tag={!isSorted && sortable ? 'button' : 'span'}\n onClick={handleClickSort}\n variant=\"sigma\"\n >\n {label}\n </Typography>\n </Tooltip>\n </Th>\n );\n};\n\nconst SortIcon = styled(CaretDown)<{\n $isUp: boolean;\n}>`\n transform: ${({ $isUp }) => `rotate(${$isUp ? '180' : '0'}deg)`};\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ActionBar\n * -----------------------------------------------------------------------------------------------*/\n\nconst ActionBar = ({ children }: Table.ActionBarProps) => {\n const { formatMessage } = useIntl();\n const selectedRows = useTable('ActionBar', (state) => state.selectedRows);\n\n if (selectedRows.length === 0) return null;\n\n return (\n <Flex gap={2}>\n <Typography variant=\"omega\" textColor=\"neutral500\">\n {formatMessage(\n {\n id: 'content-manager.components.TableDelete.label',\n defaultMessage: '{number, plural, one {# row} other {# rows}} selected',\n },\n { number: selectedRows.length }\n )}\n </Typography>\n {children}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderCheckboxCell\n * -----------------------------------------------------------------------------------------------*/\n\nconst HeaderCheckboxCell = () => {\n const rows = useTable('HeaderCheckboxCell', (state) => state.rows);\n const selectedRows = useTable('HeaderCheckboxCell', (state) => state.selectedRows);\n const selectRow = useTable('HeaderCheckboxCell', (state) => state.selectRow);\n const setHasHeaderCheckbox = useTable(\n 'HeaderCheckboxCell',\n (state) => state.setHasHeaderCheckbox\n );\n\n const { formatMessage } = useIntl();\n\n const areAllEntriesSelected = selectedRows.length === rows.length && rows.length > 0;\n const isIndeterminate = !areAllEntriesSelected && selectedRows.length > 0;\n\n React.useEffect(() => {\n setHasHeaderCheckbox(true);\n\n return () => setHasHeaderCheckbox(false);\n }, [setHasHeaderCheckbox]);\n\n const handleSelectAll = () => {\n if (!areAllEntriesSelected) {\n selectRow(rows);\n } else {\n selectRow([]);\n }\n };\n\n return (\n <Th>\n <Checkbox\n aria-label={formatMessage({\n id: 'global.select-all-entries',\n defaultMessage: 'Select all entries',\n })}\n disabled={rows.length === 0}\n checked={isIndeterminate ? 'indeterminate' : areAllEntriesSelected}\n onCheckedChange={handleSelectAll}\n />\n </Th>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Empty\n * -----------------------------------------------------------------------------------------------*/\n\nconst Empty = (props: Table.EmptyProps) => {\n const { formatMessage } = useIntl();\n\n const rows = useTable('Empty', (state) => state.rows);\n const isLoading = useTable('Empty', (state) => state.isLoading);\n const colCount = useTable('Empty', (state) => state.colCount);\n\n /**\n * If we're loading or we have some data, we don't show the empty state.\n */\n if (rows.length > 0 || isLoading) {\n return null;\n }\n\n return (\n <Tbody>\n <Tr>\n <Td colSpan={colCount}>\n <EmptyStateLayout\n content={formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n {...props}\n />\n </Td>\n </Tr>\n </Tbody>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LoadingBody\n * -----------------------------------------------------------------------------------------------*/\n\nconst Loading = ({ children = 'Loading content' }: Table.LoadingProps) => {\n const isLoading = useTable('Loading', (state) => state.isLoading);\n const colCount = useTable('Loading', (state) => state.colCount);\n\n if (!isLoading) {\n return null;\n }\n\n return (\n <Tbody>\n <Tr>\n <Td colSpan={colCount}>\n <Flex justifyContent=\"center\" padding={11} background=\"neutral0\">\n <Loader>{children}</Loader>\n </Flex>\n </Td>\n </Tr>\n </Tbody>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Body\n * -----------------------------------------------------------------------------------------------*/\n\nconst Body = ({ children }: Table.BodyProps) => {\n const isLoading = useTable('Body', (state) => state.isLoading);\n const rows = useTable('Body', (state) => state.rows);\n\n if (isLoading || rows.length === 0) {\n return null;\n }\n\n return <Tbody>{children}</Tbody>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\nconst Row = (props: Table.RowProps) => {\n return <Tr {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Cell\n * -----------------------------------------------------------------------------------------------*/\nconst Cell = (props: Table.CellProps) => {\n return <Td {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\nconst CheckboxCell = ({ id, ...props }: Table.CheckboxCellProps) => {\n const rows = useTable('CheckboxCell', (state) => state.rows);\n const selectedRows = useTable('CheckboxCell', (state) => state.selectedRows);\n const selectRow = useTable('CheckboxCell', (state) => state.selectRow);\n\n const { formatMessage } = useIntl();\n\n const handleSelectRow = () => {\n selectRow(rows.find((row) => row.id === id));\n };\n\n const isChecked = selectedRows.findIndex((row) => row.id === id) > -1;\n\n return (\n <Cell {...props} onClick={(e) => e.stopPropagation()}>\n <Checkbox\n aria-label={formatMessage(\n {\n id: 'app.component.table.select.one-entry',\n defaultMessage: `Select {target}`,\n },\n { target: id }\n )}\n disabled={rows.length === 0}\n checked={isChecked}\n onCheckedChange={handleSelectRow}\n />\n </Cell>\n );\n};\n/* -------------------------------------------------------------------------------------------------\n * Exports\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @alpha we may move this component to the design-system.\n * @public\n * @description A generic table component composition. Internally handles the state of the table\n * such as selected rows, loading state, and more assuming the correct pieces are put togther.\n * @example\n * ```tsx\n * interace Data {\n * id: string;\n * name: string;\n * email: string;\n * }\n *\n * const ListView = () => {\n * const { data, isLoading } = useGetData<Data>();\n *\n * const headers: Table.Header<Data>[] = [\n * {\n * label: 'Name',\n * name: 'name',\n * sortable: true,\n * },\n * {\n * label: 'Email',\n * name: 'email',\n * sortable: true,\n * },\n * ];\n *\n * return (\n * <Table.Root rows={data} headers={headers} isLoading={isLoading}>\n * <Table.Content>\n * <Table.Head>\n * {headers.map((head) => (\n * <Table.HeaderCell key={head.name} {...head} />\n * ))}\n * </Table.Head>\n * <Table.Body>\n * <Table.Loading />\n * <Table.Empty />\n * {data.map((row) => (\n * <Table.Row key={row.id}>\n * <Table.Cell>{row.name}</Table.Cell>\n * <Table.Cell>{row.email}</Table.Cell>\n * </Table.Row>\n * ))}\n * </Table.Body>\n * </Table.Content>\n * </Table.Root>\n * );\n * };\n * ```\n */\nconst Table = {\n Root,\n Content,\n ActionBar,\n Head,\n HeaderCell,\n HeaderCheckboxCell,\n Body,\n CheckboxCell,\n Cell,\n Row,\n Loading,\n Empty,\n};\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Table {\n export type Props<\n TData extends BaseRow,\n THeader extends TableHeader<TData, THeader> = TableHeader<TData, TableHeader>,\n > = RootProps<TData, THeader>;\n export interface ActionBarProps {\n children?: React.ReactNode;\n }\n\n export interface ContentProps {\n children: React.ReactNode;\n }\n\n export type Header<TData, THeader> = TableHeader<TData, THeader>;\n\n export interface HeadProps {\n children: React.ReactNode;\n }\n\n export interface EmptyProps extends Partial<EmptyStateLayoutProps> {}\n\n export interface LoadingProps {\n children?: React.ReactNode;\n }\n\n export interface BodyProps {\n children: React.ReactNode;\n }\n\n export interface RowProps extends RawTrProps {}\n\n export interface CellProps extends RawTdProps {}\n\n export interface CheckboxCellProps extends Pick<BaseRow, 'id'>, Omit<RawTdProps, 'id'> {}\n}\n\nexport { Table, useTable };\n"],"names":["TableProvider","useTable","createContext","Root","children","defaultSelectedRows","footer","headers","isLoading","onSelectedRowsChange","rows","selectedRows","selectedRowsProps","setSelectedRows","useControllableState","prop","defaultProp","onChange","hasHeaderCheckbox","setHasHeaderCheckbox","React","useState","rowCount","length","colCount","selectRow","row","Array","isArray","prev","currentRowIndex","findIndex","r","id","toSpliced","_jsx","Content","state","DSTable","Head","Thead","Tr","HeaderCell","name","label","sortable","query","setQuery","useQueryParams","sort","sortBy","sortOrder","split","formatMessage","useIntl","isSorted","sortLabel","defaultMessage","handleClickSort","Th","action","IconButton","onClick","variant","SortIcon","$isUp","Tooltip","Typography","textColor","tag","styled","CaretDown","ActionBar","_jsxs","Flex","gap","number","HeaderCheckboxCell","areAllEntriesSelected","isIndeterminate","useEffect","handleSelectAll","Checkbox","aria-label","disabled","checked","onCheckedChange","Empty","props","Tbody","Td","colSpan","EmptyStateLayout","content","hasRadius","icon","EmptyDocuments","width","Loading","justifyContent","padding","background","Loader","Body","Row","Cell","CheckboxCell","handleSelectRow","find","isChecked","e","stopPropagation","target","Table"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.mjs","sources":["../../../../../admin/src/components/Table.tsx"],"sourcesContent":["/**\n * TODO: honestly, half of this stuff should come straight from\n * the design-system and then we can just wrap round the bits for\n * the i18n & router interactions.\n *\n * So we'll do that in v2 of the DS.\n */\n\nimport * as React from 'react';\n\nimport {\n Flex,\n Typography,\n Th,\n Tbody,\n Td,\n Tooltip,\n IconButton,\n Thead,\n Tr,\n RawTrProps,\n Checkbox,\n Loader,\n Table as DSTable,\n EmptyStateLayout,\n EmptyStateLayoutProps,\n TableProps,\n RawTdProps,\n} from '@strapi/design-system';\nimport { CaretDown } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useControllableState } from '../hooks/useControllableState';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseRow {\n id: string | number;\n [key: string]: any;\n}\n\ninterface TableHeader<TData = object, THeader = object> {\n /**\n * Typically used by plugins to render a custom cell\n */\n cellFormatter?: (data: TData, header: Omit<THeader, 'cellFormatter'>) => React.ReactNode;\n label: string;\n name: string;\n searchable?: boolean;\n sortable?: boolean;\n}\n\ninterface TableContextValue<TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>\n extends Pick<TableProps, 'footer'> {\n colCount: number;\n hasHeaderCheckbox: boolean;\n headers: THeader[];\n isLoading: boolean;\n rowCount: number;\n rows: TRow[];\n setHasHeaderCheckbox: (value: boolean) => void;\n selectedRows: TRow[];\n selectRow: (row: TRow | TRow[]) => void;\n}\n\nconst [TableProvider, useTable] = createContext<TableContextValue<any, any>>('Table');\n\ninterface RootProps<TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>\n extends Partial<\n Pick<\n TableContextValue<TRow, THeader>,\n 'footer' | 'headers' | 'isLoading' | 'rows' | 'selectedRows'\n >\n > {\n children?: React.ReactNode;\n defaultSelectedRows?: TRow[];\n onSelectedRowsChange?: (selectedRows: TRow[]) => void;\n}\n\nconst Root = <TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>({\n children,\n defaultSelectedRows,\n footer,\n headers = [],\n isLoading = false,\n onSelectedRowsChange,\n rows = [],\n selectedRows: selectedRowsProps,\n}: RootProps<TRow, THeader>) => {\n const [selectedRows = [], setSelectedRows] = useControllableState({\n prop: selectedRowsProps,\n defaultProp: defaultSelectedRows,\n onChange: onSelectedRowsChange,\n });\n const [hasHeaderCheckbox, setHasHeaderCheckbox] = React.useState(false);\n\n const rowCount = rows.length + 1;\n const colCount = hasHeaderCheckbox ? headers.length + 1 : headers.length;\n\n const selectRow: TableContextValue<TRow, THeader>['selectRow'] = (row) => {\n if (Array.isArray(row)) {\n setSelectedRows(row);\n } else {\n setSelectedRows((prev = []) => {\n const currentRowIndex = prev.findIndex((r) => r.id === row.id);\n if (currentRowIndex > -1) {\n return prev.toSpliced(currentRowIndex, 1);\n }\n\n return [...prev, row];\n });\n }\n };\n\n return (\n <TableProvider\n colCount={colCount}\n hasHeaderCheckbox={hasHeaderCheckbox}\n setHasHeaderCheckbox={setHasHeaderCheckbox}\n footer={footer}\n headers={headers}\n isLoading={isLoading}\n rowCount={rowCount}\n rows={rows}\n selectedRows={selectedRows}\n selectRow={selectRow}\n >\n {children}\n </TableProvider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Content\n * -----------------------------------------------------------------------------------------------*/\n\nconst Content = ({ children }: Table.ContentProps) => {\n const rowCount = useTable('Content', (state) => state.rowCount);\n const colCount = useTable('Content', (state) => state.colCount);\n const footer = useTable('Content', (state) => state.footer);\n\n return (\n <DSTable rowCount={rowCount} colCount={colCount} footer={footer}>\n {children}\n </DSTable>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Head\n * -----------------------------------------------------------------------------------------------*/\n\nconst Head = ({ children }: Table.HeadProps) => {\n return (\n <Thead>\n <Tr>{children}</Tr>\n </Thead>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderCell\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @description A header cell in your table, internally will set the query params for sorting to\n * be passed to your data-fetching function.\n */\nconst HeaderCell = <TData, THead>({ name, label, sortable }: TableHeader<TData, THead>) => {\n const [{ query }, setQuery] = useQueryParams<{ sort?: `${string}:${'ASC' | 'DESC'}` }>();\n const sort = query?.sort ?? '';\n const [sortBy, sortOrder] = sort.split(':');\n const { formatMessage } = useIntl();\n const isSorted = sortBy === name;\n\n const sortLabel = formatMessage(\n { id: 'components.TableHeader.sort', defaultMessage: 'Sort on {label}' },\n { label }\n );\n\n const handleClickSort = () => {\n if (sortable) {\n setQuery({\n sort: `${name}:${isSorted && sortOrder === 'ASC' ? 'DESC' : 'ASC'}`,\n });\n }\n };\n\n return (\n <Th\n action={\n isSorted &&\n sortable && (\n <IconButton label={sortLabel} onClick={handleClickSort} variant=\"ghost\">\n <SortIcon $isUp={sortOrder === 'ASC'} />\n </IconButton>\n )\n }\n >\n <Tooltip label={sortable ? sortLabel : label}>\n <Typography\n textColor=\"neutral600\"\n tag={!isSorted && sortable ? 'button' : 'span'}\n onClick={handleClickSort}\n variant=\"sigma\"\n >\n {label}\n </Typography>\n </Tooltip>\n </Th>\n );\n};\n\nconst SortIcon = styled(CaretDown)<{\n $isUp: boolean;\n}>`\n transform: ${({ $isUp }) => `rotate(${$isUp ? '180' : '0'}deg)`};\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ActionBar\n * -----------------------------------------------------------------------------------------------*/\n\nconst ActionBar = ({ children }: Table.ActionBarProps) => {\n const { formatMessage } = useIntl();\n const selectedRows = useTable('ActionBar', (state) => state.selectedRows);\n\n if (selectedRows.length === 0) return null;\n\n return (\n <Flex gap={2}>\n <Typography variant=\"omega\" textColor=\"neutral500\">\n {formatMessage(\n {\n id: 'content-manager.components.TableDelete.label',\n defaultMessage: '{number, plural, one {# row} other {# rows}} selected',\n },\n { number: selectedRows.length }\n )}\n </Typography>\n {children}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderCheckboxCell\n * -----------------------------------------------------------------------------------------------*/\n\nconst HeaderCheckboxCell = () => {\n const rows = useTable('HeaderCheckboxCell', (state) => state.rows);\n const selectedRows = useTable('HeaderCheckboxCell', (state) => state.selectedRows);\n const selectRow = useTable('HeaderCheckboxCell', (state) => state.selectRow);\n const setHasHeaderCheckbox = useTable(\n 'HeaderCheckboxCell',\n (state) => state.setHasHeaderCheckbox\n );\n\n const { formatMessage } = useIntl();\n\n const areAllEntriesSelected = selectedRows.length === rows.length && rows.length > 0;\n const isIndeterminate = !areAllEntriesSelected && selectedRows.length > 0;\n\n React.useEffect(() => {\n setHasHeaderCheckbox(true);\n\n return () => setHasHeaderCheckbox(false);\n }, [setHasHeaderCheckbox]);\n\n const handleSelectAll = () => {\n if (!areAllEntriesSelected) {\n selectRow(rows);\n } else {\n selectRow([]);\n }\n };\n\n return (\n <Th>\n <Checkbox\n aria-label={formatMessage({\n id: 'global.select-all-entries',\n defaultMessage: 'Select all entries',\n })}\n disabled={rows.length === 0}\n checked={isIndeterminate ? 'indeterminate' : areAllEntriesSelected}\n onCheckedChange={handleSelectAll}\n />\n </Th>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Empty\n * -----------------------------------------------------------------------------------------------*/\n\nconst Empty = (props: Table.EmptyProps) => {\n const { formatMessage } = useIntl();\n\n const rows = useTable('Empty', (state) => state.rows);\n const isLoading = useTable('Empty', (state) => state.isLoading);\n const colCount = useTable('Empty', (state) => state.colCount);\n\n /**\n * If we're loading or we have some data, we don't show the empty state.\n */\n if (rows.length > 0 || isLoading) {\n return null;\n }\n\n return (\n <Tbody>\n <Tr>\n <Td colSpan={colCount}>\n <EmptyStateLayout\n content={formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n {...props}\n />\n </Td>\n </Tr>\n </Tbody>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LoadingBody\n * -----------------------------------------------------------------------------------------------*/\n\nconst Loading = ({ children = 'Loading content' }: Table.LoadingProps) => {\n const isLoading = useTable('Loading', (state) => state.isLoading);\n const colCount = useTable('Loading', (state) => state.colCount);\n\n if (!isLoading) {\n return null;\n }\n\n return (\n <Tbody>\n <Tr>\n <Td colSpan={colCount}>\n <Flex justifyContent=\"center\" padding={11} background=\"neutral0\">\n <Loader>{children}</Loader>\n </Flex>\n </Td>\n </Tr>\n </Tbody>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Body\n * -----------------------------------------------------------------------------------------------*/\n\nconst Body = ({ children }: Table.BodyProps) => {\n const isLoading = useTable('Body', (state) => state.isLoading);\n const rows = useTable('Body', (state) => state.rows);\n\n if (isLoading || rows.length === 0) {\n return null;\n }\n\n return <Tbody>{children}</Tbody>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\nconst Row = (props: Table.RowProps) => {\n return <Tr {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Cell\n * -----------------------------------------------------------------------------------------------*/\nconst Cell = (props: Table.CellProps) => {\n return <Td {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\nconst CheckboxCell = ({ id, ...props }: Table.CheckboxCellProps) => {\n const rows = useTable('CheckboxCell', (state) => state.rows);\n const selectedRows = useTable('CheckboxCell', (state) => state.selectedRows);\n const selectRow = useTable('CheckboxCell', (state) => state.selectRow);\n\n const { formatMessage } = useIntl();\n\n const handleSelectRow = () => {\n selectRow(rows.find((row) => row.id === id));\n };\n\n const isChecked = selectedRows.findIndex((row) => row.id === id) > -1;\n\n return (\n <Cell {...props} onClick={(e) => e.stopPropagation()}>\n <Checkbox\n aria-label={formatMessage(\n {\n id: 'app.component.table.select.one-entry',\n defaultMessage: `Select {target}`,\n },\n { target: id }\n )}\n disabled={rows.length === 0}\n checked={isChecked}\n onCheckedChange={handleSelectRow}\n />\n </Cell>\n );\n};\n/* -------------------------------------------------------------------------------------------------\n * Exports\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @alpha we may move this component to the design-system.\n * @public\n * @description A generic table component composition. Internally handles the state of the table\n * such as selected rows, loading state, and more assuming the correct pieces are put togther.\n * @example\n * ```tsx\n * interace Data {\n * id: string;\n * name: string;\n * email: string;\n * }\n *\n * const ListView = () => {\n * const { data, isLoading } = useGetData<Data>();\n *\n * const headers: Table.Header<Data>[] = [\n * {\n * label: 'Name',\n * name: 'name',\n * sortable: true,\n * },\n * {\n * label: 'Email',\n * name: 'email',\n * sortable: true,\n * },\n * ];\n *\n * return (\n * <Table.Root rows={data} headers={headers} isLoading={isLoading}>\n * <Table.Content>\n * <Table.Head>\n * {headers.map((head) => (\n * <Table.HeaderCell key={head.name} {...head} />\n * ))}\n * </Table.Head>\n * <Table.Body>\n * <Table.Loading />\n * <Table.Empty />\n * {data.map((row) => (\n * <Table.Row key={row.id}>\n * <Table.Cell>{row.name}</Table.Cell>\n * <Table.Cell>{row.email}</Table.Cell>\n * </Table.Row>\n * ))}\n * </Table.Body>\n * </Table.Content>\n * </Table.Root>\n * );\n * };\n * ```\n */\nconst Table = {\n Root,\n Content,\n ActionBar,\n Head,\n HeaderCell,\n HeaderCheckboxCell,\n Body,\n CheckboxCell,\n Cell,\n Row,\n Loading,\n Empty,\n};\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Table {\n export type Props<\n TData extends BaseRow,\n THeader extends TableHeader<TData, THeader> = TableHeader<TData, TableHeader>,\n > = RootProps<TData, THeader>;\n export interface ActionBarProps {\n children?: React.ReactNode;\n }\n\n export interface ContentProps {\n children: React.ReactNode;\n }\n\n export type Header<TData, THeader> = TableHeader<TData, THeader>;\n\n export interface HeadProps {\n children: React.ReactNode;\n }\n\n export interface EmptyProps extends Partial<EmptyStateLayoutProps> {}\n\n export interface LoadingProps {\n children?: React.ReactNode;\n }\n\n export interface BodyProps {\n children: React.ReactNode;\n }\n\n export interface RowProps extends RawTrProps {}\n\n export interface CellProps extends RawTdProps {}\n\n export interface CheckboxCellProps extends Pick<BaseRow, 'id'>, Omit<RawTdProps, 'id'> {}\n}\n\nexport { Table, useTable };\n"],"names":["TableProvider","useTable","createContext","Root","children","defaultSelectedRows","footer","headers","isLoading","onSelectedRowsChange","rows","selectedRows","selectedRowsProps","setSelectedRows","useControllableState","prop","defaultProp","onChange","hasHeaderCheckbox","setHasHeaderCheckbox","React","useState","rowCount","length","colCount","selectRow","row","Array","isArray","prev","currentRowIndex","findIndex","r","id","toSpliced","_jsx","Content","state","DSTable","Head","Thead","Tr","HeaderCell","name","label","sortable","query","setQuery","useQueryParams","sort","sortBy","sortOrder","split","formatMessage","useIntl","isSorted","sortLabel","defaultMessage","handleClickSort","Th","action","IconButton","onClick","variant","SortIcon","$isUp","Tooltip","Typography","textColor","tag","styled","CaretDown","ActionBar","_jsxs","Flex","gap","number","HeaderCheckboxCell","areAllEntriesSelected","isIndeterminate","useEffect","handleSelectAll","Checkbox","aria-label","disabled","checked","onCheckedChange","Empty","props","Tbody","Td","colSpan","EmptyStateLayout","content","hasRadius","icon","EmptyDocuments","width","Loading","justifyContent","padding","background","Loader","Body","Row","Cell","CheckboxCell","handleSelectRow","find","isChecked","e","stopPropagation","target","Table"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Table.mjs","sources":["../../../../../admin/src/components/Table.tsx"],"sourcesContent":["/**\n * TODO: honestly, half of this stuff should come straight from\n * the design-system and then we can just wrap round the bits for\n * the i18n & router interactions.\n *\n * So we'll do that in v2 of the DS.\n */\n\nimport * as React from 'react';\n\nimport {\n Flex,\n Typography,\n Th,\n Tbody,\n Td,\n Tooltip,\n IconButton,\n Thead,\n Tr,\n RawTrProps,\n Checkbox,\n Loader,\n Table as DSTable,\n EmptyStateLayout,\n EmptyStateLayoutProps,\n TableProps,\n RawTdProps,\n} from '@strapi/design-system';\nimport { CaretDown } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useControllableState } from '../hooks/useControllableState';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseRow {\n id: string | number;\n [key: string]: any;\n}\n\ninterface TableHeader<TData = object, THeader = object> {\n /**\n * Typically used by plugins to render a custom cell\n */\n cellFormatter?: (data: TData, header: Omit<THeader, 'cellFormatter'>) => React.ReactNode;\n label: string;\n name: string;\n searchable?: boolean;\n sortable?: boolean;\n}\n\ninterface TableContextValue<TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>\n extends Pick<TableProps, 'footer'> {\n colCount: number;\n hasHeaderCheckbox: boolean;\n headers: THeader[];\n isLoading: boolean;\n rowCount: number;\n rows: TRow[];\n setHasHeaderCheckbox: (value: boolean) => void;\n selectedRows: TRow[];\n selectRow: (row: TRow | TRow[]) => void;\n}\n\nconst [TableProvider, useTable] = createContext<TableContextValue<any, any>>('Table');\n\ninterface RootProps<TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>\n extends Partial<\n Pick<\n TableContextValue<TRow, THeader>,\n 'footer' | 'headers' | 'isLoading' | 'rows' | 'selectedRows'\n >\n > {\n children?: React.ReactNode;\n defaultSelectedRows?: TRow[];\n onSelectedRowsChange?: (selectedRows: TRow[]) => void;\n}\n\nconst Root = <TRow extends BaseRow, THeader extends TableHeader<TRow, THeader>>({\n children,\n defaultSelectedRows,\n footer,\n headers = [],\n isLoading = false,\n onSelectedRowsChange,\n rows = [],\n selectedRows: selectedRowsProps,\n}: RootProps<TRow, THeader>) => {\n const [selectedRows = [], setSelectedRows] = useControllableState({\n prop: selectedRowsProps,\n defaultProp: defaultSelectedRows,\n onChange: onSelectedRowsChange,\n });\n const [hasHeaderCheckbox, setHasHeaderCheckbox] = React.useState(false);\n\n const rowCount = rows.length + 1;\n const colCount = hasHeaderCheckbox ? headers.length + 1 : headers.length;\n\n const selectRow: TableContextValue<TRow, THeader>['selectRow'] = (row) => {\n if (Array.isArray(row)) {\n setSelectedRows(row);\n } else {\n setSelectedRows((prev = []) => {\n const currentRowIndex = prev.findIndex((r) => r.id === row.id);\n if (currentRowIndex > -1) {\n return prev.toSpliced(currentRowIndex, 1);\n }\n\n return [...prev, row];\n });\n }\n };\n\n return (\n <TableProvider\n colCount={colCount}\n hasHeaderCheckbox={hasHeaderCheckbox}\n setHasHeaderCheckbox={setHasHeaderCheckbox}\n footer={footer}\n headers={headers}\n isLoading={isLoading}\n rowCount={rowCount}\n rows={rows}\n selectedRows={selectedRows}\n selectRow={selectRow}\n >\n {children}\n </TableProvider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Content\n * -----------------------------------------------------------------------------------------------*/\n\nconst Content = ({ children }: Table.ContentProps) => {\n const rowCount = useTable('Content', (state) => state.rowCount);\n const colCount = useTable('Content', (state) => state.colCount);\n const footer = useTable('Content', (state) => state.footer);\n\n return (\n <DSTable rowCount={rowCount} colCount={colCount} footer={footer}>\n {children}\n </DSTable>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Head\n * -----------------------------------------------------------------------------------------------*/\n\nconst Head = ({ children }: Table.HeadProps) => {\n return (\n <Thead>\n <Tr>{children}</Tr>\n </Thead>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderCell\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @description A header cell in your table, internally will set the query params for sorting to\n * be passed to your data-fetching function.\n */\nconst HeaderCell = <TData, THead>({ name, label, sortable }: TableHeader<TData, THead>) => {\n const [{ query }, setQuery] = useQueryParams<{ sort?: `${string}:${'ASC' | 'DESC'}` }>();\n const sort = query?.sort ?? '';\n const [sortBy, sortOrder] = sort.split(':');\n const { formatMessage } = useIntl();\n const isSorted = sortBy === name;\n\n const sortLabel = formatMessage(\n { id: 'components.TableHeader.sort', defaultMessage: 'Sort on {label}' },\n { label }\n );\n\n const handleClickSort = () => {\n if (sortable) {\n setQuery(\n {\n sort: `${name}:${isSorted && sortOrder === 'ASC' ? 'DESC' : 'ASC'}`,\n },\n 'push',\n true\n );\n }\n };\n\n return (\n <Th\n action={\n isSorted &&\n sortable && (\n <IconButton label={sortLabel} onClick={handleClickSort} variant=\"ghost\">\n <SortIcon $isUp={sortOrder === 'ASC'} />\n </IconButton>\n )\n }\n >\n <Tooltip label={sortable ? sortLabel : label}>\n <Typography\n textColor=\"neutral600\"\n tag={!isSorted && sortable ? 'button' : 'span'}\n onClick={handleClickSort}\n variant=\"sigma\"\n >\n {label}\n </Typography>\n </Tooltip>\n </Th>\n );\n};\n\nconst SortIcon = styled(CaretDown)<{\n $isUp: boolean;\n}>`\n transform: ${({ $isUp }) => `rotate(${$isUp ? '180' : '0'}deg)`};\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ActionBar\n * -----------------------------------------------------------------------------------------------*/\n\nconst ActionBar = ({ children }: Table.ActionBarProps) => {\n const { formatMessage } = useIntl();\n const selectedRows = useTable('ActionBar', (state) => state.selectedRows);\n\n if (selectedRows.length === 0) return null;\n\n return (\n <Flex gap={2}>\n <Typography variant=\"omega\" textColor=\"neutral500\">\n {formatMessage(\n {\n id: 'content-manager.components.TableDelete.label',\n defaultMessage: '{number, plural, one {# row} other {# rows}} selected',\n },\n { number: selectedRows.length }\n )}\n </Typography>\n {children}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * HeaderCheckboxCell\n * -----------------------------------------------------------------------------------------------*/\n\nconst HeaderCheckboxCell = () => {\n const rows = useTable('HeaderCheckboxCell', (state) => state.rows);\n const selectedRows = useTable('HeaderCheckboxCell', (state) => state.selectedRows);\n const selectRow = useTable('HeaderCheckboxCell', (state) => state.selectRow);\n const setHasHeaderCheckbox = useTable(\n 'HeaderCheckboxCell',\n (state) => state.setHasHeaderCheckbox\n );\n\n const { formatMessage } = useIntl();\n\n const areAllEntriesSelected = selectedRows.length === rows.length && rows.length > 0;\n const isIndeterminate = !areAllEntriesSelected && selectedRows.length > 0;\n\n React.useEffect(() => {\n setHasHeaderCheckbox(true);\n\n return () => setHasHeaderCheckbox(false);\n }, [setHasHeaderCheckbox]);\n\n const handleSelectAll = () => {\n if (!areAllEntriesSelected) {\n selectRow(rows);\n } else {\n selectRow([]);\n }\n };\n\n return (\n <Th>\n <Checkbox\n aria-label={formatMessage({\n id: 'global.select-all-entries',\n defaultMessage: 'Select all entries',\n })}\n disabled={rows.length === 0}\n checked={isIndeterminate ? 'indeterminate' : areAllEntriesSelected}\n onCheckedChange={handleSelectAll}\n />\n </Th>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Empty\n * -----------------------------------------------------------------------------------------------*/\n\nconst Empty = (props: Table.EmptyProps) => {\n const { formatMessage } = useIntl();\n\n const rows = useTable('Empty', (state) => state.rows);\n const isLoading = useTable('Empty', (state) => state.isLoading);\n const colCount = useTable('Empty', (state) => state.colCount);\n\n /**\n * If we're loading or we have some data, we don't show the empty state.\n */\n if (rows.length > 0 || isLoading) {\n return null;\n }\n\n return (\n <Tbody>\n <Tr>\n <Td colSpan={colCount}>\n <EmptyStateLayout\n content={formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n {...props}\n />\n </Td>\n </Tr>\n </Tbody>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LoadingBody\n * -----------------------------------------------------------------------------------------------*/\n\nconst Loading = ({ children = 'Loading content' }: Table.LoadingProps) => {\n const isLoading = useTable('Loading', (state) => state.isLoading);\n const colCount = useTable('Loading', (state) => state.colCount);\n\n if (!isLoading) {\n return null;\n }\n\n return (\n <Tbody>\n <Tr>\n <Td colSpan={colCount}>\n <Flex justifyContent=\"center\" padding={11} background=\"neutral0\">\n <Loader>{children}</Loader>\n </Flex>\n </Td>\n </Tr>\n </Tbody>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Body\n * -----------------------------------------------------------------------------------------------*/\n\nconst Body = ({ children }: Table.BodyProps) => {\n const isLoading = useTable('Body', (state) => state.isLoading);\n const rows = useTable('Body', (state) => state.rows);\n\n if (isLoading || rows.length === 0) {\n return null;\n }\n\n return <Tbody>{children}</Tbody>;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\nconst Row = (props: Table.RowProps) => {\n return <Tr {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Cell\n * -----------------------------------------------------------------------------------------------*/\nconst Cell = (props: Table.CellProps) => {\n return <Td {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\nconst CheckboxCell = ({ id, ...props }: Table.CheckboxCellProps) => {\n const rows = useTable('CheckboxCell', (state) => state.rows);\n const selectedRows = useTable('CheckboxCell', (state) => state.selectedRows);\n const selectRow = useTable('CheckboxCell', (state) => state.selectRow);\n\n const { formatMessage } = useIntl();\n\n const handleSelectRow = () => {\n selectRow(rows.find((row) => row.id === id));\n };\n\n const isChecked = selectedRows.findIndex((row) => row.id === id) > -1;\n\n return (\n <Cell {...props} onClick={(e) => e.stopPropagation()}>\n <Checkbox\n aria-label={formatMessage(\n {\n id: 'app.component.table.select.one-entry',\n defaultMessage: `Select {target}`,\n },\n { target: id }\n )}\n disabled={rows.length === 0}\n checked={isChecked}\n onCheckedChange={handleSelectRow}\n />\n </Cell>\n );\n};\n/* -------------------------------------------------------------------------------------------------\n * Exports\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * @alpha we may move this component to the design-system.\n * @public\n * @description A generic table component composition. Internally handles the state of the table\n * such as selected rows, loading state, and more assuming the correct pieces are put togther.\n * @example\n * ```tsx\n * interace Data {\n * id: string;\n * name: string;\n * email: string;\n * }\n *\n * const ListView = () => {\n * const { data, isLoading } = useGetData<Data>();\n *\n * const headers: Table.Header<Data>[] = [\n * {\n * label: 'Name',\n * name: 'name',\n * sortable: true,\n * },\n * {\n * label: 'Email',\n * name: 'email',\n * sortable: true,\n * },\n * ];\n *\n * return (\n * <Table.Root rows={data} headers={headers} isLoading={isLoading}>\n * <Table.Content>\n * <Table.Head>\n * {headers.map((head) => (\n * <Table.HeaderCell key={head.name} {...head} />\n * ))}\n * </Table.Head>\n * <Table.Body>\n * <Table.Loading />\n * <Table.Empty />\n * {data.map((row) => (\n * <Table.Row key={row.id}>\n * <Table.Cell>{row.name}</Table.Cell>\n * <Table.Cell>{row.email}</Table.Cell>\n * </Table.Row>\n * ))}\n * </Table.Body>\n * </Table.Content>\n * </Table.Root>\n * );\n * };\n * ```\n */\nconst Table = {\n Root,\n Content,\n ActionBar,\n Head,\n HeaderCell,\n HeaderCheckboxCell,\n Body,\n CheckboxCell,\n Cell,\n Row,\n Loading,\n Empty,\n};\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Table {\n export type Props<\n TData extends BaseRow,\n THeader extends TableHeader<TData, THeader> = TableHeader<TData, TableHeader>,\n > = RootProps<TData, THeader>;\n export interface ActionBarProps {\n children?: React.ReactNode;\n }\n\n export interface ContentProps {\n children: React.ReactNode;\n }\n\n export type Header<TData, THeader> = TableHeader<TData, THeader>;\n\n export interface HeadProps {\n children: React.ReactNode;\n }\n\n export interface EmptyProps extends Partial<EmptyStateLayoutProps> {}\n\n export interface LoadingProps {\n children?: React.ReactNode;\n }\n\n export interface BodyProps {\n children: React.ReactNode;\n }\n\n export interface RowProps extends RawTrProps {}\n\n export interface CellProps extends RawTdProps {}\n\n export interface CheckboxCellProps extends Pick<BaseRow, 'id'>, Omit<RawTdProps, 'id'> {}\n}\n\nexport { Table, useTable };\n"],"names":["TableProvider","useTable","createContext","Root","children","defaultSelectedRows","footer","headers","isLoading","onSelectedRowsChange","rows","selectedRows","selectedRowsProps","setSelectedRows","useControllableState","prop","defaultProp","onChange","hasHeaderCheckbox","setHasHeaderCheckbox","React","useState","rowCount","length","colCount","selectRow","row","Array","isArray","prev","currentRowIndex","findIndex","r","id","toSpliced","_jsx","Content","state","DSTable","Head","Thead","Tr","HeaderCell","name","label","sortable","query","setQuery","useQueryParams","sort","sortBy","sortOrder","split","formatMessage","useIntl","isSorted","sortLabel","defaultMessage","handleClickSort","Th","action","IconButton","onClick","variant","SortIcon","$isUp","Tooltip","Typography","textColor","tag","styled","CaretDown","ActionBar","_jsxs","Flex","gap","number","HeaderCheckboxCell","areAllEntriesSelected","isIndeterminate","useEffect","handleSelectAll","Checkbox","aria-label","disabled","checked","onCheckedChange","Empty","props","Tbody","Td","colSpan","EmptyStateLayout","content","hasRadius","icon","EmptyDocuments","width","Loading","justifyContent","padding","background","Loader","Body","Row","Cell","CheckboxCell","handleSelectRow","find","isChecked","e","stopPropagation","target","Table"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Widgets.js","sources":["../../../../../admin/src/components/Widgets.tsx"],"sourcesContent":["import { useAuth, useTracking } from '@strapi/admin/strapi-admin';\nimport { Avatar, Badge, Box, Flex, Typography } from '@strapi/design-system';\nimport { Earth, Images, User, Key, Files, Layout, Graph, Webhooks } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useGetCountDocumentsQuery, useGetKeyStatisticsQuery } from '../services/homepage';\nimport { getDisplayName, getInitials } from '../utils/users';\n\nimport { Widget } from './WidgetHelpers';\n\n/* -------------------------------------------------------------------------------------------------\n * ProfileWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst DisplayNameTypography = styled(Typography)`\n font-size: 2.4rem;\n`;\n\nconst ProfileWidget = () => {\n const user = useAuth('User', (state) => state.user);\n const userDisplayName = getDisplayName(user);\n const initials = getInitials(user);\n\n return (\n <Flex direction=\"column\" gap={3} height=\"100%\" justifyContent=\"center\">\n <Avatar.Item delayMs={0} fallback={initials} />\n {userDisplayName && (\n <DisplayNameTypography fontWeight=\"bold\" textTransform=\"none\" textAlign=\"center\">\n {userDisplayName}\n </DisplayNameTypography>\n )}\n {user?.email && (\n <Typography variant=\"omega\" textColor=\"neutral600\">\n {user?.email}\n </Typography>\n )}\n {user?.roles?.length && (\n <Flex marginTop={2} gap={1} wrap=\"wrap\">\n {user?.roles?.map((role) => <Badge key={role.id}>{role.name}</Badge>)}\n </Flex>\n )}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Key Statistics\n * -----------------------------------------------------------------------------------------------*/\nconst Grid = styled(Box)`\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 0;\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: ${({ theme }) => theme.borderRadius};\n overflow: hidden;\n`;\n\nconst GridCell = styled(Box)`\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n\n &:nth-child(2n) {\n border-right: none;\n }\n &:nth-last-child(-n + 2) {\n border-bottom: none;\n }\n`;\n\nconst formatNumber = ({ locale, number }: { locale: string; number: number }) => {\n return new Intl.NumberFormat(locale, {\n notation: 'compact',\n maximumFractionDigits: 1,\n }).format(number);\n};\n\nconst LinkCell = styled(Link)`\n text-decoration: none;\n padding: ${({ theme }) => theme.spaces[3]};\n`;\n\nconst KeyStatisticsWidget = () => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n const { data: countDocuments, isLoading: isLoadingCountDocuments } = useGetCountDocumentsQuery();\n const { data: countKeyStatistics, isLoading: isLoadingKeyStatistics } =\n useGetKeyStatisticsQuery();\n\n if (isLoadingKeyStatistics || isLoadingCountDocuments) {\n return <Widget.Loading />;\n }\n\n if (!countKeyStatistics || !countDocuments) {\n return <Widget.Error />;\n }\n\n const keyStatisticsList = {\n entries: {\n label: {\n id: 'widget.key-statistics.list.entries',\n defaultMessage: 'Entries',\n },\n icon: {\n component: <Files />,\n background: 'primary100',\n color: 'primary600',\n },\n link: '/content-manager',\n },\n assets: {\n label: {\n id: 'widget.key-statistics.list.assets',\n defaultMessage: 'Assets',\n },\n icon: {\n component: <Images />,\n background: 'warning100',\n color: 'warning600',\n },\n link: '/plugins/upload',\n },\n contentTypes: {\n label: {\n id: 'widget.key-statistics.list.contentTypes',\n defaultMessage: 'Content-Types',\n },\n icon: {\n component: <Layout />,\n background: 'secondary100',\n color: 'secondary600',\n },\n link: '/plugins/content-type-builder',\n },\n components: {\n label: {\n id: 'widget.key-statistics.list.components',\n defaultMessage: 'Components',\n },\n icon: {\n component: <Graph />,\n background: 'alternative100',\n color: 'alternative600',\n },\n link: '/plugins/content-type-builder',\n },\n locales: {\n label: {\n id: 'widget.key-statistics.list.locales',\n defaultMessage: 'Locales',\n },\n icon: {\n component: <Earth />,\n background: 'success100',\n color: 'success600',\n },\n link: '/settings/internationalization',\n },\n admins: {\n label: {\n id: 'widget.key-statistics.list.admins',\n defaultMessage: 'Admins',\n },\n icon: {\n component: <User />,\n background: 'danger100',\n color: 'danger600',\n },\n link: '/settings/users?pageSize=10&page=1&sort=firstname',\n },\n webhooks: {\n label: {\n id: 'widget.key-statistics.list.webhooks',\n defaultMessage: 'Webhooks',\n },\n icon: {\n component: <Webhooks />,\n background: 'alternative100',\n color: 'alternative600',\n },\n link: '/settings/webhooks',\n },\n apiTokens: {\n label: {\n id: 'widget.key-statistics.list.apiTokens',\n defaultMessage: 'API Tokens',\n },\n icon: {\n component: <Key />,\n background: 'neutral100',\n color: 'neutral600',\n },\n link: '/settings/api-tokens?sort=name:ASC',\n },\n };\n\n const { draft, published, modified } = countDocuments ?? {\n draft: 0,\n published: 0,\n modified: 0,\n };\n\n const totalCountEntries = draft + published + modified;\n\n return (\n <Grid>\n {Object.entries(keyStatisticsList).map(([key, item]) => {\n const value = countKeyStatistics?.[key as keyof typeof countKeyStatistics];\n return (\n value !== null && (\n <GridCell\n as={LinkCell}\n to={item.link}\n key={`key-statistics-${key}`}\n data-testid={`stat-${key}`}\n onClick={() => trackUsage('didOpenKeyStatisticsWidgetLink', { itemKey: key })}\n >\n <Flex alignItems=\"center\" gap={2}>\n <Flex\n padding={2}\n borderRadius={1}\n background={item.icon.background}\n color={item.icon.color}\n >\n {item.icon.component}\n </Flex>\n <Flex direction=\"column\" alignItems=\"flex-start\">\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral500\">\n {formatMessage(item.label)}\n </Typography>\n <Typography variant=\"omega\" fontWeight=\"bold\" textColor=\"neutral800\">\n {formatNumber({\n locale,\n number: key === 'entries' ? totalCountEntries : value,\n })}\n </Typography>\n </Flex>\n </Flex>\n </GridCell>\n )\n );\n })}\n </Grid>\n );\n};\n\nexport { ProfileWidget, KeyStatisticsWidget };\n"],"names":["DisplayNameTypography","styled","Typography","ProfileWidget","user","useAuth","state","userDisplayName","getDisplayName","initials","getInitials","_jsxs","Flex","direction","gap","height","justifyContent","_jsx","Avatar","Item","delayMs","fallback","fontWeight","textTransform","textAlign","email","variant","textColor","roles","length","marginTop","wrap","map","role","Badge","name","id","Grid","Box","theme","colors","neutral200","borderRadius","GridCell","formatNumber","locale","number","Intl","NumberFormat","notation","maximumFractionDigits","format","LinkCell","Link","spaces","KeyStatisticsWidget","trackUsage","useTracking","formatMessage","useIntl","data","countDocuments","isLoading","isLoadingCountDocuments","useGetCountDocumentsQuery","countKeyStatistics","isLoadingKeyStatistics","useGetKeyStatisticsQuery","Widget","Loading","Error","keyStatisticsList","entries","label","defaultMessage","icon","component","Files","background","color","link","assets","Images","contentTypes","Layout","components","Graph","locales","Earth","admins","User","webhooks","Webhooks","apiTokens","Key","draft","published","modified","totalCountEntries","Object","key","item","value","as","to","data-testid","onClick","itemKey","alignItems","padding"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Widgets.js","sources":["../../../../../admin/src/components/Widgets.tsx"],"sourcesContent":["import { useAuth, useTracking } from '@strapi/admin/strapi-admin';\nimport { Avatar, Badge, Box, Flex, Typography } from '@strapi/design-system';\nimport { Earth, Images, User, Key, Files, Layout, Graph, Webhooks } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useGetCountDocumentsQuery, useGetKeyStatisticsQuery } from '../services/homepage';\nimport { getDisplayName, getInitials } from '../utils/users';\n\nimport { Widget } from './WidgetHelpers';\n\n/* -------------------------------------------------------------------------------------------------\n * ProfileWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst DisplayNameTypography = styled(Typography)`\n font-size: 2.4rem;\n`;\n\nconst ProfileWidget = () => {\n const user = useAuth('User', (state) => state.user);\n const userDisplayName = getDisplayName(user);\n const initials = getInitials(user);\n\n return (\n <Flex direction=\"column\" gap={3} height=\"100%\" justifyContent=\"center\">\n <Avatar.Item delayMs={0} fallback={initials} />\n {userDisplayName && (\n <DisplayNameTypography fontWeight=\"bold\" textTransform=\"none\" textAlign=\"center\">\n {userDisplayName}\n </DisplayNameTypography>\n )}\n {user?.email && (\n <Typography variant=\"omega\" textColor=\"neutral600\">\n {user?.email}\n </Typography>\n )}\n {user?.roles?.length && (\n <Flex marginTop={2} gap={1} wrap=\"wrap\">\n {user?.roles?.map((role) => <Badge key={role.id}>{role.name}</Badge>)}\n </Flex>\n )}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Key Statistics\n * -----------------------------------------------------------------------------------------------*/\nconst Grid = styled(Box)`\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 0;\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: ${({ theme }) => theme.borderRadius};\n overflow: hidden;\n`;\n\nconst GridCell = styled(Box)`\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n\n &:nth-child(2n) {\n border-right: none;\n }\n &:nth-last-child(-n + 2) {\n border-bottom: none;\n }\n`;\n\nconst formatNumber = ({ locale, number }: { locale: string; number: number }) => {\n return new Intl.NumberFormat(locale, {\n notation: 'compact',\n maximumFractionDigits: 1,\n }).format(number);\n};\n\nconst LinkCell = styled(Link)`\n text-decoration: none;\n padding: ${({ theme }) => theme.spaces[3]};\n`;\n\nconst KeyStatisticsWidget = () => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n const { data: countDocuments, isLoading: isLoadingCountDocuments } = useGetCountDocumentsQuery();\n const { data: countKeyStatistics, isLoading: isLoadingKeyStatistics } =\n useGetKeyStatisticsQuery();\n\n if (isLoadingKeyStatistics || isLoadingCountDocuments) {\n return <Widget.Loading />;\n }\n\n if (!countKeyStatistics || !countDocuments) {\n return <Widget.Error />;\n }\n\n const keyStatisticsList = {\n entries: {\n label: {\n id: 'widget.key-statistics.list.entries',\n defaultMessage: 'Entries',\n },\n icon: {\n component: <Files />,\n background: 'primary100',\n color: 'primary600',\n },\n link: '/content-manager',\n },\n assets: {\n label: {\n id: 'widget.key-statistics.list.assets',\n defaultMessage: 'Assets',\n },\n icon: {\n component: <Images />,\n background: 'warning100',\n color: 'warning600',\n },\n link: '/plugins/upload',\n },\n contentTypes: {\n label: {\n id: 'widget.key-statistics.list.contentTypes',\n defaultMessage: 'Content-Types',\n },\n icon: {\n component: <Layout />,\n background: 'secondary100',\n color: 'secondary600',\n },\n link: '/plugins/content-type-builder',\n },\n components: {\n label: {\n id: 'widget.key-statistics.list.components',\n defaultMessage: 'Components',\n },\n icon: {\n component: <Graph />,\n background: 'alternative100',\n color: 'alternative600',\n },\n link: '/plugins/content-type-builder',\n },\n locales: {\n label: {\n id: 'widget.key-statistics.list.locales',\n defaultMessage: 'Locales',\n },\n icon: {\n component: <Earth />,\n background: 'success100',\n color: 'success600',\n },\n link: '/settings/internationalization',\n },\n admins: {\n label: {\n id: 'widget.key-statistics.list.admins',\n defaultMessage: 'Admins',\n },\n icon: {\n component: <User />,\n background: 'danger100',\n color: 'danger600',\n },\n link: '/settings/users?pageSize=10&page=1&sort=firstname',\n },\n webhooks: {\n label: {\n id: 'widget.key-statistics.list.webhooks',\n defaultMessage: 'Webhooks',\n },\n icon: {\n component: <Webhooks />,\n background: 'alternative100',\n color: 'alternative600',\n },\n link: '/settings/webhooks',\n },\n apiTokens: {\n label: {\n id: 'widget.key-statistics.list.apiTokens',\n defaultMessage: 'API Tokens',\n },\n icon: {\n component: <Key />,\n background: 'neutral100',\n color: 'neutral600',\n },\n link: '/settings/api-tokens?sort=name:ASC',\n },\n };\n\n const { draft, published, modified } = countDocuments ?? {\n draft: 0,\n published: 0,\n modified: 0,\n };\n\n const totalCountEntries = draft + published + modified;\n\n return (\n <Grid>\n {Object.entries(keyStatisticsList).map(([key, item]) => {\n const value = countKeyStatistics?.[key as keyof typeof countKeyStatistics];\n return (\n value !== null && (\n <GridCell\n as={LinkCell}\n to={item.link}\n key={`key-statistics-${key}`}\n data-testid={`stat-${key}`}\n onClick={() => trackUsage('didOpenKeyStatisticsWidgetLink', { itemKey: key })}\n >\n <Flex alignItems=\"center\" gap={2}>\n <Flex\n padding={2}\n borderRadius={1}\n background={item.icon.background}\n color={item.icon.color}\n >\n {item.icon.component}\n </Flex>\n <Flex direction=\"column\" alignItems=\"flex-start\">\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral500\">\n {formatMessage(item.label)}\n </Typography>\n <Typography variant=\"omega\" fontWeight=\"bold\" textColor=\"neutral800\">\n {formatNumber({\n locale,\n number: key === 'entries' ? totalCountEntries : value,\n })}\n </Typography>\n </Flex>\n </Flex>\n </GridCell>\n )\n );\n })}\n </Grid>\n );\n};\n\nexport { ProfileWidget, KeyStatisticsWidget };\n"],"names":["DisplayNameTypography","styled","Typography","ProfileWidget","user","useAuth","state","userDisplayName","getDisplayName","initials","getInitials","_jsxs","Flex","direction","gap","height","justifyContent","_jsx","Avatar","Item","delayMs","fallback","fontWeight","textTransform","textAlign","email","variant","textColor","roles","length","marginTop","wrap","map","role","Badge","name","id","Grid","Box","theme","colors","neutral200","borderRadius","GridCell","formatNumber","locale","number","Intl","NumberFormat","notation","maximumFractionDigits","format","LinkCell","Link","spaces","KeyStatisticsWidget","trackUsage","useTracking","formatMessage","useIntl","data","countDocuments","isLoading","isLoadingCountDocuments","useGetCountDocumentsQuery","countKeyStatistics","isLoadingKeyStatistics","useGetKeyStatisticsQuery","Widget","Loading","Error","keyStatisticsList","entries","label","defaultMessage","icon","component","Files","background","color","link","assets","Images","contentTypes","Layout","components","Graph","locales","Earth","admins","User","webhooks","Webhooks","apiTokens","Key","draft","published","modified","totalCountEntries","Object","key","item","value","as","to","data-testid","onClick","itemKey","alignItems","padding"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Widgets.mjs","sources":["../../../../../admin/src/components/Widgets.tsx"],"sourcesContent":["import { useAuth, useTracking } from '@strapi/admin/strapi-admin';\nimport { Avatar, Badge, Box, Flex, Typography } from '@strapi/design-system';\nimport { Earth, Images, User, Key, Files, Layout, Graph, Webhooks } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useGetCountDocumentsQuery, useGetKeyStatisticsQuery } from '../services/homepage';\nimport { getDisplayName, getInitials } from '../utils/users';\n\nimport { Widget } from './WidgetHelpers';\n\n/* -------------------------------------------------------------------------------------------------\n * ProfileWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst DisplayNameTypography = styled(Typography)`\n font-size: 2.4rem;\n`;\n\nconst ProfileWidget = () => {\n const user = useAuth('User', (state) => state.user);\n const userDisplayName = getDisplayName(user);\n const initials = getInitials(user);\n\n return (\n <Flex direction=\"column\" gap={3} height=\"100%\" justifyContent=\"center\">\n <Avatar.Item delayMs={0} fallback={initials} />\n {userDisplayName && (\n <DisplayNameTypography fontWeight=\"bold\" textTransform=\"none\" textAlign=\"center\">\n {userDisplayName}\n </DisplayNameTypography>\n )}\n {user?.email && (\n <Typography variant=\"omega\" textColor=\"neutral600\">\n {user?.email}\n </Typography>\n )}\n {user?.roles?.length && (\n <Flex marginTop={2} gap={1} wrap=\"wrap\">\n {user?.roles?.map((role) => <Badge key={role.id}>{role.name}</Badge>)}\n </Flex>\n )}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Key Statistics\n * -----------------------------------------------------------------------------------------------*/\nconst Grid = styled(Box)`\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 0;\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: ${({ theme }) => theme.borderRadius};\n overflow: hidden;\n`;\n\nconst GridCell = styled(Box)`\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n\n &:nth-child(2n) {\n border-right: none;\n }\n &:nth-last-child(-n + 2) {\n border-bottom: none;\n }\n`;\n\nconst formatNumber = ({ locale, number }: { locale: string; number: number }) => {\n return new Intl.NumberFormat(locale, {\n notation: 'compact',\n maximumFractionDigits: 1,\n }).format(number);\n};\n\nconst LinkCell = styled(Link)`\n text-decoration: none;\n padding: ${({ theme }) => theme.spaces[3]};\n`;\n\nconst KeyStatisticsWidget = () => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n const { data: countDocuments, isLoading: isLoadingCountDocuments } = useGetCountDocumentsQuery();\n const { data: countKeyStatistics, isLoading: isLoadingKeyStatistics } =\n useGetKeyStatisticsQuery();\n\n if (isLoadingKeyStatistics || isLoadingCountDocuments) {\n return <Widget.Loading />;\n }\n\n if (!countKeyStatistics || !countDocuments) {\n return <Widget.Error />;\n }\n\n const keyStatisticsList = {\n entries: {\n label: {\n id: 'widget.key-statistics.list.entries',\n defaultMessage: 'Entries',\n },\n icon: {\n component: <Files />,\n background: 'primary100',\n color: 'primary600',\n },\n link: '/content-manager',\n },\n assets: {\n label: {\n id: 'widget.key-statistics.list.assets',\n defaultMessage: 'Assets',\n },\n icon: {\n component: <Images />,\n background: 'warning100',\n color: 'warning600',\n },\n link: '/plugins/upload',\n },\n contentTypes: {\n label: {\n id: 'widget.key-statistics.list.contentTypes',\n defaultMessage: 'Content-Types',\n },\n icon: {\n component: <Layout />,\n background: 'secondary100',\n color: 'secondary600',\n },\n link: '/plugins/content-type-builder',\n },\n components: {\n label: {\n id: 'widget.key-statistics.list.components',\n defaultMessage: 'Components',\n },\n icon: {\n component: <Graph />,\n background: 'alternative100',\n color: 'alternative600',\n },\n link: '/plugins/content-type-builder',\n },\n locales: {\n label: {\n id: 'widget.key-statistics.list.locales',\n defaultMessage: 'Locales',\n },\n icon: {\n component: <Earth />,\n background: 'success100',\n color: 'success600',\n },\n link: '/settings/internationalization',\n },\n admins: {\n label: {\n id: 'widget.key-statistics.list.admins',\n defaultMessage: 'Admins',\n },\n icon: {\n component: <User />,\n background: 'danger100',\n color: 'danger600',\n },\n link: '/settings/users?pageSize=10&page=1&sort=firstname',\n },\n webhooks: {\n label: {\n id: 'widget.key-statistics.list.webhooks',\n defaultMessage: 'Webhooks',\n },\n icon: {\n component: <Webhooks />,\n background: 'alternative100',\n color: 'alternative600',\n },\n link: '/settings/webhooks',\n },\n apiTokens: {\n label: {\n id: 'widget.key-statistics.list.apiTokens',\n defaultMessage: 'API Tokens',\n },\n icon: {\n component: <Key />,\n background: 'neutral100',\n color: 'neutral600',\n },\n link: '/settings/api-tokens?sort=name:ASC',\n },\n };\n\n const { draft, published, modified } = countDocuments ?? {\n draft: 0,\n published: 0,\n modified: 0,\n };\n\n const totalCountEntries = draft + published + modified;\n\n return (\n <Grid>\n {Object.entries(keyStatisticsList).map(([key, item]) => {\n const value = countKeyStatistics?.[key as keyof typeof countKeyStatistics];\n return (\n value !== null && (\n <GridCell\n as={LinkCell}\n to={item.link}\n key={`key-statistics-${key}`}\n data-testid={`stat-${key}`}\n onClick={() => trackUsage('didOpenKeyStatisticsWidgetLink', { itemKey: key })}\n >\n <Flex alignItems=\"center\" gap={2}>\n <Flex\n padding={2}\n borderRadius={1}\n background={item.icon.background}\n color={item.icon.color}\n >\n {item.icon.component}\n </Flex>\n <Flex direction=\"column\" alignItems=\"flex-start\">\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral500\">\n {formatMessage(item.label)}\n </Typography>\n <Typography variant=\"omega\" fontWeight=\"bold\" textColor=\"neutral800\">\n {formatNumber({\n locale,\n number: key === 'entries' ? totalCountEntries : value,\n })}\n </Typography>\n </Flex>\n </Flex>\n </GridCell>\n )\n );\n })}\n </Grid>\n );\n};\n\nexport { ProfileWidget, KeyStatisticsWidget };\n"],"names":["DisplayNameTypography","styled","Typography","ProfileWidget","user","useAuth","state","userDisplayName","getDisplayName","initials","getInitials","_jsxs","Flex","direction","gap","height","justifyContent","_jsx","Avatar","Item","delayMs","fallback","fontWeight","textTransform","textAlign","email","variant","textColor","roles","length","marginTop","wrap","map","role","Badge","name","id","Grid","Box","theme","colors","neutral200","borderRadius","GridCell","formatNumber","locale","number","Intl","NumberFormat","notation","maximumFractionDigits","format","LinkCell","Link","spaces","KeyStatisticsWidget","trackUsage","useTracking","formatMessage","useIntl","data","countDocuments","isLoading","isLoadingCountDocuments","useGetCountDocumentsQuery","countKeyStatistics","isLoadingKeyStatistics","useGetKeyStatisticsQuery","Widget","Loading","Error","keyStatisticsList","entries","label","defaultMessage","icon","component","Files","background","color","link","assets","Images","contentTypes","Layout","components","Graph","locales","Earth","admins","User","webhooks","Webhooks","apiTokens","Key","draft","published","modified","totalCountEntries","Object","key","item","value","as","to","data-testid","onClick","itemKey","alignItems","padding"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Widgets.mjs","sources":["../../../../../admin/src/components/Widgets.tsx"],"sourcesContent":["import { useAuth, useTracking } from '@strapi/admin/strapi-admin';\nimport { Avatar, Badge, Box, Flex, Typography } from '@strapi/design-system';\nimport { Earth, Images, User, Key, Files, Layout, Graph, Webhooks } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useGetCountDocumentsQuery, useGetKeyStatisticsQuery } from '../services/homepage';\nimport { getDisplayName, getInitials } from '../utils/users';\n\nimport { Widget } from './WidgetHelpers';\n\n/* -------------------------------------------------------------------------------------------------\n * ProfileWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst DisplayNameTypography = styled(Typography)`\n font-size: 2.4rem;\n`;\n\nconst ProfileWidget = () => {\n const user = useAuth('User', (state) => state.user);\n const userDisplayName = getDisplayName(user);\n const initials = getInitials(user);\n\n return (\n <Flex direction=\"column\" gap={3} height=\"100%\" justifyContent=\"center\">\n <Avatar.Item delayMs={0} fallback={initials} />\n {userDisplayName && (\n <DisplayNameTypography fontWeight=\"bold\" textTransform=\"none\" textAlign=\"center\">\n {userDisplayName}\n </DisplayNameTypography>\n )}\n {user?.email && (\n <Typography variant=\"omega\" textColor=\"neutral600\">\n {user?.email}\n </Typography>\n )}\n {user?.roles?.length && (\n <Flex marginTop={2} gap={1} wrap=\"wrap\">\n {user?.roles?.map((role) => <Badge key={role.id}>{role.name}</Badge>)}\n </Flex>\n )}\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Key Statistics\n * -----------------------------------------------------------------------------------------------*/\nconst Grid = styled(Box)`\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 0;\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: ${({ theme }) => theme.borderRadius};\n overflow: hidden;\n`;\n\nconst GridCell = styled(Box)`\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n\n &:nth-child(2n) {\n border-right: none;\n }\n &:nth-last-child(-n + 2) {\n border-bottom: none;\n }\n`;\n\nconst formatNumber = ({ locale, number }: { locale: string; number: number }) => {\n return new Intl.NumberFormat(locale, {\n notation: 'compact',\n maximumFractionDigits: 1,\n }).format(number);\n};\n\nconst LinkCell = styled(Link)`\n text-decoration: none;\n padding: ${({ theme }) => theme.spaces[3]};\n`;\n\nconst KeyStatisticsWidget = () => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n const { data: countDocuments, isLoading: isLoadingCountDocuments } = useGetCountDocumentsQuery();\n const { data: countKeyStatistics, isLoading: isLoadingKeyStatistics } =\n useGetKeyStatisticsQuery();\n\n if (isLoadingKeyStatistics || isLoadingCountDocuments) {\n return <Widget.Loading />;\n }\n\n if (!countKeyStatistics || !countDocuments) {\n return <Widget.Error />;\n }\n\n const keyStatisticsList = {\n entries: {\n label: {\n id: 'widget.key-statistics.list.entries',\n defaultMessage: 'Entries',\n },\n icon: {\n component: <Files />,\n background: 'primary100',\n color: 'primary600',\n },\n link: '/content-manager',\n },\n assets: {\n label: {\n id: 'widget.key-statistics.list.assets',\n defaultMessage: 'Assets',\n },\n icon: {\n component: <Images />,\n background: 'warning100',\n color: 'warning600',\n },\n link: '/plugins/upload',\n },\n contentTypes: {\n label: {\n id: 'widget.key-statistics.list.contentTypes',\n defaultMessage: 'Content-Types',\n },\n icon: {\n component: <Layout />,\n background: 'secondary100',\n color: 'secondary600',\n },\n link: '/plugins/content-type-builder',\n },\n components: {\n label: {\n id: 'widget.key-statistics.list.components',\n defaultMessage: 'Components',\n },\n icon: {\n component: <Graph />,\n background: 'alternative100',\n color: 'alternative600',\n },\n link: '/plugins/content-type-builder',\n },\n locales: {\n label: {\n id: 'widget.key-statistics.list.locales',\n defaultMessage: 'Locales',\n },\n icon: {\n component: <Earth />,\n background: 'success100',\n color: 'success600',\n },\n link: '/settings/internationalization',\n },\n admins: {\n label: {\n id: 'widget.key-statistics.list.admins',\n defaultMessage: 'Admins',\n },\n icon: {\n component: <User />,\n background: 'danger100',\n color: 'danger600',\n },\n link: '/settings/users?pageSize=10&page=1&sort=firstname',\n },\n webhooks: {\n label: {\n id: 'widget.key-statistics.list.webhooks',\n defaultMessage: 'Webhooks',\n },\n icon: {\n component: <Webhooks />,\n background: 'alternative100',\n color: 'alternative600',\n },\n link: '/settings/webhooks',\n },\n apiTokens: {\n label: {\n id: 'widget.key-statistics.list.apiTokens',\n defaultMessage: 'API Tokens',\n },\n icon: {\n component: <Key />,\n background: 'neutral100',\n color: 'neutral600',\n },\n link: '/settings/api-tokens?sort=name:ASC',\n },\n };\n\n const { draft, published, modified } = countDocuments ?? {\n draft: 0,\n published: 0,\n modified: 0,\n };\n\n const totalCountEntries = draft + published + modified;\n\n return (\n <Grid>\n {Object.entries(keyStatisticsList).map(([key, item]) => {\n const value = countKeyStatistics?.[key as keyof typeof countKeyStatistics];\n return (\n value !== null && (\n <GridCell\n as={LinkCell}\n to={item.link}\n key={`key-statistics-${key}`}\n data-testid={`stat-${key}`}\n onClick={() => trackUsage('didOpenKeyStatisticsWidgetLink', { itemKey: key })}\n >\n <Flex alignItems=\"center\" gap={2}>\n <Flex\n padding={2}\n borderRadius={1}\n background={item.icon.background}\n color={item.icon.color}\n >\n {item.icon.component}\n </Flex>\n <Flex direction=\"column\" alignItems=\"flex-start\">\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral500\">\n {formatMessage(item.label)}\n </Typography>\n <Typography variant=\"omega\" fontWeight=\"bold\" textColor=\"neutral800\">\n {formatNumber({\n locale,\n number: key === 'entries' ? totalCountEntries : value,\n })}\n </Typography>\n </Flex>\n </Flex>\n </GridCell>\n )\n );\n })}\n </Grid>\n );\n};\n\nexport { ProfileWidget, KeyStatisticsWidget };\n"],"names":["DisplayNameTypography","styled","Typography","ProfileWidget","user","useAuth","state","userDisplayName","getDisplayName","initials","getInitials","_jsxs","Flex","direction","gap","height","justifyContent","_jsx","Avatar","Item","delayMs","fallback","fontWeight","textTransform","textAlign","email","variant","textColor","roles","length","marginTop","wrap","map","role","Badge","name","id","Grid","Box","theme","colors","neutral200","borderRadius","GridCell","formatNumber","locale","number","Intl","NumberFormat","notation","maximumFractionDigits","format","LinkCell","Link","spaces","KeyStatisticsWidget","trackUsage","useTracking","formatMessage","useIntl","data","countDocuments","isLoading","isLoadingCountDocuments","useGetCountDocumentsQuery","countKeyStatistics","isLoadingKeyStatistics","useGetKeyStatisticsQuery","Widget","Loading","Error","keyStatisticsList","entries","label","defaultMessage","icon","component","Files","background","color","link","assets","Images","contentTypes","Layout","components","Graph","locales","Earth","admins","User","webhooks","Webhooks","apiTokens","Key","draft","published","modified","totalCountEntries","Object","key","item","value","as","to","data-testid","onClick","itemKey","alignItems","padding"],"mappings":"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"}
|