@strapi/content-manager 5.61.0 → 5.62.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/components/ConfigurationForm/Fields.js +1 -1
- package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Fields.mjs +3 -3
- package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
- package/dist/admin/features/I18nSharedFieldsLock.js +54 -0
- package/dist/admin/features/I18nSharedFieldsLock.js.map +1 -0
- package/dist/admin/features/I18nSharedFieldsLock.mjs +31 -0
- package/dist/admin/features/I18nSharedFieldsLock.mjs.map +1 -0
- package/dist/admin/history/components/VersionInputRenderer.js +7 -2
- package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.mjs +7 -3
- package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
- package/dist/admin/hooks/useContentManagerInitData.js +27 -8
- package/dist/admin/hooks/useContentManagerInitData.js.map +1 -1
- package/dist/admin/hooks/useContentManagerInitData.mjs +29 -10
- package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -1
- package/dist/admin/hooks/useDocument.js +11 -13
- package/dist/admin/hooks/useDocument.js.map +1 -1
- package/dist/admin/hooks/useDocument.mjs +11 -13
- package/dist/admin/hooks/useDocument.mjs.map +1 -1
- package/dist/admin/hooks/useI18nFieldLock.js +169 -0
- package/dist/admin/hooks/useI18nFieldLock.js.map +1 -0
- package/dist/admin/hooks/useI18nFieldLock.mjs +140 -0
- package/dist/admin/hooks/useI18nFieldLock.mjs.map +1 -0
- package/dist/admin/hooks/usePersistentQueryParams.js +16 -3
- package/dist/admin/hooks/usePersistentQueryParams.js.map +1 -1
- package/dist/admin/hooks/usePersistentQueryParams.mjs +16 -3
- package/dist/admin/hooks/usePersistentQueryParams.mjs.map +1 -1
- package/dist/admin/index.js +5 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +2 -0
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/modules/app.js +8 -1
- package/dist/admin/modules/app.js.map +1 -1
- package/dist/admin/modules/app.mjs +8 -2
- package/dist/admin/modules/app.mjs.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +129 -127
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +129 -127
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +11 -4
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +12 -5
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +31 -21
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +32 -22
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/AddComponentMenu.js +98 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/AddComponentMenu.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/AddComponentMenu.mjs +96 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/AddComponentMenu.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/ComponentCopyModal.js +1103 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/ComponentCopyModal.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/ComponentCopyModal.mjs +1077 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/ComponentCopyModal.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/CopiedComponents.js +211 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/CopiedComponents.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/CopiedComponents.mjs +183 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/CopiedComponents.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js +84 -41
- package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs +86 -43
- package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +86 -20
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +89 -23
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +5 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +5 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +142 -22
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +143 -23
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/utils/componentCopy.js +402 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/utils/componentCopy.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/utils/componentCopy.mjs +389 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/utils/componentCopy.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +84 -33
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +85 -34
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js +5 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs +5 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +17 -4
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +18 -5
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +54 -6
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +54 -6
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +11 -9
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +12 -10
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +9 -4
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +9 -4
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.js +66 -63
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +66 -63
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +7 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +7 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js +14 -9
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs +14 -9
- package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/forms.js +34 -0
- package/dist/admin/pages/EditView/utils/forms.js.map +1 -1
- package/dist/admin/pages/EditView/utils/forms.mjs +34 -1
- package/dist/admin/pages/EditView/utils/forms.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.js +2 -1
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs +2 -1
- package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js +7 -6
- package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs +7 -6
- package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +11 -2
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +13 -4
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.js +15 -5
- package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.mjs +16 -7
- package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
- package/dist/admin/preview/components/InputPopover.js +18 -8
- package/dist/admin/preview/components/InputPopover.js.map +1 -1
- package/dist/admin/preview/components/InputPopover.mjs +19 -9
- package/dist/admin/preview/components/InputPopover.mjs.map +1 -1
- package/dist/admin/preview/pages/Preview.js +5 -16
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +5 -16
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/preview/utils/fieldUtils.js +2 -0
- package/dist/admin/preview/utils/fieldUtils.js.map +1 -1
- package/dist/admin/preview/utils/fieldUtils.mjs +2 -1
- package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -1
- package/dist/admin/services/api.js +2 -1
- package/dist/admin/services/api.js.map +1 -1
- package/dist/admin/services/api.mjs +2 -1
- package/dist/admin/services/api.mjs.map +1 -1
- package/dist/admin/services/documents.js +21 -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/services/relations.js +47 -1
- package/dist/admin/services/relations.js.map +1 -1
- package/dist/admin/services/relations.mjs +47 -2
- package/dist/admin/services/relations.mjs.map +1 -1
- package/dist/admin/src/exports.d.ts +2 -0
- package/dist/admin/src/features/I18nSharedFieldsLock.d.ts +22 -0
- package/dist/admin/src/history/components/VersionInputRenderer.d.ts +7 -1
- package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
- package/dist/admin/src/hooks/useI18nFieldLock.d.ts +61 -0
- package/dist/admin/src/modules/app.d.ts +4 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/AddComponentMenu.d.ts +15 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/ComponentCopyModal.d.ts +58 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/CopiedComponents.d.ts +41 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/Initializer.d.ts +7 -3
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/NonRepeatable.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/Repeatable.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Component/utils/componentCopy.d.ts +115 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.d.ts +6 -3
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.d.ts +2 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +5 -1
- package/dist/admin/src/pages/EditView/utils/forms.d.ts +13 -2
- package/dist/admin/src/pages/ListView/components/Filters.d.ts +12 -3
- package/dist/admin/src/preview/services/preview.d.ts +1 -1
- package/dist/admin/src/preview/utils/fieldUtils.d.ts +1 -0
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/components.d.ts +2 -2
- package/dist/admin/src/services/contentTypes.d.ts +3 -3
- package/dist/admin/src/services/documents.d.ts +25 -21
- package/dist/admin/src/services/homepage.d.ts +1 -1
- package/dist/admin/src/services/init.d.ts +1 -1
- package/dist/admin/src/services/relations.d.ts +5 -3
- package/dist/admin/src/services/uid.d.ts +3 -3
- package/dist/admin/translations/en.json.js +41 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +41 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/server/controllers/relations.js +4 -2
- package/dist/server/controllers/relations.js.map +1 -1
- package/dist/server/controllers/relations.mjs +4 -2
- package/dist/server/controllers/relations.mjs.map +1 -1
- package/dist/server/controllers/utils/metadata.js +3 -1
- package/dist/server/controllers/utils/metadata.js.map +1 -1
- package/dist/server/controllers/utils/metadata.mjs +3 -1
- package/dist/server/controllers/utils/metadata.mjs.map +1 -1
- package/dist/server/history/services/utils.js +3 -1
- package/dist/server/history/services/utils.js.map +1 -1
- package/dist/server/history/services/utils.mjs +3 -1
- package/dist/server/history/services/utils.mjs.map +1 -1
- package/dist/server/homepage/services/homepage-query-utils.js +14 -0
- package/dist/server/homepage/services/homepage-query-utils.js.map +1 -1
- package/dist/server/homepage/services/homepage-query-utils.mjs +14 -1
- package/dist/server/homepage/services/homepage-query-utils.mjs.map +1 -1
- package/dist/server/homepage/services/homepage.js +1 -1
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs +2 -2
- package/dist/server/homepage/services/homepage.mjs.map +1 -1
- package/dist/server/mcp/sanitizers/shape-relations.js +1 -3
- package/dist/server/mcp/sanitizers/shape-relations.js.map +1 -1
- package/dist/server/mcp/sanitizers/shape-relations.mjs +1 -3
- package/dist/server/mcp/sanitizers/shape-relations.mjs.map +1 -1
- package/dist/server/mcp/schemas/output-schemas.js +2 -1
- package/dist/server/mcp/schemas/output-schemas.js.map +1 -1
- package/dist/server/mcp/schemas/output-schemas.mjs +2 -1
- package/dist/server/mcp/schemas/output-schemas.mjs.map +1 -1
- package/dist/server/services/document-manager.js +3 -2
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +3 -2
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/document-metadata.js +92 -4
- package/dist/server/services/document-metadata.js.map +1 -1
- package/dist/server/services/document-metadata.mjs +92 -4
- package/dist/server/services/document-metadata.mjs.map +1 -1
- package/dist/server/services/permission-checker.js +20 -8
- package/dist/server/services/permission-checker.js.map +1 -1
- package/dist/server/services/permission-checker.mjs +20 -8
- package/dist/server/services/permission-checker.mjs.map +1 -1
- package/dist/server/services/uid.js +2 -1
- package/dist/server/services/uid.js.map +1 -1
- package/dist/server/services/uid.mjs +2 -1
- package/dist/server/services/uid.mjs.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +1 -0
- package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage-query-utils.d.ts +6 -0
- package/dist/server/src/homepage/services/homepage-query-utils.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +21 -7
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/mcp/sanitizers/shape-relations.d.ts.map +1 -1
- package/dist/server/src/mcp/schemas/output-schemas.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts +5 -1
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +21 -7
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/permission-checker.d.ts +6 -5
- package/dist/server/src/services/permission-checker.d.ts.map +1 -1
- package/dist/server/src/services/uid.d.ts.map +1 -1
- package/dist/shared/contracts/collection-types.d.ts +7 -0
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/dist/shared/contracts/single-types.d.ts +4 -0
- package/dist/shared/contracts/single-types.d.ts.map +1 -1
- package/package.json +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListViewPage.mjs","sources":["../../../../admin/src/pages/ListView/ListViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n Pagination,\n SearchInput,\n Table,\n BackButton,\n useNotification,\n useStrapiApp,\n useTracking,\n useAPIErrorHandler,\n useQueryParams,\n useScopedPersistentState,\n useRBAC,\n Layouts,\n useTable,\n useIsMobile,\n useClipboard,\n tours,\n deepEncodeQueryValues,\n withEncodedUserParams,\n} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Flex,\n Typography,\n ButtonProps,\n Box,\n EmptyStateLayout,\n IconButton,\n} from '@strapi/design-system';\nimport { Duplicate, Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, Link as ReactRouterLink, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { InjectionZone } from '../../components/InjectionZone';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport {\n CUSTOM_ORDER_FIELD,\n CUSTOM_ORDER_SORT,\n isCustomOrderFeatureEnabled,\n} from '../../constants/customOrder';\nimport { HOOKS } from '../../constants/hooks';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc } from '../../hooks/useDocument';\nimport {\n ListFieldLayout,\n convertListLayoutToFieldLayouts,\n useDocumentLayout,\n} from '../../hooks/useDocumentLayout';\nimport {\n type PersistentQueryConfig,\n usePersistentPartialQueryParams,\n} from '../../hooks/usePersistentQueryParams';\nimport { usePrev } from '../../hooks/usePrev';\nimport { useGetContentTypeConfigurationQuery } from '../../services/contentTypes';\nimport { useGetAllDocumentsQuery } from '../../services/documents';\nimport { buildValidParams } from '../../utils/api';\nimport { getTranslation } from '../../utils/translations';\nimport { getDisplayName } from '../../utils/users';\nimport { DocumentStatus } from '../EditView/components/DocumentStatus';\n\nimport { BulkActionsRenderer } from './components/BulkActions/Actions';\nimport { CustomOrder, useCustomOrder } from './components/CustomOrder';\nimport { listViewFilters as Filters } from './components/Filters';\nimport { TableActions } from './components/TableActions';\nimport { CellContent, hasContent } from './components/TableCells/CellContent';\nimport { ViewSettingsMenu } from './components/ViewSettingsMenu';\nimport {\n applyAttributeRenamesToFilters,\n applyAttributeRenamesToHeaders,\n applyAttributeRenamesToSort,\n} from './utils/applyAttributeRenames';\n\nimport type { Modules } from '@strapi/types';\n\nconst { INJECT_COLUMN_IN_TABLE } = HOOKS;\nconst NON_LINKABLE_TYPES = new Set(['media', 'relation', 'component', 'dynamiczone']);\n\n/* -------------------------------------------------------------------------------------------------\n * ListViewPage\n * -----------------------------------------------------------------------------------------------*/\nconst LayoutsHeaderCustom = styled(Layouts.Header)`\n overflow-wrap: anywhere;\n`;\n\ntype ListViewQuery = {\n filters?: {\n $and?: Array<{\n __status?: {\n $eq?: unknown;\n };\n }>;\n };\n plugins?: Record<string, unknown>;\n page?: string;\n pageSize?: string;\n sort?: string;\n _q?: string;\n};\n\ntype ListSettings = ReturnType<typeof useDocumentLayout>['list']['settings'];\n\n/**\n * When the entries of the collection type follow a custom order, that order is\n * what the list shows unless the user sorts on a column.\n */\nconst hasCustomOrderEnabled = (collectionType: string, settings: ListSettings) =>\n collectionType === COLLECTION_TYPES &&\n settings.customOrder === true &&\n isCustomOrderFeatureEnabled();\n\nconst getDefaultSort = (settings: ListSettings, hasCustomOrder: boolean) => {\n if (hasCustomOrder) {\n return CUSTOM_ORDER_SORT;\n }\n\n return settings.defaultSortBy ? `${settings.defaultSortBy}:${settings.defaultSortOrder}` : '';\n};\n\nconst ListViewPage = () => {\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { copy } = useClipboard();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const isMobile = useIsMobile();\n\n const handleCopyDocumentId = React.useCallback(\n async (e: React.MouseEvent, documentId: string | undefined) => {\n e.stopPropagation();\n if (!documentId) return;\n const didCopy = await copy(documentId);\n if (didCopy) {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-manager.actions.copy-documentId.success',\n defaultMessage: 'Document ID copied to clipboard',\n }),\n });\n }\n },\n [copy, formatMessage, toggleNotification]\n );\n\n const { collectionType, model, schema } = useDoc();\n const { list, listViewConversionContext, isLoading: isLoadingLayout } = useDocumentLayout(model);\n\n const persistentQueryConfigs: PersistentQueryConfig = React.useMemo(\n () => ({\n [`STRAPI_LIST_VIEW_SETTINGS:${model}`]: {\n paths: ['sort', 'filters', 'pageSize'],\n scoped: true,\n },\n STRAPI_LOCALE: {\n paths: ['plugins.i18n.locale'],\n scoped: false,\n },\n }),\n [model]\n );\n const { isHydrated } = usePersistentPartialQueryParams(persistentQueryConfigs);\n\n const { currentData: configuration } = useGetContentTypeConfigurationQuery(model);\n const attributeRenames = React.useMemo(\n () => configuration?.contentType?.attributeRenames ?? {},\n [configuration?.contentType?.attributeRenames]\n );\n /**\n * The schema can be cached before this configuration response arrives. Dropping\n * unknown column names in that window deletes a renamed field before its new\n * name is known, and the browser cannot get it back.\n */\n const configurationReady = configuration?.contentType?.uid === model;\n\n const [displayedHeaderNames, setDisplayedHeaderNames] = useScopedPersistentState<string[] | null>(\n `STRAPI_LIST_VIEW_DISPLAYED_HEADERS:${model}`,\n null\n );\n\n const mapDisplayedHeaders = React.useCallback(\n (headers: ListFieldLayout[]) => headers.map((header) => header.name),\n []\n );\n\n const displayedHeaders: ListFieldLayout[] = React.useMemo(() => {\n if (\n !displayedHeaderNames ||\n !list.metadatas ||\n Object.keys(list.metadatas).length <= 0 ||\n !schema?.attributes ||\n !listViewConversionContext\n )\n return [];\n\n return convertListLayoutToFieldLayouts(\n displayedHeaderNames,\n schema.attributes,\n list.metadatas,\n {\n configurations: listViewConversionContext.componentConfigurations,\n schemas: listViewConversionContext.componentSchemas,\n },\n listViewConversionContext.contentTypeSchemas\n );\n }, [displayedHeaderNames, schema, list, listViewConversionContext]);\n\n const handleSetHeaders = React.useCallback(\n (headers: string[]) => {\n setDisplayedHeaderNames(headers);\n },\n [setDisplayedHeaderNames]\n );\n\n const handleResetHeaders = React.useCallback(() => {\n setDisplayedHeaderNames(mapDisplayedHeaders(list.layout));\n }, [list.layout, mapDisplayedHeaders, setDisplayedHeaderNames]);\n\n /**\n * If the persistent displayedHeaders are not yet initialized, set them to list.layout\n */\n React.useEffect(() => {\n // wait for list.layout to be loaded\n if (list.layout.length === 0) {\n return;\n }\n\n if (!displayedHeaderNames) {\n handleResetHeaders();\n }\n }, [displayedHeaderNames, handleResetHeaders, list.layout]);\n\n React.useEffect(() => {\n if (!configurationReady || !schema?.attributes) return;\n if (!displayedHeaderNames || displayedHeaderNames.length === 0) return;\n if (schema.uid !== model) return;\n\n const nextHeaders = applyAttributeRenamesToHeaders(\n displayedHeaderNames,\n schema.attributes,\n attributeRenames\n );\n const headersChanged = nextHeaders.some((name, index) => name !== displayedHeaderNames[index]);\n\n if (headersChanged || nextHeaders.length !== displayedHeaderNames.length) {\n handleSetHeaders(nextHeaders);\n }\n }, [\n attributeRenames,\n configurationReady,\n displayedHeaderNames,\n handleSetHeaders,\n model,\n schema?.attributes,\n schema?.uid,\n ]);\n\n const hasCustomOrder = hasCustomOrderEnabled(collectionType, list.settings);\n\n const [{ query }, setQuery] = useQueryParams<ListViewQuery>({\n page: '1',\n pageSize: list.settings.pageSize.toString(),\n sort: getDefaultSort(list.settings, hasCustomOrder),\n });\n\n // A sort on the custom order can be left over in the URL or in the saved view\n // after the setting has been turned off.\n React.useEffect(() => {\n if (\n !isLoadingLayout &&\n !hasCustomOrder &&\n typeof query.sort === 'string' &&\n query.sort.startsWith(`${CUSTOM_ORDER_FIELD}:`)\n ) {\n setQuery(withEncodedUserParams(query, { sort: undefined }), 'push', true);\n }\n }, [hasCustomOrder, isLoadingLayout, query, setQuery]);\n\n React.useEffect(() => {\n if (!configurationReady || !schema?.attributes || schema.uid !== model) {\n return;\n }\n\n const nextSort =\n typeof query.sort === 'string'\n ? applyAttributeRenamesToSort(query.sort, schema.attributes, attributeRenames)\n : query.sort;\n const nextFilters = query.filters\n ? applyAttributeRenamesToFilters(query.filters, schema.attributes, attributeRenames)\n : query.filters;\n const sortChanged = nextSort !== query.sort;\n const filtersChanged = JSON.stringify(nextFilters) !== JSON.stringify(query.filters);\n\n if (!sortChanged && !filtersChanged) {\n return;\n }\n\n setQuery(\n withEncodedUserParams(query, {\n ...(sortChanged ? { sort: nextSort } : {}),\n ...(filtersChanged ? { filters: deepEncodeQueryValues(nextFilters) } : {}),\n }),\n 'push',\n true\n );\n }, [\n attributeRenames,\n configurationReady,\n model,\n query,\n schema?.attributes,\n schema?.uid,\n setQuery,\n ]);\n\n const params = React.useMemo(() => {\n if (!configurationReady || !schema?.attributes || schema.uid !== model) {\n return buildValidParams(query);\n }\n\n return buildValidParams({\n ...query,\n ...(typeof query.sort === 'string'\n ? {\n sort: applyAttributeRenamesToSort(query.sort, schema.attributes, attributeRenames),\n }\n : {}),\n ...(query.filters\n ? {\n filters: applyAttributeRenamesToFilters(\n query.filters,\n schema.attributes,\n attributeRenames\n ),\n }\n : {}),\n });\n }, [attributeRenames, configurationReady, model, query, schema?.attributes, schema?.uid]);\n const hasAppliedFilters = (query.filters?.$and?.length ?? 0) > 0;\n const hasStatusFilter = Boolean(\n query.filters?.$and?.some(\n (filter) => filter.__status?.$eq !== undefined && filter.__status.$eq !== null\n )\n );\n\n // If a __status filter becomes active while sort=status:* is in the URL, strip the status sort.\n React.useEffect(() => {\n if (\n hasStatusFilter &&\n typeof query.sort === 'string' &&\n /(?:^|,)\\s*status:/i.test(query.sort)\n ) {\n const cleaned = query.sort\n .split(',')\n .map((s) => s.trim())\n .filter((s) => !/^status:(ASC|DESC)$/i.test(s))\n .join(',');\n setQuery(withEncodedUserParams(query, { sort: cleaned || undefined }), 'push', true);\n }\n }, [hasStatusFilter, query, setQuery]);\n\n const { data, error, isLoading, isFetching, fulfilledTimeStamp } = useGetAllDocumentsQuery(\n {\n model,\n params,\n },\n { skip: isLoadingLayout || !isHydrated }\n );\n\n /**\n * If the API returns an error, display a notification\n */\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n const { results = [], pagination } = data ?? {};\n\n React.useEffect(() => {\n if (pagination && pagination.pageCount > 0 && pagination.page > pagination.pageCount) {\n navigate(\n {\n search: stringify({\n ...query,\n page: pagination.pageCount,\n }),\n },\n { replace: true }\n );\n }\n }, [pagination, formatMessage, query, navigate]);\n\n const { canCreate, canUpdate, isLoadingActionsRBAC } = useDocumentRBAC(\n 'ListViewPage',\n ({ canCreate, canUpdate, isLoading }) => ({\n canCreate,\n canUpdate,\n isLoadingActionsRBAC: isLoading,\n })\n );\n\n const customOrder = useCustomOrder({\n model,\n isAvailable: hasCustomOrder,\n canUpdate: canUpdate === true,\n sort: query.sort,\n params,\n results,\n pagination,\n fulfilledTimeStamp,\n });\n\n const runHookWaterfall = useStrapiApp('ListViewPage', ({ runHookWaterfall }) => runHookWaterfall);\n /**\n * Run the waterfall and then inject our additional table headers.\n */\n const tableHeaders = React.useMemo(() => {\n const headers = runHookWaterfall(INJECT_COLUMN_IN_TABLE, {\n displayedHeaders,\n layout: list,\n });\n\n const formattedHeaders = headers.displayedHeaders.map<ListFieldLayout>((header) => {\n /**\n * When the header label is a string, it is an attribute on the current content-type:\n * Use the attribute name value to compute the translation.\n * Otherwise, it should be a translation object coming from a plugin that injects into the table (ie i18n, content-releases, review-workflows):\n * Use the translation object as is.\n */\n const translation =\n typeof header.label === 'string'\n ? {\n id: `content-manager.content-types.${model}.${header.name}`,\n defaultMessage: header.label,\n }\n : header.label;\n\n return {\n ...header,\n label: formatMessage(translation),\n name: `${header.name}${header.mainField?.name ? `.${header.mainField.name}` : ''}`,\n };\n });\n\n if (schema?.options?.draftAndPublish) {\n formattedHeaders.push({\n attribute: {\n type: 'custom',\n },\n name: 'status',\n label: formatMessage({\n id: getTranslation(`containers.list.table-headers.status`),\n defaultMessage: 'status',\n }),\n searchable: false,\n sortable: !hasStatusFilter,\n } satisfies ListFieldLayout);\n }\n\n if (hasCustomOrder) {\n // Sorting on this column is how the user comes back to the custom order\n formattedHeaders.unshift({\n attribute: {\n type: 'custom',\n },\n name: CUSTOM_ORDER_FIELD,\n label: formatMessage({\n id: getTranslation('containers.list.table-headers.order'),\n defaultMessage: 'order',\n }),\n searchable: false,\n sortable: true,\n } satisfies ListFieldLayout);\n }\n\n return formattedHeaders;\n }, [\n displayedHeaders,\n formatMessage,\n hasCustomOrder,\n hasStatusFilter,\n list,\n runHookWaterfall,\n schema?.options?.draftAndPublish,\n model,\n ]);\n\n if (isLoadingLayout || !isHydrated || isLoading || isLoadingActionsRBAC) {\n return <Page.Loading />;\n }\n\n if (error) {\n return <Page.Error />;\n }\n\n const contentTypeTitle = schema?.info.displayName\n ? formatMessage({ id: schema.info.displayName, defaultMessage: schema.info.displayName })\n : formatMessage({\n id: 'content-manager.containers.untitled',\n defaultMessage: 'Untitled',\n });\n\n const handleRowClick = (id: Modules.Documents.ID) => () => {\n trackUsage('willEditEntryFromList');\n navigate({\n pathname: id.toString(),\n search: stringify({ plugins: query.plugins }),\n });\n };\n\n /**\n * The entry link is rendered on the first non-interactive column *that has a\n * value for the row* (resolved per row, so an empty cell — rendered as \"-\" —\n * is skipped and the next candidate carries the link instead). Any scalar\n * column qualifies — text, numbers, dates (createdAt/updatedAt), `id`, and\n * `documentId` (its id text becomes the link, the copy button stays separate).\n * Only genuinely interactive cells are skipped: relations, media, components,\n * dynamic zones (they embed their own links/menus), plugin-formatted columns\n * (`cellFormatter`), and the synthetic `status` column.\n */\n const linkCandidates = tableHeaders.filter(\n ({ name, attribute, cellFormatter }) =>\n name !== 'status' &&\n name !== CUSTOM_ORDER_FIELD &&\n typeof cellFormatter !== 'function' &&\n attribute &&\n !NON_LINKABLE_TYPES.has(attribute.type)\n );\n\n // The link column for a given row: the first candidate that actually has a\n // value (uses CellContent's own hasContent so it matches the \"-\" the cell\n // would otherwise render). documentId is checked directly (its own cell).\n const getRowLinkField = (row: (typeof results)[number]) =>\n linkCandidates.find((header) => {\n if (header.name === 'documentId') {\n return Boolean(row.documentId);\n }\n const value = row[header.name.split('.')[0]];\n return hasContent(value, header.mainField, header.attribute);\n })?.name;\n\n const isEmptyState = !isFetching && results.length === 0;\n\n const endActions = (\n <>\n {isMobile && list.settings.filterable && schema && <Filters.Trigger />}\n <InjectionZone area=\"listView.actions\" />\n <ViewSettingsMenu\n setHeaders={handleSetHeaders}\n resetHeaders={handleResetHeaders}\n headers={displayedHeaderNames ?? []}\n />\n </>\n );\n\n const searchInput = (\n <>\n {list.settings.searchable && (\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: contentTypeTitle }\n )}\n placeholder={formatMessage({\n id: 'global.search',\n defaultMessage: 'Search',\n })}\n trackedEvent=\"didSearch\"\n />\n )}\n </>\n );\n\n const startActions = (\n <>\n {searchInput}\n {!isMobile && list.settings.filterable && schema && (\n <>\n <Filters.Trigger />\n <Filters.List />\n </>\n )}\n </>\n );\n\n const actions =\n list.settings.filterable && schema ? (\n <Filters.Root schema={schema} layout={list}>\n <Layouts.Action\n endActions={endActions}\n startActions={startActions}\n bottomActions={isMobile && hasAppliedFilters ? <Filters.List /> : null}\n />\n <Filters.Popover />\n </Filters.Root>\n ) : (\n <Layouts.Action endActions={endActions} startActions={startActions} />\n );\n\n return (\n <>\n <tours.contentManager.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.contentManager.Introduction>\n <Page.Main>\n <Page.Title>{`${contentTypeTitle}`}</Page.Title>\n <LayoutsHeaderCustom\n primaryAction={\n canCreate ? (\n <tours.contentManager.CreateNewEntry>\n <CreateButton />\n </tours.contentManager.CreateNewEntry>\n ) : null\n }\n subtitle={formatMessage(\n {\n id: getTranslation('pages.ListView.header-subtitle'),\n defaultMessage:\n '{number, plural, =0 {# entries} one {# entry} other {# entries}} found',\n },\n { number: pagination?.total }\n )}\n title={contentTypeTitle}\n navigationAction={<BackButton />}\n />\n {actions}\n <Layouts.Content>\n {isEmptyState ? (\n <Box background=\"neutral0\" shadow=\"filterShadow\" hasRadius>\n <EmptyStateLayout\n action={\n canCreate && (\n <Box>\n <CreateButton variant=\"secondary\" />\n </Box>\n )\n }\n content={formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n </Box>\n ) : (\n <Flex gap={4} direction=\"column\" alignItems=\"stretch\">\n <CustomOrder.Root state={customOrder}>\n <Table.Root\n rows={customOrder.rows}\n headers={tableHeaders}\n isLoading={isFetching && !customOrder.isMoving}\n >\n <TableActionsBar />\n <Table.Content>\n <Table.Head>\n <Table.HeaderCheckboxCell />\n {tableHeaders.map((header: ListFieldLayout) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Loading />\n <Table.Empty action={canCreate ? <CreateButton variant=\"secondary\" /> : null} />\n <Table.Body>\n {customOrder.rows.map((row, index) => {\n const rowLinkField = getRowLinkField(row);\n return (\n <CustomOrder.Row\n cursor=\"pointer\"\n key={row.id}\n documentId={row.documentId}\n onClick={handleRowClick(row.documentId)}\n >\n <Table.CheckboxCell id={row.id} />\n {tableHeaders.map(({ cellFormatter, ...header }) => {\n if (header.name === CUSTOM_ORDER_FIELD) {\n return (\n <CustomOrder.PositionCell\n key={header.name}\n documentId={row.documentId}\n position={\n ((pagination?.page ?? 1) - 1) * (pagination?.pageSize ?? 0) +\n index +\n 1\n }\n total={pagination?.total ?? customOrder.rows.length}\n />\n );\n }\n if (header.name === 'status') {\n const { status } = row;\n\n return (\n <Table.Cell key={header.name}>\n <DocumentStatus status={status} maxWidth={'min-content'} />\n </Table.Cell>\n );\n }\n if (['createdBy', 'updatedBy'].includes(header.name.split('.')[0])) {\n // Display the users full name\n // Some entries doesn't have a user assigned as creator/updater (ex: entries created through content API)\n // In this case, we display a dash\n return (\n <Table.Cell key={header.name}>\n <Typography textColor=\"neutral800\">\n {row[header.name.split('.')[0]]\n ? getDisplayName(row[header.name.split('.')[0]])\n : '-'}\n </Typography>\n </Table.Cell>\n );\n }\n if (header.name === 'documentId') {\n // When documentId is the primary link column, only its\n // id text becomes the link; the copy button stays outside.\n const isDocumentIdLink =\n header.name === rowLinkField && Boolean(row.documentId);\n return (\n <Table.Cell key={header.name}>\n <Flex gap={2} alignItems=\"center\" width=\"100%\" minWidth={0}>\n {isDocumentIdLink ? (\n <Typography\n tag={ReactRouterLink}\n to={{\n pathname: row.documentId,\n search: stringify({ plugins: query.plugins }),\n }}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n textColor=\"neutral800\"\n maxWidth=\"30rem\"\n ellipsis\n >\n {row.documentId}\n </Typography>\n ) : (\n <Typography\n textColor=\"neutral800\"\n maxWidth=\"30rem\"\n ellipsis\n >\n {row.documentId || '-'}\n </Typography>\n )}\n {row.documentId && (\n <IconButton\n variant=\"ghost\"\n size=\"S\"\n label={formatMessage({\n id: 'content-manager.actions.copy-documentId.label',\n defaultMessage: 'Copy',\n })}\n onClick={(e) => handleCopyDocumentId(e, row.documentId)}\n >\n <Duplicate />\n </IconButton>\n )}\n </Flex>\n </Table.Cell>\n );\n }\n if (typeof cellFormatter === 'function') {\n return (\n <Table.Cell key={header.name}>\n {cellFormatter(row, header, { collectionType, model })}\n </Table.Cell>\n );\n }\n return (\n <Table.Cell key={header.name}>\n <CellContent\n content={row[header.name.split('.')[0]]}\n rowId={row.documentId}\n {...header}\n linkTo={\n header.name === rowLinkField\n ? {\n pathname: row.documentId,\n search: stringify({ plugins: query.plugins }),\n }\n : undefined\n }\n />\n </Table.Cell>\n );\n })}\n {/* we stop propagation here to allow the menu to trigger it's events without triggering the row redirect */}\n <ActionsCell onClick={(e) => e.stopPropagation()}>\n <TableActions document={row} />\n </ActionsCell>\n </CustomOrder.Row>\n );\n })}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n </CustomOrder.Root>\n <Pagination.Root\n {...pagination}\n defaultPageSize={list.settings.pageSize}\n onPageSizeChange={() => trackUsage('willChangeNumberOfEntriesPerPage')}\n >\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Flex>\n )}\n </Layouts.Content>\n </Page.Main>\n </>\n );\n};\n\nconst ActionsCell = styled(Table.Cell)`\n display: flex;\n justify-content: flex-end;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionsBar\n * -----------------------------------------------------------------------------------------------*/\n\nconst TableActionsBar = () => {\n const selectRow = useTable('TableActionsBar', (state) => state.selectRow);\n const [{ query }] = useQueryParams<{ plugins: { i18n: { locale: string } } }>();\n const locale = query?.plugins?.i18n?.locale;\n const prevLocale = usePrev(locale);\n\n // TODO: find a better way to reset the selected rows when the locale changes across all the app\n React.useEffect(() => {\n if (prevLocale !== locale) {\n selectRow([]);\n }\n }, [selectRow, prevLocale, locale]);\n\n return (\n <Table.ActionBar>\n <BulkActionsRenderer />\n </Table.ActionBar>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CreateButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CreateButtonProps extends Pick<ButtonProps, 'variant'> {}\n\nconst CreateButton = ({ variant }: CreateButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const [{ query }] = useQueryParams<{ plugins: object }>();\n\n return (\n <Button\n variant={variant}\n tag={ReactRouterLink}\n onClick={() => {\n trackUsage('willCreateEntry', { status: 'draft' });\n }}\n startIcon={<Plus />}\n style={{ textDecoration: 'none' }}\n to={{\n pathname: 'create',\n search: stringify({ plugins: query.plugins }),\n }}\n minWidth=\"max-content\"\n fullWidth\n >\n {formatMessage({\n id: getTranslation('HeaderLayout.button.label-add-entry'),\n defaultMessage: 'Create new entry',\n })}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListViewPage = () => {\n const { slug = '' } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: slug,\n }))\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return <Page.Error />;\n }\n\n return (\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <ListViewPage key={slug} />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { ListViewPage, ProtectedListViewPage };\n"],"names":["INJECT_COLUMN_IN_TABLE","HOOKS","NON_LINKABLE_TYPES","Set","LayoutsHeaderCustom","styled","Layouts","Header","hasCustomOrderEnabled","collectionType","settings","COLLECTION_TYPES","customOrder","isCustomOrderFeatureEnabled","getDefaultSort","hasCustomOrder","CUSTOM_ORDER_SORT","defaultSortBy","defaultSortOrder","ListViewPage","trackUsage","useTracking","navigate","useNavigate","formatMessage","useIntl","toggleNotification","useNotification","copy","useClipboard","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","isMobile","useIsMobile","handleCopyDocumentId","React","useCallback","e","documentId","stopPropagation","didCopy","type","message","id","defaultMessage","model","schema","useDoc","list","listViewConversionContext","isLoading","isLoadingLayout","useDocumentLayout","persistentQueryConfigs","useMemo","paths","scoped","STRAPI_LOCALE","isHydrated","usePersistentPartialQueryParams","currentData","configuration","useGetContentTypeConfigurationQuery","attributeRenames","contentType","configurationReady","uid","displayedHeaderNames","setDisplayedHeaderNames","useScopedPersistentState","mapDisplayedHeaders","headers","map","header","name","displayedHeaders","metadatas","Object","keys","length","attributes","convertListLayoutToFieldLayouts","configurations","componentConfigurations","schemas","componentSchemas","contentTypeSchemas","handleSetHeaders","handleResetHeaders","layout","useEffect","nextHeaders","applyAttributeRenamesToHeaders","headersChanged","some","index","query","setQuery","useQueryParams","page","pageSize","toString","sort","startsWith","CUSTOM_ORDER_FIELD","withEncodedUserParams","undefined","nextSort","applyAttributeRenamesToSort","nextFilters","filters","applyAttributeRenamesToFilters","sortChanged","filtersChanged","JSON","stringify","deepEncodeQueryValues","params","buildValidParams","hasAppliedFilters","$and","hasStatusFilter","Boolean","filter","__status","$eq","test","cleaned","split","s","trim","join","data","error","isFetching","fulfilledTimeStamp","useGetAllDocumentsQuery","skip","results","pagination","pageCount","search","replace","canCreate","canUpdate","isLoadingActionsRBAC","useDocumentRBAC","useCustomOrder","isAvailable","runHookWaterfall","useStrapiApp","tableHeaders","formattedHeaders","translation","label","mainField","options","draftAndPublish","push","attribute","searchable","sortable","unshift","_jsx","Page","Loading","Error","contentTypeTitle","info","displayName","handleRowClick","pathname","plugins","linkCandidates","cellFormatter","has","getRowLinkField","row","find","value","hasContent","isEmptyState","endActions","_jsxs","_Fragment","filterable","Filters","Trigger","InjectionZone","area","ViewSettingsMenu","setHeaders","resetHeaders","searchInput","SearchInput","target","placeholder","trackedEvent","startActions","List","actions","Root","Action","bottomActions","Popover","tours","contentManager","Introduction","Box","Main","Title","primaryAction","CreateNewEntry","CreateButton","subtitle","number","total","title","navigationAction","BackButton","Content","background","shadow","hasRadius","EmptyStateLayout","action","variant","content","icon","EmptyDocuments","width","Flex","gap","direction","alignItems","CustomOrder","state","Table","rows","isMoving","TableActionsBar","Head","HeaderCheckboxCell","HeaderCell","Empty","Body","rowLinkField","Row","cursor","onClick","CheckboxCell","PositionCell","position","status","Cell","DocumentStatus","maxWidth","includes","Typography","textColor","getDisplayName","isDocumentIdLink","minWidth","tag","ReactRouterLink","to","ellipsis","IconButton","size","Duplicate","CellContent","rowId","linkTo","ActionsCell","TableActions","document","Pagination","defaultPageSize","onPageSizeChange","PageSize","Links","selectRow","useTable","locale","i18n","prevLocale","usePrev","ActionBar","BulkActionsRenderer","Button","startIcon","Plus","style","textDecoration","fullWidth","ProtectedListViewPage","slug","useParams","permissions","useRBAC","PERMISSIONS","subject","Protect","DocumentRBAC"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ListViewPage.mjs","sources":["../../../../admin/src/pages/ListView/ListViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Page,\n Pagination,\n SearchInput,\n Table,\n BackButton,\n useNotification,\n useStrapiApp,\n useTracking,\n useAPIErrorHandler,\n useQueryParams,\n useScopedPersistentState,\n useRBAC,\n Layouts,\n useTable,\n useIsMobile,\n useClipboard,\n tours,\n deepEncodeQueryValues,\n withEncodedUserParams,\n toApiFilters,\n} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Flex,\n Typography,\n ButtonProps,\n Box,\n EmptyStateLayout,\n IconButton,\n} from '@strapi/design-system';\nimport { Duplicate, Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, Link as ReactRouterLink, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { InjectionZone } from '../../components/InjectionZone';\nimport { COLLECTION_TYPES } from '../../constants/collections';\nimport {\n CUSTOM_ORDER_FIELD,\n CUSTOM_ORDER_SORT,\n isCustomOrderFeatureEnabled,\n} from '../../constants/customOrder';\nimport { HOOKS } from '../../constants/hooks';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc } from '../../hooks/useDocument';\nimport {\n ListFieldLayout,\n convertListLayoutToFieldLayouts,\n useDocumentLayout,\n} from '../../hooks/useDocumentLayout';\nimport {\n type PersistentQueryConfig,\n usePersistentPartialQueryParams,\n} from '../../hooks/usePersistentQueryParams';\nimport { usePrev } from '../../hooks/usePrev';\nimport { useGetContentTypeConfigurationQuery } from '../../services/contentTypes';\nimport { useGetAllDocumentsQuery } from '../../services/documents';\nimport { buildValidParams } from '../../utils/api';\nimport { getTranslation } from '../../utils/translations';\nimport { getDisplayName } from '../../utils/users';\nimport { DocumentStatus } from '../EditView/components/DocumentStatus';\n\nimport { BulkActionsRenderer } from './components/BulkActions/Actions';\nimport { CustomOrder, useCustomOrder } from './components/CustomOrder';\nimport { listViewFilters as Filters, useListViewFilterOptions } from './components/Filters';\nimport { TableActions } from './components/TableActions';\nimport { CellContent, hasContent } from './components/TableCells/CellContent';\nimport { ViewSettingsMenu } from './components/ViewSettingsMenu';\nimport {\n applyAttributeRenamesToFilters,\n applyAttributeRenamesToHeaders,\n applyAttributeRenamesToSort,\n} from './utils/applyAttributeRenames';\n\nimport type { Modules } from '@strapi/types';\n\nconst { INJECT_COLUMN_IN_TABLE } = HOOKS;\nconst NON_LINKABLE_TYPES = new Set(['media', 'relation', 'component', 'dynamiczone']);\n\n/* -------------------------------------------------------------------------------------------------\n * ListViewPage\n * -----------------------------------------------------------------------------------------------*/\nconst LayoutsHeaderCustom = styled(Layouts.Header)`\n overflow-wrap: anywhere;\n`;\n\ntype ListViewQuery = {\n filters?: {\n $and?: Array<{\n __status?: {\n $eq?: unknown;\n };\n }>;\n };\n plugins?: Record<string, unknown>;\n page?: string;\n pageSize?: string;\n sort?: string;\n _q?: string;\n};\n\ntype ListSettings = ReturnType<typeof useDocumentLayout>['list']['settings'];\n\n/**\n * When the entries of the collection type follow a custom order, that order is\n * what the list shows unless the user sorts on a column.\n */\nconst hasCustomOrderEnabled = (collectionType: string, settings: ListSettings) =>\n collectionType === COLLECTION_TYPES &&\n settings.customOrder === true &&\n isCustomOrderFeatureEnabled();\n\nconst getDefaultSort = (settings: ListSettings, hasCustomOrder: boolean) => {\n if (hasCustomOrder) {\n return CUSTOM_ORDER_SORT;\n }\n\n return settings.defaultSortBy ? `${settings.defaultSortBy}:${settings.defaultSortOrder}` : '';\n};\n\nconst ListViewPage = () => {\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { copy } = useClipboard();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const isMobile = useIsMobile();\n\n const handleCopyDocumentId = React.useCallback(\n async (e: React.MouseEvent, documentId: string | undefined) => {\n e.stopPropagation();\n if (!documentId) return;\n const didCopy = await copy(documentId);\n if (didCopy) {\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'content-manager.actions.copy-documentId.success',\n defaultMessage: 'Document ID copied to clipboard',\n }),\n });\n }\n },\n [copy, formatMessage, toggleNotification]\n );\n\n const { collectionType, model, schema } = useDoc();\n const { list, listViewConversionContext, isLoading: isLoadingLayout } = useDocumentLayout(model);\n\n const persistentQueryConfigs: PersistentQueryConfig = React.useMemo(\n () => ({\n [`STRAPI_LIST_VIEW_SETTINGS:${model}`]: {\n paths: ['sort', 'filters', 'pageSize'],\n scoped: true,\n },\n STRAPI_LOCALE: {\n paths: ['plugins.i18n.locale'],\n scoped: false,\n },\n }),\n [model]\n );\n const { isHydrated } = usePersistentPartialQueryParams(persistentQueryConfigs);\n\n const { currentData: configuration } = useGetContentTypeConfigurationQuery(model);\n const attributeRenames = React.useMemo(\n () => configuration?.contentType?.attributeRenames ?? {},\n [configuration?.contentType?.attributeRenames]\n );\n /**\n * The schema can be cached before this configuration response arrives. Dropping\n * unknown column names in that window deletes a renamed field before its new\n * name is known, and the browser cannot get it back.\n */\n const configurationReady = configuration?.contentType?.uid === model;\n\n const [displayedHeaderNames, setDisplayedHeaderNames] = useScopedPersistentState<string[] | null>(\n `STRAPI_LIST_VIEW_DISPLAYED_HEADERS:${model}`,\n null\n );\n\n const mapDisplayedHeaders = React.useCallback(\n (headers: ListFieldLayout[]) => headers.map((header) => header.name),\n []\n );\n\n const displayedHeaders: ListFieldLayout[] = React.useMemo(() => {\n if (\n !displayedHeaderNames ||\n !list.metadatas ||\n Object.keys(list.metadatas).length <= 0 ||\n !schema?.attributes ||\n !listViewConversionContext\n )\n return [];\n\n return convertListLayoutToFieldLayouts(\n displayedHeaderNames,\n schema.attributes,\n list.metadatas,\n {\n configurations: listViewConversionContext.componentConfigurations,\n schemas: listViewConversionContext.componentSchemas,\n },\n listViewConversionContext.contentTypeSchemas\n );\n }, [displayedHeaderNames, schema, list, listViewConversionContext]);\n\n const handleSetHeaders = React.useCallback(\n (headers: string[]) => {\n setDisplayedHeaderNames(headers);\n },\n [setDisplayedHeaderNames]\n );\n\n const handleResetHeaders = React.useCallback(() => {\n setDisplayedHeaderNames(mapDisplayedHeaders(list.layout));\n }, [list.layout, mapDisplayedHeaders, setDisplayedHeaderNames]);\n\n /**\n * If the persistent displayedHeaders are not yet initialized, set them to list.layout\n */\n React.useEffect(() => {\n // wait for list.layout to be loaded\n if (list.layout.length === 0) {\n return;\n }\n\n if (!displayedHeaderNames) {\n handleResetHeaders();\n }\n }, [displayedHeaderNames, handleResetHeaders, list.layout]);\n\n React.useEffect(() => {\n if (!configurationReady || !schema?.attributes) return;\n if (!displayedHeaderNames || displayedHeaderNames.length === 0) return;\n if (schema.uid !== model) return;\n\n const nextHeaders = applyAttributeRenamesToHeaders(\n displayedHeaderNames,\n schema.attributes,\n attributeRenames\n );\n const headersChanged = nextHeaders.some((name, index) => name !== displayedHeaderNames[index]);\n\n if (headersChanged || nextHeaders.length !== displayedHeaderNames.length) {\n handleSetHeaders(nextHeaders);\n }\n }, [\n attributeRenames,\n configurationReady,\n displayedHeaderNames,\n handleSetHeaders,\n model,\n schema?.attributes,\n schema?.uid,\n ]);\n\n const hasCustomOrder = hasCustomOrderEnabled(collectionType, list.settings);\n\n const [{ query }, setQuery] = useQueryParams<ListViewQuery>({\n page: '1',\n pageSize: list.settings.pageSize.toString(),\n sort: getDefaultSort(list.settings, hasCustomOrder),\n });\n\n // A sort on the custom order can be left over in the URL or in the saved view\n // after the setting has been turned off.\n React.useEffect(() => {\n if (\n !isLoadingLayout &&\n !hasCustomOrder &&\n typeof query.sort === 'string' &&\n query.sort.startsWith(`${CUSTOM_ORDER_FIELD}:`)\n ) {\n setQuery(withEncodedUserParams(query, { sort: undefined }), 'push', true);\n }\n }, [hasCustomOrder, isLoadingLayout, query, setQuery]);\n\n React.useEffect(() => {\n if (!configurationReady || !schema?.attributes || schema.uid !== model) {\n return;\n }\n\n const nextSort =\n typeof query.sort === 'string'\n ? applyAttributeRenamesToSort(query.sort, schema.attributes, attributeRenames)\n : query.sort;\n const nextFilters = query.filters\n ? applyAttributeRenamesToFilters(query.filters, schema.attributes, attributeRenames)\n : query.filters;\n const sortChanged = nextSort !== query.sort;\n const filtersChanged = JSON.stringify(nextFilters) !== JSON.stringify(query.filters);\n\n if (!sortChanged && !filtersChanged) {\n return;\n }\n\n setQuery(\n withEncodedUserParams(query, {\n ...(sortChanged ? { sort: nextSort } : {}),\n ...(filtersChanged ? { filters: deepEncodeQueryValues(nextFilters) } : {}),\n }),\n 'push',\n true\n );\n }, [\n attributeRenames,\n configurationReady,\n model,\n query,\n schema?.attributes,\n schema?.uid,\n setQuery,\n ]);\n\n const queryParams = React.useMemo(() => {\n if (!configurationReady || !schema?.attributes || schema.uid !== model) {\n return buildValidParams(query);\n }\n\n return buildValidParams({\n ...query,\n ...(typeof query.sort === 'string'\n ? {\n sort: applyAttributeRenamesToSort(query.sort, schema.attributes, attributeRenames),\n }\n : {}),\n ...(query.filters\n ? {\n filters: applyAttributeRenamesToFilters(\n query.filters,\n schema.attributes,\n attributeRenames\n ),\n }\n : {}),\n });\n }, [attributeRenames, configurationReady, model, query, schema?.attributes, schema?.uid]);\n const filterOptions = useListViewFilterOptions(schema, list);\n // A date-time filter stores a day or a minute: the API reads it as the instants it covers\n const params = React.useMemo(\n () =>\n queryParams.filters\n ? { ...queryParams, filters: toApiFilters(queryParams.filters, filterOptions) }\n : queryParams,\n [queryParams, filterOptions]\n );\n const hasAppliedFilters = (query.filters?.$and?.length ?? 0) > 0;\n const hasStatusFilter = Boolean(\n query.filters?.$and?.some(\n (filter) => filter.__status?.$eq !== undefined && filter.__status.$eq !== null\n )\n );\n\n // If a __status filter becomes active while sort=status:* is in the URL, strip the status sort.\n React.useEffect(() => {\n if (\n hasStatusFilter &&\n typeof query.sort === 'string' &&\n /(?:^|,)\\s*status:/i.test(query.sort)\n ) {\n const cleaned = query.sort\n .split(',')\n .map((s) => s.trim())\n .filter((s) => !/^status:(ASC|DESC)$/i.test(s))\n .join(',');\n setQuery(withEncodedUserParams(query, { sort: cleaned || undefined }), 'push', true);\n }\n }, [hasStatusFilter, query, setQuery]);\n\n const { data, error, isLoading, isFetching, fulfilledTimeStamp } = useGetAllDocumentsQuery(\n {\n model,\n params,\n },\n { skip: isLoadingLayout || !isHydrated }\n );\n\n /**\n * If the API returns an error, display a notification\n */\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n const { results = [], pagination } = data ?? {};\n\n React.useEffect(() => {\n if (pagination && pagination.pageCount > 0 && pagination.page > pagination.pageCount) {\n navigate(\n {\n search: stringify({\n ...query,\n page: pagination.pageCount,\n }),\n },\n { replace: true }\n );\n }\n }, [pagination, formatMessage, query, navigate]);\n\n const { canCreate, canUpdate, isLoadingActionsRBAC } = useDocumentRBAC(\n 'ListViewPage',\n ({ canCreate, canUpdate, isLoading }) => ({\n canCreate,\n canUpdate,\n isLoadingActionsRBAC: isLoading,\n })\n );\n\n const customOrder = useCustomOrder({\n model,\n isAvailable: hasCustomOrder,\n canUpdate: canUpdate === true,\n sort: query.sort,\n params,\n results,\n pagination,\n fulfilledTimeStamp,\n });\n\n const runHookWaterfall = useStrapiApp('ListViewPage', ({ runHookWaterfall }) => runHookWaterfall);\n /**\n * Run the waterfall and then inject our additional table headers.\n */\n const tableHeaders = React.useMemo(() => {\n const headers = runHookWaterfall(INJECT_COLUMN_IN_TABLE, {\n displayedHeaders,\n layout: list,\n });\n\n const formattedHeaders = headers.displayedHeaders.map<ListFieldLayout>((header) => {\n /**\n * When the header label is a string, it is an attribute on the current content-type:\n * Use the attribute name value to compute the translation.\n * Otherwise, it should be a translation object coming from a plugin that injects into the table (ie i18n, content-releases, review-workflows):\n * Use the translation object as is.\n */\n const translation =\n typeof header.label === 'string'\n ? {\n id: `content-manager.content-types.${model}.${header.name}`,\n defaultMessage: header.label,\n }\n : header.label;\n\n return {\n ...header,\n label: formatMessage(translation),\n name: `${header.name}${header.mainField?.name ? `.${header.mainField.name}` : ''}`,\n };\n });\n\n if (schema?.options?.draftAndPublish) {\n formattedHeaders.push({\n attribute: {\n type: 'custom',\n },\n name: 'status',\n label: formatMessage({\n id: getTranslation(`containers.list.table-headers.status`),\n defaultMessage: 'status',\n }),\n searchable: false,\n sortable: !hasStatusFilter,\n } satisfies ListFieldLayout);\n }\n\n if (hasCustomOrder) {\n // Sorting on this column is how the user comes back to the custom order\n formattedHeaders.unshift({\n attribute: {\n type: 'custom',\n },\n name: CUSTOM_ORDER_FIELD,\n label: formatMessage({\n id: getTranslation('containers.list.table-headers.order'),\n defaultMessage: 'order',\n }),\n searchable: false,\n sortable: true,\n } satisfies ListFieldLayout);\n }\n\n return formattedHeaders;\n }, [\n displayedHeaders,\n formatMessage,\n hasCustomOrder,\n hasStatusFilter,\n list,\n runHookWaterfall,\n schema?.options?.draftAndPublish,\n model,\n ]);\n\n if (isLoadingLayout || !isHydrated || isLoading || isLoadingActionsRBAC) {\n return <Page.Loading />;\n }\n\n if (error) {\n return <Page.Error />;\n }\n\n const contentTypeTitle = schema?.info.displayName\n ? formatMessage({ id: schema.info.displayName, defaultMessage: schema.info.displayName })\n : formatMessage({\n id: 'content-manager.containers.untitled',\n defaultMessage: 'Untitled',\n });\n\n const handleRowClick = (id: Modules.Documents.ID) => () => {\n trackUsage('willEditEntryFromList');\n navigate({\n pathname: id.toString(),\n search: stringify({ plugins: query.plugins }),\n });\n };\n\n /**\n * The entry link is rendered on the first non-interactive column *that has a\n * value for the row* (resolved per row, so an empty cell — rendered as \"-\" —\n * is skipped and the next candidate carries the link instead). Any scalar\n * column qualifies — text, numbers, dates (createdAt/updatedAt), `id`, and\n * `documentId` (its id text becomes the link, the copy button stays separate).\n * Only genuinely interactive cells are skipped: relations, media, components,\n * dynamic zones (they embed their own links/menus), plugin-formatted columns\n * (`cellFormatter`), and the synthetic `status` column.\n */\n const linkCandidates = tableHeaders.filter(\n ({ name, attribute, cellFormatter }) =>\n name !== 'status' &&\n name !== CUSTOM_ORDER_FIELD &&\n typeof cellFormatter !== 'function' &&\n attribute &&\n !NON_LINKABLE_TYPES.has(attribute.type)\n );\n\n // The link column for a given row: the first candidate that actually has a\n // value (uses CellContent's own hasContent so it matches the \"-\" the cell\n // would otherwise render). documentId is checked directly (its own cell).\n const getRowLinkField = (row: (typeof results)[number]) =>\n linkCandidates.find((header) => {\n if (header.name === 'documentId') {\n return Boolean(row.documentId);\n }\n const value = row[header.name.split('.')[0]];\n return hasContent(value, header.mainField, header.attribute);\n })?.name;\n\n const isEmptyState = !isFetching && results.length === 0;\n\n const endActions = (\n <>\n {isMobile && list.settings.filterable && schema && <Filters.Trigger />}\n <InjectionZone area=\"listView.actions\" />\n <ViewSettingsMenu\n setHeaders={handleSetHeaders}\n resetHeaders={handleResetHeaders}\n headers={displayedHeaderNames ?? []}\n />\n </>\n );\n\n const searchInput = (\n <>\n {list.settings.searchable && (\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: contentTypeTitle }\n )}\n placeholder={formatMessage({\n id: 'global.search',\n defaultMessage: 'Search',\n })}\n trackedEvent=\"didSearch\"\n />\n )}\n </>\n );\n\n const startActions = (\n <>\n {searchInput}\n {!isMobile && list.settings.filterable && schema && (\n <>\n <Filters.Trigger />\n <Filters.List />\n </>\n )}\n </>\n );\n\n const actions =\n list.settings.filterable && schema ? (\n <Filters.Root schema={schema} options={filterOptions}>\n <Layouts.Action\n endActions={endActions}\n startActions={startActions}\n bottomActions={isMobile && hasAppliedFilters ? <Filters.List /> : null}\n />\n <Filters.Popover />\n </Filters.Root>\n ) : (\n <Layouts.Action endActions={endActions} startActions={startActions} />\n );\n\n return (\n <>\n <tours.contentManager.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.contentManager.Introduction>\n <Page.Main>\n <Page.Title>{`${contentTypeTitle}`}</Page.Title>\n <LayoutsHeaderCustom\n primaryAction={\n canCreate ? (\n <tours.contentManager.CreateNewEntry>\n <CreateButton />\n </tours.contentManager.CreateNewEntry>\n ) : null\n }\n subtitle={formatMessage(\n {\n id: getTranslation('pages.ListView.header-subtitle'),\n defaultMessage:\n '{number, plural, =0 {# entries} one {# entry} other {# entries}} found',\n },\n { number: pagination?.total }\n )}\n title={contentTypeTitle}\n navigationAction={<BackButton />}\n />\n {actions}\n <Layouts.Content>\n {isEmptyState ? (\n <Box background=\"neutral0\" shadow=\"filterShadow\" hasRadius>\n <EmptyStateLayout\n action={\n canCreate && (\n <Box>\n <CreateButton variant=\"secondary\" />\n </Box>\n )\n }\n content={formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n hasRadius\n icon={<EmptyDocuments width=\"16rem\" />}\n />\n </Box>\n ) : (\n <Flex gap={4} direction=\"column\" alignItems=\"stretch\">\n <CustomOrder.Root state={customOrder}>\n <Table.Root\n rows={customOrder.rows}\n headers={tableHeaders}\n isLoading={isFetching && !customOrder.isMoving}\n >\n <TableActionsBar />\n <Table.Content>\n <Table.Head>\n <Table.HeaderCheckboxCell />\n {tableHeaders.map((header: ListFieldLayout) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Loading />\n <Table.Empty action={canCreate ? <CreateButton variant=\"secondary\" /> : null} />\n <Table.Body>\n {customOrder.rows.map((row, index) => {\n const rowLinkField = getRowLinkField(row);\n return (\n <CustomOrder.Row\n cursor=\"pointer\"\n key={row.id}\n documentId={row.documentId}\n onClick={handleRowClick(row.documentId)}\n >\n <Table.CheckboxCell id={row.id} />\n {tableHeaders.map(({ cellFormatter, ...header }) => {\n if (header.name === CUSTOM_ORDER_FIELD) {\n return (\n <CustomOrder.PositionCell\n key={header.name}\n documentId={row.documentId}\n position={\n ((pagination?.page ?? 1) - 1) * (pagination?.pageSize ?? 0) +\n index +\n 1\n }\n total={pagination?.total ?? customOrder.rows.length}\n />\n );\n }\n if (header.name === 'status') {\n const { status } = row;\n\n return (\n <Table.Cell key={header.name}>\n <DocumentStatus status={status} maxWidth={'min-content'} />\n </Table.Cell>\n );\n }\n if (['createdBy', 'updatedBy'].includes(header.name.split('.')[0])) {\n // Display the users full name\n // Some entries doesn't have a user assigned as creator/updater (ex: entries created through content API)\n // In this case, we display a dash\n return (\n <Table.Cell key={header.name}>\n <Typography textColor=\"neutral800\">\n {row[header.name.split('.')[0]]\n ? getDisplayName(row[header.name.split('.')[0]])\n : '-'}\n </Typography>\n </Table.Cell>\n );\n }\n if (header.name === 'documentId') {\n // When documentId is the primary link column, only its\n // id text becomes the link; the copy button stays outside.\n const isDocumentIdLink =\n header.name === rowLinkField && Boolean(row.documentId);\n return (\n <Table.Cell key={header.name}>\n <Flex gap={2} alignItems=\"center\" width=\"100%\" minWidth={0}>\n {isDocumentIdLink ? (\n <Typography\n tag={ReactRouterLink}\n to={{\n pathname: row.documentId,\n search: stringify({ plugins: query.plugins }),\n }}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n textColor=\"neutral800\"\n maxWidth=\"30rem\"\n ellipsis\n >\n {row.documentId}\n </Typography>\n ) : (\n <Typography\n textColor=\"neutral800\"\n maxWidth=\"30rem\"\n ellipsis\n >\n {row.documentId || '-'}\n </Typography>\n )}\n {row.documentId && (\n <IconButton\n variant=\"ghost\"\n size=\"S\"\n label={formatMessage({\n id: 'content-manager.actions.copy-documentId.label',\n defaultMessage: 'Copy',\n })}\n onClick={(e) => handleCopyDocumentId(e, row.documentId)}\n >\n <Duplicate />\n </IconButton>\n )}\n </Flex>\n </Table.Cell>\n );\n }\n if (typeof cellFormatter === 'function') {\n return (\n <Table.Cell key={header.name}>\n {cellFormatter(row, header, { collectionType, model })}\n </Table.Cell>\n );\n }\n return (\n <Table.Cell key={header.name}>\n <CellContent\n content={row[header.name.split('.')[0]]}\n rowId={row.documentId}\n {...header}\n linkTo={\n header.name === rowLinkField\n ? {\n pathname: row.documentId,\n search: stringify({ plugins: query.plugins }),\n }\n : undefined\n }\n />\n </Table.Cell>\n );\n })}\n {/* we stop propagation here to allow the menu to trigger it's events without triggering the row redirect */}\n <ActionsCell onClick={(e) => e.stopPropagation()}>\n <TableActions document={row} />\n </ActionsCell>\n </CustomOrder.Row>\n );\n })}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n </CustomOrder.Root>\n <Pagination.Root\n {...pagination}\n defaultPageSize={list.settings.pageSize}\n onPageSizeChange={() => trackUsage('willChangeNumberOfEntriesPerPage')}\n >\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Flex>\n )}\n </Layouts.Content>\n </Page.Main>\n </>\n );\n};\n\nconst ActionsCell = styled(Table.Cell)`\n display: flex;\n justify-content: flex-end;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionsBar\n * -----------------------------------------------------------------------------------------------*/\n\nconst TableActionsBar = () => {\n const selectRow = useTable('TableActionsBar', (state) => state.selectRow);\n const [{ query }] = useQueryParams<{ plugins: { i18n: { locale: string } } }>();\n const locale = query?.plugins?.i18n?.locale;\n const prevLocale = usePrev(locale);\n\n // TODO: find a better way to reset the selected rows when the locale changes across all the app\n React.useEffect(() => {\n if (prevLocale !== locale) {\n selectRow([]);\n }\n }, [selectRow, prevLocale, locale]);\n\n return (\n <Table.ActionBar>\n <BulkActionsRenderer />\n </Table.ActionBar>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CreateButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CreateButtonProps extends Pick<ButtonProps, 'variant'> {}\n\nconst CreateButton = ({ variant }: CreateButtonProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const [{ query }] = useQueryParams<{ plugins: object }>();\n\n return (\n <Button\n variant={variant}\n tag={ReactRouterLink}\n onClick={() => {\n trackUsage('willCreateEntry', { status: 'draft' });\n }}\n startIcon={<Plus />}\n style={{ textDecoration: 'none' }}\n to={{\n pathname: 'create',\n search: stringify({ plugins: query.plugins }),\n }}\n minWidth=\"max-content\"\n fullWidth\n >\n {formatMessage({\n id: getTranslation('HeaderLayout.button.label-add-entry'),\n defaultMessage: 'Create new entry',\n })}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListViewPage = () => {\n const { slug = '' } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: slug,\n }))\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return <Page.Error />;\n }\n\n return (\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <ListViewPage key={slug} />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { ListViewPage, ProtectedListViewPage };\n"],"names":["INJECT_COLUMN_IN_TABLE","HOOKS","NON_LINKABLE_TYPES","Set","LayoutsHeaderCustom","styled","Layouts","Header","hasCustomOrderEnabled","collectionType","settings","COLLECTION_TYPES","customOrder","isCustomOrderFeatureEnabled","getDefaultSort","hasCustomOrder","CUSTOM_ORDER_SORT","defaultSortBy","defaultSortOrder","ListViewPage","trackUsage","useTracking","navigate","useNavigate","formatMessage","useIntl","toggleNotification","useNotification","copy","useClipboard","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","isMobile","useIsMobile","handleCopyDocumentId","React","useCallback","e","documentId","stopPropagation","didCopy","type","message","id","defaultMessage","model","schema","useDoc","list","listViewConversionContext","isLoading","isLoadingLayout","useDocumentLayout","persistentQueryConfigs","useMemo","paths","scoped","STRAPI_LOCALE","isHydrated","usePersistentPartialQueryParams","currentData","configuration","useGetContentTypeConfigurationQuery","attributeRenames","contentType","configurationReady","uid","displayedHeaderNames","setDisplayedHeaderNames","useScopedPersistentState","mapDisplayedHeaders","headers","map","header","name","displayedHeaders","metadatas","Object","keys","length","attributes","convertListLayoutToFieldLayouts","configurations","componentConfigurations","schemas","componentSchemas","contentTypeSchemas","handleSetHeaders","handleResetHeaders","layout","useEffect","nextHeaders","applyAttributeRenamesToHeaders","headersChanged","some","index","query","setQuery","useQueryParams","page","pageSize","toString","sort","startsWith","CUSTOM_ORDER_FIELD","withEncodedUserParams","undefined","nextSort","applyAttributeRenamesToSort","nextFilters","filters","applyAttributeRenamesToFilters","sortChanged","filtersChanged","JSON","stringify","deepEncodeQueryValues","queryParams","buildValidParams","filterOptions","useListViewFilterOptions","params","toApiFilters","hasAppliedFilters","$and","hasStatusFilter","Boolean","filter","__status","$eq","test","cleaned","split","s","trim","join","data","error","isFetching","fulfilledTimeStamp","useGetAllDocumentsQuery","skip","results","pagination","pageCount","search","replace","canCreate","canUpdate","isLoadingActionsRBAC","useDocumentRBAC","useCustomOrder","isAvailable","runHookWaterfall","useStrapiApp","tableHeaders","formattedHeaders","translation","label","mainField","options","draftAndPublish","push","attribute","searchable","sortable","unshift","_jsx","Page","Loading","Error","contentTypeTitle","info","displayName","handleRowClick","pathname","plugins","linkCandidates","cellFormatter","has","getRowLinkField","row","find","value","hasContent","isEmptyState","endActions","_jsxs","_Fragment","filterable","Filters","Trigger","InjectionZone","area","ViewSettingsMenu","setHeaders","resetHeaders","searchInput","SearchInput","target","placeholder","trackedEvent","startActions","List","actions","Root","Action","bottomActions","Popover","tours","contentManager","Introduction","Box","Main","Title","primaryAction","CreateNewEntry","CreateButton","subtitle","number","total","title","navigationAction","BackButton","Content","background","shadow","hasRadius","EmptyStateLayout","action","variant","content","icon","EmptyDocuments","width","Flex","gap","direction","alignItems","CustomOrder","state","Table","rows","isMoving","TableActionsBar","Head","HeaderCheckboxCell","HeaderCell","Empty","Body","rowLinkField","Row","cursor","onClick","CheckboxCell","PositionCell","position","status","Cell","DocumentStatus","maxWidth","includes","Typography","textColor","getDisplayName","isDocumentIdLink","minWidth","tag","ReactRouterLink","to","ellipsis","IconButton","size","Duplicate","CellContent","rowId","linkTo","ActionsCell","TableActions","document","Pagination","defaultPageSize","onPageSizeChange","PageSize","Links","selectRow","useTable","locale","i18n","prevLocale","usePrev","ActionBar","BulkActionsRenderer","Button","startIcon","Plus","style","textDecoration","fullWidth","ProtectedListViewPage","slug","useParams","permissions","useRBAC","PERMISSIONS","subject","Protect","DocumentRBAC"],"mappings":"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"}
|
|
@@ -53,10 +53,15 @@ const USER_FILTER_ATTRIBUTES = new Set([
|
|
|
53
53
|
...attributes.CREATOR_FIELDS,
|
|
54
54
|
'strapi_assignee'
|
|
55
55
|
]);
|
|
56
|
-
const
|
|
57
|
-
|
|
56
|
+
const NO_ATTRIBUTES = {};
|
|
57
|
+
/**
|
|
58
|
+
* The filters of the list view. The API query reads them too (`toApiFilters`): a filter can take
|
|
59
|
+
* a value the API doesn't read as it is.
|
|
60
|
+
*/ const useListViewFilterOptions = (schema, layout)=>{
|
|
61
|
+
const attributes$2 = schema?.attributes ?? NO_ATTRIBUTES;
|
|
62
|
+
const model = schema?.uid;
|
|
63
|
+
const options = schema?.options;
|
|
58
64
|
const { formatMessage, locale } = reactIntl.useIntl();
|
|
59
|
-
const { trackUsage } = strapiAdmin.useTracking();
|
|
60
65
|
const allPermissions = strapiAdmin.useAuth('FiltersImpl', (state)=>state.permissions);
|
|
61
66
|
const [{ query }] = strapiAdmin.useQueryParams();
|
|
62
67
|
const { schemas } = useContentTypeSchema.useContentTypeSchema();
|
|
@@ -265,13 +270,17 @@ const Root = ({ disabled, schema, layout, children })=>{
|
|
|
265
270
|
options?.draftAndPublish,
|
|
266
271
|
runHookWaterfall
|
|
267
272
|
]);
|
|
273
|
+
return displayedFilters;
|
|
274
|
+
};
|
|
275
|
+
const Root = ({ disabled, schema, options, children })=>{
|
|
276
|
+
const { trackUsage } = strapiAdmin.useTracking();
|
|
268
277
|
const onOpenChange = (isOpen)=>{
|
|
269
278
|
if (isOpen) {
|
|
270
279
|
trackUsage('willFilterEntries');
|
|
271
280
|
}
|
|
272
281
|
};
|
|
273
282
|
const handleFilterChange = (data)=>{
|
|
274
|
-
const attribute = attributes
|
|
283
|
+
const attribute = schema.attributes[data.name];
|
|
275
284
|
if (attribute) {
|
|
276
285
|
trackUsage('didFilterEntries', {
|
|
277
286
|
useRelation: attribute.type === 'relation'
|
|
@@ -280,7 +289,7 @@ const Root = ({ disabled, schema, layout, children })=>{
|
|
|
280
289
|
};
|
|
281
290
|
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Filters.Root, {
|
|
282
291
|
disabled: disabled,
|
|
283
|
-
options:
|
|
292
|
+
options: options,
|
|
284
293
|
onOpenChange: onOpenChange,
|
|
285
294
|
onChange: handleFilterChange,
|
|
286
295
|
children: children
|
|
@@ -335,4 +344,5 @@ const listViewFilters = {
|
|
|
335
344
|
};
|
|
336
345
|
|
|
337
346
|
exports.listViewFilters = listViewFilters;
|
|
347
|
+
exports.useListViewFilterOptions = useListViewFilterOptions;
|
|
338
348
|
//# sourceMappingURL=Filters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Filters.js","sources":["../../../../../admin/src/pages/ListView/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Filters,\n useField,\n useAuth,\n useTracking,\n useQueryParams,\n useAdminUsers,\n useStrapiApp,\n} from '@strapi/admin/strapi-admin';\nimport { Combobox, ComboboxOption, useCollator } from '@strapi/design-system';\nimport { type MessageDescriptor, useIntl } from 'react-intl';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { HOOKS } from '../../../constants/hooks';\nimport { useContentTypeSchema } from '../../../hooks/useContentTypeSchema';\nimport { useDebounce } from '../../../hooks/useDebounce';\nimport { Schema } from '../../../hooks/useDocument';\nimport { getMainField } from '../../../utils/attributes';\nimport { getTranslation } from '../../../utils/translations';\nimport { getDisplayName } from '../../../utils/users';\n\nimport type { InjectableListViewFilter } from '../../../constants/hooks';\nimport type { ListLayout } from '../../../hooks/useDocumentLayout';\n\nconst { INJECT_LIST_VIEW_FILTERS } = HOOKS;\n\n/**\n * If new attributes are added, this list needs to be updated.\n */\nconst NOT_ALLOWED_FILTERS = new Set([\n 'json',\n 'component',\n 'media',\n 'richtext',\n 'dynamiczone',\n 'password',\n 'blocks',\n]);\nconst DEFAULT_ALLOWED_FILTERS = ['createdAt', 'updatedAt'];\nconst USER_FILTER_ATTRIBUTES = new Set([...CREATOR_FIELDS, 'strapi_assignee']);\n\n/* -------------------------------------------------------------------------------------------------\n * Filters\n * -----------------------------------------------------------------------------------------------*/\ninterface FiltersProps {\n disabled?: boolean;\n schema: Schema;\n layout: ListLayout;\n children: React.ReactNode;\n}\n\nconst Root = ({ disabled, schema, layout, children }: FiltersProps) => {\n const { attributes, uid: model, options } = schema;\n const { formatMessage, locale } = useIntl();\n const { trackUsage } = useTracking();\n const allPermissions = useAuth('FiltersImpl', (state) => state.permissions);\n const [{ query }] = useQueryParams<Filters.Query>();\n const { schemas } = useContentTypeSchema();\n const runHookWaterfall = useStrapiApp('FiltersImpl', ({ runHookWaterfall }) => runHookWaterfall);\n\n const canReadAdminUsers = React.useMemo(\n () =>\n allPermissions.filter(\n (permission) => permission.action === 'admin::users.read' && permission.subject === null\n ).length > 0,\n [allPermissions]\n );\n\n const selectedUserIds = (query?.filters?.$and ?? []).reduce<string[]>((acc, filter) => {\n const [key, value] = Object.entries(filter)[0];\n if (typeof value.id !== 'object') {\n return acc;\n }\n\n const id = value.id.$eq || value.id.$ne;\n\n // Check if the attribute is a relation to admin::user\n const attribute = attributes[key];\n const isAdminUserRelation =\n attribute?.type === 'relation' && 'target' in attribute && attribute.target === 'admin::user';\n\n if (id && (isAdminUserRelation || USER_FILTER_ATTRIBUTES.has(key)) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []);\n\n const { data: userData } = useAdminUsers(\n { filters: { id: { $in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n skip: selectedUserIds.length === 0 || !canReadAdminUsers,\n }\n );\n\n const { users = [] } = userData ?? {};\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedFilters = React.useMemo(() => {\n // An absent read permission for this model yields no filterable fields.\n // The empty object lets the defaults below apply instead of throwing.\n const { properties: { fields = [] } = { fields: [] } } =\n allPermissions.find(\n (permission) =>\n permission.action === 'plugin::content-manager.explorer.read' &&\n permission.subject === model\n ) ?? {};\n\n const allowedFields = fields.filter((field) => {\n const attribute = attributes[field] ?? {};\n\n return attribute.type && !NOT_ALLOWED_FILTERS.has(attribute.type);\n });\n\n const baseFilters = [\n 'id',\n 'documentId',\n ...allowedFields,\n ...DEFAULT_ALLOWED_FILTERS,\n ...(canReadAdminUsers ? CREATOR_FIELDS : []),\n ...(options?.draftAndPublish === true ? ['__status'] : []),\n ]\n .map((name) => {\n if (name === '__status') {\n return {\n name: '__status',\n type: 'enumeration',\n label: formatMessage({\n id: getTranslation('containers.list.filters.status'),\n defaultMessage: 'Status',\n }),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n ],\n options: [\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.draft'),\n defaultMessage: 'Draft (never published)',\n }),\n value: 'draft',\n },\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.published'),\n defaultMessage: 'Published (all)',\n }),\n value: 'published',\n },\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.publishedModified'),\n defaultMessage: 'Published (modified)',\n }),\n value: 'published-modified',\n },\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.publishedUnmodified'),\n defaultMessage: 'Published (unmodified)',\n }),\n value: 'published-unmodified',\n },\n ],\n } satisfies Filters.Filter;\n }\n\n const attribute = attributes[name];\n\n if (!attribute || NOT_ALLOWED_FILTERS.has(attribute.type)) {\n return null;\n }\n\n const fieldMetadata = layout.metadatas?.[name];\n if (!fieldMetadata) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = fieldMetadata;\n\n let filter: Filters.Filter = {\n name,\n label: label ?? '',\n mainField: getMainField(attribute, mainFieldName, { schemas, components: {} }),\n type: attribute.type as Filters.Filter['type'],\n };\n\n if (\n attribute.type === 'relation' &&\n 'target' in attribute &&\n attribute.target === 'admin::user'\n ) {\n filter = {\n ...filter,\n input: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n })),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ],\n mainField: {\n name: 'id',\n type: 'integer',\n },\n };\n }\n\n if (attribute.type === 'enumeration') {\n filter = {\n ...filter,\n options: attribute.enum.map((value) => ({\n label: formatMessage({ id: value, defaultMessage: value }),\n value,\n })),\n };\n }\n\n return filter;\n })\n .filter(Boolean) as Filters.Filter[];\n\n // Let plugins inject their own filters.\n // `layout.options` is a merge of schema/pluginOptions/contentType options —\n // mirrors the column-injection hook contract.\n const { displayedFilters: extendedFilters } = runHookWaterfall(INJECT_LIST_VIEW_FILTERS, {\n displayedFilters: baseFilters as InjectableListViewFilter[],\n layout,\n });\n\n const resolveLabel = (label: string | MessageDescriptor): string =>\n typeof label === 'string' ? label : formatMessage(label);\n\n const userOptions = users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n }));\n\n const formatted = extendedFilters.map<Filters.Filter>((filter) => {\n const next: Filters.Filter = {\n ...filter,\n label: resolveLabel(filter.label),\n operators: filter.operators?.map((op) => ({ ...op, label: resolveLabel(op.label) })),\n };\n\n // User-typed filters need user options so the chip can render the display name instead of the id.\n if (USER_FILTER_ATTRIBUTES.has(filter.name) && !next.options?.length) {\n next.options = userOptions;\n }\n\n return next;\n });\n\n return formatted.toSorted((a, b) => formatter.compare(a.label, b.label));\n }, [\n allPermissions,\n canReadAdminUsers,\n model,\n attributes,\n schemas,\n layout,\n users,\n formatMessage,\n formatter,\n options?.draftAndPublish,\n runHookWaterfall,\n ]);\n\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n trackUsage('willFilterEntries');\n }\n };\n\n const handleFilterChange: Filters.Props['onChange'] = (data) => {\n const attribute = attributes[data.name];\n\n if (attribute) {\n trackUsage('didFilterEntries', {\n useRelation: attribute.type === 'relation',\n });\n }\n };\n\n return (\n <Filters.Root\n disabled={disabled}\n options={displayedFilters}\n onOpenChange={onOpenChange}\n onChange={handleFilterChange}\n >\n {children}\n </Filters.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AdminUsersFilter\n * -----------------------------------------------------------------------------------------------*/\n\nconst AdminUsersFilter = ({ name }: Filters.ValueInputProps) => {\n const [pageSize, setPageSize] = React.useState(10);\n const [search, setSearch] = React.useState('');\n const { formatMessage } = useIntl();\n\n const debouncedSearch = useDebounce(search, 300);\n\n const { data, isLoading } = useAdminUsers({\n pageSize,\n _q: debouncedSearch,\n });\n const field = useField<string>(name);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPageSize(10);\n }\n };\n\n const { users = [], pagination } = data ?? {};\n const { pageCount = 1, page = 1 } = pagination ?? {};\n\n return (\n <Combobox\n value={field.value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select a user to filter',\n })}\n onOpenChange={handleOpenChange}\n onChange={(value) => field.onChange(name, value)}\n loading={isLoading}\n onLoadMore={() => setPageSize(pageSize + 10)}\n hasMoreItems={page < pageCount}\n onInputChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n }}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nconst listViewFilters = {\n Root,\n Trigger: Filters.Trigger,\n Popover: Filters.Popover,\n List: Filters.List,\n};\n\nexport { listViewFilters };\nexport type { FiltersProps };\n"],"names":["INJECT_LIST_VIEW_FILTERS","HOOKS","NOT_ALLOWED_FILTERS","Set","DEFAULT_ALLOWED_FILTERS","USER_FILTER_ATTRIBUTES","CREATOR_FIELDS","Root","disabled","schema","layout","children","attributes","uid","model","options","formatMessage","locale","useIntl","trackUsage","useTracking","allPermissions","useAuth","state","permissions","query","useQueryParams","schemas","useContentTypeSchema","runHookWaterfall","useStrapiApp","canReadAdminUsers","React","useMemo","filter","permission","action","subject","length","selectedUserIds","filters","$and","reduce","acc","key","value","Object","entries","id","$eq","$ne","attribute","isAdminUserRelation","type","target","has","includes","push","data","userData","useAdminUsers","$in","skip","users","formatter","useCollator","sensitivity","displayedFilters","properties","fields","find","allowedFields","field","baseFilters","draftAndPublish","map","name","label","getTranslation","defaultMessage","operators","fieldMetadata","metadatas","mainField","mainFieldName","getMainField","components","input","AdminUsersFilter","user","getDisplayName","toString","enum","Boolean","extendedFilters","resolveLabel","userOptions","formatted","next","op","toSorted","a","b","compare","onOpenChange","isOpen","handleFilterChange","useRelation","_jsx","Filters","onChange","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","isLoading","_q","useField","handleOpenChange","pagination","pageCount","page","Combobox","aria-label","loading","onLoadMore","hasMoreItems","onInputChange","e","currentTarget","ComboboxOption","listViewFilters","Trigger","Popover","List"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Filters.js","sources":["../../../../../admin/src/pages/ListView/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Filters,\n useField,\n useAuth,\n useTracking,\n useQueryParams,\n useAdminUsers,\n useStrapiApp,\n} from '@strapi/admin/strapi-admin';\nimport { Combobox, ComboboxOption, useCollator } from '@strapi/design-system';\nimport { type MessageDescriptor, useIntl } from 'react-intl';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { HOOKS } from '../../../constants/hooks';\nimport { useContentTypeSchema } from '../../../hooks/useContentTypeSchema';\nimport { useDebounce } from '../../../hooks/useDebounce';\nimport { Schema } from '../../../hooks/useDocument';\nimport { getMainField } from '../../../utils/attributes';\nimport { getTranslation } from '../../../utils/translations';\nimport { getDisplayName } from '../../../utils/users';\n\nimport type { InjectableListViewFilter } from '../../../constants/hooks';\nimport type { ListLayout } from '../../../hooks/useDocumentLayout';\n\nconst { INJECT_LIST_VIEW_FILTERS } = HOOKS;\n\n/**\n * If new attributes are added, this list needs to be updated.\n */\nconst NOT_ALLOWED_FILTERS = new Set([\n 'json',\n 'component',\n 'media',\n 'richtext',\n 'dynamiczone',\n 'password',\n 'blocks',\n]);\nconst DEFAULT_ALLOWED_FILTERS = ['createdAt', 'updatedAt'];\nconst USER_FILTER_ATTRIBUTES = new Set([...CREATOR_FIELDS, 'strapi_assignee']);\n\n/* -------------------------------------------------------------------------------------------------\n * Filters\n * -----------------------------------------------------------------------------------------------*/\ninterface FiltersProps {\n disabled?: boolean;\n schema: Schema;\n /**\n * From `useListViewFilterOptions`. The list page computes them once: its API query reads them\n * too (`toApiFilters`).\n */\n options: Filters.Filter[];\n children: React.ReactNode;\n}\n\nconst NO_ATTRIBUTES: Schema['attributes'] = {};\n\n/**\n * The filters of the list view. The API query reads them too (`toApiFilters`): a filter can take\n * a value the API doesn't read as it is.\n */\nconst useListViewFilterOptions = (schema: Schema | undefined, layout: ListLayout) => {\n const attributes = schema?.attributes ?? NO_ATTRIBUTES;\n const model = schema?.uid;\n const options = schema?.options;\n const { formatMessage, locale } = useIntl();\n const allPermissions = useAuth('FiltersImpl', (state) => state.permissions);\n const [{ query }] = useQueryParams<Filters.Query>();\n const { schemas } = useContentTypeSchema();\n const runHookWaterfall = useStrapiApp('FiltersImpl', ({ runHookWaterfall }) => runHookWaterfall);\n\n const canReadAdminUsers = React.useMemo(\n () =>\n allPermissions.filter(\n (permission) => permission.action === 'admin::users.read' && permission.subject === null\n ).length > 0,\n [allPermissions]\n );\n\n const selectedUserIds = (query?.filters?.$and ?? []).reduce<string[]>((acc, filter) => {\n const [key, value] = Object.entries(filter)[0];\n if (typeof value.id !== 'object') {\n return acc;\n }\n\n const id = value.id.$eq || value.id.$ne;\n\n // Check if the attribute is a relation to admin::user\n const attribute = attributes[key];\n const isAdminUserRelation =\n attribute?.type === 'relation' && 'target' in attribute && attribute.target === 'admin::user';\n\n if (id && (isAdminUserRelation || USER_FILTER_ATTRIBUTES.has(key)) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []);\n\n const { data: userData } = useAdminUsers(\n { filters: { id: { $in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n skip: selectedUserIds.length === 0 || !canReadAdminUsers,\n }\n );\n\n const { users = [] } = userData ?? {};\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedFilters = React.useMemo(() => {\n // An absent read permission for this model yields no filterable fields.\n // The empty object lets the defaults below apply instead of throwing.\n const { properties: { fields = [] } = { fields: [] } } =\n allPermissions.find(\n (permission) =>\n permission.action === 'plugin::content-manager.explorer.read' &&\n permission.subject === model\n ) ?? {};\n\n const allowedFields = fields.filter((field) => {\n const attribute = attributes[field] ?? {};\n\n return attribute.type && !NOT_ALLOWED_FILTERS.has(attribute.type);\n });\n\n const baseFilters = [\n 'id',\n 'documentId',\n ...allowedFields,\n ...DEFAULT_ALLOWED_FILTERS,\n ...(canReadAdminUsers ? CREATOR_FIELDS : []),\n ...(options?.draftAndPublish === true ? ['__status'] : []),\n ]\n .map((name) => {\n if (name === '__status') {\n return {\n name: '__status',\n type: 'enumeration',\n label: formatMessage({\n id: getTranslation('containers.list.filters.status'),\n defaultMessage: 'Status',\n }),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n ],\n options: [\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.draft'),\n defaultMessage: 'Draft (never published)',\n }),\n value: 'draft',\n },\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.published'),\n defaultMessage: 'Published (all)',\n }),\n value: 'published',\n },\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.publishedModified'),\n defaultMessage: 'Published (modified)',\n }),\n value: 'published-modified',\n },\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.publishedUnmodified'),\n defaultMessage: 'Published (unmodified)',\n }),\n value: 'published-unmodified',\n },\n ],\n } satisfies Filters.Filter;\n }\n\n const attribute = attributes[name];\n\n if (!attribute || NOT_ALLOWED_FILTERS.has(attribute.type)) {\n return null;\n }\n\n const fieldMetadata = layout.metadatas?.[name];\n if (!fieldMetadata) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = fieldMetadata;\n\n let filter: Filters.Filter = {\n name,\n label: label ?? '',\n mainField: getMainField(attribute, mainFieldName, { schemas, components: {} }),\n type: attribute.type as Filters.Filter['type'],\n };\n\n if (\n attribute.type === 'relation' &&\n 'target' in attribute &&\n attribute.target === 'admin::user'\n ) {\n filter = {\n ...filter,\n input: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n })),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ],\n mainField: {\n name: 'id',\n type: 'integer',\n },\n };\n }\n\n if (attribute.type === 'enumeration') {\n filter = {\n ...filter,\n options: attribute.enum.map((value) => ({\n label: formatMessage({ id: value, defaultMessage: value }),\n value,\n })),\n };\n }\n\n return filter;\n })\n .filter(Boolean) as Filters.Filter[];\n\n // Let plugins inject their own filters.\n // `layout.options` is a merge of schema/pluginOptions/contentType options —\n // mirrors the column-injection hook contract.\n const { displayedFilters: extendedFilters } = runHookWaterfall(INJECT_LIST_VIEW_FILTERS, {\n displayedFilters: baseFilters as InjectableListViewFilter[],\n layout,\n });\n\n const resolveLabel = (label: string | MessageDescriptor): string =>\n typeof label === 'string' ? label : formatMessage(label);\n\n const userOptions = users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n }));\n\n const formatted = extendedFilters.map<Filters.Filter>((filter) => {\n const next: Filters.Filter = {\n ...filter,\n label: resolveLabel(filter.label),\n operators: filter.operators?.map((op) => ({ ...op, label: resolveLabel(op.label) })),\n };\n\n // User-typed filters need user options so the chip can render the display name instead of the id.\n if (USER_FILTER_ATTRIBUTES.has(filter.name) && !next.options?.length) {\n next.options = userOptions;\n }\n\n return next;\n });\n\n return formatted.toSorted((a, b) => formatter.compare(a.label, b.label));\n }, [\n allPermissions,\n canReadAdminUsers,\n model,\n attributes,\n schemas,\n layout,\n users,\n formatMessage,\n formatter,\n options?.draftAndPublish,\n runHookWaterfall,\n ]);\n\n return displayedFilters;\n};\n\nconst Root = ({ disabled, schema, options, children }: FiltersProps) => {\n const { trackUsage } = useTracking();\n\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n trackUsage('willFilterEntries');\n }\n };\n\n const handleFilterChange: Filters.Props['onChange'] = (data) => {\n const attribute = schema.attributes[data.name];\n\n if (attribute) {\n trackUsage('didFilterEntries', {\n useRelation: attribute.type === 'relation',\n });\n }\n };\n\n return (\n <Filters.Root\n disabled={disabled}\n options={options}\n onOpenChange={onOpenChange}\n onChange={handleFilterChange}\n >\n {children}\n </Filters.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AdminUsersFilter\n * -----------------------------------------------------------------------------------------------*/\n\nconst AdminUsersFilter = ({ name }: Filters.ValueInputProps) => {\n const [pageSize, setPageSize] = React.useState(10);\n const [search, setSearch] = React.useState('');\n const { formatMessage } = useIntl();\n\n const debouncedSearch = useDebounce(search, 300);\n\n const { data, isLoading } = useAdminUsers({\n pageSize,\n _q: debouncedSearch,\n });\n const field = useField<string>(name);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPageSize(10);\n }\n };\n\n const { users = [], pagination } = data ?? {};\n const { pageCount = 1, page = 1 } = pagination ?? {};\n\n return (\n <Combobox\n value={field.value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select a user to filter',\n })}\n onOpenChange={handleOpenChange}\n onChange={(value) => field.onChange(name, value)}\n loading={isLoading}\n onLoadMore={() => setPageSize(pageSize + 10)}\n hasMoreItems={page < pageCount}\n onInputChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n }}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nconst listViewFilters = {\n Root,\n Trigger: Filters.Trigger,\n Popover: Filters.Popover,\n List: Filters.List,\n};\n\nexport { listViewFilters, useListViewFilterOptions };\nexport type { FiltersProps };\n"],"names":["INJECT_LIST_VIEW_FILTERS","HOOKS","NOT_ALLOWED_FILTERS","Set","DEFAULT_ALLOWED_FILTERS","USER_FILTER_ATTRIBUTES","CREATOR_FIELDS","NO_ATTRIBUTES","useListViewFilterOptions","schema","layout","attributes","model","uid","options","formatMessage","locale","useIntl","allPermissions","useAuth","state","permissions","query","useQueryParams","schemas","useContentTypeSchema","runHookWaterfall","useStrapiApp","canReadAdminUsers","React","useMemo","filter","permission","action","subject","length","selectedUserIds","filters","$and","reduce","acc","key","value","Object","entries","id","$eq","$ne","attribute","isAdminUserRelation","type","target","has","includes","push","data","userData","useAdminUsers","$in","skip","users","formatter","useCollator","sensitivity","displayedFilters","properties","fields","find","allowedFields","field","baseFilters","draftAndPublish","map","name","label","getTranslation","defaultMessage","operators","fieldMetadata","metadatas","mainField","mainFieldName","getMainField","components","input","AdminUsersFilter","user","getDisplayName","toString","enum","Boolean","extendedFilters","resolveLabel","userOptions","formatted","next","op","toSorted","a","b","compare","Root","disabled","children","trackUsage","useTracking","onOpenChange","isOpen","handleFilterChange","useRelation","_jsx","Filters","onChange","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","isLoading","_q","useField","handleOpenChange","pagination","pageCount","page","Combobox","aria-label","loading","onLoadMore","hasMoreItems","onInputChange","e","currentTarget","ComboboxOption","listViewFilters","Trigger","Popover","List"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { Filters,
|
|
3
|
+
import { Filters, useAuth, useQueryParams, useStrapiApp, useAdminUsers, useTracking, useField } from '@strapi/admin/strapi-admin';
|
|
4
4
|
import { useCollator, Combobox, ComboboxOption } from '@strapi/design-system';
|
|
5
5
|
import { useIntl } from 'react-intl';
|
|
6
6
|
import { CREATOR_FIELDS } from '../../../constants/attributes.mjs';
|
|
@@ -31,10 +31,15 @@ const USER_FILTER_ATTRIBUTES = new Set([
|
|
|
31
31
|
...CREATOR_FIELDS,
|
|
32
32
|
'strapi_assignee'
|
|
33
33
|
]);
|
|
34
|
-
const
|
|
35
|
-
|
|
34
|
+
const NO_ATTRIBUTES = {};
|
|
35
|
+
/**
|
|
36
|
+
* The filters of the list view. The API query reads them too (`toApiFilters`): a filter can take
|
|
37
|
+
* a value the API doesn't read as it is.
|
|
38
|
+
*/ const useListViewFilterOptions = (schema, layout)=>{
|
|
39
|
+
const attributes = schema?.attributes ?? NO_ATTRIBUTES;
|
|
40
|
+
const model = schema?.uid;
|
|
41
|
+
const options = schema?.options;
|
|
36
42
|
const { formatMessage, locale } = useIntl();
|
|
37
|
-
const { trackUsage } = useTracking();
|
|
38
43
|
const allPermissions = useAuth('FiltersImpl', (state)=>state.permissions);
|
|
39
44
|
const [{ query }] = useQueryParams();
|
|
40
45
|
const { schemas } = useContentTypeSchema();
|
|
@@ -243,13 +248,17 @@ const Root = ({ disabled, schema, layout, children })=>{
|
|
|
243
248
|
options?.draftAndPublish,
|
|
244
249
|
runHookWaterfall
|
|
245
250
|
]);
|
|
251
|
+
return displayedFilters;
|
|
252
|
+
};
|
|
253
|
+
const Root = ({ disabled, schema, options, children })=>{
|
|
254
|
+
const { trackUsage } = useTracking();
|
|
246
255
|
const onOpenChange = (isOpen)=>{
|
|
247
256
|
if (isOpen) {
|
|
248
257
|
trackUsage('willFilterEntries');
|
|
249
258
|
}
|
|
250
259
|
};
|
|
251
260
|
const handleFilterChange = (data)=>{
|
|
252
|
-
const attribute = attributes[data.name];
|
|
261
|
+
const attribute = schema.attributes[data.name];
|
|
253
262
|
if (attribute) {
|
|
254
263
|
trackUsage('didFilterEntries', {
|
|
255
264
|
useRelation: attribute.type === 'relation'
|
|
@@ -258,7 +267,7 @@ const Root = ({ disabled, schema, layout, children })=>{
|
|
|
258
267
|
};
|
|
259
268
|
return /*#__PURE__*/ jsx(Filters.Root, {
|
|
260
269
|
disabled: disabled,
|
|
261
|
-
options:
|
|
270
|
+
options: options,
|
|
262
271
|
onOpenChange: onOpenChange,
|
|
263
272
|
onChange: handleFilterChange,
|
|
264
273
|
children: children
|
|
@@ -312,5 +321,5 @@ const listViewFilters = {
|
|
|
312
321
|
List: Filters.List
|
|
313
322
|
};
|
|
314
323
|
|
|
315
|
-
export { listViewFilters };
|
|
324
|
+
export { listViewFilters, useListViewFilterOptions };
|
|
316
325
|
//# sourceMappingURL=Filters.mjs.map
|