@strapi/content-manager 5.57.0 → 5.59.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.
Files changed (178) hide show
  1. package/dist/admin/components/ConfigurationForm/Fields.js +4 -3
  2. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  3. package/dist/admin/components/ConfigurationForm/Fields.mjs +4 -3
  4. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  5. package/dist/admin/components/RelativeTime.js +2 -1
  6. package/dist/admin/components/RelativeTime.js.map +1 -1
  7. package/dist/admin/components/RelativeTime.mjs +2 -1
  8. package/dist/admin/components/RelativeTime.mjs.map +1 -1
  9. package/dist/admin/content-manager.js.map +1 -1
  10. package/dist/admin/content-manager.mjs.map +1 -1
  11. package/dist/admin/history/components/VersionContent.js +8 -8
  12. package/dist/admin/history/components/VersionContent.js.map +1 -1
  13. package/dist/admin/history/components/VersionContent.mjs +8 -8
  14. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  15. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  16. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  17. package/dist/admin/hooks/useDocumentLayout.js.map +1 -1
  18. package/dist/admin/hooks/useDocumentLayout.mjs.map +1 -1
  19. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  20. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  21. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  22. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  23. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +2 -2
  24. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  25. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +2 -2
  26. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  27. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +7 -6
  28. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +7 -6
  30. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +2 -1
  32. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +2 -1
  34. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js +2 -1
  36. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs +2 -1
  38. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +4 -3
  40. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +4 -3
  42. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  44. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +31 -11
  46. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +32 -12
  48. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/UID.js +2 -1
  50. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +2 -1
  52. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  54. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormLayout.js +4 -4
  56. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormLayout.mjs +4 -4
  58. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/Panels.js.map +1 -1
  60. package/dist/admin/pages/EditView/components/Panels.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/utils/data.js +3 -3
  62. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  63. package/dist/admin/pages/EditView/utils/data.mjs +3 -3
  64. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  65. package/dist/admin/pages/ListConfiguration/components/Settings.js +3 -3
  66. package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
  67. package/dist/admin/pages/ListConfiguration/components/Settings.mjs +3 -3
  68. package/dist/admin/pages/ListConfiguration/components/Settings.mjs.map +1 -1
  69. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js +2 -2
  70. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js.map +1 -1
  71. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs +2 -2
  72. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs.map +1 -1
  73. package/dist/admin/pages/ListView/ListViewPage.js +73 -13
  74. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  75. package/dist/admin/pages/ListView/ListViewPage.mjs +74 -14
  76. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  77. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.js +1 -1
  78. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.js.map +1 -1
  79. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.mjs +1 -1
  80. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.mjs.map +1 -1
  81. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  82. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  83. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +4 -1
  84. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  85. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +4 -1
  86. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  87. package/dist/admin/pages/ListView/components/Filters.js +12 -10
  88. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  89. package/dist/admin/pages/ListView/components/Filters.mjs +12 -10
  90. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  91. package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
  92. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
  93. package/dist/admin/pages/ListView/components/ViewSettingsMenu.js +2 -1
  94. package/dist/admin/pages/ListView/components/ViewSettingsMenu.js.map +1 -1
  95. package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs +2 -1
  96. package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs.map +1 -1
  97. package/dist/admin/pages/ListView/utils/applyAttributeRenames.js +68 -0
  98. package/dist/admin/pages/ListView/utils/applyAttributeRenames.js.map +1 -0
  99. package/dist/admin/pages/ListView/utils/applyAttributeRenames.mjs +64 -0
  100. package/dist/admin/pages/ListView/utils/applyAttributeRenames.mjs.map +1 -0
  101. package/dist/admin/preview/components/PreviewHeader.js +3 -1
  102. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  103. package/dist/admin/preview/components/PreviewHeader.mjs +3 -1
  104. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  105. package/dist/admin/services/relations.js +5 -2
  106. package/dist/admin/services/relations.js.map +1 -1
  107. package/dist/admin/services/relations.mjs +5 -2
  108. package/dist/admin/services/relations.mjs.map +1 -1
  109. package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +1 -1
  110. package/dist/admin/src/pages/ListView/utils/applyAttributeRenames.d.ts +12 -0
  111. package/dist/admin/translations/eu.json.js +3 -3
  112. package/dist/admin/translations/eu.json.mjs +3 -3
  113. package/dist/admin/translations/gu.json.js +4 -4
  114. package/dist/admin/translations/gu.json.mjs +4 -4
  115. package/dist/admin/translations/hi.json.js +9 -9
  116. package/dist/admin/translations/hi.json.mjs +9 -9
  117. package/dist/admin/translations/ml.json.js +6 -6
  118. package/dist/admin/translations/ml.json.mjs +6 -6
  119. package/dist/admin/translations/sa.json.js +10 -10
  120. package/dist/admin/translations/sa.json.mjs +10 -10
  121. package/dist/server/history/entitlements.js +26 -0
  122. package/dist/server/history/entitlements.js.map +1 -0
  123. package/dist/server/history/entitlements.mjs +24 -0
  124. package/dist/server/history/entitlements.mjs.map +1 -0
  125. package/dist/server/history/index.js +3 -0
  126. package/dist/server/history/index.js.map +1 -1
  127. package/dist/server/history/index.mjs +3 -0
  128. package/dist/server/history/index.mjs.map +1 -1
  129. package/dist/server/history/services/utils.js +19 -8
  130. package/dist/server/history/services/utils.js.map +1 -1
  131. package/dist/server/history/services/utils.mjs +18 -9
  132. package/dist/server/history/services/utils.mjs.map +1 -1
  133. package/dist/server/homepage/services/homepage.js.map +1 -1
  134. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  135. package/dist/server/preview/services/preview-config.js.map +1 -1
  136. package/dist/server/preview/services/preview-config.mjs.map +1 -1
  137. package/dist/server/register.js +6 -0
  138. package/dist/server/register.js.map +1 -1
  139. package/dist/server/register.mjs +6 -0
  140. package/dist/server/register.mjs.map +1 -1
  141. package/dist/server/services/components.js.map +1 -1
  142. package/dist/server/services/components.mjs.map +1 -1
  143. package/dist/server/services/configuration/rename-fields.js +68 -0
  144. package/dist/server/services/configuration/rename-fields.js.map +1 -0
  145. package/dist/server/services/configuration/rename-fields.mjs +66 -0
  146. package/dist/server/services/configuration/rename-fields.mjs.map +1 -0
  147. package/dist/server/services/utils/configuration/attribute-renames.js +164 -0
  148. package/dist/server/services/utils/configuration/attribute-renames.js.map +1 -0
  149. package/dist/server/services/utils/configuration/attribute-renames.mjs +161 -0
  150. package/dist/server/services/utils/configuration/attribute-renames.mjs.map +1 -0
  151. package/dist/server/services/utils/configuration/attributes.js +12 -12
  152. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  153. package/dist/server/services/utils/configuration/attributes.mjs +12 -12
  154. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  155. package/dist/server/src/history/entitlements.d.ts +9 -0
  156. package/dist/server/src/history/entitlements.d.ts.map +1 -0
  157. package/dist/server/src/history/index.d.ts.map +1 -1
  158. package/dist/server/src/history/services/utils.d.ts +6 -0
  159. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  160. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  161. package/dist/server/src/index.d.ts +2 -0
  162. package/dist/server/src/index.d.ts.map +1 -1
  163. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  164. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  165. package/dist/server/src/register.d.ts.map +1 -1
  166. package/dist/server/src/services/components.d.ts +2 -0
  167. package/dist/server/src/services/components.d.ts.map +1 -1
  168. package/dist/server/src/services/configuration/rename-fields.d.ts +15 -0
  169. package/dist/server/src/services/configuration/rename-fields.d.ts.map +1 -0
  170. package/dist/server/src/services/index.d.ts +2 -0
  171. package/dist/server/src/services/index.d.ts.map +1 -1
  172. package/dist/server/src/services/utils/configuration/attribute-renames.d.ts +57 -0
  173. package/dist/server/src/services/utils/configuration/attribute-renames.d.ts.map +1 -0
  174. package/dist/shared/contracts/content-types.d.ts +5 -0
  175. package/dist/shared/contracts/content-types.d.ts.map +1 -1
  176. package/dist/shared/contracts/relations.d.ts +1 -0
  177. package/dist/shared/contracts/relations.d.ts.map +1 -1
  178. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"Filters.js","sources":["../../../../../admin/src/pages/ListView/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Filters,\n useField,\n useAuth,\n useTracking,\n useQueryParams,\n useAdminUsers,\n useStrapiApp,\n} from '@strapi/admin/strapi-admin';\nimport { Combobox, ComboboxOption, useCollator } from '@strapi/design-system';\nimport { type MessageDescriptor, useIntl } from 'react-intl';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { HOOKS } from '../../../constants/hooks';\nimport { useContentTypeSchema } from '../../../hooks/useContentTypeSchema';\nimport { useDebounce } from '../../../hooks/useDebounce';\nimport { Schema } from '../../../hooks/useDocument';\nimport { getMainField } from '../../../utils/attributes';\nimport { getTranslation } from '../../../utils/translations';\nimport { getDisplayName } from '../../../utils/users';\n\nimport type { InjectableListViewFilter } from '../../../constants/hooks';\nimport type { ListLayout } from '../../../hooks/useDocumentLayout';\n\nconst { INJECT_LIST_VIEW_FILTERS } = HOOKS;\n\n/**\n * If new attributes are added, this list needs to be updated.\n */\nconst NOT_ALLOWED_FILTERS = [\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 } = useAdminUsers(\n { filters: { id: { $in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n skip: selectedUserIds.length === 0 || !canReadAdminUsers,\n }\n );\n\n const { users = [] } = userData ?? {};\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedFilters = React.useMemo(() => {\n 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 (!attribute || NOT_ALLOWED_FILTERS.includes(attribute.type)) {\n return null;\n }\n\n const fieldMetadata = layout.metadatas?.[name];\n if (!fieldMetadata) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = fieldMetadata;\n\n let filter: Filters.Filter = {\n name,\n label: label ?? '',\n mainField: getMainField(attribute, mainFieldName, { schemas, components: {} }),\n type: attribute.type as Filters.Filter['type'],\n };\n\n if (\n attribute.type === 'relation' &&\n 'target' in attribute &&\n attribute.target === 'admin::user'\n ) {\n filter = {\n ...filter,\n input: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n })),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ],\n mainField: {\n name: 'id',\n type: 'integer',\n },\n };\n }\n\n if (attribute.type === 'enumeration') {\n filter = {\n ...filter,\n options: attribute.enum.map((value) => ({\n label: formatMessage({ id: value, defaultMessage: value }),\n value,\n })),\n };\n }\n\n return filter;\n })\n .filter(Boolean) as Filters.Filter[];\n\n // Let plugins inject their own filters.\n // `layout.options` is a merge of schema/pluginOptions/contentType options —\n // mirrors the column-injection hook contract.\n const { displayedFilters: extendedFilters } = runHookWaterfall(INJECT_LIST_VIEW_FILTERS, {\n displayedFilters: baseFilters as InjectableListViewFilter[],\n layout,\n });\n\n const resolveLabel = (label: string | MessageDescriptor): string =>\n typeof label === 'string' ? label : formatMessage(label);\n\n const userOptions = users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n }));\n\n const formatted = extendedFilters.map<Filters.Filter>((filter) => {\n const next: Filters.Filter = {\n ...filter,\n label: resolveLabel(filter.label),\n operators: filter.operators?.map((op) => ({ ...op, label: resolveLabel(op.label) })),\n };\n\n // User-typed filters need user options so the chip can render the display name instead of the id.\n if (USER_FILTER_ATTRIBUTES.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 schemas,\n layout,\n users,\n formatMessage,\n formatter,\n options?.draftAndPublish,\n runHookWaterfall,\n ]);\n\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n trackUsage('willFilterEntries');\n }\n };\n\n const handleFilterChange: Filters.Props['onChange'] = (data) => {\n const attribute = attributes[data.name];\n\n if (attribute) {\n trackUsage('didFilterEntries', {\n useRelation: attribute.type === 'relation',\n });\n }\n };\n\n return (\n <Filters.Root\n disabled={disabled}\n options={displayedFilters}\n onOpenChange={onOpenChange}\n onChange={handleFilterChange}\n >\n {children}\n </Filters.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AdminUsersFilter\n * -----------------------------------------------------------------------------------------------*/\n\nconst AdminUsersFilter = ({ name }: Filters.ValueInputProps) => {\n const [pageSize, setPageSize] = React.useState(10);\n const [search, setSearch] = React.useState('');\n const { formatMessage } = useIntl();\n\n const debouncedSearch = useDebounce(search, 300);\n\n const { data, isLoading } = useAdminUsers({\n pageSize,\n _q: debouncedSearch,\n });\n const field = useField<string>(name);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPageSize(10);\n }\n };\n\n const { users = [], pagination } = data ?? {};\n const { pageCount = 1, page = 1 } = pagination ?? {};\n\n return (\n <Combobox\n value={field.value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select a user to filter',\n })}\n onOpenChange={handleOpenChange}\n onChange={(value) => field.onChange(name, value)}\n loading={isLoading}\n onLoadMore={() => setPageSize(pageSize + 10)}\n hasMoreItems={page < pageCount}\n onInputChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n }}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nconst listViewFilters = {\n Root,\n Trigger: Filters.Trigger,\n Popover: Filters.Popover,\n List: Filters.List,\n};\n\nexport { listViewFilters };\nexport type { FiltersProps };\n"],"names":["INJECT_LIST_VIEW_FILTERS","HOOKS","NOT_ALLOWED_FILTERS","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","useAdminUsers","$in","skip","users","formatter","useCollator","sensitivity","displayedFilters","properties","fields","allowedFields","field","baseFilters","draftAndPublish","map","name","label","getTranslation","defaultMessage","operators","fieldMetadata","metadatas","mainField","mainFieldName","getMainField","components","input","AdminUsersFilter","user","getDisplayName","toString","enum","Boolean","extendedFilters","resolveLabel","userOptions","formatted","next","op","toSorted","a","b","compare","onOpenChange","isOpen","handleFilterChange","useRelation","_jsx","Filters","onChange","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","isLoading","_q","useField","handleOpenChange","pagination","pageCount","page","Combobox","aria-label","loading","onLoadMore","hasMoreItems","onInputChange","e","currentTarget","ComboboxOption","listViewFilters","Trigger","Popover","List"],"mappings":"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"}
