@strapi/content-manager 5.59.0 → 5.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/constants/customOrder.js +14 -0
- package/dist/admin/constants/customOrder.js.map +1 -0
- package/dist/admin/constants/customOrder.mjs +10 -0
- package/dist/admin/constants/customOrder.mjs.map +1 -0
- package/dist/admin/history/components/VersionInputRenderer.js +2 -1
- package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.mjs +2 -1
- package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
- package/dist/admin/hooks/useDocument.js +22 -11
- package/dist/admin/hooks/useDocument.js.map +1 -1
- package/dist/admin/hooks/useDocument.mjs +22 -11
- package/dist/admin/hooks/useDocument.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentLayout.js.map +1 -1
- package/dist/admin/hooks/useDocumentLayout.mjs.map +1 -1
- package/dist/admin/hooks/useHasBeenNearViewport.js +70 -0
- package/dist/admin/hooks/useHasBeenNearViewport.js.map +1 -0
- package/dist/admin/hooks/useHasBeenNearViewport.mjs +46 -0
- package/dist/admin/hooks/useHasBeenNearViewport.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +102 -32
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs +104 -35
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +20 -17
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +20 -17
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +15 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +17 -3
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js +21 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs +22 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +2 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +2 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +4 -7
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +4 -7
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +46 -10
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +47 -11
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.js +201 -50
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +202 -52
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +3 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +3 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/Settings.js +31 -2
- package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/Settings.mjs +31 -2
- package/dist/admin/pages/ListConfiguration/components/Settings.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +196 -132
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +196 -132
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/CustomOrder.js +571 -0
- package/dist/admin/pages/ListView/components/CustomOrder.js.map +1 -0
- package/dist/admin/pages/ListView/components/CustomOrder.mjs +546 -0
- package/dist/admin/pages/ListView/components/CustomOrder.mjs.map +1 -0
- package/dist/admin/pages/ListView/components/TableActions.js +4 -1
- package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.mjs +4 -1
- package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
- package/dist/admin/preview/components/PreviewSidePanel.js +2 -1
- package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
- package/dist/admin/preview/components/PreviewSidePanel.mjs +2 -1
- package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
- package/dist/admin/preview/utils/getPreviewUrlStatus.js +17 -0
- package/dist/admin/preview/utils/getPreviewUrlStatus.js.map +1 -0
- package/dist/admin/preview/utils/getPreviewUrlStatus.mjs +15 -0
- package/dist/admin/preview/utils/getPreviewUrlStatus.mjs.map +1 -0
- package/dist/admin/services/documents.js +22 -1
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs +21 -2
- package/dist/admin/services/documents.mjs.map +1 -1
- package/dist/admin/src/constants/customOrder.d.ts +8 -0
- package/dist/admin/src/exports.d.ts +1 -1
- package/dist/admin/src/history/components/VersionInputRenderer.d.ts +3 -1
- package/dist/admin/src/hooks/useDocument.d.ts +4 -0
- package/dist/admin/src/hooks/useDocumentLayout.d.ts +6 -2
- package/dist/admin/src/hooks/useHasBeenNearViewport.d.ts +13 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.d.ts +13 -1
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +11 -1
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +2 -0
- package/dist/admin/src/pages/ListView/components/CustomOrder.d.ts +72 -0
- package/dist/admin/src/preview/utils/getPreviewUrlStatus.d.ts +6 -0
- package/dist/admin/src/services/documents.d.ts +10 -2
- package/dist/admin/translations/en.json.js +9 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +9 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/server/audit-logs.js +36 -0
- package/dist/server/audit-logs.js.map +1 -0
- package/dist/server/audit-logs.mjs +33 -0
- package/dist/server/audit-logs.mjs.map +1 -0
- package/dist/server/bootstrap.js +8 -0
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs +8 -0
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/controllers/collection-types.js +8 -0
- package/dist/server/controllers/collection-types.js.map +1 -1
- package/dist/server/controllers/collection-types.mjs +8 -0
- package/dist/server/controllers/collection-types.mjs.map +1 -1
- package/dist/server/controllers/content-types.js +15 -0
- package/dist/server/controllers/content-types.js.map +1 -1
- package/dist/server/controllers/content-types.mjs +16 -1
- package/dist/server/controllers/content-types.mjs.map +1 -1
- package/dist/server/controllers/index.js +3 -1
- package/dist/server/controllers/index.js.map +1 -1
- package/dist/server/controllers/index.mjs +2 -0
- package/dist/server/controllers/index.mjs.map +1 -1
- package/dist/server/controllers/relations.js +53 -17
- package/dist/server/controllers/relations.js.map +1 -1
- package/dist/server/controllers/relations.mjs +54 -18
- package/dist/server/controllers/relations.mjs.map +1 -1
- package/dist/server/controllers/single-types.js +10 -1
- package/dist/server/controllers/single-types.js.map +1 -1
- package/dist/server/controllers/single-types.mjs +10 -1
- package/dist/server/controllers/single-types.mjs.map +1 -1
- package/dist/server/controllers/validation/model-configuration.js +2 -1
- package/dist/server/controllers/validation/model-configuration.js.map +1 -1
- package/dist/server/controllers/validation/model-configuration.mjs +2 -1
- package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
- package/dist/server/custom-order/constants.js +21 -0
- package/dist/server/custom-order/constants.js.map +1 -0
- package/dist/server/custom-order/constants.mjs +17 -0
- package/dist/server/custom-order/constants.mjs.map +1 -0
- package/dist/server/custom-order/controllers/custom-order.js +77 -0
- package/dist/server/custom-order/controllers/custom-order.js.map +1 -0
- package/dist/server/custom-order/controllers/custom-order.mjs +75 -0
- package/dist/server/custom-order/controllers/custom-order.mjs.map +1 -0
- package/dist/server/custom-order/controllers/index.js +10 -0
- package/dist/server/custom-order/controllers/index.js.map +1 -0
- package/dist/server/custom-order/controllers/index.mjs +8 -0
- package/dist/server/custom-order/controllers/index.mjs.map +1 -0
- package/dist/server/custom-order/index.js +71 -0
- package/dist/server/custom-order/index.js.map +1 -0
- package/dist/server/custom-order/index.mjs +69 -0
- package/dist/server/custom-order/index.mjs.map +1 -0
- package/dist/server/custom-order/routes/custom-order.js +38 -0
- package/dist/server/custom-order/routes/custom-order.js.map +1 -0
- package/dist/server/custom-order/routes/custom-order.mjs +36 -0
- package/dist/server/custom-order/routes/custom-order.mjs.map +1 -0
- package/dist/server/custom-order/routes/index.js +13 -0
- package/dist/server/custom-order/routes/index.js.map +1 -0
- package/dist/server/custom-order/routes/index.mjs +11 -0
- package/dist/server/custom-order/routes/index.mjs.map +1 -0
- package/dist/server/custom-order/services/custom-order.js +286 -0
- package/dist/server/custom-order/services/custom-order.js.map +1 -0
- package/dist/server/custom-order/services/custom-order.mjs +284 -0
- package/dist/server/custom-order/services/custom-order.mjs.map +1 -0
- package/dist/server/custom-order/services/document-middleware.js +83 -0
- package/dist/server/custom-order/services/document-middleware.js.map +1 -0
- package/dist/server/custom-order/services/document-middleware.mjs +81 -0
- package/dist/server/custom-order/services/document-middleware.mjs.map +1 -0
- package/dist/server/custom-order/services/index.js +10 -0
- package/dist/server/custom-order/services/index.js.map +1 -0
- package/dist/server/custom-order/services/index.mjs +8 -0
- package/dist/server/custom-order/services/index.mjs.map +1 -0
- package/dist/server/custom-order/services/utils.js +152 -0
- package/dist/server/custom-order/services/utils.js.map +1 -0
- package/dist/server/custom-order/services/utils.mjs +148 -0
- package/dist/server/custom-order/services/utils.mjs.map +1 -0
- package/dist/server/custom-order/utils.js +13 -0
- package/dist/server/custom-order/utils.js.map +1 -0
- package/dist/server/custom-order/utils.mjs +10 -0
- package/dist/server/custom-order/utils.mjs.map +1 -0
- package/dist/server/history/constants.js +2 -1
- package/dist/server/history/constants.js.map +1 -1
- package/dist/server/history/constants.mjs +2 -1
- package/dist/server/history/constants.mjs.map +1 -1
- package/dist/server/history/controllers/history-version.js +6 -2
- package/dist/server/history/controllers/history-version.js.map +1 -1
- package/dist/server/history/controllers/history-version.mjs +6 -2
- package/dist/server/history/controllers/history-version.mjs.map +1 -1
- package/dist/server/history/services/history.js +24 -7
- package/dist/server/history/services/history.js.map +1 -1
- package/dist/server/history/services/history.mjs +25 -8
- package/dist/server/history/services/history.mjs.map +1 -1
- package/dist/server/history/services/lifecycles.js +2 -16
- package/dist/server/history/services/lifecycles.js.map +1 -1
- package/dist/server/history/services/lifecycles.mjs +2 -16
- package/dist/server/history/services/lifecycles.mjs.map +1 -1
- package/dist/server/mcp/schemas/filters-schema.js +10 -2
- package/dist/server/mcp/schemas/filters-schema.js.map +1 -1
- package/dist/server/mcp/schemas/filters-schema.mjs +10 -2
- package/dist/server/mcp/schemas/filters-schema.mjs.map +1 -1
- package/dist/server/preview/controllers/validation/preview.js +1 -1
- package/dist/server/preview/controllers/validation/preview.js.map +1 -1
- package/dist/server/preview/controllers/validation/preview.mjs +2 -2
- package/dist/server/preview/controllers/validation/preview.mjs.map +1 -1
- package/dist/server/register.js +4 -0
- package/dist/server/register.js.map +1 -1
- package/dist/server/register.mjs +4 -0
- package/dist/server/register.mjs.map +1 -1
- package/dist/server/routes/index.js +3 -1
- package/dist/server/routes/index.js.map +1 -1
- package/dist/server/routes/index.mjs +2 -0
- package/dist/server/routes/index.mjs.map +1 -1
- package/dist/server/services/content-types.js +2 -2
- package/dist/server/services/content-types.js.map +1 -1
- package/dist/server/services/content-types.mjs +2 -2
- package/dist/server/services/content-types.mjs.map +1 -1
- package/dist/server/services/document-manager.js +13 -0
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +14 -1
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/document-metadata.js +1 -1
- package/dist/server/services/document-metadata.js.map +1 -1
- package/dist/server/services/document-metadata.mjs +1 -1
- package/dist/server/services/document-metadata.mjs.map +1 -1
- package/dist/server/services/index.js +3 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +2 -0
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/services/utils/configuration/settings.js +2 -1
- package/dist/server/services/utils/configuration/settings.js.map +1 -1
- package/dist/server/services/utils/configuration/settings.mjs +2 -1
- package/dist/server/services/utils/configuration/settings.mjs.map +1 -1
- package/dist/server/src/audit-logs.d.ts +40 -0
- package/dist/server/src/audit-logs.d.ts.map +1 -0
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/controllers/content-types.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +21 -3
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/relations.d.ts +19 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/single-types.d.ts +1 -1
- package/dist/server/src/controllers/single-types.d.ts.map +1 -1
- package/dist/server/src/custom-order/constants.d.ts +18 -0
- package/dist/server/src/custom-order/constants.d.ts.map +1 -0
- package/dist/server/src/custom-order/controllers/custom-order.d.ts +8 -0
- package/dist/server/src/custom-order/controllers/custom-order.d.ts.map +1 -0
- package/dist/server/src/custom-order/controllers/index.d.ts +3 -0
- package/dist/server/src/custom-order/controllers/index.d.ts.map +1 -0
- package/dist/server/src/custom-order/index.d.ts +8 -0
- package/dist/server/src/custom-order/index.d.ts.map +1 -0
- package/dist/server/src/custom-order/routes/custom-order.d.ts +4 -0
- package/dist/server/src/custom-order/routes/custom-order.d.ts.map +1 -0
- package/dist/server/src/custom-order/routes/index.d.ts +10 -0
- package/dist/server/src/custom-order/routes/index.d.ts.map +1 -0
- package/dist/server/src/custom-order/services/custom-order.d.ts +43 -0
- package/dist/server/src/custom-order/services/custom-order.d.ts.map +1 -0
- package/dist/server/src/custom-order/services/document-middleware.d.ts +16 -0
- package/dist/server/src/custom-order/services/document-middleware.d.ts.map +1 -0
- package/dist/server/src/custom-order/services/index.d.ts +24 -0
- package/dist/server/src/custom-order/services/index.d.ts.map +1 -0
- package/dist/server/src/custom-order/services/utils.d.ts +34 -0
- package/dist/server/src/custom-order/services/utils.d.ts.map +1 -0
- package/dist/server/src/custom-order/utils.d.ts +6 -0
- package/dist/server/src/custom-order/utils.d.ts.map +1 -0
- package/dist/server/src/history/constants.d.ts.map +1 -1
- package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
- package/dist/server/src/history/services/history.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +22 -6
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/mcp/schemas/filters-schema.d.ts.map +1 -1
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/services/content-types.d.ts +1 -3
- package/dist/server/src/services/content-types.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +1 -3
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/settings.d.ts.map +1 -1
- package/dist/shared/contracts/content-types.d.ts +5 -0
- package/dist/shared/contracts/content-types.d.ts.map +1 -1
- package/dist/shared/contracts/custom-order.d.ts +33 -0
- package/dist/shared/contracts/custom-order.d.ts.map +1 -0
- package/dist/shared/contracts/custom-order.js +3 -0
- package/dist/shared/contracts/custom-order.js.map +1 -0
- package/dist/shared/contracts/custom-order.mjs +2 -0
- package/dist/shared/contracts/custom-order.mjs.map +1 -0
- package/dist/shared/contracts/history-versions.d.ts +0 -1
- package/dist/shared/contracts/history-versions.d.ts.map +1 -1
- package/dist/shared/contracts/index.d.ts +1 -0
- package/dist/shared/contracts/index.d.ts.map +1 -1
- package/dist/shared/contracts/index.js +2 -0
- package/dist/shared/contracts/index.js.map +1 -1
- package/dist/shared/contracts/index.mjs +2 -0
- package/dist/shared/contracts/index.mjs.map +1 -1
- package/package.json +10 -10
|
@@ -3,6 +3,8 @@ import * as React from 'react';
|
|
|
3
3
|
import { useForm, InputRenderer } from '@strapi/admin/strapi-admin';
|
|
4
4
|
import { useCollator, Flex, Typography, Grid } from '@strapi/design-system';
|
|
5
5
|
import { useIntl } from 'react-intl';
|
|
6
|
+
import { COLLECTION_TYPES } from '../../../constants/collections.mjs';
|
|
7
|
+
import { isCustomOrderFeatureEnabled } from '../../../constants/customOrder.mjs';
|
|
6
8
|
import { useDoc } from '../../../hooks/useDocument.mjs';
|
|
7
9
|
import { getTranslation } from '../../../utils/translations.mjs';
|
|
8
10
|
|
|
@@ -20,8 +22,10 @@ const Settings = ()=>{
|
|
|
20
22
|
const formatter = useCollator(locale, {
|
|
21
23
|
sensitivity: 'base'
|
|
22
24
|
});
|
|
23
|
-
const { schema } = useDoc();
|
|
25
|
+
const { schema, collectionType } = useDoc();
|
|
24
26
|
const layout = useForm('Settings', (state)=>state.values.layout ?? []);
|
|
27
|
+
const hasCustomOrder = useForm('Settings', (state)=>state.values.settings.customOrder);
|
|
28
|
+
const canUseCustomOrder = collectionType === COLLECTION_TYPES && isCustomOrderFeatureEnabled();
|
|
25
29
|
const currentSortBy = useForm('Settings', (state)=>state.values.settings.defaultSortBy);
|
|
26
30
|
const onChange = useForm('Settings', (state)=>state.onChange);
|
|
27
31
|
const sortOptions = React.useMemo(()=>Object.values(layout).reduce((acc, field)=>{
|
|
@@ -47,10 +51,17 @@ const Settings = ()=>{
|
|
|
47
51
|
onChange,
|
|
48
52
|
sortOptionsSorted
|
|
49
53
|
]);
|
|
50
|
-
const formLayout = React.useMemo(()=>
|
|
54
|
+
const formLayout = React.useMemo(()=>[
|
|
55
|
+
...SETTINGS_FORM_LAYOUT,
|
|
56
|
+
...canUseCustomOrder ? [
|
|
57
|
+
CUSTOM_ORDER_FORM_LAYOUT
|
|
58
|
+
] : []
|
|
59
|
+
].map((row)=>row.map((field)=>{
|
|
51
60
|
if (field.type === 'enumeration') {
|
|
52
61
|
return {
|
|
53
62
|
...field,
|
|
63
|
+
// The custom order takes over the default sort of the list
|
|
64
|
+
disabled: canUseCustomOrder && hasCustomOrder && isDefaultSortField(field.name),
|
|
54
65
|
hint: field.hint ? formatMessage(field.hint) : undefined,
|
|
55
66
|
label: formatMessage(field.label),
|
|
56
67
|
options: field.name === 'settings.defaultSortBy' ? sortOptionsSorted : field.options
|
|
@@ -63,7 +74,9 @@ const Settings = ()=>{
|
|
|
63
74
|
};
|
|
64
75
|
}
|
|
65
76
|
})), [
|
|
77
|
+
canUseCustomOrder,
|
|
66
78
|
formatMessage,
|
|
79
|
+
hasCustomOrder,
|
|
67
80
|
sortOptionsSorted
|
|
68
81
|
]);
|
|
69
82
|
return /*#__PURE__*/ jsxs(Flex, {
|
|
@@ -175,6 +188,22 @@ const SETTINGS_FORM_LAYOUT = [
|
|
|
175
188
|
}
|
|
176
189
|
]
|
|
177
190
|
];
|
|
191
|
+
const CUSTOM_ORDER_FORM_LAYOUT = [
|
|
192
|
+
{
|
|
193
|
+
hint: {
|
|
194
|
+
id: getTranslation('form.Input.customOrder.hint'),
|
|
195
|
+
defaultMessage: 'Arrange entries by hand in the list view. New entries are added on top. The Content API returns entries in this order when no sort is requested.'
|
|
196
|
+
},
|
|
197
|
+
label: {
|
|
198
|
+
id: getTranslation('form.Input.customOrder'),
|
|
199
|
+
defaultMessage: 'Enable custom order'
|
|
200
|
+
},
|
|
201
|
+
name: 'settings.customOrder',
|
|
202
|
+
size: 6,
|
|
203
|
+
type: 'boolean'
|
|
204
|
+
}
|
|
205
|
+
];
|
|
206
|
+
const isDefaultSortField = (name)=>name === 'settings.defaultSortBy' || name === 'settings.defaultSortOrder';
|
|
178
207
|
|
|
179
208
|
export { Settings };
|
|
180
209
|
//# sourceMappingURL=Settings.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Settings.mjs","sources":["../../../../../admin/src/pages/ListConfiguration/components/Settings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm, InputRenderer, type InputProps } from '@strapi/admin/strapi-admin';\nimport { Flex, Grid, Typography, useCollator } from '@strapi/design-system';\nimport { type MessageDescriptor, useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { type EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport { getTranslation } from '../../../utils/translations';\nimport { type FormData } from '../ListConfigurationPage';\n\nimport type { DistributiveOmit } from 'react-redux';\n\nexport type InputPropsWithMessageDescriptors = DistributiveOmit<\n InputProps,\n 'hint' | 'label' | 'placeholder'\n> & {\n hint?: MessageDescriptor;\n label: MessageDescriptor;\n placeholder?: MessageDescriptor;\n};\n\n/**\n * @internal\n * @description Form inputs are always displayed in a grid, so we need\n * to use the size property to determine how many columns the input should\n * take up.\n */\nexport type FormLayoutInputProps = InputPropsWithMessageDescriptors & { size: number };\n\nconst EXCLUDED_SORT_ATTRIBUTE_TYPES = new Set([\n 'media',\n 'richtext',\n 'dynamiczone',\n 'relation',\n 'component',\n 'json',\n 'blocks',\n]);\n\ninterface SortOption {\n value: string;\n label: string;\n}\n\nconst Settings = () => {\n const { formatMessage, locale } = useIntl();\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n const { schema } = useDoc();\n\n const layout = useForm<FormData['layout']>(\n 'Settings',\n (state) => (state.values as FormData).layout ?? []\n );\n const currentSortBy = useForm<FormData['settings']['defaultSortBy']>(\n 'Settings',\n (state) => (state.values as FormData).settings.defaultSortBy\n );\n const onChange = useForm('Settings', (state) => state.onChange);\n\n const sortOptions = React.useMemo(\n () =>\n Object.values(layout).reduce<SortOption[]>((acc, field) => {\n if (schema && !EXCLUDED_SORT_ATTRIBUTE_TYPES.has(schema.attributes[field.name].type)) {\n acc.push({\n value: field.name,\n label: typeof field.label !== 'string' ? formatMessage(field.label) : field.label,\n });\n }\n\n return acc;\n }, []),\n [formatMessage, layout, schema]\n );\n\n const sortOptionsSorted = sortOptions.sort((a, b) => formatter.compare(a.label, b.label));\n\n React.useEffect(() => {\n if (sortOptionsSorted.findIndex((opt) => opt.value === currentSortBy) === -1) {\n onChange('settings.defaultSortBy', sortOptionsSorted[0]?.value);\n }\n }, [currentSortBy, onChange, sortOptionsSorted]);\n\n const formLayout = React.useMemo(\n () =>\n SETTINGS_FORM_LAYOUT.map((row) =>\n row.map((field) => {\n if (field.type === 'enumeration') {\n return {\n ...field,\n hint: field.hint ? formatMessage(field.hint) : undefined,\n label: formatMessage(field.label),\n options: field.name === 'settings.defaultSortBy' ? sortOptionsSorted : field.options,\n };\n } else {\n return {\n ...field,\n hint: field.hint ? formatMessage(field.hint) : undefined,\n label: formatMessage(field.label),\n };\n }\n })\n ) as [top: EditFieldLayout[], bottom: EditFieldLayout[]],\n [formatMessage, sortOptionsSorted]\n );\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.settings'),\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid.Root key=\"bottom\" gap={4}>\n {formLayout.map((row) =>\n row.map(({ size, ...field }) => (\n <Grid.Item key={field.name} xs={12} col={size} direction=\"column\" alignItems=\"stretch\">\n {/* @ts-expect-error – issue with EnumerationProps conflicting with InputProps */}\n <InputRenderer {...field} />\n </Grid.Item>\n ))\n )}\n </Grid.Root>\n </Flex>\n );\n};\n\nconst SETTINGS_FORM_LAYOUT: FormLayoutInputProps[][] = [\n [\n {\n label: {\n id: getTranslation('form.Input.search'),\n defaultMessage: 'Enable search',\n },\n name: 'settings.searchable',\n size: 4,\n type: 'boolean' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.filters'),\n defaultMessage: 'Enable filters',\n },\n name: 'settings.filterable',\n size: 4,\n type: 'boolean' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.bulkActions'),\n defaultMessage: 'Enable bulk actions',\n },\n name: 'settings.bulkable',\n size: 4,\n type: 'boolean' as const,\n },\n ],\n [\n {\n hint: {\n id: getTranslation('form.Input.pageEntries.inputDescription'),\n defaultMessage: 'Note: You can override this value in the Collection Type settings page.',\n },\n label: {\n id: getTranslation('form.Input.pageEntries'),\n defaultMessage: 'Entries per page',\n },\n name: 'settings.pageSize',\n options: ['10', '20', '50', '100'].map((value) => ({ value, label: value })),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.defaultSort'),\n defaultMessage: 'Default sort attribute',\n },\n name: 'settings.defaultSortBy',\n options: [],\n size: 3,\n type: 'enumeration' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.sort.order'),\n defaultMessage: 'Default sort order',\n },\n name: 'settings.defaultSortOrder',\n options: ['ASC', 'DESC'].map((value) => ({ value, label: value })),\n size: 3,\n type: 'enumeration' as const,\n },\n ],\n];\n\nexport { Settings };\n"],"names":["EXCLUDED_SORT_ATTRIBUTE_TYPES","Set","Settings","formatMessage","locale","useIntl","formatter","useCollator","sensitivity","schema","useDoc","layout","useForm","state","values","currentSortBy","settings","defaultSortBy","onChange","sortOptions","React","useMemo","Object","reduce","acc","field","has","attributes","name","type","push","value","label","sortOptionsSorted","sort","a","b","compare","useEffect","findIndex","opt","formLayout","SETTINGS_FORM_LAYOUT","map","row","hint","undefined","options","_jsxs","Flex","direction","alignItems","gap","_jsx","Typography","variant","tag","id","getTranslation","defaultMessage","Grid","Root","size","Item","xs","col","InputRenderer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Settings.mjs","sources":["../../../../../admin/src/pages/ListConfiguration/components/Settings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm, InputRenderer, type InputProps } from '@strapi/admin/strapi-admin';\nimport { Flex, Grid, Typography, useCollator } from '@strapi/design-system';\nimport { type MessageDescriptor, useIntl } from 'react-intl';\n\nimport { COLLECTION_TYPES } from '../../../constants/collections';\nimport { isCustomOrderFeatureEnabled } from '../../../constants/customOrder';\nimport { useDoc } from '../../../hooks/useDocument';\nimport { type EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport { getTranslation } from '../../../utils/translations';\nimport { type FormData } from '../ListConfigurationPage';\n\nimport type { DistributiveOmit } from 'react-redux';\n\nexport type InputPropsWithMessageDescriptors = DistributiveOmit<\n InputProps,\n 'hint' | 'label' | 'placeholder'\n> & {\n hint?: MessageDescriptor;\n label: MessageDescriptor;\n placeholder?: MessageDescriptor;\n};\n\n/**\n * @internal\n * @description Form inputs are always displayed in a grid, so we need\n * to use the size property to determine how many columns the input should\n * take up.\n */\nexport type FormLayoutInputProps = InputPropsWithMessageDescriptors & { size: number };\n\nconst EXCLUDED_SORT_ATTRIBUTE_TYPES = new Set([\n 'media',\n 'richtext',\n 'dynamiczone',\n 'relation',\n 'component',\n 'json',\n 'blocks',\n]);\n\ninterface SortOption {\n value: string;\n label: string;\n}\n\nconst Settings = () => {\n const { formatMessage, locale } = useIntl();\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n const { schema, collectionType } = useDoc();\n\n const layout = useForm<FormData['layout']>(\n 'Settings',\n (state) => (state.values as FormData).layout ?? []\n );\n const hasCustomOrder = useForm<FormData['settings']['customOrder']>(\n 'Settings',\n (state) => (state.values as FormData).settings.customOrder\n );\n const canUseCustomOrder = collectionType === COLLECTION_TYPES && isCustomOrderFeatureEnabled();\n const currentSortBy = useForm<FormData['settings']['defaultSortBy']>(\n 'Settings',\n (state) => (state.values as FormData).settings.defaultSortBy\n );\n const onChange = useForm('Settings', (state) => state.onChange);\n\n const sortOptions = React.useMemo(\n () =>\n Object.values(layout).reduce<SortOption[]>((acc, field) => {\n if (schema && !EXCLUDED_SORT_ATTRIBUTE_TYPES.has(schema.attributes[field.name].type)) {\n acc.push({\n value: field.name,\n label: typeof field.label !== 'string' ? formatMessage(field.label) : field.label,\n });\n }\n\n return acc;\n }, []),\n [formatMessage, layout, schema]\n );\n\n const sortOptionsSorted = sortOptions.sort((a, b) => formatter.compare(a.label, b.label));\n\n React.useEffect(() => {\n if (sortOptionsSorted.findIndex((opt) => opt.value === currentSortBy) === -1) {\n onChange('settings.defaultSortBy', sortOptionsSorted[0]?.value);\n }\n }, [currentSortBy, onChange, sortOptionsSorted]);\n\n const formLayout = React.useMemo(\n () =>\n [...SETTINGS_FORM_LAYOUT, ...(canUseCustomOrder ? [CUSTOM_ORDER_FORM_LAYOUT] : [])].map(\n (row) =>\n row.map((field) => {\n if (field.type === 'enumeration') {\n return {\n ...field,\n // The custom order takes over the default sort of the list\n disabled: canUseCustomOrder && hasCustomOrder && isDefaultSortField(field.name),\n hint: field.hint ? formatMessage(field.hint) : undefined,\n label: formatMessage(field.label),\n options:\n field.name === 'settings.defaultSortBy' ? sortOptionsSorted : field.options,\n };\n } else {\n return {\n ...field,\n hint: field.hint ? formatMessage(field.hint) : undefined,\n label: formatMessage(field.label),\n };\n }\n })\n ) as EditFieldLayout[][],\n [canUseCustomOrder, formatMessage, hasCustomOrder, sortOptionsSorted]\n );\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.settings'),\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid.Root key=\"bottom\" gap={4}>\n {formLayout.map((row) =>\n row.map(({ size, ...field }) => (\n <Grid.Item key={field.name} xs={12} col={size} direction=\"column\" alignItems=\"stretch\">\n {/* @ts-expect-error – issue with EnumerationProps conflicting with InputProps */}\n <InputRenderer {...field} />\n </Grid.Item>\n ))\n )}\n </Grid.Root>\n </Flex>\n );\n};\n\nconst SETTINGS_FORM_LAYOUT: FormLayoutInputProps[][] = [\n [\n {\n label: {\n id: getTranslation('form.Input.search'),\n defaultMessage: 'Enable search',\n },\n name: 'settings.searchable',\n size: 4,\n type: 'boolean' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.filters'),\n defaultMessage: 'Enable filters',\n },\n name: 'settings.filterable',\n size: 4,\n type: 'boolean' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.bulkActions'),\n defaultMessage: 'Enable bulk actions',\n },\n name: 'settings.bulkable',\n size: 4,\n type: 'boolean' as const,\n },\n ],\n [\n {\n hint: {\n id: getTranslation('form.Input.pageEntries.inputDescription'),\n defaultMessage: 'Note: You can override this value in the Collection Type settings page.',\n },\n label: {\n id: getTranslation('form.Input.pageEntries'),\n defaultMessage: 'Entries per page',\n },\n name: 'settings.pageSize',\n options: ['10', '20', '50', '100'].map((value) => ({ value, label: value })),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.defaultSort'),\n defaultMessage: 'Default sort attribute',\n },\n name: 'settings.defaultSortBy',\n options: [],\n size: 3,\n type: 'enumeration' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.sort.order'),\n defaultMessage: 'Default sort order',\n },\n name: 'settings.defaultSortOrder',\n options: ['ASC', 'DESC'].map((value) => ({ value, label: value })),\n size: 3,\n type: 'enumeration' as const,\n },\n ],\n];\n\nconst CUSTOM_ORDER_FORM_LAYOUT: FormLayoutInputProps[] = [\n {\n hint: {\n id: getTranslation('form.Input.customOrder.hint'),\n defaultMessage:\n 'Arrange entries by hand in the list view. New entries are added on top. The Content API returns entries in this order when no sort is requested.',\n },\n label: {\n id: getTranslation('form.Input.customOrder'),\n defaultMessage: 'Enable custom order',\n },\n name: 'settings.customOrder',\n size: 6,\n type: 'boolean' as const,\n },\n];\n\nconst isDefaultSortField = (name: string) =>\n name === 'settings.defaultSortBy' || name === 'settings.defaultSortOrder';\n\nexport { Settings };\n"],"names":["EXCLUDED_SORT_ATTRIBUTE_TYPES","Set","Settings","formatMessage","locale","useIntl","formatter","useCollator","sensitivity","schema","collectionType","useDoc","layout","useForm","state","values","hasCustomOrder","settings","customOrder","canUseCustomOrder","COLLECTION_TYPES","isCustomOrderFeatureEnabled","currentSortBy","defaultSortBy","onChange","sortOptions","React","useMemo","Object","reduce","acc","field","has","attributes","name","type","push","value","label","sortOptionsSorted","sort","a","b","compare","useEffect","findIndex","opt","formLayout","SETTINGS_FORM_LAYOUT","CUSTOM_ORDER_FORM_LAYOUT","map","row","disabled","isDefaultSortField","hint","undefined","options","_jsxs","Flex","direction","alignItems","gap","_jsx","Typography","variant","tag","id","getTranslation","defaultMessage","Grid","Root","size","Item","xs","col","InputRenderer"],"mappings":"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"}
|
|
@@ -11,6 +11,8 @@ var reactIntl = require('react-intl');
|
|
|
11
11
|
var reactRouterDom = require('react-router-dom');
|
|
12
12
|
var styledComponents = require('styled-components');
|
|
13
13
|
var InjectionZone = require('../../components/InjectionZone.js');
|
|
14
|
+
var collections = require('../../constants/collections.js');
|
|
15
|
+
var customOrder = require('../../constants/customOrder.js');
|
|
14
16
|
var hooks = require('../../constants/hooks.js');
|
|
15
17
|
var plugin = require('../../constants/plugin.js');
|
|
16
18
|
var DocumentRBAC = require('../../features/DocumentRBAC.js');
|
|
@@ -25,6 +27,7 @@ var translations = require('../../utils/translations.js');
|
|
|
25
27
|
var users = require('../../utils/users.js');
|
|
26
28
|
var DocumentStatus = require('../EditView/components/DocumentStatus.js');
|
|
27
29
|
var Actions = require('./components/BulkActions/Actions.js');
|
|
30
|
+
var CustomOrder = require('./components/CustomOrder.js');
|
|
28
31
|
var Filters = require('./components/Filters.js');
|
|
29
32
|
var TableActions = require('./components/TableActions.js');
|
|
30
33
|
var CellContent = require('./components/TableCells/CellContent.js');
|
|
@@ -63,6 +66,16 @@ const NON_LINKABLE_TYPES = new Set([
|
|
|
63
66
|
* -----------------------------------------------------------------------------------------------*/ const LayoutsHeaderCustom = styledComponents.styled(strapiAdmin.Layouts.Header)`
|
|
64
67
|
overflow-wrap: anywhere;
|
|
65
68
|
`;
|
|
69
|
+
/**
|
|
70
|
+
* When the entries of the collection type follow a custom order, that order is
|
|
71
|
+
* what the list shows unless the user sorts on a column.
|
|
72
|
+
*/ const hasCustomOrderEnabled = (collectionType, settings)=>collectionType === collections.COLLECTION_TYPES && settings.customOrder === true && customOrder.isCustomOrderFeatureEnabled();
|
|
73
|
+
const getDefaultSort = (settings, hasCustomOrder)=>{
|
|
74
|
+
if (hasCustomOrder) {
|
|
75
|
+
return customOrder.CUSTOM_ORDER_SORT;
|
|
76
|
+
}
|
|
77
|
+
return settings.defaultSortBy ? `${settings.defaultSortBy}:${settings.defaultSortOrder}` : '';
|
|
78
|
+
};
|
|
66
79
|
const ListViewPage = ()=>{
|
|
67
80
|
const { trackUsage } = strapiAdmin.useTracking();
|
|
68
81
|
const navigate = reactRouterDom.useNavigate();
|
|
@@ -178,11 +191,26 @@ const ListViewPage = ()=>{
|
|
|
178
191
|
schema?.attributes,
|
|
179
192
|
schema?.uid
|
|
180
193
|
]);
|
|
194
|
+
const hasCustomOrder = hasCustomOrderEnabled(collectionType, list.settings);
|
|
181
195
|
const [{ query }, setQuery] = strapiAdmin.useQueryParams({
|
|
182
196
|
page: '1',
|
|
183
197
|
pageSize: list.settings.pageSize.toString(),
|
|
184
|
-
sort: list.settings
|
|
198
|
+
sort: getDefaultSort(list.settings, hasCustomOrder)
|
|
185
199
|
});
|
|
200
|
+
// A sort on the custom order can be left over in the URL or in the saved view
|
|
201
|
+
// after the setting has been turned off.
|
|
202
|
+
React__namespace.useEffect(()=>{
|
|
203
|
+
if (!isLoadingLayout && !hasCustomOrder && typeof query.sort === 'string' && query.sort.startsWith(`${customOrder.CUSTOM_ORDER_FIELD}:`)) {
|
|
204
|
+
setQuery(strapiAdmin.withEncodedUserParams(query, {
|
|
205
|
+
sort: undefined
|
|
206
|
+
}), 'push', true);
|
|
207
|
+
}
|
|
208
|
+
}, [
|
|
209
|
+
hasCustomOrder,
|
|
210
|
+
isLoadingLayout,
|
|
211
|
+
query,
|
|
212
|
+
setQuery
|
|
213
|
+
]);
|
|
186
214
|
React__namespace.useEffect(()=>{
|
|
187
215
|
if (!configurationReady || !schema?.attributes || schema.uid !== model) {
|
|
188
216
|
return;
|
|
@@ -247,7 +275,7 @@ const ListViewPage = ()=>{
|
|
|
247
275
|
query,
|
|
248
276
|
setQuery
|
|
249
277
|
]);
|
|
250
|
-
const { data, error, isLoading, isFetching } = documents.useGetAllDocumentsQuery({
|
|
278
|
+
const { data, error, isLoading, isFetching, fulfilledTimeStamp } = documents.useGetAllDocumentsQuery({
|
|
251
279
|
model,
|
|
252
280
|
params
|
|
253
281
|
}, {
|
|
@@ -285,10 +313,19 @@ const ListViewPage = ()=>{
|
|
|
285
313
|
query,
|
|
286
314
|
navigate
|
|
287
315
|
]);
|
|
288
|
-
const { canCreate, isLoadingActionsRBAC } = DocumentRBAC.useDocumentRBAC('ListViewPage', ({ canCreate, isLoading })=>({
|
|
316
|
+
const { canCreate, canUpdate, isLoadingActionsRBAC } = DocumentRBAC.useDocumentRBAC('ListViewPage', ({ canCreate, canUpdate, isLoading })=>({
|
|
289
317
|
canCreate,
|
|
318
|
+
canUpdate,
|
|
290
319
|
isLoadingActionsRBAC: isLoading
|
|
291
320
|
}));
|
|
321
|
+
const customOrder$1 = CustomOrder.useCustomOrder({
|
|
322
|
+
model,
|
|
323
|
+
isAvailable: hasCustomOrder,
|
|
324
|
+
canUpdate: canUpdate === true,
|
|
325
|
+
sort: query.sort,
|
|
326
|
+
params,
|
|
327
|
+
results,
|
|
328
|
+
pagination});
|
|
292
329
|
const runHookWaterfall = strapiAdmin.useStrapiApp('ListViewPage', ({ runHookWaterfall })=>runHookWaterfall);
|
|
293
330
|
/**
|
|
294
331
|
* Run the waterfall and then inject our additional table headers.
|
|
@@ -327,10 +364,26 @@ const ListViewPage = ()=>{
|
|
|
327
364
|
sortable: !hasStatusFilter
|
|
328
365
|
});
|
|
329
366
|
}
|
|
367
|
+
if (hasCustomOrder) {
|
|
368
|
+
// Sorting on this column is how the user comes back to the custom order
|
|
369
|
+
formattedHeaders.unshift({
|
|
370
|
+
attribute: {
|
|
371
|
+
type: 'custom'
|
|
372
|
+
},
|
|
373
|
+
name: customOrder.CUSTOM_ORDER_FIELD,
|
|
374
|
+
label: formatMessage({
|
|
375
|
+
id: translations.getTranslation('containers.list.table-headers.order'),
|
|
376
|
+
defaultMessage: 'order'
|
|
377
|
+
}),
|
|
378
|
+
searchable: false,
|
|
379
|
+
sortable: true
|
|
380
|
+
});
|
|
381
|
+
}
|
|
330
382
|
return formattedHeaders;
|
|
331
383
|
}, [
|
|
332
384
|
displayedHeaders,
|
|
333
385
|
formatMessage,
|
|
386
|
+
hasCustomOrder,
|
|
334
387
|
hasStatusFilter,
|
|
335
388
|
list,
|
|
336
389
|
runHookWaterfall,
|
|
@@ -368,7 +421,7 @@ const ListViewPage = ()=>{
|
|
|
368
421
|
* Only genuinely interactive cells are skipped: relations, media, components,
|
|
369
422
|
* dynamic zones (they embed their own links/menus), plugin-formatted columns
|
|
370
423
|
* (`cellFormatter`), and the synthetic `status` column.
|
|
371
|
-
*/ const linkCandidates = tableHeaders.filter(({ name, attribute, cellFormatter })=>name !== 'status' && typeof cellFormatter !== 'function' && attribute && !NON_LINKABLE_TYPES.has(attribute.type));
|
|
424
|
+
*/ const linkCandidates = tableHeaders.filter(({ name, attribute, cellFormatter })=>name !== 'status' && name !== customOrder.CUSTOM_ORDER_FIELD && typeof cellFormatter !== 'function' && attribute && !NON_LINKABLE_TYPES.has(attribute.type));
|
|
372
425
|
// The link column for a given row: the first candidate that actually has a
|
|
373
426
|
// value (uses CellContent's own hasContent so it matches the "-" the cell
|
|
374
427
|
// would otherwise render). documentId is checked directly (its own cell).
|
|
@@ -483,141 +536,152 @@ const ListViewPage = ()=>{
|
|
|
483
536
|
direction: "column",
|
|
484
537
|
alignItems: "stretch",
|
|
485
538
|
children: [
|
|
486
|
-
/*#__PURE__*/ jsxRuntime.
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
'
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
539
|
+
/*#__PURE__*/ jsxRuntime.jsx(CustomOrder.CustomOrder.Root, {
|
|
540
|
+
state: customOrder$1,
|
|
541
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Table.Root, {
|
|
542
|
+
rows: customOrder$1.rows,
|
|
543
|
+
headers: tableHeaders,
|
|
544
|
+
isLoading: isFetching && !customOrder$1.isMoving,
|
|
545
|
+
children: [
|
|
546
|
+
/*#__PURE__*/ jsxRuntime.jsx(TableActionsBar, {}),
|
|
547
|
+
/*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Table.Content, {
|
|
548
|
+
children: [
|
|
549
|
+
/*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Table.Head, {
|
|
550
|
+
children: [
|
|
551
|
+
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.HeaderCheckboxCell, {}),
|
|
552
|
+
tableHeaders.map((header)=>/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.HeaderCell, {
|
|
553
|
+
...header
|
|
554
|
+
}, header.name))
|
|
555
|
+
]
|
|
556
|
+
}),
|
|
557
|
+
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Loading, {}),
|
|
558
|
+
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Empty, {
|
|
559
|
+
action: canCreate ? /*#__PURE__*/ jsxRuntime.jsx(CreateButton, {
|
|
560
|
+
variant: "secondary"
|
|
561
|
+
}) : null
|
|
562
|
+
}),
|
|
563
|
+
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Body, {
|
|
564
|
+
children: customOrder$1.rows.map((row, index)=>{
|
|
565
|
+
const rowLinkField = getRowLinkField(row);
|
|
566
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(CustomOrder.CustomOrder.Row, {
|
|
567
|
+
cursor: "pointer",
|
|
568
|
+
documentId: row.documentId,
|
|
569
|
+
onClick: handleRowClick(row.documentId),
|
|
570
|
+
children: [
|
|
571
|
+
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.CheckboxCell, {
|
|
572
|
+
id: row.id
|
|
573
|
+
}),
|
|
574
|
+
tableHeaders.map(({ cellFormatter, ...header })=>{
|
|
575
|
+
if (header.name === customOrder.CUSTOM_ORDER_FIELD) {
|
|
576
|
+
return /*#__PURE__*/ jsxRuntime.jsx(CustomOrder.CustomOrder.PositionCell, {
|
|
577
|
+
documentId: row.documentId,
|
|
578
|
+
position: ((pagination?.page ?? 1) - 1) * (pagination?.pageSize ?? 0) + index + 1,
|
|
579
|
+
total: pagination?.total ?? customOrder$1.rows.length
|
|
580
|
+
}, header.name);
|
|
581
|
+
}
|
|
582
|
+
if (header.name === 'status') {
|
|
583
|
+
const { status } = row;
|
|
584
|
+
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
|
|
585
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(DocumentStatus.DocumentStatus, {
|
|
586
|
+
status: status,
|
|
587
|
+
maxWidth: 'min-content'
|
|
588
|
+
})
|
|
589
|
+
}, header.name);
|
|
590
|
+
}
|
|
591
|
+
if ([
|
|
592
|
+
'createdBy',
|
|
593
|
+
'updatedBy'
|
|
594
|
+
].includes(header.name.split('.')[0])) {
|
|
595
|
+
// Display the users full name
|
|
596
|
+
// Some entries doesn't have a user assigned as creator/updater (ex: entries created through content API)
|
|
597
|
+
// In this case, we display a dash
|
|
598
|
+
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
|
|
599
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
600
|
+
textColor: "neutral800",
|
|
601
|
+
children: row[header.name.split('.')[0]] ? users.getDisplayName(row[header.name.split('.')[0]]) : '-'
|
|
602
|
+
})
|
|
603
|
+
}, header.name);
|
|
604
|
+
}
|
|
605
|
+
if (header.name === 'documentId') {
|
|
606
|
+
// When documentId is the primary link column, only its
|
|
607
|
+
// id text becomes the link; the copy button stays outside.
|
|
608
|
+
const isDocumentIdLink = header.name === rowLinkField && Boolean(row.documentId);
|
|
609
|
+
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
|
|
610
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
611
|
+
gap: 2,
|
|
612
|
+
alignItems: "center",
|
|
613
|
+
width: "100%",
|
|
614
|
+
minWidth: 0,
|
|
615
|
+
children: [
|
|
616
|
+
isDocumentIdLink ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
617
|
+
tag: reactRouterDom.Link,
|
|
618
|
+
to: {
|
|
619
|
+
pathname: row.documentId,
|
|
620
|
+
search: qs.stringify({
|
|
621
|
+
plugins: query.plugins
|
|
622
|
+
})
|
|
623
|
+
},
|
|
624
|
+
onClick: (e)=>e.stopPropagation(),
|
|
625
|
+
textColor: "neutral800",
|
|
626
|
+
maxWidth: "30rem",
|
|
627
|
+
ellipsis: true,
|
|
628
|
+
children: row.documentId
|
|
629
|
+
}) : /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
630
|
+
textColor: "neutral800",
|
|
631
|
+
maxWidth: "30rem",
|
|
632
|
+
ellipsis: true,
|
|
633
|
+
children: row.documentId || '-'
|
|
578
634
|
}),
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
635
|
+
row.documentId && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
636
|
+
variant: "ghost",
|
|
637
|
+
size: "S",
|
|
638
|
+
label: formatMessage({
|
|
639
|
+
id: 'content-manager.actions.copy-documentId.label',
|
|
640
|
+
defaultMessage: 'Copy'
|
|
641
|
+
}),
|
|
642
|
+
onClick: (e)=>handleCopyDocumentId(e, row.documentId),
|
|
643
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(Icons.Duplicate, {})
|
|
644
|
+
})
|
|
645
|
+
]
|
|
646
|
+
})
|
|
647
|
+
}, header.name);
|
|
648
|
+
}
|
|
649
|
+
if (typeof cellFormatter === 'function') {
|
|
650
|
+
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
|
|
651
|
+
children: cellFormatter(row, header, {
|
|
652
|
+
collectionType,
|
|
653
|
+
model
|
|
654
|
+
})
|
|
655
|
+
}, header.name);
|
|
656
|
+
}
|
|
587
657
|
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
|
|
588
|
-
children:
|
|
589
|
-
|
|
590
|
-
|
|
658
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(CellContent.CellContent, {
|
|
659
|
+
content: row[header.name.split('.')[0]],
|
|
660
|
+
rowId: row.documentId,
|
|
661
|
+
...header,
|
|
662
|
+
linkTo: header.name === rowLinkField ? {
|
|
663
|
+
pathname: row.documentId,
|
|
664
|
+
search: qs.stringify({
|
|
665
|
+
plugins: query.plugins
|
|
666
|
+
})
|
|
667
|
+
} : undefined
|
|
591
668
|
})
|
|
592
669
|
}, header.name);
|
|
593
|
-
}
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
...header,
|
|
599
|
-
linkTo: header.name === rowLinkField ? {
|
|
600
|
-
pathname: row.documentId,
|
|
601
|
-
search: qs.stringify({
|
|
602
|
-
plugins: query.plugins
|
|
603
|
-
})
|
|
604
|
-
} : undefined
|
|
670
|
+
}),
|
|
671
|
+
/*#__PURE__*/ jsxRuntime.jsx(ActionsCell, {
|
|
672
|
+
onClick: (e)=>e.stopPropagation(),
|
|
673
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(TableActions.TableActions, {
|
|
674
|
+
document: row
|
|
605
675
|
})
|
|
606
|
-
}, header.name);
|
|
607
|
-
}),
|
|
608
|
-
/*#__PURE__*/ jsxRuntime.jsx(ActionsCell, {
|
|
609
|
-
onClick: (e)=>e.stopPropagation(),
|
|
610
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(TableActions.TableActions, {
|
|
611
|
-
document: row
|
|
612
676
|
})
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
}
|
|
677
|
+
]
|
|
678
|
+
}, row.id);
|
|
679
|
+
})
|
|
616
680
|
})
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
681
|
+
]
|
|
682
|
+
})
|
|
683
|
+
]
|
|
684
|
+
})
|
|
621
685
|
}),
|
|
622
686
|
/*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Pagination.Root, {
|
|
623
687
|
...pagination,
|