@strapi/content-manager 5.50.0 → 5.50.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/dist/admin/components/ComponentIcon.js.map +1 -1
  2. package/dist/admin/components/ComponentIcon.mjs.map +1 -1
  3. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  4. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  5. package/dist/admin/components/DragLayer.js.map +1 -1
  6. package/dist/admin/components/DragLayer.mjs.map +1 -1
  7. package/dist/admin/components/LeftMenu.js +66 -67
  8. package/dist/admin/components/LeftMenu.js.map +1 -1
  9. package/dist/admin/components/LeftMenu.mjs +68 -69
  10. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  11. package/dist/admin/history/components/VersionInputRenderer.js +3 -3
  12. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  13. package/dist/admin/history/components/VersionInputRenderer.mjs +3 -3
  14. package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
  15. package/dist/admin/history/routes.js.map +1 -1
  16. package/dist/admin/history/routes.mjs.map +1 -1
  17. package/dist/admin/hooks/useDocumentActions.js +15 -8
  18. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  19. package/dist/admin/hooks/useDocumentActions.mjs +15 -8
  20. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  21. package/dist/admin/hooks/useDocumentContext.js.map +1 -1
  22. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -1
  23. package/dist/admin/index.js.map +1 -1
  24. package/dist/admin/index.mjs.map +1 -1
  25. package/dist/admin/layout.js +18 -6
  26. package/dist/admin/layout.js.map +1 -1
  27. package/dist/admin/layout.mjs +18 -6
  28. package/dist/admin/layout.mjs.map +1 -1
  29. package/dist/admin/pages/ComponentConfigurationPage.js.map +1 -1
  30. package/dist/admin/pages/ComponentConfigurationPage.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/components/DocumentActions.js +7 -6
  32. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  33. package/dist/admin/pages/EditView/components/DocumentActions.mjs +7 -6
  34. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +6 -3
  36. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +6 -3
  38. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js +1 -1
  40. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs +1 -1
  42. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  44. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js.map +1 -1
  46. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +1 -1
  48. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +1 -1
  50. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +2 -1
  52. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +2 -1
  54. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  56. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +8 -5
  58. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +8 -5
  60. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/UID.js +5 -4
  62. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +5 -4
  64. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  66. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js +2 -2
  68. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs +2 -2
  70. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js.map +1 -1
  72. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs.map +1 -1
  73. package/dist/admin/pages/EditView/components/Panels.js.map +1 -1
  74. package/dist/admin/pages/EditView/components/Panels.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  76. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  77. package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
  78. package/dist/admin/pages/ListConfiguration/components/Settings.mjs.map +1 -1
  79. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js.map +1 -1
  80. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs.map +1 -1
  81. package/dist/admin/pages/ListView/ListViewPage.js +71 -11
  82. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  83. package/dist/admin/pages/ListView/ListViewPage.mjs +73 -13
  84. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  85. package/dist/admin/pages/ListView/components/BulkActions/Actions.js +2 -1
  86. package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
  87. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs +2 -1
  88. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs.map +1 -1
  89. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  90. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  91. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  92. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  93. package/dist/admin/pages/ListView/components/Filters.js +5 -3
  94. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  95. package/dist/admin/pages/ListView/components/Filters.mjs +5 -3
  96. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  97. package/dist/admin/pages/ListView/components/TableActions.js +37 -0
  98. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  99. package/dist/admin/pages/ListView/components/TableActions.mjs +39 -2
  100. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  101. package/dist/admin/pages/ListView/components/TableCells/CellContent.js +26 -1
  102. package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
  103. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +26 -2
  104. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
  105. package/dist/admin/pages/ListView/components/TableCells/CellValue.js +8 -7
  106. package/dist/admin/pages/ListView/components/TableCells/CellValue.js.map +1 -1
  107. package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs +8 -7
  108. package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs.map +1 -1
  109. package/dist/admin/pages/ListView/components/TableCells/Components.js.map +1 -1
  110. package/dist/admin/pages/ListView/components/TableCells/Components.mjs.map +1 -1
  111. package/dist/admin/preview/pages/Preview.js +2 -0
  112. package/dist/admin/preview/pages/Preview.js.map +1 -1
  113. package/dist/admin/preview/pages/Preview.mjs +2 -0
  114. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  115. package/dist/admin/preview/routes.js.map +1 -1
  116. package/dist/admin/preview/routes.mjs.map +1 -1
  117. package/dist/admin/preview/utils/fieldUtils.js.map +1 -1
  118. package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -1
  119. package/dist/admin/router.js.map +1 -1
  120. package/dist/admin/router.mjs.map +1 -1
  121. package/dist/admin/services/documents.js.map +1 -1
  122. package/dist/admin/services/documents.mjs.map +1 -1
  123. package/dist/admin/src/components/ComponentIcon.d.ts +4 -3
  124. package/dist/admin/src/components/DragLayer.d.ts +1 -1
  125. package/dist/admin/src/history/routes.d.ts +2 -2
  126. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  127. package/dist/admin/src/hooks/useDocumentActions.d.ts +17 -16
  128. package/dist/admin/src/hooks/useDocumentContext.d.ts +1 -1
  129. package/dist/admin/src/index.d.ts +1 -1
  130. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -1
  131. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/Editor.d.ts +1 -1
  132. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.d.ts +7 -1
  133. package/dist/admin/src/pages/ListView/components/TableCells/CellContent.d.ts +11 -2
  134. package/dist/admin/src/pages/ListView/components/TableCells/CellValue.d.ts +1 -1
  135. package/dist/admin/src/preview/routes.d.ts +2 -2
  136. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  137. package/dist/admin/src/router.d.ts +2 -2
  138. package/dist/admin/src/services/api.d.ts +1 -1
  139. package/dist/admin/src/services/components.d.ts +2 -2
  140. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  141. package/dist/admin/src/services/documents.d.ts +19 -19
  142. package/dist/admin/src/services/homepage.d.ts +1 -1
  143. package/dist/admin/src/services/init.d.ts +1 -1
  144. package/dist/admin/src/services/relations.d.ts +2 -2
  145. package/dist/admin/src/services/uid.d.ts +3 -3
  146. package/dist/admin/src/utils/api.d.ts +2 -2
  147. package/dist/admin/src/utils/conditionalFields.d.ts +1 -0
  148. package/dist/admin/src/utils/objects.d.ts +7 -4
  149. package/dist/admin/src/utils/validation.d.ts +2 -1
  150. package/dist/admin/translations/en.json.js +1 -0
  151. package/dist/admin/translations/en.json.js.map +1 -1
  152. package/dist/admin/translations/en.json.mjs +1 -0
  153. package/dist/admin/translations/en.json.mjs.map +1 -1
  154. package/dist/admin/utils/api.js +6 -1
  155. package/dist/admin/utils/api.js.map +1 -1
  156. package/dist/admin/utils/api.mjs +6 -1
  157. package/dist/admin/utils/api.mjs.map +1 -1
  158. package/dist/admin/utils/conditionalFields.js.map +1 -1
  159. package/dist/admin/utils/conditionalFields.mjs.map +1 -1
  160. package/dist/admin/utils/objects.js +43 -13
  161. package/dist/admin/utils/objects.js.map +1 -1
  162. package/dist/admin/utils/objects.mjs +43 -13
  163. package/dist/admin/utils/objects.mjs.map +1 -1
  164. package/dist/admin/utils/validation.js.map +1 -1
  165. package/dist/admin/utils/validation.mjs.map +1 -1
  166. package/dist/server/controllers/collection-types.js +4 -1
  167. package/dist/server/controllers/collection-types.js.map +1 -1
  168. package/dist/server/controllers/collection-types.mjs +4 -1
  169. package/dist/server/controllers/collection-types.mjs.map +1 -1
  170. package/dist/server/controllers/relations.js +5 -4
  171. package/dist/server/controllers/relations.js.map +1 -1
  172. package/dist/server/controllers/relations.mjs +5 -4
  173. package/dist/server/controllers/relations.mjs.map +1 -1
  174. package/dist/server/controllers/validation/model-configuration.js +3 -1
  175. package/dist/server/controllers/validation/model-configuration.js.map +1 -1
  176. package/dist/server/controllers/validation/model-configuration.mjs +3 -1
  177. package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
  178. package/dist/server/homepage/services/homepage.js +27 -7
  179. package/dist/server/homepage/services/homepage.js.map +1 -1
  180. package/dist/server/homepage/services/homepage.mjs +27 -7
  181. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  182. package/dist/server/services/permission.js +4 -3
  183. package/dist/server/services/permission.js.map +1 -1
  184. package/dist/server/services/permission.mjs +4 -3
  185. package/dist/server/services/permission.mjs.map +1 -1
  186. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  187. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  188. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  189. package/dist/server/src/services/permission.d.ts.map +1 -1
  190. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"Settings.js","sources":["../../../../../admin/src/pages/ListConfiguration/components/Settings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm, InputRenderer, type InputProps } from '@strapi/admin/strapi-admin';\nimport { Flex, Grid, Typography, useCollator } from '@strapi/design-system';\nimport { type MessageDescriptor, useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { type EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport { getTranslation } from '../../../utils/translations';\nimport { type FormData } from '../ListConfigurationPage';\n\nimport type { DistributiveOmit } from 'react-redux';\n\nexport type InputPropsWithMessageDescriptors = DistributiveOmit<\n InputProps,\n 'hint' | 'label' | 'placeholder'\n> & {\n hint?: MessageDescriptor;\n label: MessageDescriptor;\n placeholder?: MessageDescriptor;\n};\n\n/**\n * @internal\n * @description Form inputs are always displayed in a grid, so we need\n * to use the size property to determine how many columns the input should\n * take up.\n */\nexport type FormLayoutInputProps = InputPropsWithMessageDescriptors & { size: number };\n\nconst EXCLUDED_SORT_ATTRIBUTE_TYPES = [\n 'media',\n 'richtext',\n 'dynamiczone',\n 'relation',\n 'component',\n 'json',\n 'blocks',\n];\n\ninterface SortOption {\n value: string;\n label: string;\n}\n\nconst Settings = () => {\n const { formatMessage, locale } = useIntl();\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n const { schema } = useDoc();\n\n const layout = useForm<FormData['layout']>('Settings', (state) => state.values.layout ?? []);\n const currentSortBy = useForm<FormData['settings']['defaultSortBy']>(\n 'Settings',\n (state) => state.values.settings.defaultSortBy\n );\n const onChange = useForm('Settings', (state) => state.onChange);\n\n const sortOptions = React.useMemo(\n () =>\n Object.values(layout).reduce<SortOption[]>((acc, field) => {\n if (schema && !EXCLUDED_SORT_ATTRIBUTE_TYPES.includes(schema.attributes[field.name].type)) {\n acc.push({\n value: field.name,\n label: typeof field.label !== 'string' ? formatMessage(field.label) : field.label,\n });\n }\n\n return acc;\n }, []),\n [formatMessage, layout, schema]\n );\n\n const sortOptionsSorted = sortOptions.sort((a, b) => formatter.compare(a.label, b.label));\n\n React.useEffect(() => {\n if (sortOptionsSorted.findIndex((opt) => opt.value === currentSortBy) === -1) {\n onChange('settings.defaultSortBy', sortOptionsSorted[0]?.value);\n }\n }, [currentSortBy, onChange, sortOptionsSorted]);\n\n const formLayout = React.useMemo(\n () =>\n SETTINGS_FORM_LAYOUT.map((row) =>\n row.map((field) => {\n if (field.type === 'enumeration') {\n return {\n ...field,\n hint: field.hint ? formatMessage(field.hint) : undefined,\n label: formatMessage(field.label),\n options: field.name === 'settings.defaultSortBy' ? sortOptionsSorted : field.options,\n };\n } else {\n return {\n ...field,\n hint: field.hint ? formatMessage(field.hint) : undefined,\n label: formatMessage(field.label),\n };\n }\n })\n ) as [top: EditFieldLayout[], bottom: EditFieldLayout[]],\n [formatMessage, sortOptionsSorted]\n );\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.settings'),\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid.Root key=\"bottom\" gap={4}>\n {formLayout.map((row) =>\n row.map(({ size, ...field }) => (\n <Grid.Item key={field.name} xs={12} col={size} direction=\"column\" alignItems=\"stretch\">\n {/* @ts-expect-error – issue with EnumerationProps conflicting with InputProps */}\n <InputRenderer {...field} />\n </Grid.Item>\n ))\n )}\n </Grid.Root>\n </Flex>\n );\n};\n\nconst SETTINGS_FORM_LAYOUT: FormLayoutInputProps[][] = [\n [\n {\n label: {\n id: getTranslation('form.Input.search'),\n defaultMessage: 'Enable search',\n },\n name: 'settings.searchable',\n size: 4,\n type: 'boolean' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.filters'),\n defaultMessage: 'Enable filters',\n },\n name: 'settings.filterable',\n size: 4,\n type: 'boolean' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.bulkActions'),\n defaultMessage: 'Enable bulk actions',\n },\n name: 'settings.bulkable',\n size: 4,\n type: 'boolean' as const,\n },\n ],\n [\n {\n hint: {\n id: getTranslation('form.Input.pageEntries.inputDescription'),\n defaultMessage: 'Note: You can override this value in the Collection Type settings page.',\n },\n label: {\n id: getTranslation('form.Input.pageEntries'),\n defaultMessage: 'Entries per page',\n },\n name: 'settings.pageSize',\n options: ['10', '20', '50', '100'].map((value) => ({ value, label: value })),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.defaultSort'),\n defaultMessage: 'Default sort attribute',\n },\n name: 'settings.defaultSortBy',\n options: [],\n size: 3,\n type: 'enumeration' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.sort.order'),\n defaultMessage: 'Default sort order',\n },\n name: 'settings.defaultSortOrder',\n options: ['ASC', 'DESC'].map((value) => ({ value, label: value })),\n size: 3,\n type: 'enumeration' as const,\n },\n ],\n];\n\nexport { Settings };\n"],"names":["EXCLUDED_SORT_ATTRIBUTE_TYPES","Settings","formatMessage","locale","useIntl","formatter","useCollator","sensitivity","schema","useDoc","layout","useForm","state","values","currentSortBy","settings","defaultSortBy","onChange","sortOptions","React","useMemo","Object","reduce","acc","field","includes","attributes","name","type","push","value","label","sortOptionsSorted","sort","a","b","compare","useEffect","findIndex","opt","formLayout","SETTINGS_FORM_LAYOUT","map","row","hint","undefined","options","_jsxs","Flex","direction","alignItems","gap","_jsx","Typography","variant","tag","id","getTranslation","defaultMessage","Grid","Root","size","Item","xs","col","InputRenderer"],"mappings":"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"}