1
+ {"version":3,"file":"Filters.js","sources":["../../../../../admin/src/pages/ListView/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Filters,\n useField,\n useAuth,\n useTracking,\n useQueryParams,\n useAdminUsers,\n useStrapiApp,\n} from '@strapi/admin/strapi-admin';\nimport { Combobox, ComboboxOption, useCollator } from '@strapi/design-system';\nimport { type MessageDescriptor, useIntl } from 'react-intl';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { HOOKS } from '../../../constants/hooks';\nimport { useContentTypeSchema } from '../../../hooks/useContentTypeSchema';\nimport { useDebounce } from '../../../hooks/useDebounce';\nimport { Schema } from '../../../hooks/useDocument';\nimport { getMainField } from '../../../utils/attributes';\nimport { getTranslation } from '../../../utils/translations';\nimport { getDisplayName } from '../../../utils/users';\n\nimport type { InjectableListViewFilter } from '../../../constants/hooks';\nimport type { ListLayout } from '../../../hooks/useDocumentLayout';\n\nconst { INJECT_LIST_VIEW_FILTERS } = HOOKS;\n\n/**\n * If new attributes are added, this list needs to be updated.\n */\nconst NOT_ALLOWED_FILTERS = new Set([\n 'json',\n 'component',\n 'media',\n 'richtext',\n 'dynamiczone',\n 'password',\n 'blocks',\n]);\nconst DEFAULT_ALLOWED_FILTERS = ['createdAt', 'updatedAt'];\nconst USER_FILTER_ATTRIBUTES = new Set([...CREATOR_FIELDS, 'strapi_assignee']);\n\n/* -------------------------------------------------------------------------------------------------\n * Filters\n * -----------------------------------------------------------------------------------------------*/\ninterface FiltersProps {\n disabled?: boolean;\n schema: Schema;\n layout: ListLayout;\n children: React.ReactNode;\n}\n\nconst Root = ({ disabled, schema, layout, children }: FiltersProps) => {\n const { attributes, uid: model, options } = schema;\n const { formatMessage, locale } = useIntl();\n const { trackUsage } = useTracking();\n const allPermissions = useAuth('FiltersImpl', (state) => state.permissions);\n const [{ query }] = useQueryParams<Filters.Query>();\n const { schemas } = useContentTypeSchema();\n const runHookWaterfall = useStrapiApp('FiltersImpl', ({ runHookWaterfall }) => runHookWaterfall);\n\n const canReadAdminUsers = React.useMemo(\n () =>\n allPermissions.filter(\n (permission) => permission.action === 'admin::users.read' && permission.subject === null\n ).length > 0,\n [allPermissions]\n );\n\n const selectedUserIds = (query?.filters?.$and ?? []).reduce<string[]>((acc, filter) => {\n const [key, value] = Object.entries(filter)[0];\n if (typeof value.id !== 'object') {\n return acc;\n }\n\n const id = value.id.$eq || value.id.$ne;\n\n // Check if the attribute is a relation to admin::user\n const attribute = attributes[key];\n const isAdminUserRelation =\n attribute?.type === 'relation' && 'target' in attribute && attribute.target === 'admin::user';\n\n if (id && (isAdminUserRelation || USER_FILTER_ATTRIBUTES.has(key)) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []);\n\n const { data: userData } = useAdminUsers(\n { filters: { id: { $in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n skip: selectedUserIds.length === 0 || !canReadAdminUsers,\n }\n );\n\n const { users = [] } = userData ?? {};\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedFilters = React.useMemo(() => {\n // An absent read permission for this model yields no filterable fields.\n // The empty object lets the defaults below apply instead of throwing.\n const { properties: { fields = [] } = { fields: [] } } =\n allPermissions.find(\n (permission) =>\n permission.action === 'plugin::content-manager.explorer.read' &&\n permission.subject === model\n ) ?? {};\n\n const allowedFields = fields.filter((field) => {\n const attribute = attributes[field] ?? {};\n\n return attribute.type && !NOT_ALLOWED_FILTERS.has(attribute.type);\n });\n\n const baseFilters = [\n 'id',\n 'documentId',\n ...allowedFields,\n ...DEFAULT_ALLOWED_FILTERS,\n ...(canReadAdminUsers ? CREATOR_FIELDS : []),\n ...(options?.draftAndPublish === true ? ['__status'] : []),\n ]\n .map((name) => {\n if (name === '__status') {\n return {\n name: '__status',\n type: 'enumeration',\n label: formatMessage({\n id: getTranslation('containers.list.filters.status'),\n defaultMessage: 'Status',\n }),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n ],\n options: [\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.draft'),\n defaultMessage: 'Draft (never published)',\n }),\n value: 'draft',\n },\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.published'),\n defaultMessage: 'Published (all)',\n }),\n value: 'published',\n },\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.publishedModified'),\n defaultMessage: 'Published (modified)',\n }),\n value: 'published-modified',\n },\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.publishedUnmodified'),\n defaultMessage: 'Published (unmodified)',\n }),\n value: 'published-unmodified',\n },\n ],\n } satisfies Filters.Filter;\n }\n\n const attribute = attributes[name];\n\n if (!attribute || NOT_ALLOWED_FILTERS.has(attribute.type)) {\n return null;\n }\n\n const fieldMetadata = layout.metadatas?.[name];\n if (!fieldMetadata) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = fieldMetadata;\n\n let filter: Filters.Filter = {\n name,\n label: label ?? '',\n mainField: getMainField(attribute, mainFieldName, { schemas, components: {} }),\n type: attribute.type as Filters.Filter['type'],\n };\n\n if (\n attribute.type === 'relation' &&\n 'target' in attribute &&\n attribute.target === 'admin::user'\n ) {\n filter = {\n ...filter,\n input: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n })),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ],\n mainField: {\n name: 'id',\n type: 'integer',\n },\n };\n }\n\n if (attribute.type === 'enumeration') {\n filter = {\n ...filter,\n options: attribute.enum.map((value) => ({\n label: formatMessage({ id: value, defaultMessage: value }),\n value,\n })),\n };\n }\n\n return filter;\n })\n .filter(Boolean) as Filters.Filter[];\n\n // Let plugins inject their own filters.\n // `layout.options` is a merge of schema/pluginOptions/contentType options —\n // mirrors the column-injection hook contract.\n const { displayedFilters: extendedFilters } = runHookWaterfall(INJECT_LIST_VIEW_FILTERS, {\n displayedFilters: baseFilters as InjectableListViewFilter[],\n layout,\n });\n\n const resolveLabel = (label: string | MessageDescriptor): string =>\n typeof label === 'string' ? label : formatMessage(label);\n\n const userOptions = users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n }));\n\n const formatted = extendedFilters.map<Filters.Filter>((filter) => {\n const next: Filters.Filter = {\n ...filter,\n label: resolveLabel(filter.label),\n operators: filter.operators?.map((op) => ({ ...op, label: resolveLabel(op.label) })),\n };\n\n // User-typed filters need user options so the chip can render the display name instead of the id.\n if (USER_FILTER_ATTRIBUTES.has(filter.name) && !next.options?.length) {\n next.options = userOptions;\n }\n\n return next;\n });\n\n return formatted.toSorted((a, b) => formatter.compare(a.label, b.label));\n }, [\n allPermissions,\n canReadAdminUsers,\n model,\n attributes,\n schemas,\n layout,\n users,\n formatMessage,\n formatter,\n options?.draftAndPublish,\n runHookWaterfall,\n ]);\n\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n trackUsage('willFilterEntries');\n }\n };\n\n const handleFilterChange: Filters.Props['onChange'] = (data) => {\n const attribute = attributes[data.name];\n\n if (attribute) {\n trackUsage('didFilterEntries', {\n useRelation: attribute.type === 'relation',\n });\n }\n };\n\n return (\n <Filters.Root\n disabled={disabled}\n options={displayedFilters}\n onOpenChange={onOpenChange}\n onChange={handleFilterChange}\n >\n {children}\n </Filters.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AdminUsersFilter\n * -----------------------------------------------------------------------------------------------*/\n\nconst AdminUsersFilter = ({ name }: Filters.ValueInputProps) => {\n const [pageSize, setPageSize] = React.useState(10);\n const [search, setSearch] = React.useState('');\n const { formatMessage } = useIntl();\n\n const debouncedSearch = useDebounce(search, 300);\n\n const { data, isLoading } = useAdminUsers({\n pageSize,\n _q: debouncedSearch,\n });\n const field = useField<string>(name);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPageSize(10);\n }\n };\n\n const { users = [], pagination } = data ?? {};\n const { pageCount = 1, page = 1 } = pagination ?? {};\n\n return (\n <Combobox\n value={field.value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select a user to filter',\n })}\n onOpenChange={handleOpenChange}\n onChange={(value) => field.onChange(name, value)}\n loading={isLoading}\n onLoadMore={() => setPageSize(pageSize + 10)}\n hasMoreItems={page < pageCount}\n onInputChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n }}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nconst listViewFilters = {\n Root,\n Trigger: Filters.Trigger,\n Popover: Filters.Popover,\n List: Filters.List,\n};\n\nexport { listViewFilters };\nexport type { FiltersProps };\n"],"names":["INJECT_LIST_VIEW_FILTERS","HOOKS","NOT_ALLOWED_FILTERS","Set","DEFAULT_ALLOWED_FILTERS","USER_FILTER_ATTRIBUTES","CREATOR_FIELDS","Root","disabled","schema","layout","children","attributes","uid","model","options","formatMessage","locale","useIntl","trackUsage","useTracking","allPermissions","useAuth","state","permissions","query","useQueryParams","schemas","useContentTypeSchema","runHookWaterfall","useStrapiApp","canReadAdminUsers","React","useMemo","filter","permission","action","subject","length","selectedUserIds","filters","$and","reduce","acc","key","value","Object","entries","id","$eq","$ne","attribute","isAdminUserRelation","type","target","has","includes","push","data","userData","useAdminUsers","$in","skip","users","formatter","useCollator","sensitivity","displayedFilters","properties","fields","find","allowedFields","field","baseFilters","draftAndPublish","map","name","label","getTranslation","defaultMessage","operators","fieldMetadata","metadatas","mainField","mainFieldName","getMainField","components","input","AdminUsersFilter","user","getDisplayName","toString","enum","Boolean","extendedFilters","resolveLabel","userOptions","formatted","next","op","toSorted","a","b","compare","onOpenChange","isOpen","handleFilterChange","useRelation","_jsx","Filters","onChange","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","isLoading","_q","useField","handleOpenChange","pagination","pageCount","page","Combobox","aria-label","loading","onLoadMore","hasMoreItems","onInputChange","e","currentTarget","ComboboxOption","listViewFilters","Trigger","Popover","List"],"mappings":"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"}
@@ -14,7 +14,7 @@ import { getDisplayName } from '../../../utils/users.mjs';
14
14
  const { INJECT_LIST_VIEW_FILTERS } = HOOKS;
