@strapi/content-manager 5.36.0 → 5.37.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/pages/ListView/ListViewPage.js +77 -121
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +79 -123
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.js +10 -11
- package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.mjs +12 -13
- package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
- package/dist/admin/src/pages/ListView/components/Filters.d.ts +12 -2
- package/dist/admin/utils/validation.js +2 -3
- package/dist/admin/utils/validation.js.map +1 -1
- package/dist/admin/utils/validation.mjs +2 -3
- package/dist/admin/utils/validation.mjs.map +1 -1
- package/dist/server/history/services/lifecycles.js +31 -10
- package/dist/server/history/services/lifecycles.js.map +1 -1
- package/dist/server/history/services/lifecycles.mjs +31 -10
- package/dist/server/history/services/lifecycles.mjs.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/package.json +9 -9
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { Layouts, useTracking, useNotification, useAPIErrorHandler, useScopedPersistentState, useQueryParams, useStrapiApp, Page, tours, BackButton,
|
|
3
|
+
import { Layouts, useTracking, useNotification, useAPIErrorHandler, useIsMobile, useIsDesktop, useScopedPersistentState, useQueryParams, useStrapiApp, Page, SearchInput, tours, BackButton, Table, Pagination, useTable, useRBAC } from '@strapi/admin/strapi-admin';
|
|
4
4
|
import { Box, EmptyStateLayout, Flex, Typography, Button } from '@strapi/design-system';
|
|
5
5
|
import { Plus } from '@strapi/icons';
|
|
6
6
|
import { EmptyDocuments } from '@strapi/icons/symbols';
|
|
@@ -22,7 +22,7 @@ import { getTranslation } from '../../utils/translations.mjs';
|
|
|
22
22
|
import { getDisplayName } from '../../utils/users.mjs';
|
|
23
23
|
import { DocumentStatus } from '../EditView/components/DocumentStatus.mjs';
|
|
24
24
|
import { BulkActionsRenderer } from './components/BulkActions/Actions.mjs';
|
|
25
|
-
import {
|
|
25
|
+
import { listViewFilters } from './components/Filters.mjs';
|
|
26
26
|
import { TableActions } from './components/TableActions.mjs';
|
|
27
27
|
import { CellContent } from './components/TableCells/CellContent.mjs';
|
|
28
28
|
import { ViewSettingsMenu } from './components/ViewSettingsMenu.mjs';
|
|
@@ -39,6 +39,8 @@ const ListViewPage = ()=>{
|
|
|
39
39
|
const { formatMessage } = useIntl();
|
|
40
40
|
const { toggleNotification } = useNotification();
|
|
41
41
|
const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);
|
|
42
|
+
const isMobile = useIsMobile();
|
|
43
|
+
useIsDesktop();
|
|
42
44
|
usePersistentPartialQueryParams('STRAPI_LIST_VIEW_SETTINGS:', [
|
|
43
45
|
'sort',
|
|
44
46
|
'filters',
|
|
@@ -97,6 +99,7 @@ const ListViewPage = ()=>{
|
|
|
97
99
|
const params = React.useMemo(()=>buildValidParams(query), [
|
|
98
100
|
query
|
|
99
101
|
]);
|
|
102
|
+
const hasAppliedFilters = Boolean(query?.filters?.$and?.length);
|
|
100
103
|
const { data, error, isLoading, isFetching } = useGetAllDocumentsQuery({
|
|
101
104
|
model,
|
|
102
105
|
params
|
|
@@ -205,91 +208,60 @@ const ListViewPage = ()=>{
|
|
|
205
208
|
})
|
|
206
209
|
});
|
|
207
210
|
};
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
}) : null
|
|
263
|
-
]
|
|
264
|
-
})
|
|
265
|
-
}),
|
|
266
|
-
/*#__PURE__*/ jsx(Layouts.Content, {
|
|
267
|
-
children: /*#__PURE__*/ jsx(Box, {
|
|
268
|
-
background: "neutral0",
|
|
269
|
-
shadow: "filterShadow",
|
|
270
|
-
hasRadius: true,
|
|
271
|
-
children: /*#__PURE__*/ jsx(EmptyStateLayout, {
|
|
272
|
-
action: canCreate && /*#__PURE__*/ jsx(Box, {
|
|
273
|
-
children: /*#__PURE__*/ jsx(CreateButton, {
|
|
274
|
-
variant: "secondary"
|
|
275
|
-
})
|
|
276
|
-
}),
|
|
277
|
-
content: formatMessage({
|
|
278
|
-
id: 'app.components.EmptyStateLayout.content-document',
|
|
279
|
-
defaultMessage: 'No content found'
|
|
280
|
-
}),
|
|
281
|
-
hasRadius: true,
|
|
282
|
-
icon: /*#__PURE__*/ jsx(EmptyDocuments, {
|
|
283
|
-
width: "16rem"
|
|
284
|
-
})
|
|
285
|
-
})
|
|
286
|
-
})
|
|
287
|
-
})
|
|
288
|
-
]
|
|
289
|
-
})
|
|
290
|
-
]
|
|
291
|
-
});
|
|
292
|
-
}
|
|
211
|
+
const isEmptyState = !isFetching && results.length === 0;
|
|
212
|
+
const endActions = /*#__PURE__*/ jsxs(Fragment, {
|
|
213
|
+
children: [
|
|
214
|
+
isMobile && list.settings.filterable && schema && /*#__PURE__*/ jsx(listViewFilters.Trigger, {}),
|
|
215
|
+
/*#__PURE__*/ jsx(InjectionZone, {
|
|
216
|
+
area: "listView.actions"
|
|
217
|
+
}),
|
|
218
|
+
/*#__PURE__*/ jsx(ViewSettingsMenu, {
|
|
219
|
+
setHeaders: handleSetHeaders,
|
|
220
|
+
resetHeaders: handleResetHeaders,
|
|
221
|
+
headers: displayedHeaderNames ?? []
|
|
222
|
+
})
|
|
223
|
+
]
|
|
224
|
+
});
|
|
225
|
+
const searchInput = /*#__PURE__*/ jsx(Fragment, {
|
|
226
|
+
children: list.settings.searchable && /*#__PURE__*/ jsx(SearchInput, {
|
|
227
|
+
label: formatMessage({
|
|
228
|
+
id: 'app.component.search.label',
|
|
229
|
+
defaultMessage: 'Search for {target}'
|
|
230
|
+
}, {
|
|
231
|
+
target: contentTypeTitle
|
|
232
|
+
}),
|
|
233
|
+
placeholder: formatMessage({
|
|
234
|
+
id: 'global.search',
|
|
235
|
+
defaultMessage: 'Search'
|
|
236
|
+
}),
|
|
237
|
+
trackedEvent: "didSearch"
|
|
238
|
+
})
|
|
239
|
+
});
|
|
240
|
+
const startActions = /*#__PURE__*/ jsxs(Fragment, {
|
|
241
|
+
children: [
|
|
242
|
+
searchInput,
|
|
243
|
+
!isMobile && list.settings.filterable && schema && /*#__PURE__*/ jsxs(Fragment, {
|
|
244
|
+
children: [
|
|
245
|
+
/*#__PURE__*/ jsx(listViewFilters.Trigger, {}),
|
|
246
|
+
/*#__PURE__*/ jsx(listViewFilters.List, {})
|
|
247
|
+
]
|
|
248
|
+
})
|
|
249
|
+
]
|
|
250
|
+
});
|
|
251
|
+
const actions = list.settings.filterable && schema ? /*#__PURE__*/ jsxs(listViewFilters.Root, {
|
|
252
|
+
schema: schema,
|
|
253
|
+
children: [
|
|
254
|
+
/*#__PURE__*/ jsx(Layouts.Action, {
|
|
255
|
+
endActions: endActions,
|
|
256
|
+
startActions: startActions,
|
|
257
|
+
bottomActions: isMobile && hasAppliedFilters ? /*#__PURE__*/ jsx(listViewFilters.List, {}) : null
|
|
258
|
+
}),
|
|
259
|
+
/*#__PURE__*/ jsx(listViewFilters.Popover, {})
|
|
260
|
+
]
|
|
261
|
+
}) : /*#__PURE__*/ jsx(Layouts.Action, {
|
|
262
|
+
endActions: endActions,
|
|
263
|
+
startActions: startActions
|
|
264
|
+
});
|
|
293
265
|
return /*#__PURE__*/ jsxs(Fragment, {
|
|
294
266
|
children: [
|
|
295
267
|
/*#__PURE__*/ jsx(tours.contentManager.Introduction, {
|
|
@@ -313,44 +285,28 @@ const ListViewPage = ()=>{
|
|
|
313
285
|
title: contentTypeTitle,
|
|
314
286
|
navigationAction: /*#__PURE__*/ jsx(BackButton, {})
|
|
315
287
|
}),
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
288
|
+
actions,
|
|
289
|
+
/*#__PURE__*/ jsx(Layouts.Content, {
|
|
290
|
+
children: isEmptyState ? /*#__PURE__*/ jsx(Box, {
|
|
291
|
+
background: "neutral0",
|
|
292
|
+
shadow: "filterShadow",
|
|
293
|
+
hasRadius: true,
|
|
294
|
+
children: /*#__PURE__*/ jsx(EmptyStateLayout, {
|
|
295
|
+
action: canCreate && /*#__PURE__*/ jsx(Box, {
|
|
296
|
+
children: /*#__PURE__*/ jsx(CreateButton, {
|
|
297
|
+
variant: "secondary"
|
|
298
|
+
})
|
|
321
299
|
}),
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
headers: displayedHeaderNames ?? []
|
|
326
|
-
})
|
|
327
|
-
]
|
|
328
|
-
}),
|
|
329
|
-
startActions: /*#__PURE__*/ jsxs(Fragment, {
|
|
330
|
-
children: [
|
|
331
|
-
list.settings.searchable && /*#__PURE__*/ jsx(SearchInput, {
|
|
332
|
-
disabled: results.length === 0,
|
|
333
|
-
label: formatMessage({
|
|
334
|
-
id: 'app.component.search.label',
|
|
335
|
-
defaultMessage: 'Search for {target}'
|
|
336
|
-
}, {
|
|
337
|
-
target: contentTypeTitle
|
|
338
|
-
}),
|
|
339
|
-
placeholder: formatMessage({
|
|
340
|
-
id: 'global.search',
|
|
341
|
-
defaultMessage: 'Search'
|
|
342
|
-
}),
|
|
343
|
-
trackedEvent: "didSearch"
|
|
300
|
+
content: formatMessage({
|
|
301
|
+
id: 'app.components.EmptyStateLayout.content-document',
|
|
302
|
+
defaultMessage: 'No content found'
|
|
344
303
|
}),
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
})
|
|
349
|
-
|
|
350
|
-
})
|
|
351
|
-
}),
|
|
352
|
-
/*#__PURE__*/ jsx(Layouts.Content, {
|
|
353
|
-
children: /*#__PURE__*/ jsxs(Flex, {
|
|
304
|
+
hasRadius: true,
|
|
305
|
+
icon: /*#__PURE__*/ jsx(EmptyDocuments, {
|
|
306
|
+
width: "16rem"
|
|
307
|
+
})
|
|
308
|
+
})
|
|
309
|
+
}) : /*#__PURE__*/ jsxs(Flex, {
|
|
354
310
|
gap: 4,
|
|
355
311
|
direction: "column",
|
|
356
312
|
alignItems: "stretch",
|
|
@@ -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 tours,\n} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Flex,\n Typography,\n ButtonProps,\n Box,\n EmptyStateLayout,\n} from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport isEqual from 'lodash/isEqual';\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 { usePersistentPartialQueryParams } 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 { 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 { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n\n usePersistentPartialQueryParams('STRAPI_LIST_VIEW_SETTINGS:', ['sort', 'filters', 'pageSize']);\n usePersistentPartialQueryParams('STRAPI_LOCALE', ['plugins.i18n.locale'], false);\n\n const { collectionType, model, schema } = useDoc();\n const { list } = useDocumentLayout(model);\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 )\n return [];\n\n return convertListLayoutToFieldLayouts(displayedHeaderNames, schema.attributes, list.metadatas);\n }, [displayedHeaderNames, schema, list]);\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 }] = 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\n const { data, error, isLoading, isFetching } = useGetAllDocumentsQuery({\n model,\n params,\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: false,\n } satisfies ListFieldLayout);\n }\n\n return formattedHeaders;\n }, [\n displayedHeaders,\n formatMessage,\n list,\n runHookWaterfall,\n schema?.options?.draftAndPublish,\n model,\n ]);\n\n if (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 if (!isFetching && results.length === 0) {\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 <Layouts.Action\n endActions={\n <>\n <InjectionZone area=\"listView.actions\" />\n <ViewSettingsMenu\n setHeaders={handleSetHeaders}\n resetHeaders={handleResetHeaders}\n headers={displayedHeaderNames ?? []}\n />\n </>\n }\n startActions={\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 {list.settings.filterable && schema ? <Filters schema={schema} /> : null}\n </>\n }\n />\n <Layouts.Content>\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 </Layouts.Content>\n </Page.Main>\n </>\n );\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 <Layouts.Action\n endActions={\n <>\n <InjectionZone area=\"listView.actions\" />\n <ViewSettingsMenu\n setHeaders={handleSetHeaders}\n resetHeaders={handleResetHeaders}\n headers={displayedHeaderNames ?? []}\n />\n </>\n }\n startActions={\n <>\n {list.settings.searchable && (\n <SearchInput\n disabled={results.length === 0}\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 {list.settings.filterable && schema ? (\n <Filters disabled={results.length === 0} schema={schema} />\n ) : null}\n </>\n }\n />\n <Layouts.Content>\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 (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 </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","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","usePersistentPartialQueryParams","collectionType","model","schema","useDoc","list","useDocumentLayout","displayedHeaderNames","setDisplayedHeaderNames","useScopedPersistentState","mapDisplayedHeaders","headers","map","header","name","displayedHeaders","React","useMemo","metadatas","Object","keys","length","attributes","convertListLayoutToFieldLayouts","handleSetHeaders","handleResetHeaders","layout","useEffect","uid","allowedDisplayHeaders","filter","includes","query","useQueryParams","page","pageSize","settings","toString","sort","defaultSortBy","defaultSortOrder","params","buildValidParams","data","error","isLoading","isFetching","useGetAllDocumentsQuery","type","message","results","pagination","pageCount","search","stringify","replace","canCreate","useDocumentRBAC","runHookWaterfall","useStrapiApp","tableHeaders","formattedHeaders","translation","label","id","defaultMessage","mainField","options","draftAndPublish","push","attribute","searchable","sortable","_jsx","Page","Loading","Error","contentTypeTitle","info","displayName","handleRowClick","pathname","plugins","_jsxs","_Fragment","tours","contentManager","Introduction","Box","Main","Title","primaryAction","CreateNewEntry","CreateButton","subtitle","number","total","title","navigationAction","BackButton","Action","endActions","InjectionZone","area","ViewSettingsMenu","setHeaders","resetHeaders","startActions","SearchInput","target","placeholder","trackedEvent","filterable","Filters","Content","background","shadow","hasRadius","EmptyStateLayout","action","variant","content","icon","EmptyDocuments","width","disabled","Flex","gap","direction","alignItems","Table","Root","rows","TableActionsBar","Head","HeaderCheckboxCell","HeaderCell","Empty","Body","row","Row","cursor","onClick","documentId","CheckboxCell","cellFormatter","status","Cell","DocumentStatus","maxWidth","split","Typography","textColor","getDisplayName","CellContent","rowId","ActionsCell","e","stopPropagation","TableActions","document","Pagination","onPageSizeChange","PageSize","Links","selectRow","useTable","state","locale","i18n","prevLocale","usePrev","ActionBar","BulkActionsRenderer","Button","tag","ReactRouterLink","startIcon","Plus","style","textDecoration","to","minWidth","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 tours,\n} from '@strapi/admin/strapi-admin';\nimport {\n Button,\n Flex,\n Typography,\n ButtonProps,\n Box,\n EmptyStateLayout,\n} from '@strapi/design-system';\nimport { 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 { usePersistentPartialQueryParams } 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 { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler(getTranslation);\n const isMobile = useIsMobile();\n const isDesktop = useIsDesktop();\n\n usePersistentPartialQueryParams('STRAPI_LIST_VIEW_SETTINGS:', ['sort', 'filters', 'pageSize']);\n usePersistentPartialQueryParams('STRAPI_LOCALE', ['plugins.i18n.locale'], false);\n\n const { collectionType, model, schema } = useDoc();\n const { list } = useDocumentLayout(model);\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 )\n return [];\n\n return convertListLayoutToFieldLayouts(displayedHeaderNames, schema.attributes, list.metadatas);\n }, [displayedHeaderNames, schema, list]);\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 }] = 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\n const { data, error, isLoading, isFetching } = useGetAllDocumentsQuery({\n model,\n params,\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: false,\n } satisfies ListFieldLayout);\n }\n\n return formattedHeaders;\n }, [\n displayedHeaders,\n formatMessage,\n list,\n runHookWaterfall,\n schema?.options?.draftAndPublish,\n model,\n ]);\n\n if (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 (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","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","getTranslation","isMobile","useIsMobile","useIsDesktop","usePersistentPartialQueryParams","collectionType","model","schema","useDoc","list","useDocumentLayout","displayedHeaderNames","setDisplayedHeaderNames","useScopedPersistentState","mapDisplayedHeaders","headers","map","header","name","displayedHeaders","React","useMemo","metadatas","Object","keys","length","attributes","convertListLayoutToFieldLayouts","handleSetHeaders","handleResetHeaders","layout","useEffect","uid","allowedDisplayHeaders","filter","includes","query","useQueryParams","page","pageSize","settings","toString","sort","defaultSortBy","defaultSortOrder","params","buildValidParams","hasAppliedFilters","Boolean","filters","$and","data","error","isLoading","isFetching","useGetAllDocumentsQuery","type","message","results","pagination","pageCount","search","stringify","replace","canCreate","useDocumentRBAC","runHookWaterfall","useStrapiApp","tableHeaders","formattedHeaders","translation","label","id","defaultMessage","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","documentId","CheckboxCell","cellFormatter","status","Cell","DocumentStatus","maxWidth","split","Typography","textColor","getDisplayName","CellContent","rowId","ActionsCell","e","stopPropagation","TableActions","document","Pagination","onPageSizeChange","PageSize","Links","selectRow","useTable","state","locale","i18n","prevLocale","usePrev","ActionBar","BulkActionsRenderer","Button","tag","ReactRouterLink","startIcon","Plus","style","textDecoration","to","minWidth","fullWidth","ProtectedListViewPage","slug","useParams","permissions","useRBAC","PERMISSIONS","subject","Protect","DocumentRBAC"],"mappings":"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"}
|
|
@@ -50,7 +50,7 @@ const USER_FILTER_ATTRIBUTES = [
|
|
|
50
50
|
...attributes.CREATOR_FIELDS,
|
|
51
51
|
'strapi_assignee'
|
|
52
52
|
];
|
|
53
|
-
const
|
|
53
|
+
const Root = ({ disabled, schema, children })=>{
|
|
54
54
|
const { attributes: attributes$2, uid: model, options } = schema;
|
|
55
55
|
const { formatMessage, locale } = reactIntl.useIntl();
|
|
56
56
|
const { trackUsage } = strapiAdmin.useTracking();
|
|
@@ -121,7 +121,6 @@ const FiltersImpl = ({ disabled, schema })=>{
|
|
|
121
121
|
schemas,
|
|
122
122
|
components: {}
|
|
123
123
|
}),
|
|
124
|
-
// @ts-expect-error – TODO: this is filtered out above in the `allowedFields` call but TS complains, is there a better way to solve this?
|
|
125
124
|
type: attribute.type
|
|
126
125
|
};
|
|
127
126
|
if (attribute.type === 'relation' && 'target' in attribute && attribute.target === 'admin::user') {
|
|
@@ -189,18 +188,12 @@ const FiltersImpl = ({ disabled, schema })=>{
|
|
|
189
188
|
});
|
|
190
189
|
}
|
|
191
190
|
};
|
|
192
|
-
return /*#__PURE__*/ jsxRuntime.
|
|
191
|
+
return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Filters.Root, {
|
|
193
192
|
disabled: disabled,
|
|
194
193
|
options: displayedFilters,
|
|
195
194
|
onOpenChange: onOpenChange,
|
|
196
195
|
onChange: handleFilterChange,
|
|
197
|
-
children:
|
|
198
|
-
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Filters.Trigger, {}),
|
|
199
|
-
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Filters.Popover, {
|
|
200
|
-
zIndex: 499
|
|
201
|
-
}),
|
|
202
|
-
/*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Filters.List, {})
|
|
203
|
-
]
|
|
196
|
+
children: children
|
|
204
197
|
});
|
|
205
198
|
};
|
|
206
199
|
/* -------------------------------------------------------------------------------------------------
|
|
@@ -244,6 +237,12 @@ const FiltersImpl = ({ disabled, schema })=>{
|
|
|
244
237
|
})
|
|
245
238
|
});
|
|
246
239
|
};
|
|
240
|
+
const listViewFilters = {
|
|
241
|
+
Root,
|
|
242
|
+
Trigger: strapiAdmin.Filters.Trigger,
|
|
243
|
+
Popover: strapiAdmin.Filters.Popover,
|
|
244
|
+
List: strapiAdmin.Filters.List
|
|
245
|
+
};
|
|
247
246
|
|
|
248
|
-
exports.
|
|
247
|
+
exports.listViewFilters = listViewFilters;
|
|
249
248
|
//# 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} 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 { 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}\n\nconst FiltersImpl = ({ disabled, schema }: 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 ]\n .map((name) => {\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 // @ts-expect-error – TODO: this is filtered out above in the `allowedFields` call but TS complains, is there a better way to solve this?\n type: attribute.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 <Filters.Trigger />\n <Filters.Popover zIndex={499} />\n <Filters.List />\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\nexport { FiltersImpl as Filters };\nexport type { FiltersProps };\n"],"names":["NOT_ALLOWED_FILTERS","DEFAULT_ALLOWED_FILTERS","USER_FILTER_ATTRIBUTES","CREATOR_FIELDS","FiltersImpl","disabled","schema","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","map","name","mainField","mainFieldName","label","list","getMainField","components","input","AdminUsersFilter","user","getDisplayName","toString","operators","defaultMessage","enum","Boolean","toSorted","a","b","compare","onOpenChange","isOpen","handleFilterChange","useRelation","_jsxs","Filters","Root","onChange","_jsx","Trigger","Popover","zIndex","List","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","_q","useField","handleOpenChange","pagination","pageCount","page","Combobox","aria-label","loading","onLoadMore","hasMoreItems","onInputChange","e","currentTarget","ComboboxOption"],"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} 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 { 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 ]\n .map((name) => {\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","map","name","mainField","mainFieldName","label","list","getMainField","components","input","AdminUsersFilter","user","getDisplayName","toString","operators","defaultMessage","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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"}
|