1
+ {"version":3,"file":"Settings.js","sources":["../../../../../admin/src/pages/ListConfiguration/components/Settings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm, InputRenderer, type InputProps } from '@strapi/admin/strapi-admin';\nimport { Flex, Grid, Typography, useCollator } from '@strapi/design-system';\nimport { type MessageDescriptor, useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { type EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport { getTranslation } from '../../../utils/translations';\nimport { type FormData } from '../ListConfigurationPage';\n\nimport type { DistributiveOmit } from 'react-redux';\n\nexport type InputPropsWithMessageDescriptors = DistributiveOmit<\n InputProps,\n 'hint' | 'label' | 'placeholder'\n> & {\n hint?: MessageDescriptor;\n label: MessageDescriptor;\n placeholder?: MessageDescriptor;\n};\n\n/**\n * @internal\n * @description Form inputs are always displayed in a grid, so we need\n * to use the size property to determine how many columns the input should\n * take up.\n */\nexport type FormLayoutInputProps = InputPropsWithMessageDescriptors & { size: number };\n\nconst EXCLUDED_SORT_ATTRIBUTE_TYPES = [\n 'media',\n 'richtext',\n 'dynamiczone',\n 'relation',\n 'component',\n 'json',\n 'blocks',\n];\n\ninterface SortOption {\n value: string;\n label: string;\n}\n\nconst Settings = () => {\n const { formatMessage, locale } = useIntl();\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n const { schema } = useDoc();\n\n const layout = useForm<FormData['layout']>(\n 'Settings',\n (state) => (state.values as FormData).layout ?? []\n );\n const currentSortBy = useForm<FormData['settings']['defaultSortBy']>(\n 'Settings',\n (state) => (state.values as FormData).settings.defaultSortBy\n );\n const onChange = useForm('Settings', (state) => state.onChange);\n\n const sortOptions = React.useMemo(\n () =>\n Object.values(layout).reduce<SortOption[]>((acc, field) => {\n if (schema && !EXCLUDED_SORT_ATTRIBUTE_TYPES.includes(schema.attributes[field.name].type)) {\n acc.push({\n value: field.name,\n label: typeof field.label !== 'string' ? formatMessage(field.label) : field.label,\n });\n }\n\n return acc;\n }, []),\n [formatMessage, layout, schema]\n );\n\n const sortOptionsSorted = sortOptions.sort((a, b) => formatter.compare(a.label, b.label));\n\n React.useEffect(() => {\n if (sortOptionsSorted.findIndex((opt) => opt.value === currentSortBy) === -1) {\n onChange('settings.defaultSortBy', sortOptionsSorted[0]?.value);\n }\n }, [currentSortBy, onChange, sortOptionsSorted]);\n\n const formLayout = React.useMemo(\n () =>\n SETTINGS_FORM_LAYOUT.map((row) =>\n row.map((field) => {\n if (field.type === 'enumeration') {\n return {\n ...field,\n hint: field.hint ? formatMessage(field.hint) : undefined,\n label: formatMessage(field.label),\n options: field.name === 'settings.defaultSortBy' ? sortOptionsSorted : field.options,\n };\n } else {\n return {\n ...field,\n hint: field.hint ? formatMessage(field.hint) : undefined,\n label: formatMessage(field.label),\n };\n }\n })\n ) as [top: EditFieldLayout[], bottom: EditFieldLayout[]],\n [formatMessage, sortOptionsSorted]\n );\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.settings'),\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid.Root key=\"bottom\" gap={4}>\n {formLayout.map((row) =>\n row.map(({ size, ...field }) => (\n <Grid.Item key={field.name} xs={12} col={size} direction=\"column\" alignItems=\"stretch\">\n {/* @ts-expect-error – issue with EnumerationProps conflicting with InputProps */}\n <InputRenderer {...field} />\n </Grid.Item>\n ))\n )}\n </Grid.Root>\n </Flex>\n );\n};\n\nconst SETTINGS_FORM_LAYOUT: FormLayoutInputProps[][] = [\n [\n {\n label: {\n id: getTranslation('form.Input.search'),\n defaultMessage: 'Enable search',\n },\n name: 'settings.searchable',\n size: 4,\n type: 'boolean' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.filters'),\n defaultMessage: 'Enable filters',\n },\n name: 'settings.filterable',\n size: 4,\n type: 'boolean' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.bulkActions'),\n defaultMessage: 'Enable bulk actions',\n },\n name: 'settings.bulkable',\n size: 4,\n type: 'boolean' as const,\n },\n ],\n [\n {\n hint: {\n id: getTranslation('form.Input.pageEntries.inputDescription'),\n defaultMessage: 'Note: You can override this value in the Collection Type settings page.',\n },\n label: {\n id: getTranslation('form.Input.pageEntries'),\n defaultMessage: 'Entries per page',\n },\n name: 'settings.pageSize',\n options: ['10', '20', '50', '100'].map((value) => ({ value, label: value })),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.defaultSort'),\n defaultMessage: 'Default sort attribute',\n },\n name: 'settings.defaultSortBy',\n options: [],\n size: 3,\n type: 'enumeration' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.sort.order'),\n defaultMessage: 'Default sort order',\n },\n name: 'settings.defaultSortOrder',\n options: ['ASC', 'DESC'].map((value) => ({ value, label: value })),\n size: 3,\n type: 'enumeration' as const,\n },\n ],\n];\n\nexport { Settings };\n"],"names":["EXCLUDED_SORT_ATTRIBUTE_TYPES","Settings","formatMessage","locale","useIntl","formatter","useCollator","sensitivity","schema","useDoc","layout","useForm","state","values","currentSortBy","settings","defaultSortBy","onChange","sortOptions","React","useMemo","Object","reduce","acc","field","includes","attributes","name","type","push","value","label","sortOptionsSorted","sort","a","b","compare","useEffect","findIndex","opt","formLayout","SETTINGS_FORM_LAYOUT","map","row","hint","undefined","options","_jsxs","Flex","direction","alignItems","gap","_jsx","Typography","variant","tag","id","getTranslation","defaultMessage","Grid","Root","size","Item","xs","col","InputRenderer"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Settings.mjs","sources":["../../../../../admin/src/pages/ListConfiguration/components/Settings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm, InputRenderer, type InputProps } from '@strapi/admin/strapi-admin';\nimport { Flex, Grid, Typography, useCollator } from '@strapi/design-system';\nimport { type MessageDescriptor, useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { type EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport { getTranslation } from '../../../utils/translations';\nimport { type FormData } from '../ListConfigurationPage';\n\nimport type { DistributiveOmit } from 'react-redux';\n\nexport type InputPropsWithMessageDescriptors = DistributiveOmit<\n InputProps,\n 'hint' | 'label' | 'placeholder'\n> & {\n hint?: MessageDescriptor;\n label: MessageDescriptor;\n placeholder?: MessageDescriptor;\n};\n\n/**\n * @internal\n * @description Form inputs are always displayed in a grid, so we need\n * to use the size property to determine how many columns the input should\n * take up.\n */\nexport type FormLayoutInputProps = InputPropsWithMessageDescriptors & { size: number };\n\nconst EXCLUDED_SORT_ATTRIBUTE_TYPES = [\n 'media',\n 'richtext',\n 'dynamiczone',\n 'relation',\n 'component',\n 'json',\n 'blocks',\n];\n\ninterface SortOption {\n value: string;\n label: string;\n}\n\nconst Settings = () => {\n const { formatMessage, locale } = useIntl();\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n const { schema } = useDoc();\n\n const layout = useForm<FormData['layout']>('Settings', (state) => state.values.layout ?? []);\n const currentSortBy = useForm<FormData['settings']['defaultSortBy']>(\n 'Settings',\n (state) => state.values.settings.defaultSortBy\n );\n const onChange = useForm('Settings', (state) => state.onChange);\n\n const sortOptions = React.useMemo(\n () =>\n Object.values(layout).reduce<SortOption[]>((acc, field) => {\n if (schema && !EXCLUDED_SORT_ATTRIBUTE_TYPES.includes(schema.attributes[field.name].type)) {\n acc.push({\n value: field.name,\n label: typeof field.label !== 'string' ? formatMessage(field.label) : field.label,\n });\n }\n\n return acc;\n }, []),\n [formatMessage, layout, schema]\n );\n\n const sortOptionsSorted = sortOptions.sort((a, b) => formatter.compare(a.label, b.label));\n\n React.useEffect(() => {\n if (sortOptionsSorted.findIndex((opt) => opt.value === currentSortBy) === -1) {\n onChange('settings.defaultSortBy', sortOptionsSorted[0]?.value);\n }\n }, [currentSortBy, onChange, sortOptionsSorted]);\n\n const formLayout = React.useMemo(\n () =>\n SETTINGS_FORM_LAYOUT.map((row) =>\n row.map((field) => {\n if (field.type === 'enumeration') {\n return {\n ...field,\n hint: field.hint ? formatMessage(field.hint) : undefined,\n label: formatMessage(field.label),\n options: field.name === 'settings.defaultSortBy' ? sortOptionsSorted : field.options,\n };\n } else {\n return {\n ...field,\n hint: field.hint ? formatMessage(field.hint) : undefined,\n label: formatMessage(field.label),\n };\n }\n })\n ) as [top: EditFieldLayout[], bottom: EditFieldLayout[]],\n [formatMessage, sortOptionsSorted]\n );\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.settings'),\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid.Root key=\"bottom\" gap={4}>\n {formLayout.map((row) =>\n row.map(({ size, ...field }) => (\n <Grid.Item key={field.name} xs={12} col={size} direction=\"column\" alignItems=\"stretch\">\n {/* @ts-expect-error – issue with EnumerationProps conflicting with InputProps */}\n <InputRenderer {...field} />\n </Grid.Item>\n ))\n )}\n </Grid.Root>\n </Flex>\n );\n};\n\nconst SETTINGS_FORM_LAYOUT: FormLayoutInputProps[][] = [\n [\n {\n label: {\n id: getTranslation('form.Input.search'),\n defaultMessage: 'Enable search',\n },\n name: 'settings.searchable',\n size: 4,\n type: 'boolean' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.filters'),\n defaultMessage: 'Enable filters',\n },\n name: 'settings.filterable',\n size: 4,\n type: 'boolean' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.bulkActions'),\n defaultMessage: 'Enable bulk actions',\n },\n name: 'settings.bulkable',\n size: 4,\n type: 'boolean' as const,\n },\n ],\n [\n {\n hint: {\n id: getTranslation('form.Input.pageEntries.inputDescription'),\n defaultMessage: 'Note: You can override this value in the Collection Type settings page.',\n },\n label: {\n id: getTranslation('form.Input.pageEntries'),\n defaultMessage: 'Entries per page',\n },\n name: 'settings.pageSize',\n options: ['10', '20', '50', '100'].map((value) => ({ value, label: value })),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.defaultSort'),\n defaultMessage: 'Default sort attribute',\n },\n name: 'settings.defaultSortBy',\n options: [],\n size: 3,\n type: 'enumeration' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.sort.order'),\n defaultMessage: 'Default sort order',\n },\n name: 'settings.defaultSortOrder',\n options: ['ASC', 'DESC'].map((value) => ({ value, label: value })),\n size: 3,\n type: 'enumeration' as const,\n },\n ],\n];\n\nexport { Settings };\n"],"names":["EXCLUDED_SORT_ATTRIBUTE_TYPES","Settings","formatMessage","locale","useIntl","formatter","useCollator","sensitivity","schema","useDoc","layout","useForm","state","values","currentSortBy","settings","defaultSortBy","onChange","sortOptions","React","useMemo","Object","reduce","acc","field","includes","attributes","name","type","push","value","label","sortOptionsSorted","sort","a","b","compare","useEffect","findIndex","opt","formLayout","SETTINGS_FORM_LAYOUT","map","row","hint","undefined","options","_jsxs","Flex","direction","alignItems","gap","_jsx","Typography","variant","tag","id","getTranslation","defaultMessage","Grid","Root","size","Item","xs","col","InputRenderer"],"mappings":"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"}
1
+ {"version":3,"file":"Settings.mjs","sources":["../../../../../admin/src/pages/ListConfiguration/components/Settings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm, InputRenderer, type InputProps } from '@strapi/admin/strapi-admin';\nimport { Flex, Grid, Typography, useCollator } from '@strapi/design-system';\nimport { type MessageDescriptor, useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { type EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport { getTranslation } from '../../../utils/translations';\nimport { type FormData } from '../ListConfigurationPage';\n\nimport type { DistributiveOmit } from 'react-redux';\n\nexport type InputPropsWithMessageDescriptors = DistributiveOmit<\n InputProps,\n 'hint' | 'label' | 'placeholder'\n> & {\n hint?: MessageDescriptor;\n label: MessageDescriptor;\n placeholder?: MessageDescriptor;\n};\n\n/**\n * @internal\n * @description Form inputs are always displayed in a grid, so we need\n * to use the size property to determine how many columns the input should\n * take up.\n */\nexport type FormLayoutInputProps = InputPropsWithMessageDescriptors & { size: number };\n\nconst EXCLUDED_SORT_ATTRIBUTE_TYPES = [\n 'media',\n 'richtext',\n 'dynamiczone',\n 'relation',\n 'component',\n 'json',\n 'blocks',\n];\n\ninterface SortOption {\n value: string;\n label: string;\n}\n\nconst Settings = () => {\n const { formatMessage, locale } = useIntl();\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n const { schema } = useDoc();\n\n const layout = useForm<FormData['layout']>(\n 'Settings',\n (state) => (state.values as FormData).layout ?? []\n );\n const currentSortBy = useForm<FormData['settings']['defaultSortBy']>(\n 'Settings',\n (state) => (state.values as FormData).settings.defaultSortBy\n );\n const onChange = useForm('Settings', (state) => state.onChange);\n\n const sortOptions = React.useMemo(\n () =>\n Object.values(layout).reduce<SortOption[]>((acc, field) => {\n if (schema && !EXCLUDED_SORT_ATTRIBUTE_TYPES.includes(schema.attributes[field.name].type)) {\n acc.push({\n value: field.name,\n label: typeof field.label !== 'string' ? formatMessage(field.label) : field.label,\n });\n }\n\n return acc;\n }, []),\n [formatMessage, layout, schema]\n );\n\n const sortOptionsSorted = sortOptions.sort((a, b) => formatter.compare(a.label, b.label));\n\n React.useEffect(() => {\n if (sortOptionsSorted.findIndex((opt) => opt.value === currentSortBy) === -1) {\n onChange('settings.defaultSortBy', sortOptionsSorted[0]?.value);\n }\n }, [currentSortBy, onChange, sortOptionsSorted]);\n\n const formLayout = React.useMemo(\n () =>\n SETTINGS_FORM_LAYOUT.map((row) =>\n row.map((field) => {\n if (field.type === 'enumeration') {\n return {\n ...field,\n hint: field.hint ? formatMessage(field.hint) : undefined,\n label: formatMessage(field.label),\n options: field.name === 'settings.defaultSortBy' ? sortOptionsSorted : field.options,\n };\n } else {\n return {\n ...field,\n hint: field.hint ? formatMessage(field.hint) : undefined,\n label: formatMessage(field.label),\n };\n }\n })\n ) as [top: EditFieldLayout[], bottom: EditFieldLayout[]],\n [formatMessage, sortOptionsSorted]\n );\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.settings'),\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid.Root key=\"bottom\" gap={4}>\n {formLayout.map((row) =>\n row.map(({ size, ...field }) => (\n <Grid.Item key={field.name} xs={12} col={size} direction=\"column\" alignItems=\"stretch\">\n {/* @ts-expect-error – issue with EnumerationProps conflicting with InputProps */}\n <InputRenderer {...field} />\n </Grid.Item>\n ))\n )}\n </Grid.Root>\n </Flex>\n );\n};\n\nconst SETTINGS_FORM_LAYOUT: FormLayoutInputProps[][] = [\n [\n {\n label: {\n id: getTranslation('form.Input.search'),\n defaultMessage: 'Enable search',\n },\n name: 'settings.searchable',\n size: 4,\n type: 'boolean' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.filters'),\n defaultMessage: 'Enable filters',\n },\n name: 'settings.filterable',\n size: 4,\n type: 'boolean' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.bulkActions'),\n defaultMessage: 'Enable bulk actions',\n },\n name: 'settings.bulkable',\n size: 4,\n type: 'boolean' as const,\n },\n ],\n [\n {\n hint: {\n id: getTranslation('form.Input.pageEntries.inputDescription'),\n defaultMessage: 'Note: You can override this value in the Collection Type settings page.',\n },\n label: {\n id: getTranslation('form.Input.pageEntries'),\n defaultMessage: 'Entries per page',\n },\n name: 'settings.pageSize',\n options: ['10', '20', '50', '100'].map((value) => ({ value, label: value })),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.defaultSort'),\n defaultMessage: 'Default sort attribute',\n },\n name: 'settings.defaultSortBy',\n options: [],\n size: 3,\n type: 'enumeration' as const,\n },\n {\n label: {\n id: getTranslation('form.Input.sort.order'),\n defaultMessage: 'Default sort order',\n },\n name: 'settings.defaultSortOrder',\n options: ['ASC', 'DESC'].map((value) => ({ value, label: value })),\n size: 3,\n type: 'enumeration' as const,\n },\n ],\n];\n\nexport { Settings };\n"],"names":["EXCLUDED_SORT_ATTRIBUTE_TYPES","Settings","formatMessage","locale","useIntl","formatter","useCollator","sensitivity","schema","useDoc","layout","useForm","state","values","currentSortBy","settings","defaultSortBy","onChange","sortOptions","React","useMemo","Object","reduce","acc","field","includes","attributes","name","type","push","value","label","sortOptionsSorted","sort","a","b","compare","useEffect","findIndex","opt","formLayout","SETTINGS_FORM_LAYOUT","map","row","hint","undefined","options","_jsxs","Flex","direction","alignItems","gap","_jsx","Typography","variant","tag","id","getTranslation","defaultMessage","Grid","Root","size","Item","xs","col","InputRenderer"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SortDisplayedFields.js","sources":["../../../../../admin/src/pages/ListConfiguration/components/SortDisplayedFields.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, VisuallyHidden, Typography, Menu } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { checkIfAttributeIsDisplayable } from '../../../utils/attributes';\nimport { getTranslation } from '../../../utils/translations';\n\nimport { DraggableCard, DraggableCardProps } from './DraggableCard';\n\nimport type { ListLayout } from '../../../hooks/useDocumentLayout';\nimport type { FormData } from '../ListConfigurationPage';\n\ninterface SortDisplayedFieldsProps extends Pick<ListLayout, 'metadatas'> {}\n\nconst SortDisplayedFields = ({ metadatas }: SortDisplayedFieldsProps) => {\n const { formatMessage } = useIntl();\n const { schema } = useDoc();\n const [isDraggingSibling, setIsDraggingSibling] = React.useState(false);\n const [lastAction, setLastAction] = React.useState<string | null>(null);\n const scrollableContainerRef = React.useRef<HTMLDivElement>(null);\n\n const values = useForm<FormData['layout']>(\n 'SortDisplayedFields',\n (state) => state.values.layout ?? []\n );\n const addFieldRow = useForm('SortDisplayedFields', (state) => state.addFieldRow);\n const removeFieldRow = useForm('SortDisplayedFields', (state) => state.removeFieldRow);\n const moveFieldRow = useForm('SortDisplayedFields', (state) => state.moveFieldRow);\n\n /**\n * This is our list of fields that are not displayed in the current layout\n * so we create their default state to be added to the layout.\n */\n const nonDisplayedFields = React.useMemo(() => {\n if (!schema) {\n return [];\n }\n\n const displayedFieldNames = values.map((field) => field.name);\n\n return Object.entries(schema.attributes).reduce<Array<FormData['layout'][number]>>(\n (acc, [name, attribute]) => {\n if (!displayedFieldNames.includes(name) && checkIfAttributeIsDisplayable(attribute)) {\n const metadata = metadatas[name] || { label: name };\n\n acc.push({\n name,\n label: metadata.label || name,\n sortable: metadata.sortable,\n });\n }\n\n return acc;\n },\n []\n );\n }, [metadatas, values, schema]);\n\n const handleAddField = (field: FormData['layout'][number]) => {\n setLastAction('add');\n addFieldRow('layout', field);\n };\n\n const handleRemoveField = (index: number) => {\n setLastAction('remove');\n removeFieldRow('layout', index);\n };\n\n const handleMoveField: DraggableCardProps['onMoveField'] = (dragIndex, hoverIndex) => {\n moveFieldRow('layout', dragIndex, hoverIndex);\n };\n\n React.useEffect(() => {\n if (lastAction === 'add' && scrollableContainerRef?.current) {\n scrollableContainerRef.current.scrollLeft = scrollableContainerRef.current.scrollWidth;\n }\n }, [lastAction]);\n\n return (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.view'),\n defaultMessage: 'View',\n })}\n </Typography>\n\n <Flex padding={4} borderColor=\"neutral300\" borderStyle=\"dashed\" borderWidth=\"1px\" hasRadius>\n <Box flex=\"1\" overflow=\"auto hidden\" ref={scrollableContainerRef}>\n <Flex gap={3}>\n {values.map((field, index) => (\n <DraggableCard\n key={field.name}\n index={index}\n isDraggingSibling={isDraggingSibling}\n onMoveField={handleMoveField}\n onRemoveField={() => handleRemoveField(index)}\n setIsDraggingSibling={setIsDraggingSibling}\n {...field}\n attribute={schema!.attributes[field.name]}\n label={typeof field.label === 'object' ? formatMessage(field.label) : field.label}\n />\n ))}\n </Flex>\n </Box>\n\n <Menu.Root>\n <Menu.Trigger\n paddingLeft={2}\n paddingRight={2}\n justifyContent=\"center\"\n endIcon={null}\n disabled={nonDisplayedFields.length === 0}\n variant=\"tertiary\"\n >\n <VisuallyHidden tag=\"span\">\n {formatMessage({\n id: getTranslation('components.FieldSelect.label'),\n defaultMessage: 'Add a field',\n })}\n </VisuallyHidden>\n <Plus aria-hidden focusable={false} style={{ position: 'relative', top: 2 }} />\n </Menu.Trigger>\n <Menu.Content>\n {nonDisplayedFields.map((field) => (\n <Menu.Item key={field.name} onSelect={() => handleAddField(field)}>\n {typeof field.label === 'object' ? formatMessage(field.label) : field.label}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n </Flex>\n </Flex>\n );\n};\n\nexport { SortDisplayedFields };\nexport type { SortDisplayedFieldsProps };\n"],"names":["SortDisplayedFields","metadatas","formatMessage","useIntl","schema","useDoc","isDraggingSibling","setIsDraggingSibling","React","useState","lastAction","setLastAction","scrollableContainerRef","useRef","values","useForm","state","layout","addFieldRow","removeFieldRow","moveFieldRow","nonDisplayedFields","useMemo","displayedFieldNames","map","field","name","Object","entries","attributes","reduce","acc","attribute","includes","checkIfAttributeIsDisplayable","metadata","label","push","sortable","handleAddField","handleRemoveField","index","handleMoveField","dragIndex","hoverIndex","useEffect","current","scrollLeft","scrollWidth","_jsxs","Flex","alignItems","direction","gap","_jsx","Typography","variant","tag","id","getTranslation","defaultMessage","padding","borderColor","borderStyle","borderWidth","hasRadius","Box","flex","overflow","ref","DraggableCard","onMoveField","onRemoveField","Menu","Root","Trigger","paddingLeft","paddingRight","justifyContent","endIcon","disabled","length","VisuallyHidden","Plus","aria-hidden","focusable","style","position","top","Content","Item","onSelect"],"mappings":"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"}
1
+ {"version":3,"file":"SortDisplayedFields.js","sources":["../../../../../admin/src/pages/ListConfiguration/components/SortDisplayedFields.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, VisuallyHidden, Typography, Menu } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { checkIfAttributeIsDisplayable } from '../../../utils/attributes';\nimport { getTranslation } from '../../../utils/translations';\n\nimport { DraggableCard, DraggableCardProps } from './DraggableCard';\n\nimport type { ListLayout } from '../../../hooks/useDocumentLayout';\nimport type { FormData } from '../ListConfigurationPage';\n\ninterface SortDisplayedFieldsProps extends Pick<ListLayout, 'metadatas'> {}\n\nconst SortDisplayedFields = ({ metadatas }: SortDisplayedFieldsProps) => {\n const { formatMessage } = useIntl();\n const { schema } = useDoc();\n const [isDraggingSibling, setIsDraggingSibling] = React.useState(false);\n const [lastAction, setLastAction] = React.useState<string | null>(null);\n const scrollableContainerRef = React.useRef<HTMLDivElement>(null);\n\n const values = useForm<FormData['layout']>(\n 'SortDisplayedFields',\n (state) => (state.values as FormData).layout ?? []\n );\n const addFieldRow = useForm('SortDisplayedFields', (state) => state.addFieldRow);\n const removeFieldRow = useForm('SortDisplayedFields', (state) => state.removeFieldRow);\n const moveFieldRow = useForm('SortDisplayedFields', (state) => state.moveFieldRow);\n\n /**\n * This is our list of fields that are not displayed in the current layout\n * so we create their default state to be added to the layout.\n */\n const nonDisplayedFields = React.useMemo(() => {\n if (!schema) {\n return [];\n }\n\n const displayedFieldNames = values.map((field) => field.name);\n\n return Object.entries(schema.attributes).reduce<Array<FormData['layout'][number]>>(\n (acc, [name, attribute]) => {\n if (!displayedFieldNames.includes(name) && checkIfAttributeIsDisplayable(attribute)) {\n const metadata = metadatas[name] || { label: name };\n\n acc.push({\n name,\n label: metadata.label || name,\n sortable: metadata.sortable,\n });\n }\n\n return acc;\n },\n []\n );\n }, [metadatas, values, schema]);\n\n const handleAddField = (field: FormData['layout'][number]) => {\n setLastAction('add');\n addFieldRow('layout', field);\n };\n\n const handleRemoveField = (index: number) => {\n setLastAction('remove');\n removeFieldRow('layout', index);\n };\n\n const handleMoveField: DraggableCardProps['onMoveField'] = (dragIndex, hoverIndex) => {\n moveFieldRow('layout', dragIndex, hoverIndex);\n };\n\n React.useEffect(() => {\n if (lastAction === 'add' && scrollableContainerRef?.current) {\n scrollableContainerRef.current.scrollLeft = scrollableContainerRef.current.scrollWidth;\n }\n }, [lastAction]);\n\n return (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.view'),\n defaultMessage: 'View',\n })}\n </Typography>\n\n <Flex padding={4} borderColor=\"neutral300\" borderStyle=\"dashed\" borderWidth=\"1px\" hasRadius>\n <Box flex=\"1\" overflow=\"auto hidden\" ref={scrollableContainerRef}>\n <Flex gap={3}>\n {values.map((field, index) => (\n <DraggableCard\n key={field.name}\n index={index}\n isDraggingSibling={isDraggingSibling}\n onMoveField={handleMoveField}\n onRemoveField={() => handleRemoveField(index)}\n setIsDraggingSibling={setIsDraggingSibling}\n {...field}\n attribute={schema!.attributes[field.name]}\n label={typeof field.label === 'object' ? formatMessage(field.label) : field.label}\n />\n ))}\n </Flex>\n </Box>\n\n <Menu.Root>\n <Menu.Trigger\n paddingLeft={2}\n paddingRight={2}\n justifyContent=\"center\"\n endIcon={null}\n disabled={nonDisplayedFields.length === 0}\n variant=\"tertiary\"\n >\n <VisuallyHidden tag=\"span\">\n {formatMessage({\n id: getTranslation('components.FieldSelect.label'),\n defaultMessage: 'Add a field',\n })}\n </VisuallyHidden>\n <Plus aria-hidden focusable={false} style={{ position: 'relative', top: 2 }} />\n </Menu.Trigger>\n <Menu.Content>\n {nonDisplayedFields.map((field) => (\n <Menu.Item key={field.name} onSelect={() => handleAddField(field)}>\n {typeof field.label === 'object' ? formatMessage(field.label) : field.label}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n </Flex>\n </Flex>\n );\n};\n\nexport { SortDisplayedFields };\nexport type { SortDisplayedFieldsProps };\n"],"names":["SortDisplayedFields","metadatas","formatMessage","useIntl","schema","useDoc","isDraggingSibling","setIsDraggingSibling","React","useState","lastAction","setLastAction","scrollableContainerRef","useRef","values","useForm","state","layout","addFieldRow","removeFieldRow","moveFieldRow","nonDisplayedFields","useMemo","displayedFieldNames","map","field","name","Object","entries","attributes","reduce","acc","attribute","includes","checkIfAttributeIsDisplayable","metadata","label","push","sortable","handleAddField","handleRemoveField","index","handleMoveField","dragIndex","hoverIndex","useEffect","current","scrollLeft","scrollWidth","_jsxs","Flex","alignItems","direction","gap","_jsx","Typography","variant","tag","id","getTranslation","defaultMessage","padding","borderColor","borderStyle","borderWidth","hasRadius","Box","flex","overflow","ref","DraggableCard","onMoveField","onRemoveField","Menu","Root","Trigger","paddingLeft","paddingRight","justifyContent","endIcon","disabled","length","VisuallyHidden","Plus","aria-hidden","focusable","style","position","top","Content","Item","onSelect"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SortDisplayedFields.mjs","sources":["../../../../../admin/src/pages/ListConfiguration/components/SortDisplayedFields.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, VisuallyHidden, Typography, Menu } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { checkIfAttributeIsDisplayable } from '../../../utils/attributes';\nimport { getTranslation } from '../../../utils/translations';\n\nimport { DraggableCard, DraggableCardProps } from './DraggableCard';\n\nimport type { ListLayout } from '../../../hooks/useDocumentLayout';\nimport type { FormData } from '../ListConfigurationPage';\n\ninterface SortDisplayedFieldsProps extends Pick<ListLayout, 'metadatas'> {}\n\nconst SortDisplayedFields = ({ metadatas }: SortDisplayedFieldsProps) => {\n const { formatMessage } = useIntl();\n const { schema } = useDoc();\n const [isDraggingSibling, setIsDraggingSibling] = React.useState(false);\n const [lastAction, setLastAction] = React.useState<string | null>(null);\n const scrollableContainerRef = React.useRef<HTMLDivElement>(null);\n\n const values = useForm<FormData['layout']>(\n 'SortDisplayedFields',\n (state) => state.values.layout ?? []\n );\n const addFieldRow = useForm('SortDisplayedFields', (state) => state.addFieldRow);\n const removeFieldRow = useForm('SortDisplayedFields', (state) => state.removeFieldRow);\n const moveFieldRow = useForm('SortDisplayedFields', (state) => state.moveFieldRow);\n\n /**\n * This is our list of fields that are not displayed in the current layout\n * so we create their default state to be added to the layout.\n */\n const nonDisplayedFields = React.useMemo(() => {\n if (!schema) {\n return [];\n }\n\n const displayedFieldNames = values.map((field) => field.name);\n\n return Object.entries(schema.attributes).reduce<Array<FormData['layout'][number]>>(\n (acc, [name, attribute]) => {\n if (!displayedFieldNames.includes(name) && checkIfAttributeIsDisplayable(attribute)) {\n const metadata = metadatas[name] || { label: name };\n\n acc.push({\n name,\n label: metadata.label || name,\n sortable: metadata.sortable,\n });\n }\n\n return acc;\n },\n []\n );\n }, [metadatas, values, schema]);\n\n const handleAddField = (field: FormData['layout'][number]) => {\n setLastAction('add');\n addFieldRow('layout', field);\n };\n\n const handleRemoveField = (index: number) => {\n setLastAction('remove');\n removeFieldRow('layout', index);\n };\n\n const handleMoveField: DraggableCardProps['onMoveField'] = (dragIndex, hoverIndex) => {\n moveFieldRow('layout', dragIndex, hoverIndex);\n };\n\n React.useEffect(() => {\n if (lastAction === 'add' && scrollableContainerRef?.current) {\n scrollableContainerRef.current.scrollLeft = scrollableContainerRef.current.scrollWidth;\n }\n }, [lastAction]);\n\n return (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.view'),\n defaultMessage: 'View',\n })}\n </Typography>\n\n <Flex padding={4} borderColor=\"neutral300\" borderStyle=\"dashed\" borderWidth=\"1px\" hasRadius>\n <Box flex=\"1\" overflow=\"auto hidden\" ref={scrollableContainerRef}>\n <Flex gap={3}>\n {values.map((field, index) => (\n <DraggableCard\n key={field.name}\n index={index}\n isDraggingSibling={isDraggingSibling}\n onMoveField={handleMoveField}\n onRemoveField={() => handleRemoveField(index)}\n setIsDraggingSibling={setIsDraggingSibling}\n {...field}\n attribute={schema!.attributes[field.name]}\n label={typeof field.label === 'object' ? formatMessage(field.label) : field.label}\n />\n ))}\n </Flex>\n </Box>\n\n <Menu.Root>\n <Menu.Trigger\n paddingLeft={2}\n paddingRight={2}\n justifyContent=\"center\"\n endIcon={null}\n disabled={nonDisplayedFields.length === 0}\n variant=\"tertiary\"\n >\n <VisuallyHidden tag=\"span\">\n {formatMessage({\n id: getTranslation('components.FieldSelect.label'),\n defaultMessage: 'Add a field',\n })}\n </VisuallyHidden>\n <Plus aria-hidden focusable={false} style={{ position: 'relative', top: 2 }} />\n </Menu.Trigger>\n <Menu.Content>\n {nonDisplayedFields.map((field) => (\n <Menu.Item key={field.name} onSelect={() => handleAddField(field)}>\n {typeof field.label === 'object' ? formatMessage(field.label) : field.label}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n </Flex>\n </Flex>\n );\n};\n\nexport { SortDisplayedFields };\nexport type { SortDisplayedFieldsProps };\n"],"names":["SortDisplayedFields","metadatas","formatMessage","useIntl","schema","useDoc","isDraggingSibling","setIsDraggingSibling","React","useState","lastAction","setLastAction","scrollableContainerRef","useRef","values","useForm","state","layout","addFieldRow","removeFieldRow","moveFieldRow","nonDisplayedFields","useMemo","displayedFieldNames","map","field","name","Object","entries","attributes","reduce","acc","attribute","includes","checkIfAttributeIsDisplayable","metadata","label","push","sortable","handleAddField","handleRemoveField","index","handleMoveField","dragIndex","hoverIndex","useEffect","current","scrollLeft","scrollWidth","_jsxs","Flex","alignItems","direction","gap","_jsx","Typography","variant","tag","id","getTranslation","defaultMessage","padding","borderColor","borderStyle","borderWidth","hasRadius","Box","flex","overflow","ref","DraggableCard","onMoveField","onRemoveField","Menu","Root","Trigger","paddingLeft","paddingRight","justifyContent","endIcon","disabled","length","VisuallyHidden","Plus","aria-hidden","focusable","style","position","top","Content","Item","onSelect"],"mappings":"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"}
1
+ {"version":3,"file":"SortDisplayedFields.mjs","sources":["../../../../../admin/src/pages/ListConfiguration/components/SortDisplayedFields.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, VisuallyHidden, Typography, Menu } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { checkIfAttributeIsDisplayable } from '../../../utils/attributes';\nimport { getTranslation } from '../../../utils/translations';\n\nimport { DraggableCard, DraggableCardProps } from './DraggableCard';\n\nimport type { ListLayout } from '../../../hooks/useDocumentLayout';\nimport type { FormData } from '../ListConfigurationPage';\n\ninterface SortDisplayedFieldsProps extends Pick<ListLayout, 'metadatas'> {}\n\nconst SortDisplayedFields = ({ metadatas }: SortDisplayedFieldsProps) => {\n const { formatMessage } = useIntl();\n const { schema } = useDoc();\n const [isDraggingSibling, setIsDraggingSibling] = React.useState(false);\n const [lastAction, setLastAction] = React.useState<string | null>(null);\n const scrollableContainerRef = React.useRef<HTMLDivElement>(null);\n\n const values = useForm<FormData['layout']>(\n 'SortDisplayedFields',\n (state) => (state.values as FormData).layout ?? []\n );\n const addFieldRow = useForm('SortDisplayedFields', (state) => state.addFieldRow);\n const removeFieldRow = useForm('SortDisplayedFields', (state) => state.removeFieldRow);\n const moveFieldRow = useForm('SortDisplayedFields', (state) => state.moveFieldRow);\n\n /**\n * This is our list of fields that are not displayed in the current layout\n * so we create their default state to be added to the layout.\n */\n const nonDisplayedFields = React.useMemo(() => {\n if (!schema) {\n return [];\n }\n\n const displayedFieldNames = values.map((field) => field.name);\n\n return Object.entries(schema.attributes).reduce<Array<FormData['layout'][number]>>(\n (acc, [name, attribute]) => {\n if (!displayedFieldNames.includes(name) && checkIfAttributeIsDisplayable(attribute)) {\n const metadata = metadatas[name] || { label: name };\n\n acc.push({\n name,\n label: metadata.label || name,\n sortable: metadata.sortable,\n });\n }\n\n return acc;\n },\n []\n );\n }, [metadatas, values, schema]);\n\n const handleAddField = (field: FormData['layout'][number]) => {\n setLastAction('add');\n addFieldRow('layout', field);\n };\n\n const handleRemoveField = (index: number) => {\n setLastAction('remove');\n removeFieldRow('layout', index);\n };\n\n const handleMoveField: DraggableCardProps['onMoveField'] = (dragIndex, hoverIndex) => {\n moveFieldRow('layout', dragIndex, hoverIndex);\n };\n\n React.useEffect(() => {\n if (lastAction === 'add' && scrollableContainerRef?.current) {\n scrollableContainerRef.current.scrollLeft = scrollableContainerRef.current.scrollWidth;\n }\n }, [lastAction]);\n\n return (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.view'),\n defaultMessage: 'View',\n })}\n </Typography>\n\n <Flex padding={4} borderColor=\"neutral300\" borderStyle=\"dashed\" borderWidth=\"1px\" hasRadius>\n <Box flex=\"1\" overflow=\"auto hidden\" ref={scrollableContainerRef}>\n <Flex gap={3}>\n {values.map((field, index) => (\n <DraggableCard\n key={field.name}\n index={index}\n isDraggingSibling={isDraggingSibling}\n onMoveField={handleMoveField}\n onRemoveField={() => handleRemoveField(index)}\n setIsDraggingSibling={setIsDraggingSibling}\n {...field}\n attribute={schema!.attributes[field.name]}\n label={typeof field.label === 'object' ? formatMessage(field.label) : field.label}\n />\n ))}\n </Flex>\n </Box>\n\n <Menu.Root>\n <Menu.Trigger\n paddingLeft={2}\n paddingRight={2}\n justifyContent=\"center\"\n endIcon={null}\n disabled={nonDisplayedFields.length === 0}\n variant=\"tertiary\"\n >\n <VisuallyHidden tag=\"span\">\n {formatMessage({\n id: getTranslation('components.FieldSelect.label'),\n defaultMessage: 'Add a field',\n })}\n </VisuallyHidden>\n <Plus aria-hidden focusable={false} style={{ position: 'relative', top: 2 }} />\n </Menu.Trigger>\n <Menu.Content>\n {nonDisplayedFields.map((field) => (\n <Menu.Item key={field.name} onSelect={() => handleAddField(field)}>\n {typeof field.label === 'object' ? formatMessage(field.label) : field.label}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n </Flex>\n </Flex>\n );\n};\n\nexport { SortDisplayedFields };\nexport type { SortDisplayedFieldsProps };\n"],"names":["SortDisplayedFields","metadatas","formatMessage","useIntl","schema","useDoc","isDraggingSibling","setIsDraggingSibling","React","useState","lastAction","setLastAction","scrollableContainerRef","useRef","values","useForm","state","layout","addFieldRow","removeFieldRow","moveFieldRow","nonDisplayedFields","useMemo","displayedFieldNames","map","field","name","Object","entries","attributes","reduce","acc","attribute","includes","checkIfAttributeIsDisplayable","metadata","label","push","sortable","handleAddField","handleRemoveField","index","handleMoveField","dragIndex","hoverIndex","useEffect","current","scrollLeft","scrollWidth","_jsxs","Flex","alignItems","direction","gap","_jsx","Typography","variant","tag","id","getTranslation","defaultMessage","padding","borderColor","borderStyle","borderWidth","hasRadius","Box","flex","overflow","ref","DraggableCard","onMoveField","onRemoveField","Menu","Root","Trigger","paddingLeft","paddingRight","justifyContent","endIcon","disabled","length","VisuallyHidden","Plus","aria-hidden","focusable","style","position","top","Content","Item","onSelect"],"mappings":"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"}
@@ -63,7 +63,6 @@ const ListViewPage = ()=>{
63
63
  const { copy } = strapiAdmin.useClipboard();
64
64
  const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler(translations.getTranslation);
65
65
  const isMobile = strapiAdmin.useIsMobile();
66
- strapiAdmin.useIsDesktop();
67
66
  const handleCopyDocumentId = React__namespace.useCallback(async (e, documentId)=>{
68
67
  e.stopPropagation();
69
68
  if (!documentId) return;
@@ -104,7 +103,7 @@ const ListViewPage = ()=>{
104
103
  ]);
105
104
  const { isHydrated } = usePersistentQueryParams.usePersistentPartialQueryParams(persistentQueryConfigs);
106
105
  const [displayedHeaderNames, setDisplayedHeaderNames] = strapiAdmin.useScopedPersistentState(`STRAPI_LIST_VIEW_DISPLAYED_HEADERS:${model}`, null);
107
- const mapDisplayedHeaders = (headers)=>headers.map((header)=>header.name);
106
+ const mapDisplayedHeaders = React__namespace.useCallback((headers)=>headers.map((header)=>header.name), []);
108
107
  const displayedHeaders = React__namespace.useMemo(()=>{
109
108
  if (!displayedHeaderNames || !list.metadatas || Object.keys(list.metadatas).length <= 0 || !schema?.attributes || !listViewConversionContext) return [];
110
109
  return useDocumentLayout.convertListLayoutToFieldLayouts(displayedHeaderNames, schema.attributes, list.metadatas, {
@@ -117,12 +116,18 @@ const ListViewPage = ()=>{
117
116
  list,
118
117
  listViewConversionContext
119
118
  ]);
120
- const handleSetHeaders = (headers)=>{
119
+ const handleSetHeaders = React__namespace.useCallback((headers)=>{
121
120
  setDisplayedHeaderNames(headers);
122
- };
123
- const handleResetHeaders = ()=>{
121
+ }, [
122
+ setDisplayedHeaderNames
123
+ ]);
124
+ const handleResetHeaders = React__namespace.useCallback(()=>{
124
125
  setDisplayedHeaderNames(mapDisplayedHeaders(list.layout));
125
- };
126
+ }, [
127
+ list.layout,
128
+ mapDisplayedHeaders,
129
+ setDisplayedHeaderNames
130
+ ]);
126
131
  /**
127
132
  * If the persistent displayedHeaders are not yet initialized, set them to list.layout
128
133
  */ React__namespace.useEffect(()=>{
@@ -134,6 +139,8 @@ const ListViewPage = ()=>{
134
139
  handleResetHeaders();
135
140
  }
136
141
  }, [
142
+ displayedHeaderNames,
143
+ handleResetHeaders,
137
144
  list.layout
138
145
  ]);
139
146
  React__namespace.useEffect(()=>{
@@ -145,7 +152,11 @@ const ListViewPage = ()=>{
145
152
  handleSetHeaders(allowedDisplayHeaders);
146
153
  }
147
154
  }, [
148
- displayedHeaderNames
155
+ displayedHeaderNames,
156
+ handleSetHeaders,
157
+ model,
158
+ schema?.attributes,
159
+ schema?.uid
149
160
  ]);
150
161
  const [{ query }, setQuery] = strapiAdmin.useQueryParams({
151
162
  page: '1',
@@ -155,8 +166,8 @@ const ListViewPage = ()=>{
155
166
  const params = React__namespace.useMemo(()=>api.buildValidParams(query), [
156
167
  query
157
168
  ]);
158
- const hasAppliedFilters = Boolean(query?.filters?.$and?.length);
159
- const hasStatusFilter = Boolean(query?.filters?.$and?.some((f)=>f?.__status?.$eq != null));
169
+ const hasAppliedFilters = (query.filters?.$and?.length ?? 0) > 0;
170
+ const hasStatusFilter = Boolean(query.filters?.$and?.some((filter)=>filter.__status?.$eq !== undefined && filter.__status.$eq !== null));
160
171
  // If a __status filter becomes active while sort=status:* is in the URL, strip the status sort.
161
172
  React__namespace.useEffect(()=>{
162
173
  if (hasStatusFilter && typeof query.sort === 'string' && /(?:^|,)\s*status:/i.test(query.sort)) {
@@ -281,6 +292,32 @@ const ListViewPage = ()=>{
281
292
  })
282
293
  });
283
294
  };
295
+ /**
296
+ * The entry link is rendered on the first non-interactive column *that has a
297
+ * value for the row* (resolved per row, so an empty cell — rendered as "-" —
298
+ * is skipped and the next candidate carries the link instead). Any scalar
299
+ * column qualifies — text, numbers, dates (createdAt/updatedAt), `id`, and
300
+ * `documentId` (its id text becomes the link, the copy button stays separate).
301
+ * Only genuinely interactive cells are skipped: relations, media, components,
302
+ * dynamic zones (they embed their own links/menus), plugin-formatted columns
303
+ * (`cellFormatter`), and the synthetic `status` column.
304
+ */ const NON_LINKABLE_TYPES = [
305
+ 'media',
306
+ 'relation',
307
+ 'component',
308
+ 'dynamiczone'
309
+ ];
310
+ const linkCandidates = tableHeaders.filter(({ name, attribute, cellFormatter })=>name !== 'status' && typeof cellFormatter !== 'function' && attribute && !NON_LINKABLE_TYPES.includes(attribute.type));
311
+ // The link column for a given row: the first candidate that actually has a
312
+ // value (uses CellContent's own hasContent so it matches the "-" the cell
313
+ // would otherwise render). documentId is checked directly (its own cell).
314
+ const getRowLinkField = (row)=>linkCandidates.find((header)=>{
315
+ if (header.name === 'documentId') {
316
+ return Boolean(row.documentId);
317
+ }
318
+ const value = row[header.name.split('.')[0]];
319
+ return CellContent.hasContent(value, header.mainField, header.attribute);
320
+ })?.name;
284
321
  const isEmptyState = !isFetching && results.length === 0;
285
322
  const endActions = /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
286
323
  children: [
@@ -409,6 +446,7 @@ const ListViewPage = ()=>{
409
446
  }),
410
447
  /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Body, {
411
448
  children: results.map((row)=>{
449
+ const rowLinkField = getRowLinkField(row);
412
450
  return /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Table.Row, {
413
451
  cursor: "pointer",
414
452
  onClick: handleRowClick(row.documentId),
@@ -441,6 +479,9 @@ const ListViewPage = ()=>{
441
479
  }, header.name);
442
480
  }
443
481
  if (header.name === 'documentId') {
482
+ // When documentId is the primary link column, only its
483
+ // id text becomes the link; the copy button stays outside.
484
+ const isDocumentIdLink = header.name === rowLinkField && Boolean(row.documentId);
444
485
  return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Table.Cell, {
445
486
  children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
446
487
  gap: 2,
@@ -448,7 +489,20 @@ const ListViewPage = ()=>{
448
489
  width: "100%",
449
490
  minWidth: 0,
450
491
  children: [
451
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
492
+ isDocumentIdLink ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
493
+ tag: reactRouterDom.Link,
494
+ to: {
495
+ pathname: row.documentId,
496
+ search: qs.stringify({
497
+ plugins: query.plugins
498
+ })
499
+ },
500
+ onClick: (e)=>e.stopPropagation(),
501
+ textColor: "neutral800",
502
+ maxWidth: "30rem",
503
+ ellipsis: true,
504
+ children: row.documentId
505
+ }) : /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
452
506
  textColor: "neutral800",
453
507
  maxWidth: "30rem",
454
508
  ellipsis: true,
@@ -480,7 +534,13 @@ const ListViewPage = ()=>{
480
534
  children: /*#__PURE__*/ jsxRuntime.jsx(CellContent.CellContent, {
481
535
  content: row[header.name.split('.')[0]],
482
536
  rowId: row.documentId,
483
- ...header
537
+ ...header,
538
+ linkTo: header.name === rowLinkField ? {
539
+ pathname: row.documentId,
540
+ search: qs.stringify({
541
+ plugins: query.plugins
542
+ })
543
+ } : undefined
484
544
  })
485
545
  }, header.name);
486
546
  }),