@strapi/content-manager 5.45.1 → 5.46.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/constants/hooks.js +5 -0
- package/dist/admin/constants/hooks.js.map +1 -1
- package/dist/admin/constants/hooks.mjs +5 -0
- package/dist/admin/constants/hooks.mjs.map +1 -1
- package/dist/admin/content-manager.js +26 -2
- package/dist/admin/content-manager.js.map +1 -1
- package/dist/admin/content-manager.mjs +26 -2
- package/dist/admin/content-manager.mjs.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.js +1 -1
- package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.mjs +1 -1
- package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
- package/dist/admin/hooks/usePersistentQueryParams.js +4 -1
- package/dist/admin/hooks/usePersistentQueryParams.js.map +1 -1
- package/dist/admin/hooks/usePersistentQueryParams.mjs +4 -1
- package/dist/admin/hooks/usePersistentQueryParams.mjs.map +1 -1
- package/dist/admin/pages/ComponentConfigurationPage.js +2 -45
- package/dist/admin/pages/ComponentConfigurationPage.js.map +1 -1
- package/dist/admin/pages/ComponentConfigurationPage.mjs +3 -46
- package/dist/admin/pages/ComponentConfigurationPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js +21 -4
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs +19 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +9 -6
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +10 -7
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +1 -34
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +3 -35
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +33 -18
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +34 -19
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/DefaultBlocksStore.js +22 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/DefaultBlocksStore.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/DefaultBlocksStore.mjs +20 -0
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/DefaultBlocksStore.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +15 -4
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +16 -5
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +26 -4
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +26 -4
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +31 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +31 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +11 -3
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +11 -3
- package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +1 -0
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +1 -0
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.js +38 -4
- package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.mjs +39 -5
- package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
- package/dist/admin/pages/formatComponentConfigurationEditLayout.js +58 -0
- package/dist/admin/pages/formatComponentConfigurationEditLayout.js.map +1 -0
- package/dist/admin/pages/formatComponentConfigurationEditLayout.mjs +56 -0
- package/dist/admin/pages/formatComponentConfigurationEditLayout.mjs.map +1 -0
- package/dist/admin/preview/components/InputPopover.js +3 -0
- package/dist/admin/preview/components/InputPopover.js.map +1 -1
- package/dist/admin/preview/components/InputPopover.mjs +3 -0
- package/dist/admin/preview/components/InputPopover.mjs.map +1 -1
- package/dist/admin/preview/hooks/usePreviewInputManager.js +24 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -1
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs +24 -0
- package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -1
- package/dist/admin/preview/utils/previewScript.js +616 -78
- package/dist/admin/preview/utils/previewScript.js.map +1 -1
- package/dist/admin/preview/utils/previewScript.mjs +616 -78
- package/dist/admin/preview/utils/previewScript.mjs.map +1 -1
- package/dist/admin/src/constants/hooks.d.ts +23 -0
- package/dist/admin/src/content-manager.d.ts +26 -0
- package/dist/admin/src/exports.d.ts +2 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +14 -8
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/DefaultBlocksStore.d.ts +3 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentCard.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +11 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +9 -5
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +4 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +38 -6
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +27 -5
- package/dist/admin/src/pages/ListView/components/Filters.d.ts +3 -4
- package/dist/admin/src/pages/formatComponentConfigurationEditLayout.d.ts +15 -0
- package/dist/admin/translations/cs.json.js +0 -1
- package/dist/admin/translations/cs.json.js.map +1 -1
- package/dist/admin/translations/cs.json.mjs +0 -1
- package/dist/admin/translations/cs.json.mjs.map +1 -1
- package/dist/admin/translations/de.json.js +0 -1
- package/dist/admin/translations/de.json.js.map +1 -1
- package/dist/admin/translations/de.json.mjs +0 -1
- package/dist/admin/translations/de.json.mjs.map +1 -1
- package/dist/admin/translations/en.json.js +0 -1
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +0 -1
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +0 -1
- package/dist/admin/translations/es.json.js.map +1 -1
- package/dist/admin/translations/es.json.mjs +0 -1
- package/dist/admin/translations/es.json.mjs.map +1 -1
- package/dist/admin/translations/fr.json.js +0 -1
- package/dist/admin/translations/fr.json.js.map +1 -1
- package/dist/admin/translations/fr.json.mjs +0 -1
- package/dist/admin/translations/fr.json.mjs.map +1 -1
- package/dist/admin/translations/nl.json.js +0 -1
- package/dist/admin/translations/nl.json.js.map +1 -1
- package/dist/admin/translations/nl.json.mjs +0 -1
- package/dist/admin/translations/nl.json.mjs.map +1 -1
- package/dist/admin/translations/pl.json.js +0 -1
- package/dist/admin/translations/pl.json.js.map +1 -1
- package/dist/admin/translations/pl.json.mjs +0 -1
- package/dist/admin/translations/pl.json.mjs.map +1 -1
- package/dist/admin/translations/ru.json.js +0 -1
- package/dist/admin/translations/ru.json.js.map +1 -1
- package/dist/admin/translations/ru.json.mjs +0 -1
- package/dist/admin/translations/ru.json.mjs.map +1 -1
- package/dist/admin/translations/uk.json.js +0 -1
- package/dist/admin/translations/uk.json.js.map +1 -1
- package/dist/admin/translations/uk.json.mjs +0 -1
- package/dist/admin/translations/uk.json.mjs.map +1 -1
- package/dist/admin/translations/zh-Hans.json.js +0 -1
- package/dist/admin/translations/zh-Hans.json.js.map +1 -1
- package/dist/admin/translations/zh-Hans.json.mjs +0 -1
- package/dist/admin/translations/zh-Hans.json.mjs.map +1 -1
- package/dist/server/homepage/services/homepage.js +12 -8
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs +12 -8
- package/dist/server/homepage/services/homepage.mjs.map +1 -1
- package/dist/server/services/metrics.js +1 -5
- package/dist/server/services/metrics.js.map +1 -1
- package/dist/server/services/metrics.mjs +1 -5
- package/dist/server/services/metrics.mjs.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/dist/server/src/services/metrics.d.ts.map +1 -1
- package/package.json +7 -7
|
@@ -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 useIsDesktop,\n useClipboard,\n tours,\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 { 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 { 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 { listViewFilters as Filters } from './components/Filters';\nimport { TableActions } from './components/TableActions';\nimport { CellContent } from './components/TableCells/CellContent';\nimport { ViewSettingsMenu } from './components/ViewSettingsMenu';\n\nimport type { Modules } from '@strapi/types';\n\nconst { INJECT_COLUMN_IN_TABLE } = HOOKS;\n\n/* -------------------------------------------------------------------------------------------------\n * ListViewPage\n * -----------------------------------------------------------------------------------------------*/\nconst LayoutsHeaderCustom = styled(Layouts.Header)`\n overflow-wrap: anywhere;\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 const isDesktop = useIsDesktop();\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 [displayedHeaderNames, setDisplayedHeaderNames] = useScopedPersistentState<string[] | null>(\n `STRAPI_LIST_VIEW_DISPLAYED_HEADERS:${model}`,\n null\n );\n\n const mapDisplayedHeaders = (headers: ListFieldLayout[]) => headers.map((header) => header.name);\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 = (headers: string[]) => {\n setDisplayedHeaderNames(headers);\n };\n\n const handleResetHeaders = () => {\n setDisplayedHeaderNames(mapDisplayedHeaders(list.layout));\n };\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 }, [list.layout]);\n\n React.useEffect(() => {\n if (!schema?.attributes) return;\n if (!displayedHeaderNames || displayedHeaderNames.length === 0) return;\n if (schema.uid !== model) return;\n\n const allowedDisplayHeaders = displayedHeaderNames.filter((header) =>\n Object.keys(schema?.attributes).includes(header)\n );\n\n if (allowedDisplayHeaders.length !== displayedHeaderNames.length) {\n handleSetHeaders(allowedDisplayHeaders);\n }\n }, [displayedHeaderNames]);\n\n const [{ query }, setQuery] = useQueryParams<{\n plugins?: Record<string, unknown>;\n page?: string;\n pageSize?: string;\n sort?: string;\n }>({\n page: '1',\n pageSize: list.settings.pageSize.toString(),\n sort: list.settings.defaultSortBy\n ? `${list.settings.defaultSortBy}:${list.settings.defaultSortOrder}`\n : '',\n });\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const hasAppliedFilters = Boolean((query as any)?.filters?.$and?.length);\n const hasStatusFilter = Boolean(\n (query as any)?.filters?.$and?.some((f: any) => f?.__status?.$eq != null)\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({ sort: cleaned || undefined }, 'push', true);\n }\n }, [hasStatusFilter, query.sort, setQuery]);\n\n const { data, error, isLoading, isFetching } = 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 } = useDocumentRBAC('ListViewPage', ({ canCreate }) => ({\n canCreate,\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 return formattedHeaders;\n }, [\n displayedHeaders,\n formatMessage,\n hasStatusFilter,\n list,\n runHookWaterfall,\n schema?.options?.draftAndPublish,\n model,\n ]);\n\n if (isLoadingLayout || !isHydrated || isLoading) {\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 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}>\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 <Table.Root rows={results} headers={tableHeaders} isLoading={isFetching}>\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 {results.map((row) => {\n return (\n <Table.Row\n cursor=\"pointer\"\n key={row.id}\n onClick={handleRowClick(row.documentId)}\n >\n <Table.CheckboxCell id={row.id} />\n {tableHeaders.map(({ cellFormatter, ...header }) => {\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 return (\n <Table.Cell key={header.name}>\n <Flex gap={2} alignItems=\"center\" width=\"100%\" minWidth={0}>\n <Typography textColor=\"neutral800\" maxWidth=\"30rem\" ellipsis>\n {row.documentId || '-'}\n </Typography>\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 {/* @ts-expect-error – TODO: fix this TS error */}\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 />\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 </Table.Row>\n );\n })}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root\n {...pagination}\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","LayoutsHeaderCustom","styled","Layouts","Header","ListViewPage","trackUsage","useTracking","navigate","useNavigate","formatMessage","useIntl","toggleNotification","useNotification","copy","useClipboard","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","isMobile","useIsMobile","useIsDesktop","handleCopyDocumentId","React","useCallback","e","documentId","stopPropagation","didCopy","type","message","id","defaultMessage","collectionType","model","schema","useDoc","list","listViewConversionContext","isLoading","isLoadingLayout","useDocumentLayout","persistentQueryConfigs","useMemo","paths","scoped","STRAPI_LOCALE","isHydrated","usePersistentPartialQueryParams","displayedHeaderNames","setDisplayedHeaderNames","useScopedPersistentState","mapDisplayedHeaders","headers","map","header","name","displayedHeaders","metadatas","Object","keys","length","attributes","convertListLayoutToFieldLayouts","configurations","componentConfigurations","schemas","componentSchemas","contentTypeSchemas","handleSetHeaders","handleResetHeaders","layout","useEffect","uid","allowedDisplayHeaders","filter","includes","query","setQuery","useQueryParams","page","pageSize","settings","toString","sort","defaultSortBy","defaultSortOrder","params","buildValidParams","hasAppliedFilters","Boolean","filters","$and","hasStatusFilter","some","f","__status","$eq","test","cleaned","split","s","trim","join","undefined","data","error","isFetching","useGetAllDocumentsQuery","skip","results","pagination","pageCount","search","stringify","replace","canCreate","useDocumentRBAC","runHookWaterfall","useStrapiApp","tableHeaders","formattedHeaders","translation","label","mainField","options","draftAndPublish","push","attribute","searchable","sortable","_jsx","Page","Loading","Error","contentTypeTitle","info","displayName","handleRowClick","pathname","plugins","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","Table","rows","TableActionsBar","Head","HeaderCheckboxCell","HeaderCell","Empty","Body","row","Row","cursor","onClick","CheckboxCell","cellFormatter","status","Cell","DocumentStatus","maxWidth","Typography","textColor","getDisplayName","minWidth","ellipsis","IconButton","size","Duplicate","CellContent","rowId","ActionsCell","TableActions","document","Pagination","onPageSizeChange","PageSize","Links","selectRow","useTable","state","locale","i18n","prevLocale","usePrev","ActionBar","BulkActionsRenderer","Button","tag","ReactRouterLink","startIcon","Plus","style","textDecoration","to","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 useIsDesktop,\n useClipboard,\n tours,\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 { 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 { 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 { listViewFilters as Filters } from './components/Filters';\nimport { TableActions } from './components/TableActions';\nimport { CellContent } from './components/TableCells/CellContent';\nimport { ViewSettingsMenu } from './components/ViewSettingsMenu';\n\nimport type { Modules } from '@strapi/types';\n\nconst { INJECT_COLUMN_IN_TABLE } = HOOKS;\n\n/* -------------------------------------------------------------------------------------------------\n * ListViewPage\n * -----------------------------------------------------------------------------------------------*/\nconst LayoutsHeaderCustom = styled(Layouts.Header)`\n overflow-wrap: anywhere;\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 const isDesktop = useIsDesktop();\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 [displayedHeaderNames, setDisplayedHeaderNames] = useScopedPersistentState<string[] | null>(\n `STRAPI_LIST_VIEW_DISPLAYED_HEADERS:${model}`,\n null\n );\n\n const mapDisplayedHeaders = (headers: ListFieldLayout[]) => headers.map((header) => header.name);\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 = (headers: string[]) => {\n setDisplayedHeaderNames(headers);\n };\n\n const handleResetHeaders = () => {\n setDisplayedHeaderNames(mapDisplayedHeaders(list.layout));\n };\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 }, [list.layout]);\n\n React.useEffect(() => {\n if (!schema?.attributes) return;\n if (!displayedHeaderNames || displayedHeaderNames.length === 0) return;\n if (schema.uid !== model) return;\n\n const allowedDisplayHeaders = displayedHeaderNames.filter((header) =>\n Object.keys(schema?.attributes).includes(header)\n );\n\n if (allowedDisplayHeaders.length !== displayedHeaderNames.length) {\n handleSetHeaders(allowedDisplayHeaders);\n }\n }, [displayedHeaderNames]);\n\n const [{ query }, setQuery] = useQueryParams<{\n plugins?: Record<string, unknown>;\n page?: string;\n pageSize?: string;\n sort?: string;\n }>({\n page: '1',\n pageSize: list.settings.pageSize.toString(),\n sort: list.settings.defaultSortBy\n ? `${list.settings.defaultSortBy}:${list.settings.defaultSortOrder}`\n : '',\n });\n\n const params = React.useMemo(() => buildValidParams(query), [query]);\n const hasAppliedFilters = Boolean((query as any)?.filters?.$and?.length);\n const hasStatusFilter = Boolean(\n (query as any)?.filters?.$and?.some((f: any) => f?.__status?.$eq != null)\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({ sort: cleaned || undefined }, 'push', true);\n }\n }, [hasStatusFilter, query.sort, setQuery]);\n\n const { data, error, isLoading, isFetching } = 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 } = useDocumentRBAC('ListViewPage', ({ canCreate }) => ({\n canCreate,\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 return formattedHeaders;\n }, [\n displayedHeaders,\n formatMessage,\n hasStatusFilter,\n list,\n runHookWaterfall,\n schema?.options?.draftAndPublish,\n model,\n ]);\n\n if (isLoadingLayout || !isHydrated || isLoading) {\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 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 <Table.Root rows={results} headers={tableHeaders} isLoading={isFetching}>\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 {results.map((row) => {\n return (\n <Table.Row\n cursor=\"pointer\"\n key={row.id}\n onClick={handleRowClick(row.documentId)}\n >\n <Table.CheckboxCell id={row.id} />\n {tableHeaders.map(({ cellFormatter, ...header }) => {\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 return (\n <Table.Cell key={header.name}>\n <Flex gap={2} alignItems=\"center\" width=\"100%\" minWidth={0}>\n <Typography textColor=\"neutral800\" maxWidth=\"30rem\" ellipsis>\n {row.documentId || '-'}\n </Typography>\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 {/* @ts-expect-error – TODO: fix this TS error */}\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 />\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 </Table.Row>\n );\n })}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root\n {...pagination}\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","LayoutsHeaderCustom","styled","Layouts","Header","ListViewPage","trackUsage","useTracking","navigate","useNavigate","formatMessage","useIntl","toggleNotification","useNotification","copy","useClipboard","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","isMobile","useIsMobile","useIsDesktop","handleCopyDocumentId","React","useCallback","e","documentId","stopPropagation","didCopy","type","message","id","defaultMessage","collectionType","model","schema","useDoc","list","listViewConversionContext","isLoading","isLoadingLayout","useDocumentLayout","persistentQueryConfigs","useMemo","paths","scoped","STRAPI_LOCALE","isHydrated","usePersistentPartialQueryParams","displayedHeaderNames","setDisplayedHeaderNames","useScopedPersistentState","mapDisplayedHeaders","headers","map","header","name","displayedHeaders","metadatas","Object","keys","length","attributes","convertListLayoutToFieldLayouts","configurations","componentConfigurations","schemas","componentSchemas","contentTypeSchemas","handleSetHeaders","handleResetHeaders","layout","useEffect","uid","allowedDisplayHeaders","filter","includes","query","setQuery","useQueryParams","page","pageSize","settings","toString","sort","defaultSortBy","defaultSortOrder","params","buildValidParams","hasAppliedFilters","Boolean","filters","$and","hasStatusFilter","some","f","__status","$eq","test","cleaned","split","s","trim","join","undefined","data","error","isFetching","useGetAllDocumentsQuery","skip","results","pagination","pageCount","search","stringify","replace","canCreate","useDocumentRBAC","runHookWaterfall","useStrapiApp","tableHeaders","formattedHeaders","translation","label","mainField","options","draftAndPublish","push","attribute","searchable","sortable","_jsx","Page","Loading","Error","contentTypeTitle","info","displayName","handleRowClick","pathname","plugins","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","Table","rows","TableActionsBar","Head","HeaderCheckboxCell","HeaderCell","Empty","Body","row","Row","cursor","onClick","CheckboxCell","cellFormatter","status","Cell","DocumentStatus","maxWidth","Typography","textColor","getDisplayName","minWidth","ellipsis","IconButton","size","Duplicate","CellContent","rowId","ActionsCell","TableActions","document","Pagination","onPageSizeChange","PageSize","Links","selectRow","useTable","state","locale","i18n","prevLocale","usePrev","ActionBar","BulkActionsRenderer","Button","tag","ReactRouterLink","startIcon","Plus","style","textDecoration","to","fullWidth","ProtectedListViewPage","slug","useParams","permissions","useRBAC","PERMISSIONS","subject","Protect","DocumentRBAC"],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
|
6
6
|
var designSystem = require('@strapi/design-system');
|
|
7
7
|
var reactIntl = require('react-intl');
|
|
8
8
|
var attributes = require('../../../constants/attributes.js');
|
|
9
|
+
var hooks = require('../../../constants/hooks.js');
|
|
9
10
|
var useContentTypeSchema = require('../../../hooks/useContentTypeSchema.js');
|
|
10
11
|
var useDebounce = require('../../../hooks/useDebounce.js');
|
|
11
12
|
var contentTypes = require('../../../services/contentTypes.js');
|
|
@@ -32,6 +33,7 @@ function _interopNamespaceDefault(e) {
|
|
|
32
33
|
|
|
33
34
|
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
34
35
|
|
|
36
|
+
const { INJECT_LIST_VIEW_FILTERS } = hooks.HOOKS;
|
|
35
37
|
/**
|
|
36
38
|
* If new attributes are added, this list needs to be updated.
|
|
37
39
|
*/ const NOT_ALLOWED_FILTERS = [
|
|
@@ -51,13 +53,14 @@ const USER_FILTER_ATTRIBUTES = [
|
|
|
51
53
|
...attributes.CREATOR_FIELDS,
|
|
52
54
|
'strapi_assignee'
|
|
53
55
|
];
|
|
54
|
-
const Root = ({ disabled, schema, children })=>{
|
|
56
|
+
const Root = ({ disabled, schema, layout, children })=>{
|
|
55
57
|
const { attributes: attributes$2, uid: model, options } = schema;
|
|
56
58
|
const { formatMessage, locale } = reactIntl.useIntl();
|
|
57
59
|
const { trackUsage } = strapiAdmin.useTracking();
|
|
58
60
|
const allPermissions = strapiAdmin.useAuth('FiltersImpl', (state)=>state.permissions);
|
|
59
61
|
const [{ query }] = strapiAdmin.useQueryParams();
|
|
60
62
|
const { schemas } = useContentTypeSchema.useContentTypeSchema();
|
|
63
|
+
const runHookWaterfall = strapiAdmin.useStrapiApp('FiltersImpl', ({ runHookWaterfall })=>runHookWaterfall);
|
|
61
64
|
const canReadAdminUsers = React__namespace.useMemo(()=>allPermissions.filter((permission)=>permission.action === 'admin::users.read' && permission.subject === null).length > 0, [
|
|
62
65
|
allPermissions
|
|
63
66
|
]);
|
|
@@ -103,7 +106,7 @@ const Root = ({ disabled, schema, children })=>{
|
|
|
103
106
|
const attribute = attributes$2[field] ?? {};
|
|
104
107
|
return attribute.type && !NOT_ALLOWED_FILTERS.includes(attribute.type);
|
|
105
108
|
});
|
|
106
|
-
|
|
109
|
+
const baseFilters = [
|
|
107
110
|
'id',
|
|
108
111
|
'documentId',
|
|
109
112
|
...allowedFields,
|
|
@@ -216,7 +219,35 @@ const Root = ({ disabled, schema, children })=>{
|
|
|
216
219
|
};
|
|
217
220
|
}
|
|
218
221
|
return filter;
|
|
219
|
-
}).filter(Boolean)
|
|
222
|
+
}).filter(Boolean);
|
|
223
|
+
// Let plugins inject their own filters.
|
|
224
|
+
// `layout.options` is a merge of schema/pluginOptions/contentType options —
|
|
225
|
+
// mirrors the column-injection hook contract.
|
|
226
|
+
const { displayedFilters: extendedFilters } = runHookWaterfall(INJECT_LIST_VIEW_FILTERS, {
|
|
227
|
+
displayedFilters: baseFilters,
|
|
228
|
+
layout
|
|
229
|
+
});
|
|
230
|
+
const resolveLabel = (label)=>typeof label === 'string' ? label : formatMessage(label);
|
|
231
|
+
const userOptions = users$1.map((user)=>({
|
|
232
|
+
label: users.getDisplayName(user),
|
|
233
|
+
value: user.id.toString()
|
|
234
|
+
}));
|
|
235
|
+
const formatted = extendedFilters.map((filter)=>{
|
|
236
|
+
const next = {
|
|
237
|
+
...filter,
|
|
238
|
+
label: resolveLabel(filter.label),
|
|
239
|
+
operators: filter.operators?.map((op)=>({
|
|
240
|
+
...op,
|
|
241
|
+
label: resolveLabel(op.label)
|
|
242
|
+
}))
|
|
243
|
+
};
|
|
244
|
+
// User-typed filters need user options so the chip can render the display name instead of the id.
|
|
245
|
+
if (USER_FILTER_ATTRIBUTES.includes(filter.name) && !next.options?.length) {
|
|
246
|
+
next.options = userOptions;
|
|
247
|
+
}
|
|
248
|
+
return next;
|
|
249
|
+
});
|
|
250
|
+
return formatted.toSorted((a, b)=>formatter.compare(a.label, b.label));
|
|
220
251
|
}, [
|
|
221
252
|
allPermissions,
|
|
222
253
|
canReadAdminUsers,
|
|
@@ -224,9 +255,12 @@ const Root = ({ disabled, schema, children })=>{
|
|
|
224
255
|
attributes$2,
|
|
225
256
|
metadata,
|
|
226
257
|
schemas,
|
|
258
|
+
layout,
|
|
227
259
|
users$1,
|
|
228
260
|
formatMessage,
|
|
229
|
-
formatter
|
|
261
|
+
formatter,
|
|
262
|
+
options?.draftAndPublish,
|
|
263
|
+
runHookWaterfall
|
|
230
264
|
]);
|
|
231
265
|
const onOpenChange = (isOpen)=>{
|
|
232
266
|
if (isOpen) {
|
|
@@ -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} from '@strapi/admin/strapi-admin';\nimport { Combobox, ComboboxOption, useCollator } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { useContentTypeSchema } from '../../../hooks/useContentTypeSchema';\nimport { useDebounce } from '../../../hooks/useDebounce';\nimport { Schema } from '../../../hooks/useDocument';\nimport { useGetContentTypeConfigurationQuery } from '../../../services/contentTypes';\nimport { getMainField } from '../../../utils/attributes';\nimport { getTranslation } from '../../../utils/translations';\nimport { getDisplayName } from '../../../utils/users';\n\n/**\n * If new attributes are added, this list needs to be updated.\n */\nconst NOT_ALLOWED_FILTERS = [\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 = [...CREATOR_FIELDS, 'strapi_assignee'];\n\n/* -------------------------------------------------------------------------------------------------\n * Filters\n * -----------------------------------------------------------------------------------------------*/\ninterface FiltersProps {\n disabled?: boolean;\n schema: Schema;\n children: React.ReactNode;\n}\n\nconst Root = ({ disabled, schema, 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\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.includes(key)) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []);\n\n const { data: userData, isLoading: isLoadingAdminUsers } = 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 { metadata } = useGetContentTypeConfigurationQuery(model, {\n selectFromResult: ({ data }) => ({ metadata: data?.contentType.metadatas ?? {} }),\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedFilters = React.useMemo(() => {\n const [{ properties: { fields = [] } = { fields: [] } }] = allPermissions.filter(\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.includes(attribute.type);\n });\n\n return (\n [\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 (NOT_ALLOWED_FILTERS.includes(attribute.type)) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = metadata[name].list;\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: value,\n value,\n })),\n };\n }\n\n return filter;\n })\n .filter(Boolean) as Filters.Filter[]\n ).toSorted((a, b) => formatter.compare(a.label, b.label));\n }, [\n allPermissions,\n canReadAdminUsers,\n model,\n attributes,\n metadata,\n schemas,\n users,\n formatMessage,\n formatter,\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(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":["NOT_ALLOWED_FILTERS","DEFAULT_ALLOWED_FILTERS","USER_FILTER_ATTRIBUTES","CREATOR_FIELDS","Root","disabled","schema","children","attributes","uid","model","options","formatMessage","locale","useIntl","trackUsage","useTracking","allPermissions","useAuth","state","permissions","query","useQueryParams","schemas","useContentTypeSchema","canReadAdminUsers","React","useMemo","filter","permission","action","subject","length","selectedUserIds","filters","$and","reduce","acc","key","value","Object","entries","id","$eq","$ne","attribute","isAdminUserRelation","type","target","includes","push","data","userData","isLoading","isLoadingAdminUsers","useAdminUsers","$in","skip","users","metadata","useGetContentTypeConfigurationQuery","selectFromResult","contentType","metadatas","formatter","useCollator","sensitivity","displayedFilters","properties","fields","allowedFields","field","draftAndPublish","map","name","label","getTranslation","defaultMessage","operators","mainField","mainFieldName","list","getMainField","components","input","AdminUsersFilter","user","getDisplayName","toString","enum","Boolean","toSorted","a","b","compare","onOpenChange","isOpen","handleFilterChange","useRelation","_jsx","Filters","onChange","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","_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 { useGetContentTypeConfigurationQuery } from '../../../services/contentTypes';\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 = [\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 = [...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.includes(key)) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []);\n\n const { data: userData, isLoading: isLoadingAdminUsers } = 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 { metadata } = useGetContentTypeConfigurationQuery(model, {\n selectFromResult: ({ data }) => ({ metadata: data?.contentType.metadatas ?? {} }),\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedFilters = React.useMemo(() => {\n const [{ properties: { fields = [] } = { fields: [] } }] = allPermissions.filter(\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.includes(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 (NOT_ALLOWED_FILTERS.includes(attribute.type)) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = metadata[name].list;\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: 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.includes(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 metadata,\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(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","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","includes","push","data","userData","isLoading","isLoadingAdminUsers","useAdminUsers","$in","skip","users","metadata","useGetContentTypeConfigurationQuery","selectFromResult","contentType","metadatas","formatter","useCollator","sensitivity","displayedFilters","properties","fields","allowedFields","field","baseFilters","draftAndPublish","map","name","label","getTranslation","defaultMessage","operators","mainField","mainFieldName","list","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","_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,9 +1,10 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { Filters, useTracking, useAuth, useQueryParams, useAdminUsers, useField } from '@strapi/admin/strapi-admin';
|
|
3
|
+
import { Filters, useTracking, useAuth, useQueryParams, useStrapiApp, useAdminUsers, 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';
|
|
7
|
+
import { HOOKS } from '../../../constants/hooks.mjs';
|
|
7
8
|
import { useContentTypeSchema } from '../../../hooks/useContentTypeSchema.mjs';
|
|
8
9
|
import { useDebounce } from '../../../hooks/useDebounce.mjs';
|
|
9
10
|
import { useGetContentTypeConfigurationQuery } from '../../../services/contentTypes.mjs';
|
|
@@ -11,6 +12,7 @@ import { getMainField } from '../../../utils/attributes.mjs';
|
|
|
11
12
|
import { getTranslation } from '../../../utils/translations.mjs';
|
|
12
13
|
import { getDisplayName } from '../../../utils/users.mjs';
|
|
13
14
|
|
|
15
|
+
const { INJECT_LIST_VIEW_FILTERS } = HOOKS;
|
|
14
16
|
/**
|
|
15
17
|
* If new attributes are added, this list needs to be updated.
|
|
16
18
|
*/ const NOT_ALLOWED_FILTERS = [
|
|
@@ -30,13 +32,14 @@ const USER_FILTER_ATTRIBUTES = [
|
|
|
30
32
|
...CREATOR_FIELDS,
|
|
31
33
|
'strapi_assignee'
|
|
32
34
|
];
|
|
33
|
-
const Root = ({ disabled, schema, children })=>{
|
|
35
|
+
const Root = ({ disabled, schema, layout, children })=>{
|
|
34
36
|
const { attributes, uid: model, options } = schema;
|
|
35
37
|
const { formatMessage, locale } = useIntl();
|
|
36
38
|
const { trackUsage } = useTracking();
|
|
37
39
|
const allPermissions = useAuth('FiltersImpl', (state)=>state.permissions);
|
|
38
40
|
const [{ query }] = useQueryParams();
|
|
39
41
|
const { schemas } = useContentTypeSchema();
|
|
42
|
+
const runHookWaterfall = useStrapiApp('FiltersImpl', ({ runHookWaterfall })=>runHookWaterfall);
|
|
40
43
|
const canReadAdminUsers = React.useMemo(()=>allPermissions.filter((permission)=>permission.action === 'admin::users.read' && permission.subject === null).length > 0, [
|
|
41
44
|
allPermissions
|
|
42
45
|
]);
|
|
@@ -82,7 +85,7 @@ const Root = ({ disabled, schema, children })=>{
|
|
|
82
85
|
const attribute = attributes[field] ?? {};
|
|
83
86
|
return attribute.type && !NOT_ALLOWED_FILTERS.includes(attribute.type);
|
|
84
87
|
});
|
|
85
|
-
|
|
88
|
+
const baseFilters = [
|
|
86
89
|
'id',
|
|
87
90
|
'documentId',
|
|
88
91
|
...allowedFields,
|
|
@@ -195,7 +198,35 @@ const Root = ({ disabled, schema, children })=>{
|
|
|
195
198
|
};
|
|
196
199
|
}
|
|
197
200
|
return filter;
|
|
198
|
-
}).filter(Boolean)
|
|
201
|
+
}).filter(Boolean);
|
|
202
|
+
// Let plugins inject their own filters.
|
|
203
|
+
// `layout.options` is a merge of schema/pluginOptions/contentType options —
|
|
204
|
+
// mirrors the column-injection hook contract.
|
|
205
|
+
const { displayedFilters: extendedFilters } = runHookWaterfall(INJECT_LIST_VIEW_FILTERS, {
|
|
206
|
+
displayedFilters: baseFilters,
|
|
207
|
+
layout
|
|
208
|
+
});
|
|
209
|
+
const resolveLabel = (label)=>typeof label === 'string' ? label : formatMessage(label);
|
|
210
|
+
const userOptions = users.map((user)=>({
|
|
211
|
+
label: getDisplayName(user),
|
|
212
|
+
value: user.id.toString()
|
|
213
|
+
}));
|
|
214
|
+
const formatted = extendedFilters.map((filter)=>{
|
|
215
|
+
const next = {
|
|
216
|
+
...filter,
|
|
217
|
+
label: resolveLabel(filter.label),
|
|
218
|
+
operators: filter.operators?.map((op)=>({
|
|
219
|
+
...op,
|
|
220
|
+
label: resolveLabel(op.label)
|
|
221
|
+
}))
|
|
222
|
+
};
|
|
223
|
+
// User-typed filters need user options so the chip can render the display name instead of the id.
|
|
224
|
+
if (USER_FILTER_ATTRIBUTES.includes(filter.name) && !next.options?.length) {
|
|
225
|
+
next.options = userOptions;
|
|
226
|
+
}
|
|
227
|
+
return next;
|
|
228
|
+
});
|
|
229
|
+
return formatted.toSorted((a, b)=>formatter.compare(a.label, b.label));
|
|
199
230
|
}, [
|
|
200
231
|
allPermissions,
|
|
201
232
|
canReadAdminUsers,
|
|
@@ -203,9 +234,12 @@ const Root = ({ disabled, schema, children })=>{
|
|
|
203
234
|
attributes,
|
|
204
235
|
metadata,
|
|
205
236
|
schemas,
|
|
237
|
+
layout,
|
|
206
238
|
users,
|
|
207
239
|
formatMessage,
|
|
208
|
-
formatter
|
|
240
|
+
formatter,
|
|
241
|
+
options?.draftAndPublish,
|
|
242
|
+
runHookWaterfall
|
|
209
243
|
]);
|
|
210
244
|
const onOpenChange = (isOpen)=>{
|
|
211
245
|
if (isOpen) {
|