15
15
  /**
16
16
  * If new attributes are added, this list needs to be updated.
17
- */ const NOT_ALLOWED_FILTERS = [
17
+ */ const NOT_ALLOWED_FILTERS = new Set([
18
18
  'json',
19
19
  'component',
20
20
  'media',
@@ -22,15 +22,15 @@ const { INJECT_LIST_VIEW_FILTERS } = HOOKS;
22
22
  'dynamiczone',
23
23
  'password',
24
24
  'blocks'
25
- ];
25
+ ]);
26
26
  const DEFAULT_ALLOWED_FILTERS = [
27
27
  'createdAt',
28
28
  'updatedAt'
29
29
  ];
30
- const USER_FILTER_ATTRIBUTES = [
30
+ const USER_FILTER_ATTRIBUTES = new Set([
31
31
  ...CREATOR_FIELDS,
32
32
  'strapi_assignee'
33
- ];
33
+ ]);
34
34
  const Root = ({ disabled, schema, layout, children })=>{
35
35
  const { attributes, uid: model, options } = schema;
36
36
  const { formatMessage, locale } = useIntl();
@@ -51,7 +51,7 @@ const Root = ({ disabled, schema, layout, children })=>{
51
51
  // Check if the attribute is a relation to admin::user
52
52
  const attribute = attributes[key];
53
53
  const isAdminUserRelation = attribute?.type === 'relation' && 'target' in attribute && attribute.target === 'admin::user';
54
- if (id && (isAdminUserRelation || USER_FILTER_ATTRIBUTES.includes(key)) && !acc.includes(id)) {
54
+ if (id && (isAdminUserRelation || USER_FILTER_ATTRIBUTES.has(key)) && !acc.includes(id)) {
55
55
  acc.push(id);
56
56
  }
57
57
  return acc;
@@ -72,12 +72,14 @@ const Root = ({ disabled, schema, layout, children })=>{
72
72
  sensitivity: 'base'
73
73
  });
74
74
  const displayedFilters = React.useMemo(()=>{
75
- const [{ properties: { fields = [] } = {
75
+ // An absent read permission for this model yields no filterable fields.
76
+ // The empty object lets the defaults below apply instead of throwing.
77
+ const { properties: { fields = [] } = {
76
78
  fields: []
77
- } }] = allPermissions.filter((permission)=>permission.action === 'plugin::content-manager.explorer.read' && permission.subject === model);
79
+ } } = allPermissions.find((permission)=>permission.action === 'plugin::content-manager.explorer.read' && permission.subject === model) ?? {};
78
80
  const allowedFields = fields.filter((field)=>{
79
81
  const attribute = attributes[field] ?? {};
80
- return attribute.type && !NOT_ALLOWED_FILTERS.includes(attribute.type);
82
+ return attribute.type && !NOT_ALLOWED_FILTERS.has(attribute.type);
81
83
  });
82
84
  const baseFilters = [
83
85
  'id',
@@ -139,7 +141,7 @@ const Root = ({ disabled, schema, layout, children })=>{
139
141
  };
140
142
  }
141
143
  const attribute = attributes[name];
142
- if (!attribute || NOT_ALLOWED_FILTERS.includes(attribute.type)) {
144
+ if (!attribute || NOT_ALLOWED_FILTERS.has(attribute.type)) {
143
145
  return null;
144
146
  }
145
147
  const fieldMetadata = layout.metadatas?.[name];
@@ -222,7 +224,7 @@ const Root = ({ disabled, schema, layout, children })=>{
222
224
  }))
223
225
  };
224
226
  // User-typed filters need user options so the chip can render the display name instead of the id.
225
- if (USER_FILTER_ATTRIBUTES.includes(filter.name) && !next.options?.length) {
227
+ if (USER_FILTER_ATTRIBUTES.has(filter.name) && !next.options?.length) {
226
228
  next.options = userOptions;
227
229
  }
228
230
  return next;
@@ -1 +1 @@
1
- {"version":3,"file":"Filters.mjs","sources":["../../../../../admin/src/pages/ListView/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Filters,\n useField,\n useAuth,\n useTracking,\n useQueryParams,\n useAdminUsers,\n useStrapiApp,\n} from '@strapi/admin/strapi-admin';\nimport { Combobox, ComboboxOption, useCollator } from '@strapi/design-system';\nimport { type MessageDescriptor, useIntl } from 'react-intl';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { HOOKS } from '../../../constants/hooks';\nimport { useContentTypeSchema } from '../../../hooks/useContentTypeSchema';\nimport { useDebounce } from '../../../hooks/useDebounce';\nimport { Schema } from '../../../hooks/useDocument';\nimport { getMainField } from '../../../utils/attributes';\nimport { getTranslation } from '../../../utils/translations';\nimport { getDisplayName } from '../../../utils/users';\n\nimport type { InjectableListViewFilter } from '../../../constants/hooks';\nimport type { ListLayout } from '../../../hooks/useDocumentLayout';\n\nconst { INJECT_LIST_VIEW_FILTERS } = HOOKS;\n\n/**\n * If new attributes are added, this list needs to be updated.\n */\nconst NOT_ALLOWED_FILTERS = [\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 } = useAdminUsers(\n { filters: { id: { $in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n skip: selectedUserIds.length === 0 || !canReadAdminUsers,\n }\n );\n\n const { users = [] } = userData ?? {};\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedFilters = React.useMemo(() => {\n 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 (!attribute || NOT_ALLOWED_FILTERS.includes(attribute.type)) {\n return null;\n }\n\n const fieldMetadata = layout.metadatas?.[name];\n if (!fieldMetadata) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = fieldMetadata;\n\n let filter: Filters.Filter = {\n name,\n label: label ?? '',\n mainField: getMainField(attribute, mainFieldName, { schemas, components: {} }),\n type: attribute.type as Filters.Filter['type'],\n };\n\n if (\n attribute.type === 'relation' &&\n 'target' in attribute &&\n attribute.target === 'admin::user'\n ) {\n filter = {\n ...filter,\n input: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n })),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ],\n mainField: {\n name: 'id',\n type: 'integer',\n },\n };\n }\n\n if (attribute.type === 'enumeration') {\n filter = {\n ...filter,\n options: attribute.enum.map((value) => ({\n label: formatMessage({ id: value, defaultMessage: value }),\n value,\n })),\n };\n }\n\n return filter;\n })\n .filter(Boolean) as Filters.Filter[];\n\n // Let plugins inject their own filters.\n // `layout.options` is a merge of schema/pluginOptions/contentType options —\n // mirrors the column-injection hook contract.\n const { displayedFilters: extendedFilters } = runHookWaterfall(INJECT_LIST_VIEW_FILTERS, {\n displayedFilters: baseFilters as InjectableListViewFilter[],\n layout,\n });\n\n const resolveLabel = (label: string | MessageDescriptor): string =>\n typeof label === 'string' ? label : formatMessage(label);\n\n const userOptions = users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n }));\n\n const formatted = extendedFilters.map<Filters.Filter>((filter) => {\n const next: Filters.Filter = {\n ...filter,\n label: resolveLabel(filter.label),\n operators: filter.operators?.map((op) => ({ ...op, label: resolveLabel(op.label) })),\n };\n\n // User-typed filters need user options so the chip can render the display name instead of the id.\n if (USER_FILTER_ATTRIBUTES.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 schemas,\n layout,\n users,\n formatMessage,\n formatter,\n options?.draftAndPublish,\n runHookWaterfall,\n ]);\n\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n trackUsage('willFilterEntries');\n }\n };\n\n const handleFilterChange: Filters.Props['onChange'] = (data) => {\n const attribute = attributes[data.name];\n\n if (attribute) {\n trackUsage('didFilterEntries', {\n useRelation: attribute.type === 'relation',\n });\n }\n };\n\n return (\n <Filters.Root\n disabled={disabled}\n options={displayedFilters}\n onOpenChange={onOpenChange}\n onChange={handleFilterChange}\n >\n {children}\n </Filters.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AdminUsersFilter\n * -----------------------------------------------------------------------------------------------*/\n\nconst AdminUsersFilter = ({ name }: Filters.ValueInputProps) => {\n const [pageSize, setPageSize] = React.useState(10);\n const [search, setSearch] = React.useState('');\n const { formatMessage } = useIntl();\n\n const debouncedSearch = useDebounce(search, 300);\n\n const { data, isLoading } = useAdminUsers({\n pageSize,\n _q: debouncedSearch,\n });\n const field = useField<string>(name);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPageSize(10);\n }\n };\n\n const { users = [], pagination } = data ?? {};\n const { pageCount = 1, page = 1 } = pagination ?? {};\n\n return (\n <Combobox\n value={field.value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select a user to filter',\n })}\n onOpenChange={handleOpenChange}\n onChange={(value) => field.onChange(name, value)}\n loading={isLoading}\n onLoadMore={() => setPageSize(pageSize + 10)}\n hasMoreItems={page < pageCount}\n onInputChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n }}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nconst listViewFilters = {\n Root,\n Trigger: Filters.Trigger,\n Popover: Filters.Popover,\n List: Filters.List,\n};\n\nexport { listViewFilters };\nexport type { FiltersProps };\n"],"names":["INJECT_LIST_VIEW_FILTERS","HOOKS","NOT_ALLOWED_FILTERS","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","useAdminUsers","$in","skip","users","formatter","useCollator","sensitivity","displayedFilters","properties","fields","allowedFields","field","baseFilters","draftAndPublish","map","name","label","getTranslation","defaultMessage","operators","fieldMetadata","metadatas","mainField","mainFieldName","getMainField","components","input","AdminUsersFilter","user","getDisplayName","toString","enum","Boolean","extendedFilters","resolveLabel","userOptions","formatted","next","op","toSorted","a","b","compare","onOpenChange","isOpen","handleFilterChange","useRelation","_jsx","Filters","onChange","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","isLoading","_q","useField","handleOpenChange","pagination","pageCount","page","Combobox","aria-label","loading","onLoadMore","hasMoreItems","onInputChange","e","currentTarget","ComboboxOption","listViewFilters","Trigger","Popover","List"],"mappings":"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"}
1
+ {"version":3,"file":"Filters.mjs","sources":["../../../../../admin/src/pages/ListView/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Filters,\n useField,\n useAuth,\n useTracking,\n useQueryParams,\n useAdminUsers,\n useStrapiApp,\n} from '@strapi/admin/strapi-admin';\nimport { Combobox, ComboboxOption, useCollator } from '@strapi/design-system';\nimport { type MessageDescriptor, useIntl } from 'react-intl';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { HOOKS } from '../../../constants/hooks';\nimport { useContentTypeSchema } from '../../../hooks/useContentTypeSchema';\nimport { useDebounce } from '../../../hooks/useDebounce';\nimport { Schema } from '../../../hooks/useDocument';\nimport { getMainField } from '../../../utils/attributes';\nimport { getTranslation } from '../../../utils/translations';\nimport { getDisplayName } from '../../../utils/users';\n\nimport type { InjectableListViewFilter } from '../../../constants/hooks';\nimport type { ListLayout } from '../../../hooks/useDocumentLayout';\n\nconst { INJECT_LIST_VIEW_FILTERS } = HOOKS;\n\n/**\n * If new attributes are added, this list needs to be updated.\n */\nconst NOT_ALLOWED_FILTERS = new Set([\n 'json',\n 'component',\n 'media',\n 'richtext',\n 'dynamiczone',\n 'password',\n 'blocks',\n]);\nconst DEFAULT_ALLOWED_FILTERS = ['createdAt', 'updatedAt'];\nconst USER_FILTER_ATTRIBUTES = new Set([...CREATOR_FIELDS, 'strapi_assignee']);\n\n/* -------------------------------------------------------------------------------------------------\n * Filters\n * -----------------------------------------------------------------------------------------------*/\ninterface FiltersProps {\n disabled?: boolean;\n schema: Schema;\n layout: ListLayout;\n children: React.ReactNode;\n}\n\nconst Root = ({ disabled, schema, layout, children }: FiltersProps) => {\n const { attributes, uid: model, options } = schema;\n const { formatMessage, locale } = useIntl();\n const { trackUsage } = useTracking();\n const allPermissions = useAuth('FiltersImpl', (state) => state.permissions);\n const [{ query }] = useQueryParams<Filters.Query>();\n const { schemas } = useContentTypeSchema();\n const runHookWaterfall = useStrapiApp('FiltersImpl', ({ runHookWaterfall }) => runHookWaterfall);\n\n const canReadAdminUsers = React.useMemo(\n () =>\n allPermissions.filter(\n (permission) => permission.action === 'admin::users.read' && permission.subject === null\n ).length > 0,\n [allPermissions]\n );\n\n const selectedUserIds = (query?.filters?.$and ?? []).reduce<string[]>((acc, filter) => {\n const [key, value] = Object.entries(filter)[0];\n if (typeof value.id !== 'object') {\n return acc;\n }\n\n const id = value.id.$eq || value.id.$ne;\n\n // Check if the attribute is a relation to admin::user\n const attribute = attributes[key];\n const isAdminUserRelation =\n attribute?.type === 'relation' && 'target' in attribute && attribute.target === 'admin::user';\n\n if (id && (isAdminUserRelation || USER_FILTER_ATTRIBUTES.has(key)) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []);\n\n const { data: userData } = useAdminUsers(\n { filters: { id: { $in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n skip: selectedUserIds.length === 0 || !canReadAdminUsers,\n }\n );\n\n const { users = [] } = userData ?? {};\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedFilters = React.useMemo(() => {\n // An absent read permission for this model yields no filterable fields.\n // The empty object lets the defaults below apply instead of throwing.\n const { properties: { fields = [] } = { fields: [] } } =\n allPermissions.find(\n (permission) =>\n permission.action === 'plugin::content-manager.explorer.read' &&\n permission.subject === model\n ) ?? {};\n\n const allowedFields = fields.filter((field) => {\n const attribute = attributes[field] ?? {};\n\n return attribute.type && !NOT_ALLOWED_FILTERS.has(attribute.type);\n });\n\n const baseFilters = [\n 'id',\n 'documentId',\n ...allowedFields,\n ...DEFAULT_ALLOWED_FILTERS,\n ...(canReadAdminUsers ? CREATOR_FIELDS : []),\n ...(options?.draftAndPublish === true ? ['__status'] : []),\n ]\n .map((name) => {\n if (name === '__status') {\n return {\n name: '__status',\n type: 'enumeration',\n label: formatMessage({\n id: getTranslation('containers.list.filters.status'),\n defaultMessage: 'Status',\n }),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n ],\n options: [\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.draft'),\n defaultMessage: 'Draft (never published)',\n }),\n value: 'draft',\n },\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.published'),\n defaultMessage: 'Published (all)',\n }),\n value: 'published',\n },\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.publishedModified'),\n defaultMessage: 'Published (modified)',\n }),\n value: 'published-modified',\n },\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.publishedUnmodified'),\n defaultMessage: 'Published (unmodified)',\n }),\n value: 'published-unmodified',\n },\n ],\n } satisfies Filters.Filter;\n }\n\n const attribute = attributes[name];\n\n if (!attribute || NOT_ALLOWED_FILTERS.has(attribute.type)) {\n return null;\n }\n\n const fieldMetadata = layout.metadatas?.[name];\n if (!fieldMetadata) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = fieldMetadata;\n\n let filter: Filters.Filter = {\n name,\n label: label ?? '',\n mainField: getMainField(attribute, mainFieldName, { schemas, components: {} }),\n type: attribute.type as Filters.Filter['type'],\n };\n\n if (\n attribute.type === 'relation' &&\n 'target' in attribute &&\n attribute.target === 'admin::user'\n ) {\n filter = {\n ...filter,\n input: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n })),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ],\n mainField: {\n name: 'id',\n type: 'integer',\n },\n };\n }\n\n if (attribute.type === 'enumeration') {\n filter = {\n ...filter,\n options: attribute.enum.map((value) => ({\n label: formatMessage({ id: value, defaultMessage: value }),\n value,\n })),\n };\n }\n\n return filter;\n })\n .filter(Boolean) as Filters.Filter[];\n\n // Let plugins inject their own filters.\n // `layout.options` is a merge of schema/pluginOptions/contentType options —\n // mirrors the column-injection hook contract.\n const { displayedFilters: extendedFilters } = runHookWaterfall(INJECT_LIST_VIEW_FILTERS, {\n displayedFilters: baseFilters as InjectableListViewFilter[],\n layout,\n });\n\n const resolveLabel = (label: string | MessageDescriptor): string =>\n typeof label === 'string' ? label : formatMessage(label);\n\n const userOptions = users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n }));\n\n const formatted = extendedFilters.map<Filters.Filter>((filter) => {\n const next: Filters.Filter = {\n ...filter,\n label: resolveLabel(filter.label),\n operators: filter.operators?.map((op) => ({ ...op, label: resolveLabel(op.label) })),\n };\n\n // User-typed filters need user options so the chip can render the display name instead of the id.\n if (USER_FILTER_ATTRIBUTES.has(filter.name) && !next.options?.length) {\n next.options = userOptions;\n }\n\n return next;\n });\n\n return formatted.toSorted((a, b) => formatter.compare(a.label, b.label));\n }, [\n allPermissions,\n canReadAdminUsers,\n model,\n attributes,\n schemas,\n layout,\n users,\n formatMessage,\n formatter,\n options?.draftAndPublish,\n runHookWaterfall,\n ]);\n\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n trackUsage('willFilterEntries');\n }\n };\n\n const handleFilterChange: Filters.Props['onChange'] = (data) => {\n const attribute = attributes[data.name];\n\n if (attribute) {\n trackUsage('didFilterEntries', {\n useRelation: attribute.type === 'relation',\n });\n }\n };\n\n return (\n <Filters.Root\n disabled={disabled}\n options={displayedFilters}\n onOpenChange={onOpenChange}\n onChange={handleFilterChange}\n >\n {children}\n </Filters.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AdminUsersFilter\n * -----------------------------------------------------------------------------------------------*/\n\nconst AdminUsersFilter = ({ name }: Filters.ValueInputProps) => {\n const [pageSize, setPageSize] = React.useState(10);\n const [search, setSearch] = React.useState('');\n const { formatMessage } = useIntl();\n\n const debouncedSearch = useDebounce(search, 300);\n\n const { data, isLoading } = useAdminUsers({\n pageSize,\n _q: debouncedSearch,\n });\n const field = useField<string>(name);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPageSize(10);\n }\n };\n\n const { users = [], pagination } = data ?? {};\n const { pageCount = 1, page = 1 } = pagination ?? {};\n\n return (\n <Combobox\n value={field.value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select a user to filter',\n })}\n onOpenChange={handleOpenChange}\n onChange={(value) => field.onChange(name, value)}\n loading={isLoading}\n onLoadMore={() => setPageSize(pageSize + 10)}\n hasMoreItems={page < pageCount}\n onInputChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n }}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nconst listViewFilters = {\n Root,\n Trigger: Filters.Trigger,\n Popover: Filters.Popover,\n List: Filters.List,\n};\n\nexport { listViewFilters };\nexport type { FiltersProps };\n"],"names":["INJECT_LIST_VIEW_FILTERS","HOOKS","NOT_ALLOWED_FILTERS","Set","DEFAULT_ALLOWED_FILTERS","USER_FILTER_ATTRIBUTES","CREATOR_FIELDS","Root","disabled","schema","layout","children","attributes","uid","model","options","formatMessage","locale","useIntl","trackUsage","useTracking","allPermissions","useAuth","state","permissions","query","useQueryParams","schemas","useContentTypeSchema","runHookWaterfall","useStrapiApp","canReadAdminUsers","React","useMemo","filter","permission","action","subject","length","selectedUserIds","filters","$and","reduce","acc","key","value","Object","entries","id","$eq","$ne","attribute","isAdminUserRelation","type","target","has","includes","push","data","userData","useAdminUsers","$in","skip","users","formatter","useCollator","sensitivity","displayedFilters","properties","fields","find","allowedFields","field","baseFilters","draftAndPublish","map","name","label","getTranslation","defaultMessage","operators","fieldMetadata","metadatas","mainField","mainFieldName","getMainField","components","input","AdminUsersFilter","user","getDisplayName","toString","enum","Boolean","extendedFilters","resolveLabel","userOptions","formatted","next","op","toSorted","a","b","compare","onOpenChange","isOpen","handleFilterChange","useRelation","_jsx","Filters","onChange","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","isLoading","_q","useField","handleOpenChange","pagination","pageCount","page","Combobox","aria-label","loading","onLoadMore","hasMoreItems","onInputChange","e","currentTarget","ComboboxOption","listViewFilters","Trigger","Popover","List"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Relations.js","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Relations.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport { Typography, Loader, useNotifyAT, Menu } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../../hooks/useDocument';\nimport { useGetRelationsQuery } from '../../../../services/relations';\nimport { getRelationLabel } from '../../../../utils/relations';\nimport { getTranslation } from '../../../../utils/translations';\n\nimport type { CellContentProps } from './CellContent';\n\n/* -------------------------------------------------------------------------------------------------\n * RelationSingle\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationSingleProps extends Pick<CellContentProps, 'mainField' | 'content'> {}\n\nconst RelationSingle = ({ mainField, content }: RelationSingleProps) => {\n const { formatMessage } = useIntl();\n const emptyLabel = formatMessage({\n id: 'content-manager.containers.empty-label',\n defaultMessage: 'Untitled',\n });\n\n return (\n <Typography maxWidth=\"50rem\" textColor=\"neutral800\" ellipsis>\n {getRelationLabel(content, mainField, emptyLabel)}\n </Typography>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationMultipleProps\n extends Pick<CellContentProps, 'mainField' | 'content' | 'name' | 'rowId'> {}\n\nconst RelationMultiple = ({ mainField, content, rowId, name }: RelationMultipleProps) => {\n const { model } = useDoc();\n const { formatMessage } = useIntl();\n const emptyLabel = formatMessage({\n id: 'content-manager.containers.empty-label',\n defaultMessage: 'Untitled',\n });\n const { notifyStatus } = useNotifyAT();\n const [isOpen, setIsOpen] = React.useState(false);\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const locale = query.plugins?.i18n?.locale;\n\n const [targetField] = name.split('.');\n\n const { data, isLoading } = useGetRelationsQuery(\n {\n model,\n id: rowId,\n targetField,\n params: { locale },\n },\n {\n skip: !isOpen,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const contentCount = Array.isArray(content) ? content.length : content.count;\n\n React.useEffect(() => {\n if (data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('ListViewTable.relation-loaded'),\n defaultMessage: 'Relations have been loaded',\n })\n );\n }\n }, [data, formatMessage, notifyStatus]);\n\n return (\n <Menu.Root onOpenChange={(isOpen) => setIsOpen(isOpen)}>\n <Menu.Trigger onClick={(e) => e.stopPropagation()}>\n <Typography style={{ cursor: 'pointer' }} textColor=\"neutral800\" fontWeight=\"regular\">\n {contentCount > 0\n ? formatMessage(\n {\n id: 'content-manager.containers.list.items',\n defaultMessage: '{number} {number, plural, =0 {items} one {item} other {items}}',\n },\n { number: contentCount }\n )\n : '-'}\n </Typography>\n </Menu.Trigger>\n <Menu.Content>\n {isLoading && (\n <Menu.Item disabled>\n <Loader small>\n {formatMessage({\n id: getTranslation('ListViewTable.relation-loading'),\n defaultMessage: 'Relations are loading',\n })}\n </Loader>\n </Menu.Item>\n )}\n {data?.results && (\n <>\n {data.results.map((entry) => (\n <Menu.Item key={entry.documentId}>\n <Typography maxWidth=\"50rem\" ellipsis>\n {getRelationLabel(entry, mainField, emptyLabel)}\n </Typography>\n </Menu.Item>\n ))}\n\n {data?.pagination && data?.pagination.total > 10 && (\n <Menu.Item\n aria-disabled\n aria-label={formatMessage({\n id: getTranslation('ListViewTable.relation-more'),\n defaultMessage: 'This relation contains more entities than displayed',\n })}\n >\n <Typography>…</Typography>\n </Menu.Item>\n )}\n </>\n )}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\nexport { RelationSingle, RelationMultiple };\nexport type { RelationSingleProps, RelationMultipleProps };\n"],"names":["RelationSingle","mainField","content","formatMessage","useIntl","emptyLabel","id","defaultMessage","_jsx","Typography","maxWidth","textColor","ellipsis","getRelationLabel","RelationMultiple","rowId","name","model","useDoc","notifyStatus","useNotifyAT","isOpen","setIsOpen","React","useState","query","useQueryParams","locale","plugins","i18n","targetField","split","data","isLoading","useGetRelationsQuery","params","skip","refetchOnMountOrArgChange","contentCount","Array","isArray","length","count","useEffect","getTranslation","_jsxs","Menu","Root","onOpenChange","Trigger","onClick","e","stopPropagation","style","cursor","fontWeight","number","Content","Item","disabled","Loader","small","results","_Fragment","map","entry","documentId","pagination","total","aria-disabled","aria-label"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,MAAMA,iBAAiB,CAAC,EAAEC,SAAS,EAAEC,OAAO,EAAuB,GAAA;IACjE,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,aAAaF,aAAAA,CAAc;QAC/BG,EAAAA,EAAI,wCAAA;QACJC,cAAAA,EAAgB;AAClB,KAAA,CAAA;AAEA,IAAA,qBACEC,cAAA,CAACC,uBAAAA,EAAAA;QAAWC,QAAAA,EAAS,OAAA;QAAQC,SAAAA,EAAU,YAAA;QAAaC,QAAQ,EAAA,IAAA;AACzDC,QAAAA,QAAAA,EAAAA,0BAAAA,CAAiBX,SAASD,SAAAA,EAAWI,UAAAA;;AAG5C;AASA,MAAMS,gBAAAA,GAAmB,CAAC,EAAEb,SAAS,EAAEC,OAAO,EAAEa,KAAK,EAAEC,IAAI,EAAyB,GAAA;IAClF,MAAM,EAAEC,KAAK,EAAE,GAAGC,kBAAAA,EAAAA;IAClB,MAAM,EAAEf,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,aAAaF,aAAAA,CAAc;QAC/BG,EAAAA,EAAI,wCAAA;QACJC,cAAAA,EAAgB;AAClB,KAAA,CAAA;IACA,MAAM,EAAEY,YAAY,EAAE,GAAGC,wBAAAA,EAAAA;AACzB,IAAA,MAAM,CAACC,MAAAA,EAAQC,SAAAA,CAAU,GAAGC,gBAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AAC3C,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,0BAAAA,EAAAA;AACpB,IAAA,MAAMC,MAAAA,GAASF,KAAAA,CAAMG,OAAO,EAAEC,IAAAA,EAAMF,MAAAA;AAEpC,IAAA,MAAM,CAACG,WAAAA,CAAY,GAAGd,IAAAA,CAAKe,KAAK,CAAC,GAAA,CAAA;AAEjC,IAAA,MAAM,EAAEC,IAAI,EAAEC,SAAS,EAAE,GAAGC,gCAAAA,CAC1B;AACEjB,QAAAA,KAAAA;QACAX,EAAAA,EAAIS,KAAAA;AACJe,QAAAA,WAAAA;QACAK,MAAAA,EAAQ;AAAER,YAAAA;AAAO;KACnB,EACA;AACES,QAAAA,IAAAA,EAAM,CAACf,MAAAA;QACPgB,yBAAAA,EAA2B;AAC7B,KAAA,CAAA;IAGF,MAAMC,YAAAA,GAAeC,MAAMC,OAAO,CAACtC,WAAWA,OAAAA,CAAQuC,MAAM,GAAGvC,OAAAA,CAAQwC,KAAK;AAE5EnB,IAAAA,gBAAAA,CAAMoB,SAAS,CAAC,IAAA;AACd,QAAA,IAAIX,IAAAA,EAAM;AACRb,YAAAA,YAAAA,CACEhB,aAAAA,CAAc;AACZG,gBAAAA,EAAAA,EAAIsC,2BAAAA,CAAe,+BAAA,CAAA;gBACnBrC,cAAAA,EAAgB;AAClB,aAAA,CAAA,CAAA;AAEJ,QAAA;IACF,CAAA,EAAG;AAACyB,QAAAA,IAAAA;AAAM7B,QAAAA,aAAAA;AAAegB,QAAAA;AAAa,KAAA,CAAA;IAEtC,qBACE0B,eAAA,CAACC,kBAAKC,IAAI,EAAA;QAACC,YAAAA,EAAc,CAAC3B,SAAWC,SAAAA,CAAUD,MAAAA,CAAAA;;AAC7C,0BAAAb,cAAA,CAACsC,kBAAKG,OAAO,EAAA;gBAACC,OAAAA,EAAS,CAACC,CAAAA,GAAMA,CAAAA,CAAEC,eAAe,EAAA;AAC7C,gBAAA,QAAA,gBAAA5C,cAAA,CAACC,uBAAAA,EAAAA;oBAAW4C,KAAAA,EAAO;wBAAEC,MAAAA,EAAQ;AAAU,qBAAA;oBAAG3C,SAAAA,EAAU,YAAA;oBAAa4C,UAAAA,EAAW,SAAA;AACzEjB,oBAAAA,QAAAA,EAAAA,YAAAA,GAAe,IACZnC,aAAAA,CACE;wBACEG,EAAAA,EAAI,uCAAA;wBACJC,cAAAA,EAAgB;qBAClB,EACA;wBAAEiD,MAAAA,EAAQlB;qBAAa,CAAA,GAEzB;;;AAGR,0BAAAO,eAAA,CAACC,kBAAKW,OAAO,EAAA;;oBACVxB,SAAAA,kBACCzB,cAAA,CAACsC,kBAAKY,IAAI,EAAA;wBAACC,QAAQ,EAAA,IAAA;AACjB,wBAAA,QAAA,gBAAAnD,cAAA,CAACoD,mBAAAA,EAAAA;4BAAOC,KAAK,EAAA,IAAA;sCACV1D,aAAAA,CAAc;AACbG,gCAAAA,EAAAA,EAAIsC,2BAAAA,CAAe,gCAAA,CAAA;gCACnBrC,cAAAA,EAAgB;AAClB,6BAAA;;;AAILyB,oBAAAA,IAAAA,EAAM8B,OAAAA,kBACLjB,eAAA,CAAAkB,mBAAA,EAAA;;4BACG/B,IAAAA,CAAK8B,OAAO,CAACE,GAAG,CAAC,CAACC,KAAAA,iBACjBzD,cAAA,CAACsC,kBAAKY,IAAI,EAAA;AACR,oCAAA,QAAA,gBAAAlD,cAAA,CAACC,uBAAAA,EAAAA;wCAAWC,QAAAA,EAAS,OAAA;wCAAQE,QAAQ,EAAA,IAAA;AAClCC,wCAAAA,QAAAA,EAAAA,0BAAAA,CAAiBoD,OAAOhE,SAAAA,EAAWI,UAAAA;;AAFxB4D,iCAAAA,EAAAA,KAAAA,CAAMC,UAAU,CAAA,CAAA;AAOjClC,4BAAAA,IAAAA,EAAMmC,cAAcnC,IAAAA,EAAMmC,UAAAA,CAAWC,QAAQ,EAAA,kBAC5C5D,cAAA,CAACsC,kBAAKY,IAAI,EAAA;gCACRW,eAAa,EAAA,IAAA;AACbC,gCAAAA,YAAAA,EAAYnE,aAAAA,CAAc;AACxBG,oCAAAA,EAAAA,EAAIsC,2BAAAA,CAAe,6BAAA,CAAA;oCACnBrC,cAAAA,EAAgB;AAClB,iCAAA,CAAA;AAEA,gCAAA,QAAA,gBAAAC,cAAA,CAACC,uBAAAA,EAAAA;AAAW,oCAAA,QAAA,EAAA;;;;;;;;;AAQ5B;;;;;"}
1
+ {"version":3,"file":"Relations.js","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Relations.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport { Typography, Loader, useNotifyAT, Menu } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../../hooks/useDocument';\nimport { useGetRelationsQuery } from '../../../../services/relations';\nimport { getRelationLabel } from '../../../../utils/relations';\nimport { getTranslation } from '../../../../utils/translations';\n\nimport type { CellContentProps } from './CellContent';\n\n/* -------------------------------------------------------------------------------------------------\n * RelationSingle\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationSingleProps extends Pick<CellContentProps, 'mainField' | 'content'> {}\n\nconst RelationSingle = ({ mainField, content }: RelationSingleProps) => {\n const { formatMessage } = useIntl();\n const emptyLabel = formatMessage({\n id: 'content-manager.containers.empty-label',\n defaultMessage: 'Untitled',\n });\n\n return (\n <Typography maxWidth=\"50rem\" textColor=\"neutral800\" ellipsis>\n {getRelationLabel(content, mainField, emptyLabel)}\n </Typography>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationMultipleProps extends Pick<\n CellContentProps,\n 'mainField' | 'content' | 'name' | 'rowId'\n> {}\n\nconst RelationMultiple = ({ mainField, content, rowId, name }: RelationMultipleProps) => {\n const { model } = useDoc();\n const { formatMessage } = useIntl();\n const emptyLabel = formatMessage({\n id: 'content-manager.containers.empty-label',\n defaultMessage: 'Untitled',\n });\n const { notifyStatus } = useNotifyAT();\n const [isOpen, setIsOpen] = React.useState(false);\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const locale = query.plugins?.i18n?.locale;\n\n const [targetField] = name.split('.');\n\n const { data, isLoading } = useGetRelationsQuery(\n {\n model,\n id: rowId,\n targetField,\n params: { locale },\n },\n {\n skip: !isOpen,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const contentCount = Array.isArray(content) ? content.length : content.count;\n\n React.useEffect(() => {\n if (data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('ListViewTable.relation-loaded'),\n defaultMessage: 'Relations have been loaded',\n })\n );\n }\n }, [data, formatMessage, notifyStatus]);\n\n return (\n <Menu.Root onOpenChange={(isOpen) => setIsOpen(isOpen)}>\n <Menu.Trigger onClick={(e) => e.stopPropagation()}>\n <Typography style={{ cursor: 'pointer' }} textColor=\"neutral800\" fontWeight=\"regular\">\n {contentCount > 0\n ? formatMessage(\n {\n id: 'content-manager.containers.list.items',\n defaultMessage: '{number} {number, plural, =0 {items} one {item} other {items}}',\n },\n { number: contentCount }\n )\n : '-'}\n </Typography>\n </Menu.Trigger>\n <Menu.Content>\n {isLoading && (\n <Menu.Item disabled>\n <Loader small>\n {formatMessage({\n id: getTranslation('ListViewTable.relation-loading'),\n defaultMessage: 'Relations are loading',\n })}\n </Loader>\n </Menu.Item>\n )}\n {data?.results && (\n <>\n {data.results.map((entry) => (\n <Menu.Item key={entry.documentId}>\n <Typography maxWidth=\"50rem\" ellipsis>\n {getRelationLabel(entry, mainField, emptyLabel)}\n </Typography>\n </Menu.Item>\n ))}\n\n {data?.pagination && data?.pagination.total > 10 && (\n <Menu.Item\n aria-disabled\n aria-label={formatMessage({\n id: getTranslation('ListViewTable.relation-more'),\n defaultMessage: 'This relation contains more entities than displayed',\n })}\n >\n <Typography>…</Typography>\n </Menu.Item>\n )}\n </>\n )}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\nexport { RelationSingle, RelationMultiple };\nexport type { RelationSingleProps, RelationMultipleProps };\n"],"names":["RelationSingle","mainField","content","formatMessage","useIntl","emptyLabel","id","defaultMessage","_jsx","Typography","maxWidth","textColor","ellipsis","getRelationLabel","RelationMultiple","rowId","name","model","useDoc","notifyStatus","useNotifyAT","isOpen","setIsOpen","React","useState","query","useQueryParams","locale","plugins","i18n","targetField","split","data","isLoading","useGetRelationsQuery","params","skip","refetchOnMountOrArgChange","contentCount","Array","isArray","length","count","useEffect","getTranslation","_jsxs","Menu","Root","onOpenChange","Trigger","onClick","e","stopPropagation","style","cursor","fontWeight","number","Content","Item","disabled","Loader","small","results","_Fragment","map","entry","documentId","pagination","total","aria-disabled","aria-label"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Relations.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Relations.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport { Typography, Loader, useNotifyAT, Menu } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../../hooks/useDocument';\nimport { useGetRelationsQuery } from '../../../../services/relations';\nimport { getRelationLabel } from '../../../../utils/relations';\nimport { getTranslation } from '../../../../utils/translations';\n\nimport type { CellContentProps } from './CellContent';\n\n/* -------------------------------------------------------------------------------------------------\n * RelationSingle\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationSingleProps extends Pick<CellContentProps, 'mainField' | 'content'> {}\n\nconst RelationSingle = ({ mainField, content }: RelationSingleProps) => {\n const { formatMessage } = useIntl();\n const emptyLabel = formatMessage({\n id: 'content-manager.containers.empty-label',\n defaultMessage: 'Untitled',\n });\n\n return (\n <Typography maxWidth=\"50rem\" textColor=\"neutral800\" ellipsis>\n {getRelationLabel(content, mainField, emptyLabel)}\n </Typography>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationMultipleProps\n extends Pick<CellContentProps, 'mainField' | 'content' | 'name' | 'rowId'> {}\n\nconst RelationMultiple = ({ mainField, content, rowId, name }: RelationMultipleProps) => {\n const { model } = useDoc();\n const { formatMessage } = useIntl();\n const emptyLabel = formatMessage({\n id: 'content-manager.containers.empty-label',\n defaultMessage: 'Untitled',\n });\n const { notifyStatus } = useNotifyAT();\n const [isOpen, setIsOpen] = React.useState(false);\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const locale = query.plugins?.i18n?.locale;\n\n const [targetField] = name.split('.');\n\n const { data, isLoading } = useGetRelationsQuery(\n {\n model,\n id: rowId,\n targetField,\n params: { locale },\n },\n {\n skip: !isOpen,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const contentCount = Array.isArray(content) ? content.length : content.count;\n\n React.useEffect(() => {\n if (data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('ListViewTable.relation-loaded'),\n defaultMessage: 'Relations have been loaded',\n })\n );\n }\n }, [data, formatMessage, notifyStatus]);\n\n return (\n <Menu.Root onOpenChange={(isOpen) => setIsOpen(isOpen)}>\n <Menu.Trigger onClick={(e) => e.stopPropagation()}>\n <Typography style={{ cursor: 'pointer' }} textColor=\"neutral800\" fontWeight=\"regular\">\n {contentCount > 0\n ? formatMessage(\n {\n id: 'content-manager.containers.list.items',\n defaultMessage: '{number} {number, plural, =0 {items} one {item} other {items}}',\n },\n { number: contentCount }\n )\n : '-'}\n </Typography>\n </Menu.Trigger>\n <Menu.Content>\n {isLoading && (\n <Menu.Item disabled>\n <Loader small>\n {formatMessage({\n id: getTranslation('ListViewTable.relation-loading'),\n defaultMessage: 'Relations are loading',\n })}\n </Loader>\n </Menu.Item>\n )}\n {data?.results && (\n <>\n {data.results.map((entry) => (\n <Menu.Item key={entry.documentId}>\n <Typography maxWidth=\"50rem\" ellipsis>\n {getRelationLabel(entry, mainField, emptyLabel)}\n </Typography>\n </Menu.Item>\n ))}\n\n {data?.pagination && data?.pagination.total > 10 && (\n <Menu.Item\n aria-disabled\n aria-label={formatMessage({\n id: getTranslation('ListViewTable.relation-more'),\n defaultMessage: 'This relation contains more entities than displayed',\n })}\n >\n <Typography>…</Typography>\n </Menu.Item>\n )}\n </>\n )}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\nexport { RelationSingle, RelationMultiple };\nexport type { RelationSingleProps, RelationMultipleProps };\n"],"names":["RelationSingle","mainField","content","formatMessage","useIntl","emptyLabel","id","defaultMessage","_jsx","Typography","maxWidth","textColor","ellipsis","getRelationLabel","RelationMultiple","rowId","name","model","useDoc","notifyStatus","useNotifyAT","isOpen","setIsOpen","React","useState","query","useQueryParams","locale","plugins","i18n","targetField","split","data","isLoading","useGetRelationsQuery","params","skip","refetchOnMountOrArgChange","contentCount","Array","isArray","length","count","useEffect","getTranslation","_jsxs","Menu","Root","onOpenChange","Trigger","onClick","e","stopPropagation","style","cursor","fontWeight","number","Content","Item","disabled","Loader","small","results","_Fragment","map","entry","documentId","pagination","total","aria-disabled","aria-label"],"mappings":"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"}
1
+ {"version":3,"file":"Relations.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Relations.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport { Typography, Loader, useNotifyAT, Menu } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../../hooks/useDocument';\nimport { useGetRelationsQuery } from '../../../../services/relations';\nimport { getRelationLabel } from '../../../../utils/relations';\nimport { getTranslation } from '../../../../utils/translations';\n\nimport type { CellContentProps } from './CellContent';\n\n/* -------------------------------------------------------------------------------------------------\n * RelationSingle\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationSingleProps extends Pick<CellContentProps, 'mainField' | 'content'> {}\n\nconst RelationSingle = ({ mainField, content }: RelationSingleProps) => {\n const { formatMessage } = useIntl();\n const emptyLabel = formatMessage({\n id: 'content-manager.containers.empty-label',\n defaultMessage: 'Untitled',\n });\n\n return (\n <Typography maxWidth=\"50rem\" textColor=\"neutral800\" ellipsis>\n {getRelationLabel(content, mainField, emptyLabel)}\n </Typography>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationMultipleProps extends Pick<\n CellContentProps,\n 'mainField' | 'content' | 'name' | 'rowId'\n> {}\n\nconst RelationMultiple = ({ mainField, content, rowId, name }: RelationMultipleProps) => {\n const { model } = useDoc();\n const { formatMessage } = useIntl();\n const emptyLabel = formatMessage({\n id: 'content-manager.containers.empty-label',\n defaultMessage: 'Untitled',\n });\n const { notifyStatus } = useNotifyAT();\n const [isOpen, setIsOpen] = React.useState(false);\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const locale = query.plugins?.i18n?.locale;\n\n const [targetField] = name.split('.');\n\n const { data, isLoading } = useGetRelationsQuery(\n {\n model,\n id: rowId,\n targetField,\n params: { locale },\n },\n {\n skip: !isOpen,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const contentCount = Array.isArray(content) ? content.length : content.count;\n\n React.useEffect(() => {\n if (data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('ListViewTable.relation-loaded'),\n defaultMessage: 'Relations have been loaded',\n })\n );\n }\n }, [data, formatMessage, notifyStatus]);\n\n return (\n <Menu.Root onOpenChange={(isOpen) => setIsOpen(isOpen)}>\n <Menu.Trigger onClick={(e) => e.stopPropagation()}>\n <Typography style={{ cursor: 'pointer' }} textColor=\"neutral800\" fontWeight=\"regular\">\n {contentCount > 0\n ? formatMessage(\n {\n id: 'content-manager.containers.list.items',\n defaultMessage: '{number} {number, plural, =0 {items} one {item} other {items}}',\n },\n { number: contentCount }\n )\n : '-'}\n </Typography>\n </Menu.Trigger>\n <Menu.Content>\n {isLoading && (\n <Menu.Item disabled>\n <Loader small>\n {formatMessage({\n id: getTranslation('ListViewTable.relation-loading'),\n defaultMessage: 'Relations are loading',\n })}\n </Loader>\n </Menu.Item>\n )}\n {data?.results && (\n <>\n {data.results.map((entry) => (\n <Menu.Item key={entry.documentId}>\n <Typography maxWidth=\"50rem\" ellipsis>\n {getRelationLabel(entry, mainField, emptyLabel)}\n </Typography>\n </Menu.Item>\n ))}\n\n {data?.pagination && data?.pagination.total > 10 && (\n <Menu.Item\n aria-disabled\n aria-label={formatMessage({\n id: getTranslation('ListViewTable.relation-more'),\n defaultMessage: 'This relation contains more entities than displayed',\n })}\n >\n <Typography>…</Typography>\n </Menu.Item>\n )}\n </>\n )}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\nexport { RelationSingle, RelationMultiple };\nexport type { RelationSingleProps, RelationMultipleProps };\n"],"names":["RelationSingle","mainField","content","formatMessage","useIntl","emptyLabel","id","defaultMessage","_jsx","Typography","maxWidth","textColor","ellipsis","getRelationLabel","RelationMultiple","rowId","name","model","useDoc","notifyStatus","useNotifyAT","isOpen","setIsOpen","React","useState","query","useQueryParams","locale","plugins","i18n","targetField","split","data","isLoading","useGetRelationsQuery","params","skip","refetchOnMountOrArgChange","contentCount","Array","isArray","length","count","useEffect","getTranslation","_jsxs","Menu","Root","onOpenChange","Trigger","onClick","e","stopPropagation","style","cursor","fontWeight","number","Content","Item","disabled","Loader","small","results","_Fragment","map","entry","documentId","pagination","total","aria-disabled","aria-label"],"mappings":"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"}
@@ -13,6 +13,7 @@ var useDocumentLayout = require('../../../hooks/useDocumentLayout.js');
13
13
  var hooks = require('../../../modules/hooks.js');
14
14
  var attributes = require('../../../utils/attributes.js');
15
15
 
16
+ const EMPTY_HEADERS = [];
16
17
  const ViewSettingsMenu = (props)=>{
17
18
  const permissions = hooks.useTypedSelector((state)=>state.admin_app.permissions.contentManager?.collectionTypesConfigurations ?? []);
18
19
  const [{ query }] = strapiAdmin.useQueryParams();
@@ -66,7 +67,7 @@ const ViewSettingsMenu = (props)=>{
66
67
  ]
67
68
  });
68
69
  };
69
- const FieldPicker = ({ headers = [], resetHeaders, setHeaders })=>{
70
+ const FieldPicker = ({ headers = EMPTY_HEADERS, resetHeaders, setHeaders })=>{
70
71
  const { trackUsage } = strapiAdmin.useTracking();
71
72
  const { formatMessage, locale } = reactIntl.useIntl();
72
73
  const { schema, model } = useDocument.useDoc();
@@ -1 +1 @@
1
- {"version":3,"file":"ViewSettingsMenu.js","sources":["../../../../../admin/src/pages/ListView/components/ViewSettingsMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking, useRBAC, useQueryParams } from '@strapi/admin/strapi-admin';\nimport {\n Flex,\n IconButton,\n Popover,\n Checkbox,\n TextButton,\n Typography,\n useCollator,\n LinkButton,\n} from '@strapi/design-system';\nimport { Cog, ListPlus } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useTypedSelector } from '../../../modules/hooks';\nimport { checkIfAttributeIsDisplayable } from '../../../utils/attributes';\n\ninterface ViewSettingsMenuProps extends FieldPickerProps {}\n\nconst ViewSettingsMenu = (props: ViewSettingsMenuProps) => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.contentManager?.collectionTypesConfigurations ?? []\n );\n const [{ query }] = useQueryParams<{ plugins?: Record<string, unknown> }>();\n const { formatMessage } = useIntl();\n const {\n allowedActions: { canConfigureView },\n } = useRBAC(permissions);\n\n return (\n <Popover.Root>\n <Popover.Trigger>\n <IconButton\n label={formatMessage({\n id: 'components.ViewSettings.tooltip',\n defaultMessage: 'View Settings',\n })}\n >\n <Cog />\n </IconButton>\n </Popover.Trigger>\n <Popover.Content side=\"bottom\" align=\"end\" sideOffset={4}>\n <Flex alignItems=\"stretch\" direction=\"column\" padding={3} gap={3}>\n {canConfigureView ? (\n <LinkButton\n size=\"S\"\n startIcon={<ListPlus />}\n variant=\"secondary\"\n tag={NavLink}\n to={{\n pathname: 'configurations/list',\n search: query.plugins\n ? stringify({ plugins: query.plugins }, { encode: false })\n : '',\n }}\n >\n {formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n </LinkButton>\n ) : null}\n <FieldPicker {...props} />\n </Flex>\n </Popover.Content>\n </Popover.Root>\n );\n};\n\ninterface FieldPickerProps {\n headers?: string[];\n setHeaders: (headers: string[]) => void;\n resetHeaders: () => void;\n}\n\nconst FieldPicker = ({ headers = [], resetHeaders, setHeaders }: FieldPickerProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n\n const { schema, model } = useDoc();\n const { list } = useDocumentLayout(model);\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const attributes = schema?.attributes ?? {};\n\n const columns = Object.keys(attributes)\n .filter((name) => checkIfAttributeIsDisplayable(attributes[name]))\n .map((name) => ({\n name,\n label: list.metadatas[name]?.label ?? '',\n }))\n .sort((a, b) => formatter.compare(a.label, b.label));\n\n const handleChange = (name: string) => {\n trackUsage('didChangeDisplayedFields');\n\n /**\n * create an array of the new headers, if the new name exists it should be removed,\n * otherwise it should be added\n */\n const newHeaders = headers.includes(name)\n ? headers.filter((header) => header !== name)\n : [...headers, name];\n\n setHeaders(newHeaders);\n };\n\n const handleReset = () => {\n resetHeaders();\n };\n\n return (\n <Flex\n tag=\"fieldset\"\n direction=\"column\"\n alignItems=\"stretch\"\n gap={1}\n borderWidth={0}\n maxHeight={'240px'}\n padding={1}\n overflow={'auto'}\n >\n <Flex justifyContent=\"space-between\" gap={2}>\n <Typography tag=\"legend\" variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'containers.list.displayedFields',\n defaultMessage: 'Displayed fields',\n })}\n </Typography>\n\n <TextButton onClick={handleReset}>\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </TextButton>\n </Flex>\n\n <Flex direction=\"column\" alignItems=\"stretch\">\n {columns.map((header) => {\n const isActive = headers.includes(header.name);\n\n return (\n <Flex\n wrap=\"wrap\"\n gap={2}\n background={isActive ? 'primary100' : 'transparent'}\n hasRadius\n padding={2}\n marginBottom={1}\n key={header.name}\n >\n <Checkbox\n onCheckedChange={() => handleChange(header.name)}\n checked={isActive}\n name={header.name}\n >\n <Typography fontSize={1}>{header.label}</Typography>\n </Checkbox>\n </Flex>\n );\n })}\n </Flex>\n </Flex>\n );\n};\n\nexport { ViewSettingsMenu };\nexport type { ViewSettingsMenuProps, FieldPickerProps };\n"],"names":["ViewSettingsMenu","props","permissions","useTypedSelector","state","admin_app","contentManager","collectionTypesConfigurations","query","useQueryParams","formatMessage","useIntl","allowedActions","canConfigureView","useRBAC","_jsxs","Popover","Root","_jsx","Trigger","IconButton","label","id","defaultMessage","Cog","Content","side","align","sideOffset","Flex","alignItems","direction","padding","gap","LinkButton","size","startIcon","ListPlus","variant","tag","NavLink","to","pathname","search","plugins","stringify","encode","FieldPicker","headers","resetHeaders","setHeaders","trackUsage","useTracking","locale","schema","model","useDoc","list","useDocumentLayout","formatter","useCollator","sensitivity","attributes","columns","Object","keys","filter","name","checkIfAttributeIsDisplayable","map","metadatas","sort","a","b","compare","handleChange","newHeaders","includes","header","handleReset","borderWidth","maxHeight","overflow","justifyContent","Typography","fontWeight","TextButton","onClick","isActive","wrap","background","hasRadius","marginBottom","Checkbox","onCheckedChange","checked","fontSize"],"mappings":"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"}
1
+ {"version":3,"file":"ViewSettingsMenu.js","sources":["../../../../../admin/src/pages/ListView/components/ViewSettingsMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking, useRBAC, useQueryParams } from '@strapi/admin/strapi-admin';\nimport {\n Flex,\n IconButton,\n Popover,\n Checkbox,\n TextButton,\n Typography,\n useCollator,\n LinkButton,\n} from '@strapi/design-system';\nimport { Cog, ListPlus } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useTypedSelector } from '../../../modules/hooks';\nimport { checkIfAttributeIsDisplayable } from '../../../utils/attributes';\n\nconst EMPTY_HEADERS: NonNullable<FieldPickerProps['headers']> = [];\n\ninterface ViewSettingsMenuProps extends FieldPickerProps {}\n\nconst ViewSettingsMenu = (props: ViewSettingsMenuProps) => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.contentManager?.collectionTypesConfigurations ?? []\n );\n const [{ query }] = useQueryParams<{ plugins?: Record<string, unknown> }>();\n const { formatMessage } = useIntl();\n const {\n allowedActions: { canConfigureView },\n } = useRBAC(permissions);\n\n return (\n <Popover.Root>\n <Popover.Trigger>\n <IconButton\n label={formatMessage({\n id: 'components.ViewSettings.tooltip',\n defaultMessage: 'View Settings',\n })}\n >\n <Cog />\n </IconButton>\n </Popover.Trigger>\n <Popover.Content side=\"bottom\" align=\"end\" sideOffset={4}>\n <Flex alignItems=\"stretch\" direction=\"column\" padding={3} gap={3}>\n {canConfigureView ? (\n <LinkButton\n size=\"S\"\n startIcon={<ListPlus />}\n variant=\"secondary\"\n tag={NavLink}\n to={{\n pathname: 'configurations/list',\n search: query.plugins\n ? stringify({ plugins: query.plugins }, { encode: false })\n : '',\n }}\n >\n {formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n </LinkButton>\n ) : null}\n <FieldPicker {...props} />\n </Flex>\n </Popover.Content>\n </Popover.Root>\n );\n};\n\ninterface FieldPickerProps {\n headers?: string[];\n setHeaders: (headers: string[]) => void;\n resetHeaders: () => void;\n}\n\nconst FieldPicker = ({ headers = EMPTY_HEADERS, resetHeaders, setHeaders }: FieldPickerProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n\n const { schema, model } = useDoc();\n const { list } = useDocumentLayout(model);\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const attributes = schema?.attributes ?? {};\n\n const columns = Object.keys(attributes)\n .filter((name) => checkIfAttributeIsDisplayable(attributes[name]))\n .map((name) => ({\n name,\n label: list.metadatas[name]?.label ?? '',\n }))\n .sort((a, b) => formatter.compare(a.label, b.label));\n\n const handleChange = (name: string) => {\n trackUsage('didChangeDisplayedFields');\n\n /**\n * create an array of the new headers, if the new name exists it should be removed,\n * otherwise it should be added\n */\n const newHeaders = headers.includes(name)\n ? headers.filter((header) => header !== name)\n : [...headers, name];\n\n setHeaders(newHeaders);\n };\n\n const handleReset = () => {\n resetHeaders();\n };\n\n return (\n <Flex\n tag=\"fieldset\"\n direction=\"column\"\n alignItems=\"stretch\"\n gap={1}\n borderWidth={0}\n maxHeight={'240px'}\n padding={1}\n overflow={'auto'}\n >\n <Flex justifyContent=\"space-between\" gap={2}>\n <Typography tag=\"legend\" variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'containers.list.displayedFields',\n defaultMessage: 'Displayed fields',\n })}\n </Typography>\n\n <TextButton onClick={handleReset}>\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </TextButton>\n </Flex>\n\n <Flex direction=\"column\" alignItems=\"stretch\">\n {columns.map((header) => {\n const isActive = headers.includes(header.name);\n\n return (\n <Flex\n wrap=\"wrap\"\n gap={2}\n background={isActive ? 'primary100' : 'transparent'}\n hasRadius\n padding={2}\n marginBottom={1}\n key={header.name}\n >\n <Checkbox\n onCheckedChange={() => handleChange(header.name)}\n checked={isActive}\n name={header.name}\n >\n <Typography fontSize={1}>{header.label}</Typography>\n </Checkbox>\n </Flex>\n );\n })}\n </Flex>\n </Flex>\n );\n};\n\nexport { ViewSettingsMenu };\nexport type { ViewSettingsMenuProps, FieldPickerProps };\n"],"names":["EMPTY_HEADERS","ViewSettingsMenu","props","permissions","useTypedSelector","state","admin_app","contentManager","collectionTypesConfigurations","query","useQueryParams","formatMessage","useIntl","allowedActions","canConfigureView","useRBAC","_jsxs","Popover","Root","_jsx","Trigger","IconButton","label","id","defaultMessage","Cog","Content","side","align","sideOffset","Flex","alignItems","direction","padding","gap","LinkButton","size","startIcon","ListPlus","variant","tag","NavLink","to","pathname","search","plugins","stringify","encode","FieldPicker","headers","resetHeaders","setHeaders","trackUsage","useTracking","locale","schema","model","useDoc","list","useDocumentLayout","formatter","useCollator","sensitivity","attributes","columns","Object","keys","filter","name","checkIfAttributeIsDisplayable","map","metadatas","sort","a","b","compare","handleChange","newHeaders","includes","header","handleReset","borderWidth","maxHeight","overflow","justifyContent","Typography","fontWeight","TextButton","onClick","isActive","wrap","background","hasRadius","marginBottom","Checkbox","onCheckedChange","checked","fontSize"],"mappings":"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"}
@@ -11,6 +11,7 @@ import { useDocumentLayout } from '../../../hooks/useDocumentLayout.mjs';
11
11
  import { useTypedSelector } from '../../../modules/hooks.mjs';
12
12
  import { checkIfAttributeIsDisplayable } from '../../../utils/attributes.mjs';
13
13
 
14
+ const EMPTY_HEADERS = [];
14
15
  const ViewSettingsMenu = (props)=>{
15
16
  const permissions = useTypedSelector((state)=>state.admin_app.permissions.contentManager?.collectionTypesConfigurations ?? []);
16
17
  const [{ query }] = useQueryParams();
@@ -64,7 +65,7 @@ const ViewSettingsMenu = (props)=>{
64
65
  ]
65
66
  });
66
67
  };
67
- const FieldPicker = ({ headers = [], resetHeaders, setHeaders })=>{
68
+ const FieldPicker = ({ headers = EMPTY_HEADERS, resetHeaders, setHeaders })=>{
68
69
  const { trackUsage } = useTracking();
69
70
  const { formatMessage, locale } = useIntl();
70
71
  const { schema, model } = useDoc();
@@ -1 +1 @@
1
- {"version":3,"file":"ViewSettingsMenu.mjs","sources":["../../../../../admin/src/pages/ListView/components/ViewSettingsMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking, useRBAC, useQueryParams } from '@strapi/admin/strapi-admin';\nimport {\n Flex,\n IconButton,\n Popover,\n Checkbox,\n TextButton,\n Typography,\n useCollator,\n LinkButton,\n} from '@strapi/design-system';\nimport { Cog, ListPlus } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useTypedSelector } from '../../../modules/hooks';\nimport { checkIfAttributeIsDisplayable } from '../../../utils/attributes';\n\ninterface ViewSettingsMenuProps extends FieldPickerProps {}\n\nconst ViewSettingsMenu = (props: ViewSettingsMenuProps) => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.contentManager?.collectionTypesConfigurations ?? []\n );\n const [{ query }] = useQueryParams<{ plugins?: Record<string, unknown> }>();\n const { formatMessage } = useIntl();\n const {\n allowedActions: { canConfigureView },\n } = useRBAC(permissions);\n\n return (\n <Popover.Root>\n <Popover.Trigger>\n <IconButton\n label={formatMessage({\n id: 'components.ViewSettings.tooltip',\n defaultMessage: 'View Settings',\n })}\n >\n <Cog />\n </IconButton>\n </Popover.Trigger>\n <Popover.Content side=\"bottom\" align=\"end\" sideOffset={4}>\n <Flex alignItems=\"stretch\" direction=\"column\" padding={3} gap={3}>\n {canConfigureView ? (\n <LinkButton\n size=\"S\"\n startIcon={<ListPlus />}\n variant=\"secondary\"\n tag={NavLink}\n to={{\n pathname: 'configurations/list',\n search: query.plugins\n ? stringify({ plugins: query.plugins }, { encode: false })\n : '',\n }}\n >\n {formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n </LinkButton>\n ) : null}\n <FieldPicker {...props} />\n </Flex>\n </Popover.Content>\n </Popover.Root>\n );\n};\n\ninterface FieldPickerProps {\n headers?: string[];\n setHeaders: (headers: string[]) => void;\n resetHeaders: () => void;\n}\n\nconst FieldPicker = ({ headers = [], resetHeaders, setHeaders }: FieldPickerProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n\n const { schema, model } = useDoc();\n const { list } = useDocumentLayout(model);\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const attributes = schema?.attributes ?? {};\n\n const columns = Object.keys(attributes)\n .filter((name) => checkIfAttributeIsDisplayable(attributes[name]))\n .map((name) => ({\n name,\n label: list.metadatas[name]?.label ?? '',\n }))\n .sort((a, b) => formatter.compare(a.label, b.label));\n\n const handleChange = (name: string) => {\n trackUsage('didChangeDisplayedFields');\n\n /**\n * create an array of the new headers, if the new name exists it should be removed,\n * otherwise it should be added\n */\n const newHeaders = headers.includes(name)\n ? headers.filter((header) => header !== name)\n : [...headers, name];\n\n setHeaders(newHeaders);\n };\n\n const handleReset = () => {\n resetHeaders();\n };\n\n return (\n <Flex\n tag=\"fieldset\"\n direction=\"column\"\n alignItems=\"stretch\"\n gap={1}\n borderWidth={0}\n maxHeight={'240px'}\n padding={1}\n overflow={'auto'}\n >\n <Flex justifyContent=\"space-between\" gap={2}>\n <Typography tag=\"legend\" variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'containers.list.displayedFields',\n defaultMessage: 'Displayed fields',\n })}\n </Typography>\n\n <TextButton onClick={handleReset}>\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </TextButton>\n </Flex>\n\n <Flex direction=\"column\" alignItems=\"stretch\">\n {columns.map((header) => {\n const isActive = headers.includes(header.name);\n\n return (\n <Flex\n wrap=\"wrap\"\n gap={2}\n background={isActive ? 'primary100' : 'transparent'}\n hasRadius\n padding={2}\n marginBottom={1}\n key={header.name}\n >\n <Checkbox\n onCheckedChange={() => handleChange(header.name)}\n checked={isActive}\n name={header.name}\n >\n <Typography fontSize={1}>{header.label}</Typography>\n </Checkbox>\n </Flex>\n );\n })}\n </Flex>\n </Flex>\n );\n};\n\nexport { ViewSettingsMenu };\nexport type { ViewSettingsMenuProps, FieldPickerProps };\n"],"names":["ViewSettingsMenu","props","permissions","useTypedSelector","state","admin_app","contentManager","collectionTypesConfigurations","query","useQueryParams","formatMessage","useIntl","allowedActions","canConfigureView","useRBAC","_jsxs","Popover","Root","_jsx","Trigger","IconButton","label","id","defaultMessage","Cog","Content","side","align","sideOffset","Flex","alignItems","direction","padding","gap","LinkButton","size","startIcon","ListPlus","variant","tag","NavLink","to","pathname","search","plugins","stringify","encode","FieldPicker","headers","resetHeaders","setHeaders","trackUsage","useTracking","locale","schema","model","useDoc","list","useDocumentLayout","formatter","useCollator","sensitivity","attributes","columns","Object","keys","filter","name","checkIfAttributeIsDisplayable","map","metadatas","sort","a","b","compare","handleChange","newHeaders","includes","header","handleReset","borderWidth","maxHeight","overflow","justifyContent","Typography","fontWeight","TextButton","onClick","isActive","wrap","background","hasRadius","marginBottom","Checkbox","onCheckedChange","checked","fontSize"],"mappings":"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"}
1
+ {"version":3,"file":"ViewSettingsMenu.mjs","sources":["../../../../../admin/src/pages/ListView/components/ViewSettingsMenu.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking, useRBAC, useQueryParams } from '@strapi/admin/strapi-admin';\nimport {\n Flex,\n IconButton,\n Popover,\n Checkbox,\n TextButton,\n Typography,\n useCollator,\n LinkButton,\n} from '@strapi/design-system';\nimport { Cog, ListPlus } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useTypedSelector } from '../../../modules/hooks';\nimport { checkIfAttributeIsDisplayable } from '../../../utils/attributes';\n\nconst EMPTY_HEADERS: NonNullable<FieldPickerProps['headers']> = [];\n\ninterface ViewSettingsMenuProps extends FieldPickerProps {}\n\nconst ViewSettingsMenu = (props: ViewSettingsMenuProps) => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.contentManager?.collectionTypesConfigurations ?? []\n );\n const [{ query }] = useQueryParams<{ plugins?: Record<string, unknown> }>();\n const { formatMessage } = useIntl();\n const {\n allowedActions: { canConfigureView },\n } = useRBAC(permissions);\n\n return (\n <Popover.Root>\n <Popover.Trigger>\n <IconButton\n label={formatMessage({\n id: 'components.ViewSettings.tooltip',\n defaultMessage: 'View Settings',\n })}\n >\n <Cog />\n </IconButton>\n </Popover.Trigger>\n <Popover.Content side=\"bottom\" align=\"end\" sideOffset={4}>\n <Flex alignItems=\"stretch\" direction=\"column\" padding={3} gap={3}>\n {canConfigureView ? (\n <LinkButton\n size=\"S\"\n startIcon={<ListPlus />}\n variant=\"secondary\"\n tag={NavLink}\n to={{\n pathname: 'configurations/list',\n search: query.plugins\n ? stringify({ plugins: query.plugins }, { encode: false })\n : '',\n }}\n >\n {formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n </LinkButton>\n ) : null}\n <FieldPicker {...props} />\n </Flex>\n </Popover.Content>\n </Popover.Root>\n );\n};\n\ninterface FieldPickerProps {\n headers?: string[];\n setHeaders: (headers: string[]) => void;\n resetHeaders: () => void;\n}\n\nconst FieldPicker = ({ headers = EMPTY_HEADERS, resetHeaders, setHeaders }: FieldPickerProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n\n const { schema, model } = useDoc();\n const { list } = useDocumentLayout(model);\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const attributes = schema?.attributes ?? {};\n\n const columns = Object.keys(attributes)\n .filter((name) => checkIfAttributeIsDisplayable(attributes[name]))\n .map((name) => ({\n name,\n label: list.metadatas[name]?.label ?? '',\n }))\n .sort((a, b) => formatter.compare(a.label, b.label));\n\n const handleChange = (name: string) => {\n trackUsage('didChangeDisplayedFields');\n\n /**\n * create an array of the new headers, if the new name exists it should be removed,\n * otherwise it should be added\n */\n const newHeaders = headers.includes(name)\n ? headers.filter((header) => header !== name)\n : [...headers, name];\n\n setHeaders(newHeaders);\n };\n\n const handleReset = () => {\n resetHeaders();\n };\n\n return (\n <Flex\n tag=\"fieldset\"\n direction=\"column\"\n alignItems=\"stretch\"\n gap={1}\n borderWidth={0}\n maxHeight={'240px'}\n padding={1}\n overflow={'auto'}\n >\n <Flex justifyContent=\"space-between\" gap={2}>\n <Typography tag=\"legend\" variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'containers.list.displayedFields',\n defaultMessage: 'Displayed fields',\n })}\n </Typography>\n\n <TextButton onClick={handleReset}>\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </TextButton>\n </Flex>\n\n <Flex direction=\"column\" alignItems=\"stretch\">\n {columns.map((header) => {\n const isActive = headers.includes(header.name);\n\n return (\n <Flex\n wrap=\"wrap\"\n gap={2}\n background={isActive ? 'primary100' : 'transparent'}\n hasRadius\n padding={2}\n marginBottom={1}\n key={header.name}\n >\n <Checkbox\n onCheckedChange={() => handleChange(header.name)}\n checked={isActive}\n name={header.name}\n >\n <Typography fontSize={1}>{header.label}</Typography>\n </Checkbox>\n </Flex>\n );\n })}\n </Flex>\n </Flex>\n );\n};\n\nexport { ViewSettingsMenu };\nexport type { ViewSettingsMenuProps, FieldPickerProps };\n"],"names":["EMPTY_HEADERS","ViewSettingsMenu","props","permissions","useTypedSelector","state","admin_app","contentManager","collectionTypesConfigurations","query","useQueryParams","formatMessage","useIntl","allowedActions","canConfigureView","useRBAC","_jsxs","Popover","Root","_jsx","Trigger","IconButton","label","id","defaultMessage","Cog","Content","side","align","sideOffset","Flex","alignItems","direction","padding","gap","LinkButton","size","startIcon","ListPlus","variant","tag","NavLink","to","pathname","search","plugins","stringify","encode","FieldPicker","headers","resetHeaders","setHeaders","trackUsage","useTracking","locale","schema","model","useDoc","list","useDocumentLayout","formatter","useCollator","sensitivity","attributes","columns","Object","keys","filter","name","checkIfAttributeIsDisplayable","map","metadatas","sort","a","b","compare","handleChange","newHeaders","includes","header","handleReset","borderWidth","maxHeight","overflow","justifyContent","Typography","fontWeight","TextButton","onClick","isActive","wrap","background","hasRadius","marginBottom","Checkbox","onCheckedChange","checked","fontSize"],"mappings":"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"}