@strapi/content-manager 0.0.0-experimental.f8df2d79a7853c4cc2ede1ecc22a5e7120b6a99c → 0.0.0-experimental.f9ca9ac9518346cac58a4a3a576bc9d9d795570d

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 (406) hide show
  1. package/dist/admin/components/ComponentIcon.js +3 -0
  2. package/dist/admin/components/ComponentIcon.js.map +1 -1
  3. package/dist/admin/components/ComponentIcon.mjs +3 -0
  4. package/dist/admin/components/ComponentIcon.mjs.map +1 -1
  5. package/dist/admin/components/ConfigurationForm/EditFieldForm.js +3 -2
  6. package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -1
  7. package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs +3 -2
  8. package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs.map +1 -1
  9. package/dist/admin/components/ConfigurationForm/Fields.js +4 -1
  10. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  11. package/dist/admin/components/ConfigurationForm/Fields.mjs +5 -2
  12. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  13. package/dist/admin/components/ConfigurationForm/Form.js +1 -1
  14. package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
  15. package/dist/admin/components/ConfigurationForm/Form.mjs +3 -3
  16. package/dist/admin/components/ConfigurationForm/Form.mjs.map +1 -1
  17. package/dist/admin/components/DragPreviews/CardDragPreview.js +3 -1
  18. package/dist/admin/components/DragPreviews/CardDragPreview.js.map +1 -1
  19. package/dist/admin/components/DragPreviews/CardDragPreview.mjs +3 -1
  20. package/dist/admin/components/DragPreviews/CardDragPreview.mjs.map +1 -1
  21. package/dist/admin/components/DragPreviews/ComponentDragPreview.js +3 -1
  22. package/dist/admin/components/DragPreviews/ComponentDragPreview.js.map +1 -1
  23. package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs +3 -1
  24. package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs.map +1 -1
  25. package/dist/admin/components/DragPreviews/RelationDragPreview.js +3 -1
  26. package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -1
  27. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs +3 -1
  28. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -1
  29. package/dist/admin/components/LeftMenu.js +91 -51
  30. package/dist/admin/components/LeftMenu.js.map +1 -1
  31. package/dist/admin/components/LeftMenu.mjs +93 -53
  32. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  33. package/dist/admin/components/RelativeTime.js.map +1 -1
  34. package/dist/admin/components/RelativeTime.mjs.map +1 -1
  35. package/dist/admin/components/Widgets.js +287 -11
  36. package/dist/admin/components/Widgets.js.map +1 -1
  37. package/dist/admin/components/Widgets.mjs +270 -14
  38. package/dist/admin/components/Widgets.mjs.map +1 -1
  39. package/dist/admin/content-manager.js.map +1 -1
  40. package/dist/admin/content-manager.mjs.map +1 -1
  41. package/dist/admin/history/components/HistoryAction.js.map +1 -1
  42. package/dist/admin/history/components/HistoryAction.mjs.map +1 -1
  43. package/dist/admin/history/components/VersionHeader.js +1 -0
  44. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  45. package/dist/admin/history/components/VersionHeader.mjs +1 -0
  46. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  47. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  48. package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
  49. package/dist/admin/history/components/VersionsList.js +1 -1
  50. package/dist/admin/history/components/VersionsList.js.map +1 -1
  51. package/dist/admin/history/components/VersionsList.mjs +1 -1
  52. package/dist/admin/history/components/VersionsList.mjs.map +1 -1
  53. package/dist/admin/history/pages/History.js +7 -7
  54. package/dist/admin/history/pages/History.js.map +1 -1
  55. package/dist/admin/history/pages/History.mjs +7 -7
  56. package/dist/admin/history/pages/History.mjs.map +1 -1
  57. package/dist/admin/history/services/historyVersion.js.map +1 -1
  58. package/dist/admin/history/services/historyVersion.mjs.map +1 -1
  59. package/dist/admin/hooks/useContentManagerInitData.js.map +1 -1
  60. package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -1
  61. package/dist/admin/hooks/useDocumentActions.js +24 -8
  62. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  63. package/dist/admin/hooks/useDocumentActions.mjs +25 -9
  64. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  65. package/dist/admin/index.js +45 -8
  66. package/dist/admin/index.js.map +1 -1
  67. package/dist/admin/index.mjs +46 -9
  68. package/dist/admin/index.mjs.map +1 -1
  69. package/dist/admin/layout.js +28 -33
  70. package/dist/admin/layout.js.map +1 -1
  71. package/dist/admin/layout.mjs +29 -15
  72. package/dist/admin/layout.mjs.map +1 -1
  73. package/dist/admin/pages/EditView/EditViewPage.js +21 -19
  74. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  75. package/dist/admin/pages/EditView/EditViewPage.mjs +23 -21
  76. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  77. package/dist/admin/pages/EditView/components/Blocker.js +18 -0
  78. package/dist/admin/pages/EditView/components/Blocker.js.map +1 -0
  79. package/dist/admin/pages/EditView/components/Blocker.mjs +16 -0
  80. package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -0
  81. package/dist/admin/pages/EditView/components/DocumentActions.js +29 -6
  82. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  83. package/dist/admin/pages/EditView/components/DocumentActions.mjs +30 -7
  84. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  85. package/dist/admin/pages/EditView/components/DocumentStatus.js.map +1 -1
  86. package/dist/admin/pages/EditView/components/DocumentStatus.mjs.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
  88. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -1
  89. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +66 -2
  90. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
  91. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +66 -2
  92. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
  93. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.js.map +1 -1
  94. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.mjs.map +1 -1
  95. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  96. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  97. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  98. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  99. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +2 -2
  100. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  101. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +2 -2
  102. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  103. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js.map +1 -1
  104. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs.map +1 -1
  105. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js +7 -3
  106. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js.map +1 -1
  107. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs +7 -3
  108. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs.map +1 -1
  109. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  110. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  111. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +2 -1
  112. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  113. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +3 -2
  114. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  115. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +1 -2
  116. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  117. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +1 -2
  118. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  119. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +4 -3
  120. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  121. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +5 -4
  122. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  123. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  124. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  125. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +1 -0
  126. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  127. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +1 -0
  128. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  129. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +6 -2
  130. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  131. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +7 -3
  132. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  133. package/dist/admin/pages/EditView/components/FormInputs/UID.js +2 -1
  134. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  135. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +2 -1
  136. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  137. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  138. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  139. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +2 -2
  140. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  141. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +2 -2
  142. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  143. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
  144. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -1
  145. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.js.map +1 -1
  146. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs.map +1 -1
  147. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js.map +1 -1
  148. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs.map +1 -1
  149. package/dist/admin/pages/EditView/components/FormLayout.js +13 -8
  150. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  151. package/dist/admin/pages/EditView/components/FormLayout.mjs +14 -8
  152. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  153. package/dist/admin/pages/EditView/components/Header.js +92 -27
  154. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  155. package/dist/admin/pages/EditView/components/Header.mjs +94 -29
  156. package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
  157. package/dist/admin/pages/EditView/components/InputRenderer.js +39 -24
  158. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  159. package/dist/admin/pages/EditView/components/InputRenderer.mjs +39 -24
  160. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  161. package/dist/admin/pages/EditView/utils/data.js +34 -9
  162. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  163. package/dist/admin/pages/EditView/utils/data.mjs +34 -9
  164. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  165. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +1 -0
  166. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
  167. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +1 -0
  168. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
  169. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
  170. package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs.map +1 -1
  171. package/dist/admin/pages/ListConfiguration/components/Header.js.map +1 -1
  172. package/dist/admin/pages/ListConfiguration/components/Header.mjs.map +1 -1
  173. package/dist/admin/pages/ListView/ListViewPage.js +152 -145
  174. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  175. package/dist/admin/pages/ListView/ListViewPage.mjs +153 -146
  176. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  177. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.js.map +1 -1
  178. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.mjs.map +1 -1
  179. package/dist/admin/pages/ListView/components/BulkActions/Actions.js +6 -16
  180. package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
  181. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs +6 -16
  182. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs.map +1 -1
  183. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +18 -31
  184. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  185. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +19 -32
  186. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  187. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +13 -3
  188. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  189. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +13 -3
  190. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  191. package/dist/admin/pages/ListView/components/Filters.js +7 -2
  192. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  193. package/dist/admin/pages/ListView/components/Filters.mjs +7 -2
  194. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  195. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  196. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  197. package/dist/admin/pages/ListView/components/TableCells/CellContent.js +1 -1
  198. package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
  199. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +1 -1
  200. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
  201. package/dist/admin/pages/ListView/components/TableCells/Media.js +1 -1
  202. package/dist/admin/pages/ListView/components/TableCells/Media.js.map +1 -1
  203. package/dist/admin/pages/ListView/components/TableCells/Media.mjs +1 -1
  204. package/dist/admin/pages/ListView/components/TableCells/Media.mjs.map +1 -1
  205. package/dist/admin/pages/ListView/components/TableCells/Relations.js +8 -4
  206. package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
  207. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +8 -4
  208. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
  209. package/dist/admin/pages/ListView/components/ViewSettingsMenu.js +5 -2
  210. package/dist/admin/pages/ListView/components/ViewSettingsMenu.js.map +1 -1
  211. package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs +5 -2
  212. package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs.map +1 -1
  213. package/dist/admin/preview/components/InputPopover.js +189 -0
  214. package/dist/admin/preview/components/InputPopover.js.map +1 -0
  215. package/dist/admin/preview/components/InputPopover.mjs +167 -0
  216. package/dist/admin/preview/components/InputPopover.mjs.map +1 -0
  217. package/dist/admin/preview/components/PreviewHeader.js +0 -1
  218. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  219. package/dist/admin/preview/components/PreviewHeader.mjs +0 -1
  220. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  221. package/dist/admin/preview/components/PreviewSidePanel.js +31 -4
  222. package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
  223. package/dist/admin/preview/components/PreviewSidePanel.mjs +32 -5
  224. package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
  225. package/dist/admin/preview/hooks/usePreviewInputManager.js +77 -0
  226. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -0
  227. package/dist/admin/preview/hooks/usePreviewInputManager.mjs +56 -0
  228. package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -0
  229. package/dist/admin/preview/pages/Preview.js +178 -74
  230. package/dist/admin/preview/pages/Preview.js.map +1 -1
  231. package/dist/admin/preview/pages/Preview.mjs +180 -76
  232. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  233. package/dist/admin/preview/services/preview.js.map +1 -1
  234. package/dist/admin/preview/services/preview.mjs.map +1 -1
  235. package/dist/admin/preview/utils/constants.js +56 -0
  236. package/dist/admin/preview/utils/constants.js.map +1 -0
  237. package/dist/admin/preview/utils/constants.mjs +52 -0
  238. package/dist/admin/preview/utils/constants.mjs.map +1 -0
  239. package/dist/admin/preview/utils/fieldUtils.js +107 -0
  240. package/dist/admin/preview/utils/fieldUtils.js.map +1 -0
  241. package/dist/admin/preview/utils/fieldUtils.mjs +102 -0
  242. package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -0
  243. package/dist/admin/preview/utils/getSendMessage.js +22 -0
  244. package/dist/admin/preview/utils/getSendMessage.js.map +1 -0
  245. package/dist/admin/preview/utils/getSendMessage.mjs +20 -0
  246. package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -0
  247. package/dist/admin/preview/utils/previewScript.js +534 -0
  248. package/dist/admin/preview/utils/previewScript.js.map +1 -0
  249. package/dist/admin/preview/utils/previewScript.mjs +532 -0
  250. package/dist/admin/preview/utils/previewScript.mjs.map +1 -0
  251. package/dist/admin/router.js.map +1 -1
  252. package/dist/admin/router.mjs.map +1 -1
  253. package/dist/admin/services/api.js +4 -1
  254. package/dist/admin/services/api.js.map +1 -1
  255. package/dist/admin/services/api.mjs +4 -1
  256. package/dist/admin/services/api.mjs.map +1 -1
  257. package/dist/admin/services/documents.js +57 -15
  258. package/dist/admin/services/documents.js.map +1 -1
  259. package/dist/admin/services/documents.mjs +57 -15
  260. package/dist/admin/services/documents.mjs.map +1 -1
  261. package/dist/admin/services/homepage.js.map +1 -1
  262. package/dist/admin/services/homepage.mjs.map +1 -1
  263. package/dist/admin/services/relations.js.map +1 -1
  264. package/dist/admin/services/relations.mjs.map +1 -1
  265. package/dist/admin/src/components/LeftMenu.d.ts +3 -1
  266. package/dist/admin/src/components/Widgets.d.ts +8 -3
  267. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  268. package/dist/admin/src/pages/EditView/components/Blocker.d.ts +5 -0
  269. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/links.d.ts +2 -0
  270. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +0 -3
  271. package/dist/admin/src/pages/EditView/components/Header.d.ts +15 -0
  272. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  273. package/dist/admin/src/pages/ListView/components/TableCells/Relations.d.ts +0 -3
  274. package/dist/admin/src/preview/components/InputPopover.d.ts +6 -0
  275. package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +5 -0
  276. package/dist/admin/src/preview/pages/Preview.d.ts +12 -0
  277. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  278. package/dist/admin/src/preview/utils/constants.d.ts +55 -0
  279. package/dist/admin/src/preview/utils/fieldUtils.d.ts +22 -0
  280. package/dist/admin/src/preview/utils/getSendMessage.d.ts +11 -0
  281. package/dist/admin/src/preview/utils/previewScript.d.ts +24 -0
  282. package/dist/admin/src/services/api.d.ts +1 -1
  283. package/dist/admin/src/services/components.d.ts +2 -2
  284. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  285. package/dist/admin/src/services/documents.d.ts +16 -16
  286. package/dist/admin/src/services/homepage.d.ts +1 -1
  287. package/dist/admin/src/services/init.d.ts +1 -1
  288. package/dist/admin/src/services/relations.d.ts +2 -2
  289. package/dist/admin/src/services/uid.d.ts +3 -3
  290. package/dist/admin/src/utils/api.d.ts +1 -1
  291. package/dist/admin/translations/en.json.js +12 -0
  292. package/dist/admin/translations/en.json.js.map +1 -1
  293. package/dist/admin/translations/en.json.mjs +12 -0
  294. package/dist/admin/translations/en.json.mjs.map +1 -1
  295. package/dist/admin/translations/es.json.js +6 -2
  296. package/dist/admin/translations/es.json.js.map +1 -1
  297. package/dist/admin/translations/es.json.mjs +6 -2
  298. package/dist/admin/translations/es.json.mjs.map +1 -1
  299. package/dist/admin/translations/fr.json.js +6 -2
  300. package/dist/admin/translations/fr.json.js.map +1 -1
  301. package/dist/admin/translations/fr.json.mjs +6 -2
  302. package/dist/admin/translations/fr.json.mjs.map +1 -1
  303. package/dist/admin/utils/api.js +1 -1
  304. package/dist/admin/utils/api.js.map +1 -1
  305. package/dist/admin/utils/api.mjs +1 -1
  306. package/dist/admin/utils/api.mjs.map +1 -1
  307. package/dist/admin/utils/translations.js.map +1 -1
  308. package/dist/admin/utils/translations.mjs.map +1 -1
  309. package/dist/admin/utils/urls.js.map +1 -1
  310. package/dist/admin/utils/urls.mjs.map +1 -1
  311. package/dist/admin/utils/users.js.map +1 -1
  312. package/dist/admin/utils/users.mjs.map +1 -1
  313. package/dist/admin/utils/validation.js +2 -1
  314. package/dist/admin/utils/validation.js.map +1 -1
  315. package/dist/admin/utils/validation.mjs +2 -1
  316. package/dist/admin/utils/validation.mjs.map +1 -1
  317. package/dist/server/controllers/collection-types.js +2 -1
  318. package/dist/server/controllers/collection-types.js.map +1 -1
  319. package/dist/server/controllers/collection-types.mjs +2 -1
  320. package/dist/server/controllers/collection-types.mjs.map +1 -1
  321. package/dist/server/controllers/relations.js +6 -4
  322. package/dist/server/controllers/relations.js.map +1 -1
  323. package/dist/server/controllers/relations.mjs +6 -4
  324. package/dist/server/controllers/relations.mjs.map +1 -1
  325. package/dist/server/controllers/single-types.js +3 -1
  326. package/dist/server/controllers/single-types.js.map +1 -1
  327. package/dist/server/controllers/single-types.mjs +3 -1
  328. package/dist/server/controllers/single-types.mjs.map +1 -1
  329. package/dist/server/controllers/validation/dimensions.js.map +1 -1
  330. package/dist/server/controllers/validation/dimensions.mjs.map +1 -1
  331. package/dist/server/controllers/validation/index.js.map +1 -1
  332. package/dist/server/controllers/validation/index.mjs.map +1 -1
  333. package/dist/server/controllers/validation/model-configuration.js +2 -2
  334. package/dist/server/controllers/validation/model-configuration.js.map +1 -1
  335. package/dist/server/controllers/validation/model-configuration.mjs +2 -2
  336. package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
  337. package/dist/server/history/services/lifecycles.js +20 -19
  338. package/dist/server/history/services/lifecycles.js.map +1 -1
  339. package/dist/server/history/services/lifecycles.mjs +20 -19
  340. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  341. package/dist/server/history/utils.js.map +1 -1
  342. package/dist/server/history/utils.mjs.map +1 -1
  343. package/dist/server/homepage/controllers/homepage.js +5 -0
  344. package/dist/server/homepage/controllers/homepage.js.map +1 -1
  345. package/dist/server/homepage/controllers/homepage.mjs +5 -0
  346. package/dist/server/homepage/controllers/homepage.mjs.map +1 -1
  347. package/dist/server/homepage/routes/homepage.js +11 -0
  348. package/dist/server/homepage/routes/homepage.js.map +1 -1
  349. package/dist/server/homepage/routes/homepage.mjs +11 -0
  350. package/dist/server/homepage/routes/homepage.mjs.map +1 -1
  351. package/dist/server/homepage/services/homepage.js +33 -1
  352. package/dist/server/homepage/services/homepage.js.map +1 -1
  353. package/dist/server/homepage/services/homepage.mjs +33 -1
  354. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  355. package/dist/server/middlewares/routing.js.map +1 -1
  356. package/dist/server/middlewares/routing.mjs.map +1 -1
  357. package/dist/server/preview/services/preview-config.js +11 -32
  358. package/dist/server/preview/services/preview-config.js.map +1 -1
  359. package/dist/server/preview/services/preview-config.mjs +12 -33
  360. package/dist/server/preview/services/preview-config.mjs.map +1 -1
  361. package/dist/server/preview/services/preview.js +4 -0
  362. package/dist/server/preview/services/preview.js.map +1 -1
  363. package/dist/server/preview/services/preview.mjs +4 -0
  364. package/dist/server/preview/services/preview.mjs.map +1 -1
  365. package/dist/server/preview/utils.js.map +1 -1
  366. package/dist/server/preview/utils.mjs.map +1 -1
  367. package/dist/server/services/configuration.js.map +1 -1
  368. package/dist/server/services/configuration.mjs.map +1 -1
  369. package/dist/server/services/document-metadata.js +23 -1
  370. package/dist/server/services/document-metadata.js.map +1 -1
  371. package/dist/server/services/document-metadata.mjs +23 -1
  372. package/dist/server/services/document-metadata.mjs.map +1 -1
  373. package/dist/server/services/field-sizes.js.map +1 -1
  374. package/dist/server/services/field-sizes.mjs.map +1 -1
  375. package/dist/server/services/uid.js.map +1 -1
  376. package/dist/server/services/uid.mjs.map +1 -1
  377. package/dist/server/services/utils/store.js.map +1 -1
  378. package/dist/server/services/utils/store.mjs.map +1 -1
  379. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  380. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  381. package/dist/server/src/controllers/single-types.d.ts.map +1 -1
  382. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  383. package/dist/server/src/homepage/controllers/homepage.d.ts +2 -1
  384. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -1
  385. package/dist/server/src/homepage/index.d.ts +5 -0
  386. package/dist/server/src/homepage/index.d.ts.map +1 -1
  387. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -1
  388. package/dist/server/src/homepage/services/homepage.d.ts +2 -1
  389. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  390. package/dist/server/src/homepage/services/index.d.ts +5 -0
  391. package/dist/server/src/homepage/services/index.d.ts.map +1 -1
  392. package/dist/server/src/index.d.ts +5 -0
  393. package/dist/server/src/index.d.ts.map +1 -1
  394. package/dist/server/src/preview/services/index.d.ts +1 -0
  395. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  396. package/dist/server/src/preview/services/preview-config.d.ts +1 -0
  397. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  398. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  399. package/dist/server/src/preview/utils.d.ts +1 -0
  400. package/dist/server/src/preview/utils.d.ts.map +1 -1
  401. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  402. package/dist/server/src/services/index.d.ts +5 -0
  403. package/dist/server/src/services/index.d.ts.map +1 -1
  404. package/dist/shared/contracts/homepage.d.ts +13 -0
  405. package/dist/shared/contracts/homepage.d.ts.map +1 -1
  406. package/package.json +8 -9
@@ -1 +1 @@
1
- {"version":3,"file":"Filters.js","sources":["../../../../../admin/src/pages/ListView/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Filters,\n useField,\n useAuth,\n useTracking,\n useQueryParams,\n useAdminUsers,\n} from '@strapi/admin/strapi-admin';\nimport { Combobox, ComboboxOption, useCollator } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { useContentTypeSchema } from '../../../hooks/useContentTypeSchema';\nimport { useDebounce } from '../../../hooks/useDebounce';\nimport { Schema } from '../../../hooks/useDocument';\nimport { useGetContentTypeConfigurationQuery } from '../../../services/contentTypes';\nimport { getMainField } from '../../../utils/attributes';\nimport { getDisplayName } from '../../../utils/users';\n\n/**\n * If new attributes are added, this list needs to be updated.\n */\nconst NOT_ALLOWED_FILTERS = [\n 'json',\n 'component',\n 'media',\n 'richtext',\n 'dynamiczone',\n 'password',\n 'blocks',\n];\nconst DEFAULT_ALLOWED_FILTERS = ['createdAt', 'updatedAt'];\nconst USER_FILTER_ATTRIBUTES = [...CREATOR_FIELDS, 'strapi_assignee'];\n\n/* -------------------------------------------------------------------------------------------------\n * Filters\n * -----------------------------------------------------------------------------------------------*/\ninterface FiltersProps {\n disabled?: boolean;\n schema: Schema;\n}\n\nconst FiltersImpl = ({ disabled, schema }: FiltersProps) => {\n const { attributes, uid: model, options } = schema;\n const { formatMessage, locale } = useIntl();\n const { trackUsage } = useTracking();\n const allPermissions = useAuth('FiltersImpl', (state) => state.permissions);\n const [{ query }] = useQueryParams<Filters.Query>();\n const { schemas } = useContentTypeSchema();\n\n const canReadAdminUsers = React.useMemo(\n () =>\n allPermissions.filter(\n (permission) => permission.action === 'admin::users.read' && permission.subject === null\n ).length > 0,\n [allPermissions]\n );\n\n const selectedUserIds = (query?.filters?.$and ?? []).reduce<string[]>((acc, filter) => {\n const [key, value] = Object.entries(filter)[0];\n if (typeof value.id !== 'object') {\n return acc;\n }\n\n const id = value.id.$eq || value.id.$ne;\n\n if (id && USER_FILTER_ATTRIBUTES.includes(key) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []);\n\n const { data: userData, isLoading: isLoadingAdminUsers } = useAdminUsers(\n { filters: { id: { $in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n skip: selectedUserIds.length === 0 || !canReadAdminUsers,\n }\n );\n\n const { users = [] } = userData ?? {};\n\n const { metadata } = useGetContentTypeConfigurationQuery(model, {\n selectFromResult: ({ data }) => ({ metadata: data?.contentType.metadatas ?? {} }),\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedFilters = React.useMemo(() => {\n const [{ properties: { fields = [] } = { fields: [] } }] = allPermissions.filter(\n (permission) =>\n permission.action === 'plugin::content-manager.explorer.read' &&\n permission.subject === model\n );\n\n const allowedFields = fields.filter((field) => {\n const attribute = attributes[field] ?? {};\n\n return attribute.type && !NOT_ALLOWED_FILTERS.includes(attribute.type);\n });\n\n return (\n [\n 'id',\n 'documentId',\n ...allowedFields,\n ...DEFAULT_ALLOWED_FILTERS,\n ...(canReadAdminUsers ? CREATOR_FIELDS : []),\n ]\n .map((name) => {\n const attribute = attributes[name];\n\n if (NOT_ALLOWED_FILTERS.includes(attribute.type)) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = metadata[name].list;\n\n let filter: Filters.Filter = {\n name,\n label: label ?? '',\n mainField: getMainField(attribute, mainFieldName, { schemas, components: {} }),\n // @ts-expect-error – TODO: this is filtered out above in the `allowedFields` call but TS complains, is there a better way to solve this?\n type: attribute.type,\n };\n\n if (\n attribute.type === 'relation' &&\n 'target' in attribute &&\n attribute.target === 'admin::user'\n ) {\n filter = {\n ...filter,\n input: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n })),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ],\n mainField: {\n name: 'id',\n type: 'integer',\n },\n };\n }\n\n if (attribute.type === 'enumeration') {\n filter = {\n ...filter,\n options: attribute.enum.map((value) => ({\n label: value,\n value,\n })),\n };\n }\n\n return filter;\n })\n .filter(Boolean) as Filters.Filter[]\n ).toSorted((a, b) => formatter.compare(a.label, b.label));\n }, [\n allPermissions,\n canReadAdminUsers,\n model,\n attributes,\n metadata,\n schemas,\n users,\n formatMessage,\n formatter,\n ]);\n\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n trackUsage('willFilterEntries');\n }\n };\n\n const handleFilterChange: Filters.Props['onChange'] = (data) => {\n const attribute = attributes[data.name];\n\n if (attribute) {\n trackUsage('didFilterEntries', {\n useRelation: attribute.type === 'relation',\n });\n }\n };\n\n return (\n <Filters.Root\n disabled={disabled}\n options={displayedFilters}\n onOpenChange={onOpenChange}\n onChange={handleFilterChange}\n >\n <Filters.Trigger />\n <Filters.Popover />\n <Filters.List />\n </Filters.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AdminUsersFilter\n * -----------------------------------------------------------------------------------------------*/\n\nconst AdminUsersFilter = ({ name }: Filters.ValueInputProps) => {\n const [pageSize, setPageSize] = React.useState(10);\n const [search, setSearch] = React.useState('');\n const { formatMessage } = useIntl();\n\n const debouncedSearch = useDebounce(search, 300);\n\n const { data, isLoading } = useAdminUsers({\n pageSize,\n _q: debouncedSearch,\n });\n const field = useField(name);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPageSize(10);\n }\n };\n\n const { users = [], pagination } = data ?? {};\n const { pageCount = 1, page = 1 } = pagination ?? {};\n\n return (\n <Combobox\n value={field.value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select a user to filter',\n })}\n onOpenChange={handleOpenChange}\n onChange={(value) => field.onChange(name, value)}\n loading={isLoading}\n onLoadMore={() => setPageSize(pageSize + 10)}\n hasMoreItems={page < pageCount}\n onInputChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n }}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nexport { FiltersImpl as Filters };\nexport type { FiltersProps };\n"],"names":["NOT_ALLOWED_FILTERS","DEFAULT_ALLOWED_FILTERS","USER_FILTER_ATTRIBUTES","CREATOR_FIELDS","FiltersImpl","disabled","schema","attributes","uid","model","options","formatMessage","locale","useIntl","trackUsage","useTracking","allPermissions","useAuth","state","permissions","query","useQueryParams","schemas","useContentTypeSchema","canReadAdminUsers","React","useMemo","filter","permission","action","subject","length","selectedUserIds","filters","$and","reduce","acc","key","value","Object","entries","id","$eq","$ne","includes","push","data","userData","isLoading","isLoadingAdminUsers","useAdminUsers","$in","skip","users","metadata","useGetContentTypeConfigurationQuery","selectFromResult","contentType","metadatas","formatter","useCollator","sensitivity","displayedFilters","properties","fields","allowedFields","field","attribute","type","map","name","mainField","mainFieldName","label","list","getMainField","components","target","input","AdminUsersFilter","user","getDisplayName","toString","operators","defaultMessage","enum","Boolean","toSorted","a","b","compare","onOpenChange","isOpen","handleFilterChange","useRelation","_jsxs","Filters","Root","onChange","_jsx","Trigger","Popover","List","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","_q","useField","handleOpenChange","pagination","pageCount","page","Combobox","aria-label","loading","onLoadMore","hasMoreItems","onInputChange","e","currentTarget","ComboboxOption"],"mappings":"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"}
1
+ {"version":3,"file":"Filters.js","sources":["../../../../../admin/src/pages/ListView/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Filters,\n useField,\n useAuth,\n useTracking,\n useQueryParams,\n useAdminUsers,\n} from '@strapi/admin/strapi-admin';\nimport { Combobox, ComboboxOption, useCollator } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { useContentTypeSchema } from '../../../hooks/useContentTypeSchema';\nimport { useDebounce } from '../../../hooks/useDebounce';\nimport { Schema } from '../../../hooks/useDocument';\nimport { useGetContentTypeConfigurationQuery } from '../../../services/contentTypes';\nimport { getMainField } from '../../../utils/attributes';\nimport { getDisplayName } from '../../../utils/users';\n\n/**\n * If new attributes are added, this list needs to be updated.\n */\nconst NOT_ALLOWED_FILTERS = [\n 'json',\n 'component',\n 'media',\n 'richtext',\n 'dynamiczone',\n 'password',\n 'blocks',\n];\nconst DEFAULT_ALLOWED_FILTERS = ['createdAt', 'updatedAt'];\nconst USER_FILTER_ATTRIBUTES = [...CREATOR_FIELDS, 'strapi_assignee'];\n\n/* -------------------------------------------------------------------------------------------------\n * Filters\n * -----------------------------------------------------------------------------------------------*/\ninterface FiltersProps {\n disabled?: boolean;\n schema: Schema;\n}\n\nconst FiltersImpl = ({ disabled, schema }: FiltersProps) => {\n const { attributes, uid: model, options } = schema;\n const { formatMessage, locale } = useIntl();\n const { trackUsage } = useTracking();\n const allPermissions = useAuth('FiltersImpl', (state) => state.permissions);\n const [{ query }] = useQueryParams<Filters.Query>();\n const { schemas } = useContentTypeSchema();\n\n const canReadAdminUsers = React.useMemo(\n () =>\n allPermissions.filter(\n (permission) => permission.action === 'admin::users.read' && permission.subject === null\n ).length > 0,\n [allPermissions]\n );\n\n const selectedUserIds = (query?.filters?.$and ?? []).reduce<string[]>((acc, filter) => {\n const [key, value] = Object.entries(filter)[0];\n if (typeof value.id !== 'object') {\n return acc;\n }\n\n const id = value.id.$eq || value.id.$ne;\n\n // Check if the attribute is a relation to admin::user\n const attribute = attributes[key];\n const isAdminUserRelation =\n attribute?.type === 'relation' && 'target' in attribute && attribute.target === 'admin::user';\n\n if (id && (isAdminUserRelation || USER_FILTER_ATTRIBUTES.includes(key)) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []);\n\n const { data: userData, isLoading: isLoadingAdminUsers } = useAdminUsers(\n { filters: { id: { $in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n skip: selectedUserIds.length === 0 || !canReadAdminUsers,\n }\n );\n\n const { users = [] } = userData ?? {};\n\n const { metadata } = useGetContentTypeConfigurationQuery(model, {\n selectFromResult: ({ data }) => ({ metadata: data?.contentType.metadatas ?? {} }),\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedFilters = React.useMemo(() => {\n const [{ properties: { fields = [] } = { fields: [] } }] = allPermissions.filter(\n (permission) =>\n permission.action === 'plugin::content-manager.explorer.read' &&\n permission.subject === model\n );\n\n const allowedFields = fields.filter((field) => {\n const attribute = attributes[field] ?? {};\n\n return attribute.type && !NOT_ALLOWED_FILTERS.includes(attribute.type);\n });\n\n return (\n [\n 'id',\n 'documentId',\n ...allowedFields,\n ...DEFAULT_ALLOWED_FILTERS,\n ...(canReadAdminUsers ? CREATOR_FIELDS : []),\n ]\n .map((name) => {\n const attribute = attributes[name];\n\n if (NOT_ALLOWED_FILTERS.includes(attribute.type)) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = metadata[name].list;\n\n let filter: Filters.Filter = {\n name,\n label: label ?? '',\n mainField: getMainField(attribute, mainFieldName, { schemas, components: {} }),\n // @ts-expect-error – TODO: this is filtered out above in the `allowedFields` call but TS complains, is there a better way to solve this?\n type: attribute.type,\n };\n\n if (\n attribute.type === 'relation' &&\n 'target' in attribute &&\n attribute.target === 'admin::user'\n ) {\n filter = {\n ...filter,\n input: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n })),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ],\n mainField: {\n name: 'id',\n type: 'integer',\n },\n };\n }\n\n if (attribute.type === 'enumeration') {\n filter = {\n ...filter,\n options: attribute.enum.map((value) => ({\n label: value,\n value,\n })),\n };\n }\n\n return filter;\n })\n .filter(Boolean) as Filters.Filter[]\n ).toSorted((a, b) => formatter.compare(a.label, b.label));\n }, [\n allPermissions,\n canReadAdminUsers,\n model,\n attributes,\n metadata,\n schemas,\n users,\n formatMessage,\n formatter,\n ]);\n\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n trackUsage('willFilterEntries');\n }\n };\n\n const handleFilterChange: Filters.Props['onChange'] = (data) => {\n const attribute = attributes[data.name];\n\n if (attribute) {\n trackUsage('didFilterEntries', {\n useRelation: attribute.type === 'relation',\n });\n }\n };\n\n return (\n <Filters.Root\n disabled={disabled}\n options={displayedFilters}\n onOpenChange={onOpenChange}\n onChange={handleFilterChange}\n >\n <Filters.Trigger />\n <Filters.Popover zIndex={499} />\n <Filters.List />\n </Filters.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AdminUsersFilter\n * -----------------------------------------------------------------------------------------------*/\n\nconst AdminUsersFilter = ({ name }: Filters.ValueInputProps) => {\n const [pageSize, setPageSize] = React.useState(10);\n const [search, setSearch] = React.useState('');\n const { formatMessage } = useIntl();\n\n const debouncedSearch = useDebounce(search, 300);\n\n const { data, isLoading } = useAdminUsers({\n pageSize,\n _q: debouncedSearch,\n });\n const field = useField(name);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPageSize(10);\n }\n };\n\n const { users = [], pagination } = data ?? {};\n const { pageCount = 1, page = 1 } = pagination ?? {};\n\n return (\n <Combobox\n value={field.value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select a user to filter',\n })}\n onOpenChange={handleOpenChange}\n onChange={(value) => field.onChange(name, value)}\n loading={isLoading}\n onLoadMore={() => setPageSize(pageSize + 10)}\n hasMoreItems={page < pageCount}\n onInputChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n }}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nexport { FiltersImpl as Filters };\nexport type { FiltersProps };\n"],"names":["NOT_ALLOWED_FILTERS","DEFAULT_ALLOWED_FILTERS","USER_FILTER_ATTRIBUTES","CREATOR_FIELDS","FiltersImpl","disabled","schema","attributes","uid","model","options","formatMessage","locale","useIntl","trackUsage","useTracking","allPermissions","useAuth","state","permissions","query","useQueryParams","schemas","useContentTypeSchema","canReadAdminUsers","React","useMemo","filter","permission","action","subject","length","selectedUserIds","filters","$and","reduce","acc","key","value","Object","entries","id","$eq","$ne","attribute","isAdminUserRelation","type","target","includes","push","data","userData","isLoading","isLoadingAdminUsers","useAdminUsers","$in","skip","users","metadata","useGetContentTypeConfigurationQuery","selectFromResult","contentType","metadatas","formatter","useCollator","sensitivity","displayedFilters","properties","fields","allowedFields","field","map","name","mainField","mainFieldName","label","list","getMainField","components","input","AdminUsersFilter","user","getDisplayName","toString","operators","defaultMessage","enum","Boolean","toSorted","a","b","compare","onOpenChange","isOpen","handleFilterChange","useRelation","_jsxs","Filters","Root","onChange","_jsx","Trigger","Popover","zIndex","List","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","_q","useField","handleOpenChange","pagination","pageCount","page","Combobox","aria-label","loading","onLoadMore","hasMoreItems","onInputChange","e","currentTarget","ComboboxOption"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA;;AAEC,IACD,MAAMA,mBAAsB,GAAA;AAC1B,IAAA,MAAA;AACA,IAAA,WAAA;AACA,IAAA,OAAA;AACA,IAAA,UAAA;AACA,IAAA,aAAA;AACA,IAAA,UAAA;AACA,IAAA;AACD,CAAA;AACD,MAAMC,uBAA0B,GAAA;AAAC,IAAA,WAAA;AAAa,IAAA;AAAY,CAAA;AAC1D,MAAMC,sBAAyB,GAAA;AAAIC,IAAAA,GAAAA,yBAAAA;AAAgB,IAAA;AAAkB,CAAA;AAUrE,MAAMC,cAAc,CAAC,EAAEC,QAAQ,EAAEC,MAAM,EAAgB,GAAA;IACrD,MAAM,cAAEC,YAAU,EAAEC,GAAAA,EAAKC,KAAK,EAAEC,OAAO,EAAE,GAAGJ,MAAAA;AAC5C,IAAA,MAAM,EAAEK,aAAa,EAAEC,MAAM,EAAE,GAAGC,iBAAAA,EAAAA;IAClC,MAAM,EAAEC,UAAU,EAAE,GAAGC,uBAAAA,EAAAA;AACvB,IAAA,MAAMC,iBAAiBC,mBAAQ,CAAA,aAAA,EAAe,CAACC,KAAAA,GAAUA,MAAMC,WAAW,CAAA;AAC1E,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,0BAAAA,EAAAA;IACpB,MAAM,EAAEC,OAAO,EAAE,GAAGC,yCAAAA,EAAAA;IAEpB,MAAMC,iBAAAA,GAAoBC,iBAAMC,OAAO,CACrC,IACEV,cAAeW,CAAAA,MAAM,CACnB,CAACC,UAAAA,GAAeA,WAAWC,MAAM,KAAK,uBAAuBD,UAAWE,CAAAA,OAAO,KAAK,IACpFC,CAAAA,CAAAA,MAAM,GAAG,CACb,EAAA;AAACf,QAAAA;AAAe,KAAA,CAAA;AAGlB,IAAA,MAAMgB,eAAkB,GAACZ,CAAAA,KAAAA,EAAOa,OAASC,EAAAA,IAAAA,IAAQ,EAAC,EAAGC,MAAM,CAAW,CAACC,GAAKT,EAAAA,MAAAA,GAAAA;QAC1E,MAAM,CAACU,KAAKC,KAAM,CAAA,GAAGC,OAAOC,OAAO,CAACb,MAAO,CAAA,CAAC,CAAE,CAAA;AAC9C,QAAA,IAAI,OAAOW,KAAAA,CAAMG,EAAE,KAAK,QAAU,EAAA;YAChC,OAAOL,GAAAA;AACT;QAEA,MAAMK,EAAAA,GAAKH,MAAMG,EAAE,CAACC,GAAG,IAAIJ,KAAAA,CAAMG,EAAE,CAACE,GAAG;;QAGvC,MAAMC,SAAAA,GAAYrC,YAAU,CAAC8B,GAAI,CAAA;QACjC,MAAMQ,mBAAAA,GACJD,WAAWE,IAAS,KAAA,UAAA,IAAc,YAAYF,SAAaA,IAAAA,SAAAA,CAAUG,MAAM,KAAK,aAAA;AAElF,QAAA,IAAIN,EAAOI,KAAAA,mBAAuB3C,IAAAA,sBAAAA,CAAuB8C,QAAQ,CAACX,GAAG,CAAA,CAAA,IAAM,CAACD,GAAAA,CAAIY,QAAQ,CAACP,EAAK,CAAA,EAAA;AAC5FL,YAAAA,GAAAA,CAAIa,IAAI,CAACR,EAAAA,CAAAA;AACX;QAEA,OAAOL,GAAAA;AACT,KAAA,EAAG,EAAE,CAAA;IAEL,MAAM,EAAEc,MAAMC,QAAQ,EAAEC,WAAWC,mBAAmB,EAAE,GAAGC,yBACzD,CAAA;QAAErB,OAAS,EAAA;YAAEQ,EAAI,EAAA;gBAAEc,GAAKvB,EAAAA;AAAgB;AAAE;KAC1C,EAAA;;;AAGEwB,QAAAA,IAAAA,EAAMxB,eAAgBD,CAAAA,MAAM,KAAK,CAAA,IAAK,CAACP;AACzC,KAAA,CAAA;AAGF,IAAA,MAAM,SAAEiC,OAAQ,GAAA,EAAE,EAAE,GAAGN,YAAY,EAAC;AAEpC,IAAA,MAAM,EAAEO,QAAQ,EAAE,GAAGC,iDAAoClD,KAAO,EAAA;AAC9DmD,QAAAA,gBAAAA,EAAkB,CAAC,EAAEV,IAAI,EAAE,IAAM;gBAAEQ,QAAUR,EAAAA,IAAAA,EAAMW,WAAYC,CAAAA,SAAAA,IAAa;aAAG;AACjF,KAAA,CAAA;IAEA,MAAMC,SAAAA,GAAYC,yBAAYpD,MAAQ,EAAA;QACpCqD,WAAa,EAAA;AACf,KAAA,CAAA;IAEA,MAAMC,gBAAAA,GAAmBzC,gBAAMC,CAAAA,OAAO,CAAC,IAAA;AACrC,QAAA,MAAM,CAAC,EAAEyC,UAAAA,EAAY,EAAEC,MAAS,GAAA,EAAE,EAAE,GAAG;AAAEA,YAAAA,MAAAA,EAAQ;AAAG,SAAC,EAAE,CAAC,GAAGpD,cAAAA,CAAeW,MAAM,CAC9E,CAACC,UACCA,GAAAA,UAAAA,CAAWC,MAAM,KAAK,uCACtBD,IAAAA,UAAAA,CAAWE,OAAO,KAAKrB,KAAAA,CAAAA;AAG3B,QAAA,MAAM4D,aAAgBD,GAAAA,MAAAA,CAAOzC,MAAM,CAAC,CAAC2C,KAAAA,GAAAA;AACnC,YAAA,MAAM1B,SAAYrC,GAAAA,YAAU,CAAC+D,KAAAA,CAAM,IAAI,EAAC;YAExC,OAAO1B,SAAAA,CAAUE,IAAI,IAAI,CAAC9C,oBAAoBgD,QAAQ,CAACJ,UAAUE,IAAI,CAAA;AACvE,SAAA,CAAA;AAEA,QAAA,OAAO;AAEH,YAAA,IAAA;AACA,YAAA,YAAA;AACGuB,YAAAA,GAAAA,aAAAA;AACApE,YAAAA,GAAAA,uBAAAA;AACCuB,YAAAA,GAAAA,iBAAAA,GAAoBrB,4BAAiB;SAC1C,CACEoE,GAAG,CAAC,CAACC,IAAAA,GAAAA;YACJ,MAAM5B,SAAAA,GAAYrC,YAAU,CAACiE,IAAK,CAAA;AAElC,YAAA,IAAIxE,mBAAoBgD,CAAAA,QAAQ,CAACJ,SAAAA,CAAUE,IAAI,CAAG,EAAA;gBAChD,OAAO,IAAA;AACT;AAEA,YAAA,MAAM,EAAE2B,SAAAA,EAAWC,aAAgB,GAAA,EAAE,EAAEC,KAAK,EAAE,GAAGjB,QAAQ,CAACc,IAAK,CAAA,CAACI,IAAI;AAEpE,YAAA,IAAIjD,MAAyB,GAAA;AAC3B6C,gBAAAA,IAAAA;AACAG,gBAAAA,KAAAA,EAAOA,KAAS,IAAA,EAAA;gBAChBF,SAAWI,EAAAA,yBAAAA,CAAajC,WAAW8B,aAAe,EAAA;AAAEpD,oBAAAA,OAAAA;AAASwD,oBAAAA,UAAAA,EAAY;AAAG,iBAAA,CAAA;;AAE5EhC,gBAAAA,IAAAA,EAAMF,UAAUE;AAClB,aAAA;YAEA,IACEF,SAAAA,CAAUE,IAAI,KAAK,UAAA,IACnB,YAAYF,SACZA,IAAAA,SAAAA,CAAUG,MAAM,KAAK,aACrB,EAAA;gBACApB,MAAS,GAAA;AACP,oBAAA,GAAGA,MAAM;oBACToD,KAAOC,EAAAA,gBAAAA;AACPtE,oBAAAA,OAAAA,EAAS+C,OAAMc,CAAAA,GAAG,CAAC,CAACU,QAAU;AAC5BN,4BAAAA,KAAAA,EAAOO,oBAAeD,CAAAA,IAAAA,CAAAA;4BACtB3C,KAAO2C,EAAAA,IAAAA,CAAKxC,EAAE,CAAC0C,QAAQ;yBACzB,CAAA,CAAA;oBACAC,SAAW,EAAA;AACT,wBAAA;AACET,4BAAAA,KAAAA,EAAOhE,aAAc,CAAA;gCACnB8B,EAAI,EAAA,2CAAA;gCACJ4C,cAAgB,EAAA;AAClB,6BAAA,CAAA;4BACA/C,KAAO,EAAA;AACT,yBAAA;AACA,wBAAA;AACEqC,4BAAAA,KAAAA,EAAOhE,aAAc,CAAA;gCACnB8B,EAAI,EAAA,2CAAA;gCACJ4C,cAAgB,EAAA;AAClB,6BAAA,CAAA;4BACA/C,KAAO,EAAA;AACT;AACD,qBAAA;oBACDmC,SAAW,EAAA;wBACTD,IAAM,EAAA,IAAA;wBACN1B,IAAM,EAAA;AACR;AACF,iBAAA;AACF;YAEA,IAAIF,SAAAA,CAAUE,IAAI,KAAK,aAAe,EAAA;gBACpCnB,MAAS,GAAA;AACP,oBAAA,GAAGA,MAAM;AACTjB,oBAAAA,OAAAA,EAASkC,UAAU0C,IAAI,CAACf,GAAG,CAAC,CAACjC,SAAW;4BACtCqC,KAAOrC,EAAAA,KAAAA;AACPA,4BAAAA;yBACF,CAAA;AACF,iBAAA;AACF;YAEA,OAAOX,MAAAA;AACT,SAAA,CAAA,CACCA,MAAM,CAAC4D,OACVC,CAAAA,CAAAA,QAAQ,CAAC,CAACC,CAAAA,EAAGC,CAAM3B,GAAAA,SAAAA,CAAU4B,OAAO,CAACF,CAAAA,CAAEd,KAAK,EAAEe,EAAEf,KAAK,CAAA,CAAA;KACtD,EAAA;AACD3D,QAAAA,cAAAA;AACAQ,QAAAA,iBAAAA;AACAf,QAAAA,KAAAA;AACAF,QAAAA,YAAAA;AACAmD,QAAAA,QAAAA;AACApC,QAAAA,OAAAA;AACAmC,QAAAA,OAAAA;AACA9C,QAAAA,aAAAA;AACAoD,QAAAA;AACD,KAAA,CAAA;AAED,IAAA,MAAM6B,eAAe,CAACC,MAAAA,GAAAA;AACpB,QAAA,IAAIA,MAAQ,EAAA;YACV/E,UAAW,CAAA,mBAAA,CAAA;AACb;AACF,KAAA;AAEA,IAAA,MAAMgF,qBAAgD,CAAC5C,IAAAA,GAAAA;AACrD,QAAA,MAAMN,SAAYrC,GAAAA,YAAU,CAAC2C,IAAAA,CAAKsB,IAAI,CAAC;AAEvC,QAAA,IAAI5B,SAAW,EAAA;AACb9B,YAAAA,UAAAA,CAAW,kBAAoB,EAAA;gBAC7BiF,WAAanD,EAAAA,SAAAA,CAAUE,IAAI,KAAK;AAClC,aAAA,CAAA;AACF;AACF,KAAA;IAEA,qBACEkD,eAAA,CAACC,oBAAQC,IAAI,EAAA;QACX7F,QAAUA,EAAAA,QAAAA;QACVK,OAASwD,EAAAA,gBAAAA;QACT0B,YAAcA,EAAAA,YAAAA;QACdO,QAAUL,EAAAA,kBAAAA;;AAEV,0BAAAM,cAAA,CAACH,oBAAQI,OAAO,EAAA,EAAA,CAAA;AAChB,0BAAAD,cAAA,CAACH,oBAAQK,OAAO,EAAA;gBAACC,MAAQ,EAAA;;AACzB,0BAAAH,cAAA,CAACH,oBAAQO,IAAI,EAAA,EAAA;;;AAGnB;AAEA;;AAEkG,qGAElG,MAAMxB,gBAAAA,GAAmB,CAAC,EAAER,IAAI,EAA2B,GAAA;AACzD,IAAA,MAAM,CAACiC,QAAUC,EAAAA,WAAAA,CAAY,GAAGjF,gBAAAA,CAAMkF,QAAQ,CAAC,EAAA,CAAA;AAC/C,IAAA,MAAM,CAACC,MAAQC,EAAAA,SAAAA,CAAU,GAAGpF,gBAAAA,CAAMkF,QAAQ,CAAC,EAAA,CAAA;IAC3C,MAAM,EAAEhG,aAAa,EAAE,GAAGE,iBAAAA,EAAAA;IAE1B,MAAMiG,eAAAA,GAAkBC,wBAAYH,MAAQ,EAAA,GAAA,CAAA;AAE5C,IAAA,MAAM,EAAE1D,IAAI,EAAEE,SAAS,EAAE,GAAGE,yBAAc,CAAA;AACxCmD,QAAAA,QAAAA;QACAO,EAAIF,EAAAA;AACN,KAAA,CAAA;AACA,IAAA,MAAMxC,QAAQ2C,oBAASzC,CAAAA,IAAAA,CAAAA;AAEvB,IAAA,MAAM0C,mBAAmB,CAACrB,MAAAA,GAAAA;AACxB,QAAA,IAAI,CAACA,MAAQ,EAAA;YACXa,WAAY,CAAA,EAAA,CAAA;AACd;AACF,KAAA;IAEA,MAAM,SAAEjD,UAAQ,EAAE,EAAE0D,UAAU,EAAE,GAAGjE,QAAQ,EAAC;IAC5C,MAAM,EAAEkE,YAAY,CAAC,EAAEC,OAAO,CAAC,EAAE,GAAGF,UAAAA,IAAc,EAAC;AAEnD,IAAA,qBACEf,cAACkB,CAAAA,qBAAAA,EAAAA;AACChF,QAAAA,KAAAA,EAAOgC,MAAMhC,KAAK;AAClBiF,QAAAA,YAAAA,EAAY5G,aAAc,CAAA;YACxB8B,EAAI,EAAA,sDAAA;YACJ4C,cAAgB,EAAA;AAClB,SAAA,CAAA;QACAO,YAAcsB,EAAAA,gBAAAA;AACdf,QAAAA,QAAAA,EAAU,CAAC7D,KAAAA,GAAUgC,KAAM6B,CAAAA,QAAQ,CAAC3B,IAAMlC,EAAAA,KAAAA,CAAAA;QAC1CkF,OAASpE,EAAAA,SAAAA;QACTqE,UAAY,EAAA,IAAMf,YAAYD,QAAW,GAAA,EAAA,CAAA;AACzCiB,QAAAA,YAAAA,EAAcL,IAAOD,GAAAA,SAAAA;AACrBO,QAAAA,aAAAA,EAAe,CAACC,CAAAA,GAAAA;YACdf,SAAUe,CAAAA,CAAAA,CAAEC,aAAa,CAACvF,KAAK,CAAA;AACjC,SAAA;kBAECmB,OAAMc,CAAAA,GAAG,CAAC,CAACU,IAAAA,GAAAA;AACV,YAAA,qBACEmB,cAAC0B,CAAAA,2BAAAA,EAAAA;gBAA6BxF,KAAO2C,EAAAA,IAAAA,CAAKxC,EAAE,CAAC0C,QAAQ,EAAA;0BAClDD,oBAAeD,CAAAA,IAAAA;AADGA,aAAAA,EAAAA,IAAAA,CAAKxC,EAAE,CAAA;AAIhC,SAAA;;AAGN,CAAA;;;;"}
@@ -45,7 +45,10 @@ const FiltersImpl = ({ disabled, schema })=>{
45
45
  return acc;
46
46
  }
47
47
  const id = value.id.$eq || value.id.$ne;
48
- if (id && USER_FILTER_ATTRIBUTES.includes(key) && !acc.includes(id)) {
48
+ // Check if the attribute is a relation to admin::user
49
+ const attribute = attributes[key];
50
+ const isAdminUserRelation = attribute?.type === 'relation' && 'target' in attribute && attribute.target === 'admin::user';
51
+ if (id && (isAdminUserRelation || USER_FILTER_ATTRIBUTES.includes(key)) && !acc.includes(id)) {
49
52
  acc.push(id);
50
53
  }
51
54
  return acc;
@@ -172,7 +175,9 @@ const FiltersImpl = ({ disabled, schema })=>{
172
175
  onChange: handleFilterChange,
173
176
  children: [
174
177
  /*#__PURE__*/ jsx(Filters.Trigger, {}),
175
- /*#__PURE__*/ jsx(Filters.Popover, {}),
178
+ /*#__PURE__*/ jsx(Filters.Popover, {
179
+ zIndex: 499
180
+ }),
176
181
  /*#__PURE__*/ jsx(Filters.List, {})
177
182
  ]
178
183
  });
@@ -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} from '@strapi/admin/strapi-admin';\nimport { Combobox, ComboboxOption, useCollator } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { useContentTypeSchema } from '../../../hooks/useContentTypeSchema';\nimport { useDebounce } from '../../../hooks/useDebounce';\nimport { Schema } from '../../../hooks/useDocument';\nimport { useGetContentTypeConfigurationQuery } from '../../../services/contentTypes';\nimport { getMainField } from '../../../utils/attributes';\nimport { getDisplayName } from '../../../utils/users';\n\n/**\n * If new attributes are added, this list needs to be updated.\n */\nconst NOT_ALLOWED_FILTERS = [\n 'json',\n 'component',\n 'media',\n 'richtext',\n 'dynamiczone',\n 'password',\n 'blocks',\n];\nconst DEFAULT_ALLOWED_FILTERS = ['createdAt', 'updatedAt'];\nconst USER_FILTER_ATTRIBUTES = [...CREATOR_FIELDS, 'strapi_assignee'];\n\n/* -------------------------------------------------------------------------------------------------\n * Filters\n * -----------------------------------------------------------------------------------------------*/\ninterface FiltersProps {\n disabled?: boolean;\n schema: Schema;\n}\n\nconst FiltersImpl = ({ disabled, schema }: FiltersProps) => {\n const { attributes, uid: model, options } = schema;\n const { formatMessage, locale } = useIntl();\n const { trackUsage } = useTracking();\n const allPermissions = useAuth('FiltersImpl', (state) => state.permissions);\n const [{ query }] = useQueryParams<Filters.Query>();\n const { schemas } = useContentTypeSchema();\n\n const canReadAdminUsers = React.useMemo(\n () =>\n allPermissions.filter(\n (permission) => permission.action === 'admin::users.read' && permission.subject === null\n ).length > 0,\n [allPermissions]\n );\n\n const selectedUserIds = (query?.filters?.$and ?? []).reduce<string[]>((acc, filter) => {\n const [key, value] = Object.entries(filter)[0];\n if (typeof value.id !== 'object') {\n return acc;\n }\n\n const id = value.id.$eq || value.id.$ne;\n\n if (id && USER_FILTER_ATTRIBUTES.includes(key) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []);\n\n const { data: userData, isLoading: isLoadingAdminUsers } = useAdminUsers(\n { filters: { id: { $in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n skip: selectedUserIds.length === 0 || !canReadAdminUsers,\n }\n );\n\n const { users = [] } = userData ?? {};\n\n const { metadata } = useGetContentTypeConfigurationQuery(model, {\n selectFromResult: ({ data }) => ({ metadata: data?.contentType.metadatas ?? {} }),\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedFilters = React.useMemo(() => {\n const [{ properties: { fields = [] } = { fields: [] } }] = allPermissions.filter(\n (permission) =>\n permission.action === 'plugin::content-manager.explorer.read' &&\n permission.subject === model\n );\n\n const allowedFields = fields.filter((field) => {\n const attribute = attributes[field] ?? {};\n\n return attribute.type && !NOT_ALLOWED_FILTERS.includes(attribute.type);\n });\n\n return (\n [\n 'id',\n 'documentId',\n ...allowedFields,\n ...DEFAULT_ALLOWED_FILTERS,\n ...(canReadAdminUsers ? CREATOR_FIELDS : []),\n ]\n .map((name) => {\n const attribute = attributes[name];\n\n if (NOT_ALLOWED_FILTERS.includes(attribute.type)) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = metadata[name].list;\n\n let filter: Filters.Filter = {\n name,\n label: label ?? '',\n mainField: getMainField(attribute, mainFieldName, { schemas, components: {} }),\n // @ts-expect-error – TODO: this is filtered out above in the `allowedFields` call but TS complains, is there a better way to solve this?\n type: attribute.type,\n };\n\n if (\n attribute.type === 'relation' &&\n 'target' in attribute &&\n attribute.target === 'admin::user'\n ) {\n filter = {\n ...filter,\n input: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n })),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ],\n mainField: {\n name: 'id',\n type: 'integer',\n },\n };\n }\n\n if (attribute.type === 'enumeration') {\n filter = {\n ...filter,\n options: attribute.enum.map((value) => ({\n label: value,\n value,\n })),\n };\n }\n\n return filter;\n })\n .filter(Boolean) as Filters.Filter[]\n ).toSorted((a, b) => formatter.compare(a.label, b.label));\n }, [\n allPermissions,\n canReadAdminUsers,\n model,\n attributes,\n metadata,\n schemas,\n users,\n formatMessage,\n formatter,\n ]);\n\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n trackUsage('willFilterEntries');\n }\n };\n\n const handleFilterChange: Filters.Props['onChange'] = (data) => {\n const attribute = attributes[data.name];\n\n if (attribute) {\n trackUsage('didFilterEntries', {\n useRelation: attribute.type === 'relation',\n });\n }\n };\n\n return (\n <Filters.Root\n disabled={disabled}\n options={displayedFilters}\n onOpenChange={onOpenChange}\n onChange={handleFilterChange}\n >\n <Filters.Trigger />\n <Filters.Popover />\n <Filters.List />\n </Filters.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AdminUsersFilter\n * -----------------------------------------------------------------------------------------------*/\n\nconst AdminUsersFilter = ({ name }: Filters.ValueInputProps) => {\n const [pageSize, setPageSize] = React.useState(10);\n const [search, setSearch] = React.useState('');\n const { formatMessage } = useIntl();\n\n const debouncedSearch = useDebounce(search, 300);\n\n const { data, isLoading } = useAdminUsers({\n pageSize,\n _q: debouncedSearch,\n });\n const field = useField(name);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPageSize(10);\n }\n };\n\n const { users = [], pagination } = data ?? {};\n const { pageCount = 1, page = 1 } = pagination ?? {};\n\n return (\n <Combobox\n value={field.value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select a user to filter',\n })}\n onOpenChange={handleOpenChange}\n onChange={(value) => field.onChange(name, value)}\n loading={isLoading}\n onLoadMore={() => setPageSize(pageSize + 10)}\n hasMoreItems={page < pageCount}\n onInputChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n }}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nexport { FiltersImpl as Filters };\nexport type { FiltersProps };\n"],"names":["NOT_ALLOWED_FILTERS","DEFAULT_ALLOWED_FILTERS","USER_FILTER_ATTRIBUTES","CREATOR_FIELDS","FiltersImpl","disabled","schema","attributes","uid","model","options","formatMessage","locale","useIntl","trackUsage","useTracking","allPermissions","useAuth","state","permissions","query","useQueryParams","schemas","useContentTypeSchema","canReadAdminUsers","React","useMemo","filter","permission","action","subject","length","selectedUserIds","filters","$and","reduce","acc","key","value","Object","entries","id","$eq","$ne","includes","push","data","userData","isLoading","isLoadingAdminUsers","useAdminUsers","$in","skip","users","metadata","useGetContentTypeConfigurationQuery","selectFromResult","contentType","metadatas","formatter","useCollator","sensitivity","displayedFilters","properties","fields","allowedFields","field","attribute","type","map","name","mainField","mainFieldName","label","list","getMainField","components","target","input","AdminUsersFilter","user","getDisplayName","toString","operators","defaultMessage","enum","Boolean","toSorted","a","b","compare","onOpenChange","isOpen","handleFilterChange","useRelation","_jsxs","Filters","Root","onChange","_jsx","Trigger","Popover","List","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","_q","useField","handleOpenChange","pagination","pageCount","page","Combobox","aria-label","loading","onLoadMore","hasMoreItems","onInputChange","e","currentTarget","ComboboxOption"],"mappings":"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"}
1
+ {"version":3,"file":"Filters.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} from '@strapi/admin/strapi-admin';\nimport { Combobox, ComboboxOption, useCollator } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { useContentTypeSchema } from '../../../hooks/useContentTypeSchema';\nimport { useDebounce } from '../../../hooks/useDebounce';\nimport { Schema } from '../../../hooks/useDocument';\nimport { useGetContentTypeConfigurationQuery } from '../../../services/contentTypes';\nimport { getMainField } from '../../../utils/attributes';\nimport { getDisplayName } from '../../../utils/users';\n\n/**\n * If new attributes are added, this list needs to be updated.\n */\nconst NOT_ALLOWED_FILTERS = [\n 'json',\n 'component',\n 'media',\n 'richtext',\n 'dynamiczone',\n 'password',\n 'blocks',\n];\nconst DEFAULT_ALLOWED_FILTERS = ['createdAt', 'updatedAt'];\nconst USER_FILTER_ATTRIBUTES = [...CREATOR_FIELDS, 'strapi_assignee'];\n\n/* -------------------------------------------------------------------------------------------------\n * Filters\n * -----------------------------------------------------------------------------------------------*/\ninterface FiltersProps {\n disabled?: boolean;\n schema: Schema;\n}\n\nconst FiltersImpl = ({ disabled, schema }: FiltersProps) => {\n const { attributes, uid: model, options } = schema;\n const { formatMessage, locale } = useIntl();\n const { trackUsage } = useTracking();\n const allPermissions = useAuth('FiltersImpl', (state) => state.permissions);\n const [{ query }] = useQueryParams<Filters.Query>();\n const { schemas } = useContentTypeSchema();\n\n const canReadAdminUsers = React.useMemo(\n () =>\n allPermissions.filter(\n (permission) => permission.action === 'admin::users.read' && permission.subject === null\n ).length > 0,\n [allPermissions]\n );\n\n const selectedUserIds = (query?.filters?.$and ?? []).reduce<string[]>((acc, filter) => {\n const [key, value] = Object.entries(filter)[0];\n if (typeof value.id !== 'object') {\n return acc;\n }\n\n const id = value.id.$eq || value.id.$ne;\n\n // Check if the attribute is a relation to admin::user\n const attribute = attributes[key];\n const isAdminUserRelation =\n attribute?.type === 'relation' && 'target' in attribute && attribute.target === 'admin::user';\n\n if (id && (isAdminUserRelation || USER_FILTER_ATTRIBUTES.includes(key)) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []);\n\n const { data: userData, isLoading: isLoadingAdminUsers } = useAdminUsers(\n { filters: { id: { $in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n skip: selectedUserIds.length === 0 || !canReadAdminUsers,\n }\n );\n\n const { users = [] } = userData ?? {};\n\n const { metadata } = useGetContentTypeConfigurationQuery(model, {\n selectFromResult: ({ data }) => ({ metadata: data?.contentType.metadatas ?? {} }),\n });\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedFilters = React.useMemo(() => {\n const [{ properties: { fields = [] } = { fields: [] } }] = allPermissions.filter(\n (permission) =>\n permission.action === 'plugin::content-manager.explorer.read' &&\n permission.subject === model\n );\n\n const allowedFields = fields.filter((field) => {\n const attribute = attributes[field] ?? {};\n\n return attribute.type && !NOT_ALLOWED_FILTERS.includes(attribute.type);\n });\n\n return (\n [\n 'id',\n 'documentId',\n ...allowedFields,\n ...DEFAULT_ALLOWED_FILTERS,\n ...(canReadAdminUsers ? CREATOR_FIELDS : []),\n ]\n .map((name) => {\n const attribute = attributes[name];\n\n if (NOT_ALLOWED_FILTERS.includes(attribute.type)) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = metadata[name].list;\n\n let filter: Filters.Filter = {\n name,\n label: label ?? '',\n mainField: getMainField(attribute, mainFieldName, { schemas, components: {} }),\n // @ts-expect-error – TODO: this is filtered out above in the `allowedFields` call but TS complains, is there a better way to solve this?\n type: attribute.type,\n };\n\n if (\n attribute.type === 'relation' &&\n 'target' in attribute &&\n attribute.target === 'admin::user'\n ) {\n filter = {\n ...filter,\n input: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n })),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ],\n mainField: {\n name: 'id',\n type: 'integer',\n },\n };\n }\n\n if (attribute.type === 'enumeration') {\n filter = {\n ...filter,\n options: attribute.enum.map((value) => ({\n label: value,\n value,\n })),\n };\n }\n\n return filter;\n })\n .filter(Boolean) as Filters.Filter[]\n ).toSorted((a, b) => formatter.compare(a.label, b.label));\n }, [\n allPermissions,\n canReadAdminUsers,\n model,\n attributes,\n metadata,\n schemas,\n users,\n formatMessage,\n formatter,\n ]);\n\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n trackUsage('willFilterEntries');\n }\n };\n\n const handleFilterChange: Filters.Props['onChange'] = (data) => {\n const attribute = attributes[data.name];\n\n if (attribute) {\n trackUsage('didFilterEntries', {\n useRelation: attribute.type === 'relation',\n });\n }\n };\n\n return (\n <Filters.Root\n disabled={disabled}\n options={displayedFilters}\n onOpenChange={onOpenChange}\n onChange={handleFilterChange}\n >\n <Filters.Trigger />\n <Filters.Popover zIndex={499} />\n <Filters.List />\n </Filters.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AdminUsersFilter\n * -----------------------------------------------------------------------------------------------*/\n\nconst AdminUsersFilter = ({ name }: Filters.ValueInputProps) => {\n const [pageSize, setPageSize] = React.useState(10);\n const [search, setSearch] = React.useState('');\n const { formatMessage } = useIntl();\n\n const debouncedSearch = useDebounce(search, 300);\n\n const { data, isLoading } = useAdminUsers({\n pageSize,\n _q: debouncedSearch,\n });\n const field = useField(name);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPageSize(10);\n }\n };\n\n const { users = [], pagination } = data ?? {};\n const { pageCount = 1, page = 1 } = pagination ?? {};\n\n return (\n <Combobox\n value={field.value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select a user to filter',\n })}\n onOpenChange={handleOpenChange}\n onChange={(value) => field.onChange(name, value)}\n loading={isLoading}\n onLoadMore={() => setPageSize(pageSize + 10)}\n hasMoreItems={page < pageCount}\n onInputChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n }}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nexport { FiltersImpl as Filters };\nexport type { FiltersProps };\n"],"names":["NOT_ALLOWED_FILTERS","DEFAULT_ALLOWED_FILTERS","USER_FILTER_ATTRIBUTES","CREATOR_FIELDS","FiltersImpl","disabled","schema","attributes","uid","model","options","formatMessage","locale","useIntl","trackUsage","useTracking","allPermissions","useAuth","state","permissions","query","useQueryParams","schemas","useContentTypeSchema","canReadAdminUsers","React","useMemo","filter","permission","action","subject","length","selectedUserIds","filters","$and","reduce","acc","key","value","Object","entries","id","$eq","$ne","attribute","isAdminUserRelation","type","target","includes","push","data","userData","isLoading","isLoadingAdminUsers","useAdminUsers","$in","skip","users","metadata","useGetContentTypeConfigurationQuery","selectFromResult","contentType","metadatas","formatter","useCollator","sensitivity","displayedFilters","properties","fields","allowedFields","field","map","name","mainField","mainFieldName","label","list","getMainField","components","input","AdminUsersFilter","user","getDisplayName","toString","operators","defaultMessage","enum","Boolean","toSorted","a","b","compare","onOpenChange","isOpen","handleFilterChange","useRelation","_jsxs","Filters","Root","onChange","_jsx","Trigger","Popover","zIndex","List","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","_q","useField","handleOpenChange","pagination","pageCount","page","Combobox","aria-label","loading","onLoadMore","hasMoreItems","onInputChange","e","currentTarget","ComboboxOption"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TableActions.js","sources":["../../../../../admin/src/pages/ListView/components/TableActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useNotification,\n useStrapiApp,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Button, LinkButton, Modal } from '@strapi/design-system';\nimport { Duplicate, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { Document, useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { isBaseQueryError } from '../../../utils/api';\nimport { DocumentActionsMenu } from '../../EditView/components/DocumentActions';\n\nimport { AutoCloneFailureModalBody } from './AutoCloneFailureModal';\n\nimport type { ProhibitedCloningField } from '../../../../../shared/contracts/collection-types';\nimport type {\n ContentManagerPlugin,\n DocumentActionComponent,\n DocumentActionProps,\n} from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * TableActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableActionsProps {\n document: Document;\n}\n\nconst TableActions = ({ document }: TableActionsProps) => {\n const { formatMessage } = useIntl();\n const { model, collectionType } = useDoc();\n const plugins = useStrapiApp('TableActions', (state) => state.plugins);\n\n const props: DocumentActionProps = {\n activeTab: null,\n model,\n documentId: document.documentId,\n collectionType,\n document,\n };\n\n return (\n <DescriptionComponentRenderer\n props={props}\n descriptions={(plugins['content-manager'].apis as ContentManagerPlugin['config']['apis'])\n .getDocumentActions('table-row')\n // We explicitly remove the PublishAction from description so we never render it and we don't make unnecessary requests.\n .filter((action) => action.name !== 'PublishAction')}\n >\n {(actions) => {\n const tableRowActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('table-row');\n });\n\n return (\n <DocumentActionsMenu\n actions={tableRowActions}\n label={formatMessage({\n id: 'content-manager.containers.list.table.row-actions',\n defaultMessage: 'Row actions',\n })}\n variant=\"ghost\"\n />\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditAction: DocumentActionComponent = ({ documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('EditAction', ({ canRead }) => ({ canRead }));\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n return {\n disabled: !canRead,\n icon: <StyledPencil />,\n label: formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to edit a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.edit.error',\n defaultMessage: 'An error occurred while trying to edit the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n navigate({\n pathname: documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n },\n };\n};\n\nEditAction.type = 'edit';\nEditAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledPencil = styled(Pencil)`\n path {\n fill: currentColor;\n }\n`;\n\nconst CloneAction: DocumentActionComponent = ({ model, documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canCreate } = useDocumentRBAC('CloneAction', ({ canCreate }) => ({ canCreate }));\n const { toggleNotification } = useNotification();\n const { autoClone } = useDocumentActions();\n const [prohibitedFields, setProhibitedFields] = React.useState<ProhibitedCloningField[]>([]);\n const [{ query }] = useQueryParams<{ plugins?: Record<string, any> }>();\n\n return {\n disabled: !canCreate,\n icon: <StyledDuplicate />,\n label: formatMessage({\n id: 'content-manager.actions.clone.label',\n defaultMessage: 'Duplicate',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to clone a document in the table without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.clone.error',\n defaultMessage: 'An error occurred while trying to clone the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await autoClone({\n model,\n sourceId: documentId,\n locale: query.plugins?.i18n?.locale,\n });\n\n if ('data' in res) {\n navigate({\n pathname: res.data.documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n\n /**\n * We return true because we don't need to show a modal anymore.\n */\n return true;\n }\n\n if (\n isBaseQueryError(res.error) &&\n res.error.details &&\n typeof res.error.details === 'object' &&\n 'prohibitedFields' in res.error.details &&\n Array.isArray(res.error.details.prohibitedFields)\n ) {\n const prohibitedFields = res.error.details.prohibitedFields as ProhibitedCloningField[];\n\n setProhibitedFields(prohibitedFields);\n }\n },\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.header',\n defaultMessage: 'Duplicate',\n }),\n content: <AutoCloneFailureModalBody prohibitedFields={prohibitedFields} />,\n footer: ({ onClose }) => {\n return (\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <LinkButton\n tag={NavLink}\n to={{\n pathname: `clone/${documentId}`,\n search: stringify({\n plugins: query.plugins,\n }),\n }}\n >\n {formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.create',\n defaultMessage: 'Create',\n })}\n </LinkButton>\n </Modal.Footer>\n );\n },\n },\n };\n};\n\nCloneAction.type = 'clone';\nCloneAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledDuplicate = styled(Duplicate)`\n path {\n fill: currentColor;\n }\n`;\n\nconst DEFAULT_TABLE_ROW_ACTIONS = [EditAction, CloneAction];\n\nexport { TableActions, DEFAULT_TABLE_ROW_ACTIONS };\n"],"names":["TableActions","document","formatMessage","useIntl","model","collectionType","useDoc","plugins","useStrapiApp","state","props","activeTab","documentId","_jsx","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","filter","action","name","actions","tableRowActions","positions","Array","isArray","position","includes","DocumentActionsMenu","label","id","defaultMessage","variant","EditAction","navigate","useNavigate","canRead","useDocumentRBAC","toggleNotification","useNotification","query","useQueryParams","disabled","icon","StyledPencil","onClick","console","error","message","type","pathname","search","stringify","styled","Pencil","CloneAction","canCreate","autoClone","useDocumentActions","prohibitedFields","setProhibitedFields","React","useState","StyledDuplicate","res","sourceId","locale","i18n","data","isBaseQueryError","details","dialog","title","content","AutoCloneFailureModalBody","footer","onClose","_jsxs","Modal","Footer","Button","LinkButton","tag","NavLink","to","Duplicate","DEFAULT_TABLE_ROW_ACTIONS"],"mappings":"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"}
1
+ {"version":3,"file":"TableActions.js","sources":["../../../../../admin/src/pages/ListView/components/TableActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useNotification,\n useStrapiApp,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Button, LinkButton, Modal } from '@strapi/design-system';\nimport { Duplicate, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { Document, useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { isBaseQueryError } from '../../../utils/api';\nimport { DocumentActionsMenu } from '../../EditView/components/DocumentActions';\n\nimport { AutoCloneFailureModalBody } from './AutoCloneFailureModal';\n\nimport type { ProhibitedCloningField } from '../../../../../shared/contracts/collection-types';\nimport type {\n ContentManagerPlugin,\n DocumentActionComponent,\n DocumentActionProps,\n} from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * TableActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableActionsProps {\n document: Document;\n}\n\nconst TableActions = ({ document }: TableActionsProps) => {\n const { formatMessage } = useIntl();\n const { model, collectionType } = useDoc();\n const plugins = useStrapiApp('TableActions', (state) => state.plugins);\n\n const props: DocumentActionProps = {\n activeTab: null,\n model,\n documentId: document.documentId,\n collectionType,\n document,\n };\n\n return (\n <DescriptionComponentRenderer\n props={props}\n descriptions={(plugins['content-manager'].apis as ContentManagerPlugin['config']['apis'])\n .getDocumentActions('table-row')\n // We explicitly remove the PublishAction from description so we never render it and we don't make unnecessary requests.\n .filter((action) => action.name !== 'PublishAction')}\n >\n {(actions) => {\n const tableRowActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('table-row');\n });\n\n return (\n <DocumentActionsMenu\n actions={tableRowActions}\n label={formatMessage({\n id: 'content-manager.containers.list.table.row-actions',\n defaultMessage: 'Row actions',\n })}\n variant=\"ghost\"\n />\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditAction: DocumentActionComponent = ({ documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('EditAction', ({ canRead }) => ({ canRead }));\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n return {\n disabled: !canRead,\n icon: <StyledPencil />,\n label: formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to edit a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.edit.error',\n defaultMessage: 'An error occurred while trying to edit the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n navigate({\n pathname: documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n },\n };\n};\n\nEditAction.type = 'edit';\nEditAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledPencil = styled(Pencil)`\n path {\n fill: currentColor;\n }\n`;\n\nconst CloneAction: DocumentActionComponent = ({ model, documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canCreate } = useDocumentRBAC('CloneAction', ({ canCreate }) => ({ canCreate }));\n const { toggleNotification } = useNotification();\n const { autoClone } = useDocumentActions();\n const [prohibitedFields, setProhibitedFields] = React.useState<ProhibitedCloningField[]>([]);\n const [{ query }] = useQueryParams<{ plugins?: Record<string, any> }>();\n\n return {\n disabled: !canCreate,\n icon: <StyledDuplicate />,\n label: formatMessage({\n id: 'content-manager.actions.clone.label',\n defaultMessage: 'Duplicate',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to clone a document in the table without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.clone.error',\n defaultMessage: 'An error occurred while trying to clone the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await autoClone({\n model,\n sourceId: documentId,\n locale: query.plugins?.i18n?.locale,\n });\n\n if ('data' in res) {\n navigate({\n pathname: res.data.documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n\n /**\n * We return true because we don't need to show a modal anymore.\n */\n return true;\n }\n\n if (\n isBaseQueryError(res.error) &&\n res.error.details &&\n typeof res.error.details === 'object' &&\n 'prohibitedFields' in res.error.details &&\n Array.isArray(res.error.details.prohibitedFields)\n ) {\n const prohibitedFields = res.error.details.prohibitedFields as ProhibitedCloningField[];\n\n setProhibitedFields(prohibitedFields);\n }\n },\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.header',\n defaultMessage: 'Duplicate',\n }),\n content: <AutoCloneFailureModalBody prohibitedFields={prohibitedFields} />,\n footer: ({ onClose }) => {\n return (\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <LinkButton\n tag={NavLink}\n to={{\n pathname: `clone/${documentId}`,\n search: stringify({\n plugins: query.plugins,\n }),\n }}\n >\n {formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.create',\n defaultMessage: 'Create',\n })}\n </LinkButton>\n </Modal.Footer>\n );\n },\n },\n };\n};\n\nCloneAction.type = 'clone';\nCloneAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledDuplicate = styled(Duplicate)`\n path {\n fill: currentColor;\n }\n`;\n\nconst DEFAULT_TABLE_ROW_ACTIONS = [EditAction, CloneAction];\n\nexport { TableActions, DEFAULT_TABLE_ROW_ACTIONS };\n"],"names":["TableActions","document","formatMessage","useIntl","model","collectionType","useDoc","plugins","useStrapiApp","state","props","activeTab","documentId","_jsx","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","filter","action","name","actions","tableRowActions","positions","Array","isArray","position","includes","DocumentActionsMenu","label","id","defaultMessage","variant","EditAction","navigate","useNavigate","canRead","useDocumentRBAC","toggleNotification","useNotification","query","useQueryParams","disabled","icon","StyledPencil","onClick","console","error","message","type","pathname","search","stringify","styled","Pencil","CloneAction","canCreate","autoClone","useDocumentActions","prohibitedFields","setProhibitedFields","React","useState","StyledDuplicate","res","sourceId","locale","i18n","data","isBaseQueryError","details","dialog","title","content","AutoCloneFailureModalBody","footer","onClose","_jsxs","Modal","Footer","Button","LinkButton","tag","NavLink","to","Duplicate","DEFAULT_TABLE_ROW_ACTIONS"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TableActions.mjs","sources":["../../../../../admin/src/pages/ListView/components/TableActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useNotification,\n useStrapiApp,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Button, LinkButton, Modal } from '@strapi/design-system';\nimport { Duplicate, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { Document, useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { isBaseQueryError } from '../../../utils/api';\nimport { DocumentActionsMenu } from '../../EditView/components/DocumentActions';\n\nimport { AutoCloneFailureModalBody } from './AutoCloneFailureModal';\n\nimport type { ProhibitedCloningField } from '../../../../../shared/contracts/collection-types';\nimport type {\n ContentManagerPlugin,\n DocumentActionComponent,\n DocumentActionProps,\n} from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * TableActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableActionsProps {\n document: Document;\n}\n\nconst TableActions = ({ document }: TableActionsProps) => {\n const { formatMessage } = useIntl();\n const { model, collectionType } = useDoc();\n const plugins = useStrapiApp('TableActions', (state) => state.plugins);\n\n const props: DocumentActionProps = {\n activeTab: null,\n model,\n documentId: document.documentId,\n collectionType,\n document,\n };\n\n return (\n <DescriptionComponentRenderer\n props={props}\n descriptions={(plugins['content-manager'].apis as ContentManagerPlugin['config']['apis'])\n .getDocumentActions('table-row')\n // We explicitly remove the PublishAction from description so we never render it and we don't make unnecessary requests.\n .filter((action) => action.name !== 'PublishAction')}\n >\n {(actions) => {\n const tableRowActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('table-row');\n });\n\n return (\n <DocumentActionsMenu\n actions={tableRowActions}\n label={formatMessage({\n id: 'content-manager.containers.list.table.row-actions',\n defaultMessage: 'Row actions',\n })}\n variant=\"ghost\"\n />\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditAction: DocumentActionComponent = ({ documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('EditAction', ({ canRead }) => ({ canRead }));\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n return {\n disabled: !canRead,\n icon: <StyledPencil />,\n label: formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to edit a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.edit.error',\n defaultMessage: 'An error occurred while trying to edit the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n navigate({\n pathname: documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n },\n };\n};\n\nEditAction.type = 'edit';\nEditAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledPencil = styled(Pencil)`\n path {\n fill: currentColor;\n }\n`;\n\nconst CloneAction: DocumentActionComponent = ({ model, documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canCreate } = useDocumentRBAC('CloneAction', ({ canCreate }) => ({ canCreate }));\n const { toggleNotification } = useNotification();\n const { autoClone } = useDocumentActions();\n const [prohibitedFields, setProhibitedFields] = React.useState<ProhibitedCloningField[]>([]);\n const [{ query }] = useQueryParams<{ plugins?: Record<string, any> }>();\n\n return {\n disabled: !canCreate,\n icon: <StyledDuplicate />,\n label: formatMessage({\n id: 'content-manager.actions.clone.label',\n defaultMessage: 'Duplicate',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to clone a document in the table without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.clone.error',\n defaultMessage: 'An error occurred while trying to clone the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await autoClone({\n model,\n sourceId: documentId,\n locale: query.plugins?.i18n?.locale,\n });\n\n if ('data' in res) {\n navigate({\n pathname: res.data.documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n\n /**\n * We return true because we don't need to show a modal anymore.\n */\n return true;\n }\n\n if (\n isBaseQueryError(res.error) &&\n res.error.details &&\n typeof res.error.details === 'object' &&\n 'prohibitedFields' in res.error.details &&\n Array.isArray(res.error.details.prohibitedFields)\n ) {\n const prohibitedFields = res.error.details.prohibitedFields as ProhibitedCloningField[];\n\n setProhibitedFields(prohibitedFields);\n }\n },\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.header',\n defaultMessage: 'Duplicate',\n }),\n content: <AutoCloneFailureModalBody prohibitedFields={prohibitedFields} />,\n footer: ({ onClose }) => {\n return (\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <LinkButton\n tag={NavLink}\n to={{\n pathname: `clone/${documentId}`,\n search: stringify({\n plugins: query.plugins,\n }),\n }}\n >\n {formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.create',\n defaultMessage: 'Create',\n })}\n </LinkButton>\n </Modal.Footer>\n );\n },\n },\n };\n};\n\nCloneAction.type = 'clone';\nCloneAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledDuplicate = styled(Duplicate)`\n path {\n fill: currentColor;\n }\n`;\n\nconst DEFAULT_TABLE_ROW_ACTIONS = [EditAction, CloneAction];\n\nexport { TableActions, DEFAULT_TABLE_ROW_ACTIONS };\n"],"names":["TableActions","document","formatMessage","useIntl","model","collectionType","useDoc","plugins","useStrapiApp","state","props","activeTab","documentId","_jsx","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","filter","action","name","actions","tableRowActions","positions","Array","isArray","position","includes","DocumentActionsMenu","label","id","defaultMessage","variant","EditAction","navigate","useNavigate","canRead","useDocumentRBAC","toggleNotification","useNotification","query","useQueryParams","disabled","icon","StyledPencil","onClick","console","error","message","type","pathname","search","stringify","styled","Pencil","CloneAction","canCreate","autoClone","useDocumentActions","prohibitedFields","setProhibitedFields","React","useState","StyledDuplicate","res","sourceId","locale","i18n","data","isBaseQueryError","details","dialog","title","content","AutoCloneFailureModalBody","footer","onClose","_jsxs","Modal","Footer","Button","LinkButton","tag","NavLink","to","Duplicate","DEFAULT_TABLE_ROW_ACTIONS"],"mappings":"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"}
1
+ {"version":3,"file":"TableActions.mjs","sources":["../../../../../admin/src/pages/ListView/components/TableActions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useNotification,\n useStrapiApp,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Button, LinkButton, Modal } from '@strapi/design-system';\nimport { Duplicate, Pencil } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { Document, useDoc } from '../../../hooks/useDocument';\nimport { useDocumentActions } from '../../../hooks/useDocumentActions';\nimport { isBaseQueryError } from '../../../utils/api';\nimport { DocumentActionsMenu } from '../../EditView/components/DocumentActions';\n\nimport { AutoCloneFailureModalBody } from './AutoCloneFailureModal';\n\nimport type { ProhibitedCloningField } from '../../../../../shared/contracts/collection-types';\nimport type {\n ContentManagerPlugin,\n DocumentActionComponent,\n DocumentActionProps,\n} from '../../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * TableActions\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableActionsProps {\n document: Document;\n}\n\nconst TableActions = ({ document }: TableActionsProps) => {\n const { formatMessage } = useIntl();\n const { model, collectionType } = useDoc();\n const plugins = useStrapiApp('TableActions', (state) => state.plugins);\n\n const props: DocumentActionProps = {\n activeTab: null,\n model,\n documentId: document.documentId,\n collectionType,\n document,\n };\n\n return (\n <DescriptionComponentRenderer\n props={props}\n descriptions={(plugins['content-manager'].apis as ContentManagerPlugin['config']['apis'])\n .getDocumentActions('table-row')\n // We explicitly remove the PublishAction from description so we never render it and we don't make unnecessary requests.\n .filter((action) => action.name !== 'PublishAction')}\n >\n {(actions) => {\n const tableRowActions = actions.filter((action) => {\n const positions = Array.isArray(action.position) ? action.position : [action.position];\n return positions.includes('table-row');\n });\n\n return (\n <DocumentActionsMenu\n actions={tableRowActions}\n label={formatMessage({\n id: 'content-manager.containers.list.table.row-actions',\n defaultMessage: 'Row actions',\n })}\n variant=\"ghost\"\n />\n );\n }}\n </DescriptionComponentRenderer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * TableActionComponents\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditAction: DocumentActionComponent = ({ documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canRead } = useDocumentRBAC('EditAction', ({ canRead }) => ({ canRead }));\n const { toggleNotification } = useNotification();\n const [{ query }] = useQueryParams<{ plugins?: object }>();\n\n return {\n disabled: !canRead,\n icon: <StyledPencil />,\n label: formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to edit a document without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.edit.error',\n defaultMessage: 'An error occurred while trying to edit the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n navigate({\n pathname: documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n },\n };\n};\n\nEditAction.type = 'edit';\nEditAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledPencil = styled(Pencil)`\n path {\n fill: currentColor;\n }\n`;\n\nconst CloneAction: DocumentActionComponent = ({ model, documentId }) => {\n const navigate = useNavigate();\n const { formatMessage } = useIntl();\n const { canCreate } = useDocumentRBAC('CloneAction', ({ canCreate }) => ({ canCreate }));\n const { toggleNotification } = useNotification();\n const { autoClone } = useDocumentActions();\n const [prohibitedFields, setProhibitedFields] = React.useState<ProhibitedCloningField[]>([]);\n const [{ query }] = useQueryParams<{ plugins?: Record<string, any> }>();\n\n return {\n disabled: !canCreate,\n icon: <StyledDuplicate />,\n label: formatMessage({\n id: 'content-manager.actions.clone.label',\n defaultMessage: 'Duplicate',\n }),\n position: 'table-row',\n onClick: async () => {\n if (!documentId) {\n console.error(\n \"You're trying to clone a document in the table without an id, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.actions.clone.error',\n defaultMessage: 'An error occurred while trying to clone the document.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n const res = await autoClone({\n model,\n sourceId: documentId,\n locale: query.plugins?.i18n?.locale,\n });\n\n if ('data' in res) {\n navigate({\n pathname: res.data.documentId,\n search: stringify({\n plugins: query.plugins,\n }),\n });\n\n /**\n * We return true because we don't need to show a modal anymore.\n */\n return true;\n }\n\n if (\n isBaseQueryError(res.error) &&\n res.error.details &&\n typeof res.error.details === 'object' &&\n 'prohibitedFields' in res.error.details &&\n Array.isArray(res.error.details.prohibitedFields)\n ) {\n const prohibitedFields = res.error.details.prohibitedFields as ProhibitedCloningField[];\n\n setProhibitedFields(prohibitedFields);\n }\n },\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.header',\n defaultMessage: 'Duplicate',\n }),\n content: <AutoCloneFailureModalBody prohibitedFields={prohibitedFields} />,\n footer: ({ onClose }) => {\n return (\n <Modal.Footer>\n <Button onClick={onClose} variant=\"tertiary\">\n {formatMessage({\n id: 'cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <LinkButton\n tag={NavLink}\n to={{\n pathname: `clone/${documentId}`,\n search: stringify({\n plugins: query.plugins,\n }),\n }}\n >\n {formatMessage({\n id: 'content-manager.containers.list.autoCloneModal.create',\n defaultMessage: 'Create',\n })}\n </LinkButton>\n </Modal.Footer>\n );\n },\n },\n };\n};\n\nCloneAction.type = 'clone';\nCloneAction.position = 'table-row';\n\n/**\n * Because the icon system is completely broken, we have to do\n * this to remove the fill from the cog.\n */\nconst StyledDuplicate = styled(Duplicate)`\n path {\n fill: currentColor;\n }\n`;\n\nconst DEFAULT_TABLE_ROW_ACTIONS = [EditAction, CloneAction];\n\nexport { TableActions, DEFAULT_TABLE_ROW_ACTIONS };\n"],"names":["TableActions","document","formatMessage","useIntl","model","collectionType","useDoc","plugins","useStrapiApp","state","props","activeTab","documentId","_jsx","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","filter","action","name","actions","tableRowActions","positions","Array","isArray","position","includes","DocumentActionsMenu","label","id","defaultMessage","variant","EditAction","navigate","useNavigate","canRead","useDocumentRBAC","toggleNotification","useNotification","query","useQueryParams","disabled","icon","StyledPencil","onClick","console","error","message","type","pathname","search","stringify","styled","Pencil","CloneAction","canCreate","autoClone","useDocumentActions","prohibitedFields","setProhibitedFields","React","useState","StyledDuplicate","res","sourceId","locale","i18n","data","isBaseQueryError","details","dialog","title","content","AutoCloneFailureModalBody","footer","onClose","_jsxs","Modal","Footer","Button","LinkButton","tag","NavLink","to","Duplicate","DEFAULT_TABLE_ROW_ACTIONS"],"mappings":";;;;;;;;;;;;;;;;AAsCA,MAAMA,YAAe,GAAA,CAAC,EAAEC,QAAQ,EAAqB,GAAA;IACnD,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,KAAK,EAAEC,cAAc,EAAE,GAAGC,MAAAA,EAAAA;AAClC,IAAA,MAAMC,UAAUC,YAAa,CAAA,cAAA,EAAgB,CAACC,KAAAA,GAAUA,MAAMF,OAAO,CAAA;AAErE,IAAA,MAAMG,KAA6B,GAAA;QACjCC,SAAW,EAAA,IAAA;AACXP,QAAAA,KAAAA;AACAQ,QAAAA,UAAAA,EAAYX,SAASW,UAAU;AAC/BP,QAAAA,cAAAA;AACAJ,QAAAA;AACF,KAAA;AAEA,IAAA,qBACEY,GAACC,CAAAA,4BAAAA,EAAAA;QACCJ,KAAOA,EAAAA,KAAAA;QACPK,YAAc,EAACR,OAAO,CAAC,iBAAkB,CAAA,CAACS,IAAI,CAC3CC,kBAAkB,CAAC,WAAA,CACpB;AACCC,SAAAA,MAAM,CAAC,CAACC,MAAWA,GAAAA,MAAAA,CAAOC,IAAI,KAAK,eAAA,CAAA;kBAErC,CAACC,OAAAA,GAAAA;AACA,YAAA,MAAMC,eAAkBD,GAAAA,OAAAA,CAAQH,MAAM,CAAC,CAACC,MAAAA,GAAAA;gBACtC,MAAMI,SAAAA,GAAYC,MAAMC,OAAO,CAACN,OAAOO,QAAQ,CAAA,GAAIP,MAAOO,CAAAA,QAAQ,GAAG;AAACP,oBAAAA,MAAAA,CAAOO;AAAS,iBAAA;gBACtF,OAAOH,SAAAA,CAAUI,QAAQ,CAAC,WAAA,CAAA;AAC5B,aAAA,CAAA;AAEA,YAAA,qBACEd,GAACe,CAAAA,mBAAAA,EAAAA;gBACCP,OAASC,EAAAA,eAAAA;AACTO,gBAAAA,KAAAA,EAAO3B,aAAc,CAAA;oBACnB4B,EAAI,EAAA,mDAAA;oBACJC,cAAgB,EAAA;AAClB,iBAAA,CAAA;gBACAC,OAAQ,EAAA;;AAGd;;AAGN;AAEA;;AAEkG,qGAElG,MAAMC,UAAAA,GAAsC,CAAC,EAAErB,UAAU,EAAE,GAAA;AACzD,IAAA,MAAMsB,QAAWC,GAAAA,WAAAA,EAAAA;IACjB,MAAM,EAAEjC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEiC,OAAO,EAAE,GAAGC,eAAAA,CAAgB,YAAc,EAAA,CAAC,EAAED,OAAO,EAAE,IAAM;AAAEA,YAAAA;SAAQ,CAAA,CAAA;IAC9E,MAAM,EAAEE,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;IAEpB,OAAO;AACLC,QAAAA,QAAAA,EAAU,CAACN,OAAAA;AACXO,QAAAA,IAAAA,gBAAM9B,GAAC+B,CAAAA,YAAAA,EAAAA,EAAAA,CAAAA;AACPf,QAAAA,KAAAA,EAAO3B,aAAc,CAAA;YACnB4B,EAAI,EAAA,oCAAA;YACJC,cAAgB,EAAA;AAClB,SAAA,CAAA;QACAL,QAAU,EAAA,WAAA;QACVmB,OAAS,EAAA,UAAA;AACP,YAAA,IAAI,CAACjC,UAAY,EAAA;AACfkC,gBAAAA,OAAAA,CAAQC,KAAK,CACX,yGAAA,CAAA;gBAGFT,kBAAmB,CAAA;AACjBU,oBAAAA,OAAAA,EAAS9C,aAAc,CAAA;wBACrB4B,EAAI,EAAA,oCAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA,CAAA;oBACAkB,IAAM,EAAA;AACR,iBAAA,CAAA;AAEA,gBAAA;AACF;YAEAf,QAAS,CAAA;gBACPgB,QAAUtC,EAAAA,UAAAA;AACVuC,gBAAAA,MAAAA,EAAQC,SAAU,CAAA;AAChB7C,oBAAAA,OAAAA,EAASiC,MAAMjC;AACjB,iBAAA;AACF,aAAA,CAAA;AACF;AACF,KAAA;AACF,CAAA;AAEA0B,UAAAA,CAAWgB,IAAI,GAAG,MAAA;AAClBhB,UAAAA,CAAWP,QAAQ,GAAG,WAAA;AAEtB;;;AAGC,IACD,MAAMkB,YAAAA,GAAeS,MAAOC,CAAAA,MAAAA,CAAO;;;;AAInC,CAAC;AAED,MAAMC,cAAuC,CAAC,EAAEnD,KAAK,EAAEQ,UAAU,EAAE,GAAA;AACjE,IAAA,MAAMsB,QAAWC,GAAAA,WAAAA,EAAAA;IACjB,MAAM,EAAEjC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEqD,SAAS,EAAE,GAAGnB,eAAAA,CAAgB,aAAe,EAAA,CAAC,EAAEmB,SAAS,EAAE,IAAM;AAAEA,YAAAA;SAAU,CAAA,CAAA;IACrF,MAAM,EAAElB,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAEkB,SAAS,EAAE,GAAGC,kBAAAA,EAAAA;AACtB,IAAA,MAAM,CAACC,gBAAkBC,EAAAA,mBAAAA,CAAoB,GAAGC,KAAMC,CAAAA,QAAQ,CAA2B,EAAE,CAAA;AAC3F,IAAA,MAAM,CAAC,EAAEtB,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;IAEpB,OAAO;AACLC,QAAAA,QAAAA,EAAU,CAACc,SAAAA;AACXb,QAAAA,IAAAA,gBAAM9B,GAACkD,CAAAA,eAAAA,EAAAA,EAAAA,CAAAA;AACPlC,QAAAA,KAAAA,EAAO3B,aAAc,CAAA;YACnB4B,EAAI,EAAA,qCAAA;YACJC,cAAgB,EAAA;AAClB,SAAA,CAAA;QACAL,QAAU,EAAA,WAAA;QACVmB,OAAS,EAAA,UAAA;AACP,YAAA,IAAI,CAACjC,UAAY,EAAA;AACfkC,gBAAAA,OAAAA,CAAQC,KAAK,CACX,uHAAA,CAAA;gBAGFT,kBAAmB,CAAA;AACjBU,oBAAAA,OAAAA,EAAS9C,aAAc,CAAA;wBACrB4B,EAAI,EAAA,qCAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA,CAAA;oBACAkB,IAAM,EAAA;AACR,iBAAA,CAAA;AAEA,gBAAA;AACF;YAEA,MAAMe,GAAAA,GAAM,MAAMP,SAAU,CAAA;AAC1BrD,gBAAAA,KAAAA;gBACA6D,QAAUrD,EAAAA,UAAAA;gBACVsD,MAAQ1B,EAAAA,KAAAA,CAAMjC,OAAO,EAAE4D,IAAMD,EAAAA;AAC/B,aAAA,CAAA;AAEA,YAAA,IAAI,UAAUF,GAAK,EAAA;gBACjB9B,QAAS,CAAA;oBACPgB,QAAUc,EAAAA,GAAAA,CAAII,IAAI,CAACxD,UAAU;AAC7BuC,oBAAAA,MAAAA,EAAQC,SAAU,CAAA;AAChB7C,wBAAAA,OAAAA,EAASiC,MAAMjC;AACjB,qBAAA;AACF,iBAAA,CAAA;AAEA;;AAEC,YACD,OAAO,IAAA;AACT;AAEA,YAAA,IACE8D,gBAAiBL,CAAAA,GAAAA,CAAIjB,KAAK,CAAA,IAC1BiB,GAAIjB,CAAAA,KAAK,CAACuB,OAAO,IACjB,OAAON,GAAIjB,CAAAA,KAAK,CAACuB,OAAO,KAAK,QAC7B,IAAA,kBAAA,IAAsBN,GAAIjB,CAAAA,KAAK,CAACuB,OAAO,IACvC9C,KAAMC,CAAAA,OAAO,CAACuC,GAAAA,CAAIjB,KAAK,CAACuB,OAAO,CAACX,gBAAgB,CAChD,EAAA;AACA,gBAAA,MAAMA,mBAAmBK,GAAIjB,CAAAA,KAAK,CAACuB,OAAO,CAACX,gBAAgB;gBAE3DC,mBAAoBD,CAAAA,gBAAAA,CAAAA;AACtB;AACF,SAAA;QACAY,MAAQ,EAAA;YACNtB,IAAM,EAAA,OAAA;AACNuB,YAAAA,KAAAA,EAAOtE,aAAc,CAAA;gBACnB4B,EAAI,EAAA,uDAAA;gBACJC,cAAgB,EAAA;AAClB,aAAA,CAAA;AACA0C,YAAAA,OAAAA,gBAAS5D,GAAC6D,CAAAA,yBAAAA,EAAAA;gBAA0Bf,gBAAkBA,EAAAA;;YACtDgB,MAAQ,EAAA,CAAC,EAAEC,OAAO,EAAE,GAAA;gBAClB,qBACEC,IAAA,CAACC,MAAMC,MAAM,EAAA;;sCACXlE,GAACmE,CAAAA,MAAAA,EAAAA;4BAAOnC,OAAS+B,EAAAA,OAAAA;4BAAS5C,OAAQ,EAAA,UAAA;sCAC/B9B,aAAc,CAAA;gCACb4B,EAAI,EAAA,QAAA;gCACJC,cAAgB,EAAA;AAClB,6BAAA;;sCAEFlB,GAACoE,CAAAA,UAAAA,EAAAA;4BACCC,GAAKC,EAAAA,OAAAA;4BACLC,EAAI,EAAA;gCACFlC,QAAU,EAAA,CAAC,MAAM,EAAEtC,UAAY,CAAA,CAAA;AAC/BuC,gCAAAA,MAAAA,EAAQC,SAAU,CAAA;AAChB7C,oCAAAA,OAAAA,EAASiC,MAAMjC;AACjB,iCAAA;AACF,6BAAA;sCAECL,aAAc,CAAA;gCACb4B,EAAI,EAAA,uDAAA;gCACJC,cAAgB,EAAA;AAClB,6BAAA;;;;AAIR;AACF;AACF,KAAA;AACF,CAAA;AAEAwB,WAAAA,CAAYN,IAAI,GAAG,OAAA;AACnBM,WAAAA,CAAY7B,QAAQ,GAAG,WAAA;AAEvB;;;AAGC,IACD,MAAMqC,eAAAA,GAAkBV,MAAOgC,CAAAA,SAAAA,CAAU;;;;AAIzC,CAAC;AAED,MAAMC,yBAA4B,GAAA;AAACrD,IAAAA,UAAAA;AAAYsB,IAAAA;AAAY;;;;"}
@@ -55,7 +55,7 @@ const CellContent = ({ content, mainField, attribute, rowId, name })=>{
55
55
  });
56
56
  case 'string':
57
57
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tooltip, {
58
- description: content,
58
+ label: content,
59
59
  children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
60
60
  maxWidth: "30rem",
61
61
  ellipsis: true,
@@ -1 +1 @@
1
- {"version":3,"file":"CellContent.js","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/CellContent.tsx"],"sourcesContent":["import { Tooltip, Typography } from '@strapi/design-system';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { CellValue } from './CellValue';\nimport { SingleComponent, RepeatableComponent } from './Components';\nimport { MediaSingle, MediaMultiple } from './Media';\nimport { RelationMultiple, RelationSingle } from './Relations';\n\nimport type { ListFieldLayout } from '../../../../hooks/useDocumentLayout';\nimport type { Schema, Data } from '@strapi/types';\n\ninterface CellContentProps extends Omit<ListFieldLayout, 'cellFormatter'> {\n content: Schema.Attribute.Value<Schema.Attribute.AnyAttribute>;\n rowId: Data.ID;\n}\n\nconst CellContent = ({ content, mainField, attribute, rowId, name }: CellContentProps) => {\n if (!hasContent(content, mainField, attribute)) {\n return (\n <Typography\n textColor=\"neutral800\"\n paddingLeft={attribute.type === ('relation' || 'component') ? '1.6rem' : 0}\n paddingRight={attribute.type === ('relation' || 'component') ? '1.6rem' : 0}\n >\n -\n </Typography>\n );\n }\n\n switch (attribute.type) {\n case 'media':\n if (!attribute.multiple) {\n return <MediaSingle {...content} />;\n }\n\n return <MediaMultiple content={content} />;\n\n case 'relation': {\n if (isSingleRelation(attribute.relation)) {\n return <RelationSingle mainField={mainField} content={content} />;\n }\n\n return <RelationMultiple rowId={rowId} mainField={mainField} content={content} name={name} />;\n }\n\n case 'component':\n if (attribute.repeatable) {\n return <RepeatableComponent mainField={mainField} content={content} />;\n }\n\n return <SingleComponent mainField={mainField} content={content} />;\n\n case 'string':\n return (\n <Tooltip description={content}>\n <Typography maxWidth=\"30rem\" ellipsis textColor=\"neutral800\">\n <CellValue type={attribute.type} value={content} />\n </Typography>\n </Tooltip>\n );\n\n default:\n return (\n <Typography maxWidth=\"30rem\" ellipsis textColor=\"neutral800\">\n <CellValue type={attribute.type} value={content} />\n </Typography>\n );\n }\n};\n\nconst hasContent = (\n content: CellContentProps['content'],\n mainField: CellContentProps['mainField'],\n attribute: CellContentProps['attribute']\n) => {\n if (attribute.type === 'component') {\n // Repeatable fields show the ID as fallback, in case the mainField\n // doesn't have any content\n if (attribute.repeatable || !mainField) {\n return content?.length > 0;\n }\n\n const value = content?.[mainField.name];\n\n // relations, media ... show the id as fallback\n if (mainField.name === 'id' && ![undefined, null].includes(value)) {\n return true;\n }\n\n return !isEmpty(value);\n }\n\n if (attribute.type === 'relation') {\n if (isSingleRelation(attribute.relation)) {\n return !isEmpty(content);\n }\n\n if (Array.isArray(content)) {\n return content.length > 0;\n }\n\n return content?.count > 0;\n }\n\n /*\n Biginteger fields need to be treated as strings, as `isNumber`\n doesn't deal with them.\n */\n if (['integer', 'decimal', 'float', 'number'].includes(attribute.type)) {\n return typeof content === 'number';\n }\n\n if (attribute.type === 'boolean') {\n return content !== null;\n }\n\n return !isEmpty(content);\n};\n\nconst isSingleRelation = (\n type: Extract<CellContentProps['attribute'], { type: 'relation' }>['relation']\n) => ['oneToOne', 'manyToOne', 'oneToOneMorph'].includes(type);\n\nexport { CellContent };\nexport type { CellContentProps };\n"],"names":["CellContent","content","mainField","attribute","rowId","name","hasContent","_jsx","Typography","textColor","paddingLeft","type","paddingRight","multiple","MediaSingle","MediaMultiple","isSingleRelation","relation","RelationSingle","RelationMultiple","repeatable","RepeatableComponent","SingleComponent","Tooltip","description","maxWidth","ellipsis","CellValue","value","length","undefined","includes","isEmpty","Array","isArray","count"],"mappings":"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"}
1
+ {"version":3,"file":"CellContent.js","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/CellContent.tsx"],"sourcesContent":["import { Tooltip, Typography } from '@strapi/design-system';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { CellValue } from './CellValue';\nimport { SingleComponent, RepeatableComponent } from './Components';\nimport { MediaSingle, MediaMultiple } from './Media';\nimport { RelationMultiple, RelationSingle } from './Relations';\n\nimport type { ListFieldLayout } from '../../../../hooks/useDocumentLayout';\nimport type { Schema, Data } from '@strapi/types';\n\ninterface CellContentProps extends Omit<ListFieldLayout, 'cellFormatter'> {\n content: Schema.Attribute.Value<Schema.Attribute.AnyAttribute>;\n rowId: Data.ID;\n}\n\nconst CellContent = ({ content, mainField, attribute, rowId, name }: CellContentProps) => {\n if (!hasContent(content, mainField, attribute)) {\n return (\n <Typography\n textColor=\"neutral800\"\n paddingLeft={attribute.type === ('relation' || 'component') ? '1.6rem' : 0}\n paddingRight={attribute.type === ('relation' || 'component') ? '1.6rem' : 0}\n >\n -\n </Typography>\n );\n }\n\n switch (attribute.type) {\n case 'media':\n if (!attribute.multiple) {\n return <MediaSingle {...content} />;\n }\n\n return <MediaMultiple content={content} />;\n\n case 'relation': {\n if (isSingleRelation(attribute.relation)) {\n return <RelationSingle mainField={mainField} content={content} />;\n }\n\n return <RelationMultiple rowId={rowId} mainField={mainField} content={content} name={name} />;\n }\n\n case 'component':\n if (attribute.repeatable) {\n return <RepeatableComponent mainField={mainField} content={content} />;\n }\n\n return <SingleComponent mainField={mainField} content={content} />;\n\n case 'string':\n return (\n <Tooltip label={content}>\n <Typography maxWidth=\"30rem\" ellipsis textColor=\"neutral800\">\n <CellValue type={attribute.type} value={content} />\n </Typography>\n </Tooltip>\n );\n\n default:\n return (\n <Typography maxWidth=\"30rem\" ellipsis textColor=\"neutral800\">\n <CellValue type={attribute.type} value={content} />\n </Typography>\n );\n }\n};\n\nconst hasContent = (\n content: CellContentProps['content'],\n mainField: CellContentProps['mainField'],\n attribute: CellContentProps['attribute']\n) => {\n if (attribute.type === 'component') {\n // Repeatable fields show the ID as fallback, in case the mainField\n // doesn't have any content\n if (attribute.repeatable || !mainField) {\n return content?.length > 0;\n }\n\n const value = content?.[mainField.name];\n\n // relations, media ... show the id as fallback\n if (mainField.name === 'id' && ![undefined, null].includes(value)) {\n return true;\n }\n\n return !isEmpty(value);\n }\n\n if (attribute.type === 'relation') {\n if (isSingleRelation(attribute.relation)) {\n return !isEmpty(content);\n }\n\n if (Array.isArray(content)) {\n return content.length > 0;\n }\n\n return content?.count > 0;\n }\n\n /*\n Biginteger fields need to be treated as strings, as `isNumber`\n doesn't deal with them.\n */\n if (['integer', 'decimal', 'float', 'number'].includes(attribute.type)) {\n return typeof content === 'number';\n }\n\n if (attribute.type === 'boolean') {\n return content !== null;\n }\n\n return !isEmpty(content);\n};\n\nconst isSingleRelation = (\n type: Extract<CellContentProps['attribute'], { type: 'relation' }>['relation']\n) => ['oneToOne', 'manyToOne', 'oneToOneMorph'].includes(type);\n\nexport { CellContent };\nexport type { CellContentProps };\n"],"names":["CellContent","content","mainField","attribute","rowId","name","hasContent","_jsx","Typography","textColor","paddingLeft","type","paddingRight","multiple","MediaSingle","MediaMultiple","isSingleRelation","relation","RelationSingle","RelationMultiple","repeatable","RepeatableComponent","SingleComponent","Tooltip","label","maxWidth","ellipsis","CellValue","value","length","undefined","includes","isEmpty","Array","isArray","count"],"mappings":"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"}
@@ -53,7 +53,7 @@ const CellContent = ({ content, mainField, attribute, rowId, name })=>{
53
53
  });
54
54
  case 'string':
55
55
  return /*#__PURE__*/ jsx(Tooltip, {
56
- description: content,
56
+ label: content,
57
57
  children: /*#__PURE__*/ jsx(Typography, {
58
58
  maxWidth: "30rem",
59
59
  ellipsis: true,
@@ -1 +1 @@
1
- {"version":3,"file":"CellContent.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/CellContent.tsx"],"sourcesContent":["import { Tooltip, Typography } from '@strapi/design-system';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { CellValue } from './CellValue';\nimport { SingleComponent, RepeatableComponent } from './Components';\nimport { MediaSingle, MediaMultiple } from './Media';\nimport { RelationMultiple, RelationSingle } from './Relations';\n\nimport type { ListFieldLayout } from '../../../../hooks/useDocumentLayout';\nimport type { Schema, Data } from '@strapi/types';\n\ninterface CellContentProps extends Omit<ListFieldLayout, 'cellFormatter'> {\n content: Schema.Attribute.Value<Schema.Attribute.AnyAttribute>;\n rowId: Data.ID;\n}\n\nconst CellContent = ({ content, mainField, attribute, rowId, name }: CellContentProps) => {\n if (!hasContent(content, mainField, attribute)) {\n return (\n <Typography\n textColor=\"neutral800\"\n paddingLeft={attribute.type === ('relation' || 'component') ? '1.6rem' : 0}\n paddingRight={attribute.type === ('relation' || 'component') ? '1.6rem' : 0}\n >\n -\n </Typography>\n );\n }\n\n switch (attribute.type) {\n case 'media':\n if (!attribute.multiple) {\n return <MediaSingle {...content} />;\n }\n\n return <MediaMultiple content={content} />;\n\n case 'relation': {\n if (isSingleRelation(attribute.relation)) {\n return <RelationSingle mainField={mainField} content={content} />;\n }\n\n return <RelationMultiple rowId={rowId} mainField={mainField} content={content} name={name} />;\n }\n\n case 'component':\n if (attribute.repeatable) {\n return <RepeatableComponent mainField={mainField} content={content} />;\n }\n\n return <SingleComponent mainField={mainField} content={content} />;\n\n case 'string':\n return (\n <Tooltip description={content}>\n <Typography maxWidth=\"30rem\" ellipsis textColor=\"neutral800\">\n <CellValue type={attribute.type} value={content} />\n </Typography>\n </Tooltip>\n );\n\n default:\n return (\n <Typography maxWidth=\"30rem\" ellipsis textColor=\"neutral800\">\n <CellValue type={attribute.type} value={content} />\n </Typography>\n );\n }\n};\n\nconst hasContent = (\n content: CellContentProps['content'],\n mainField: CellContentProps['mainField'],\n attribute: CellContentProps['attribute']\n) => {\n if (attribute.type === 'component') {\n // Repeatable fields show the ID as fallback, in case the mainField\n // doesn't have any content\n if (attribute.repeatable || !mainField) {\n return content?.length > 0;\n }\n\n const value = content?.[mainField.name];\n\n // relations, media ... show the id as fallback\n if (mainField.name === 'id' && ![undefined, null].includes(value)) {\n return true;\n }\n\n return !isEmpty(value);\n }\n\n if (attribute.type === 'relation') {\n if (isSingleRelation(attribute.relation)) {\n return !isEmpty(content);\n }\n\n if (Array.isArray(content)) {\n return content.length > 0;\n }\n\n return content?.count > 0;\n }\n\n /*\n Biginteger fields need to be treated as strings, as `isNumber`\n doesn't deal with them.\n */\n if (['integer', 'decimal', 'float', 'number'].includes(attribute.type)) {\n return typeof content === 'number';\n }\n\n if (attribute.type === 'boolean') {\n return content !== null;\n }\n\n return !isEmpty(content);\n};\n\nconst isSingleRelation = (\n type: Extract<CellContentProps['attribute'], { type: 'relation' }>['relation']\n) => ['oneToOne', 'manyToOne', 'oneToOneMorph'].includes(type);\n\nexport { CellContent };\nexport type { CellContentProps };\n"],"names":["CellContent","content","mainField","attribute","rowId","name","hasContent","_jsx","Typography","textColor","paddingLeft","type","paddingRight","multiple","MediaSingle","MediaMultiple","isSingleRelation","relation","RelationSingle","RelationMultiple","repeatable","RepeatableComponent","SingleComponent","Tooltip","description","maxWidth","ellipsis","CellValue","value","length","undefined","includes","isEmpty","Array","isArray","count"],"mappings":"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"}
1
+ {"version":3,"file":"CellContent.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/CellContent.tsx"],"sourcesContent":["import { Tooltip, Typography } from '@strapi/design-system';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { CellValue } from './CellValue';\nimport { SingleComponent, RepeatableComponent } from './Components';\nimport { MediaSingle, MediaMultiple } from './Media';\nimport { RelationMultiple, RelationSingle } from './Relations';\n\nimport type { ListFieldLayout } from '../../../../hooks/useDocumentLayout';\nimport type { Schema, Data } from '@strapi/types';\n\ninterface CellContentProps extends Omit<ListFieldLayout, 'cellFormatter'> {\n content: Schema.Attribute.Value<Schema.Attribute.AnyAttribute>;\n rowId: Data.ID;\n}\n\nconst CellContent = ({ content, mainField, attribute, rowId, name }: CellContentProps) => {\n if (!hasContent(content, mainField, attribute)) {\n return (\n <Typography\n textColor=\"neutral800\"\n paddingLeft={attribute.type === ('relation' || 'component') ? '1.6rem' : 0}\n paddingRight={attribute.type === ('relation' || 'component') ? '1.6rem' : 0}\n >\n -\n </Typography>\n );\n }\n\n switch (attribute.type) {\n case 'media':\n if (!attribute.multiple) {\n return <MediaSingle {...content} />;\n }\n\n return <MediaMultiple content={content} />;\n\n case 'relation': {\n if (isSingleRelation(attribute.relation)) {\n return <RelationSingle mainField={mainField} content={content} />;\n }\n\n return <RelationMultiple rowId={rowId} mainField={mainField} content={content} name={name} />;\n }\n\n case 'component':\n if (attribute.repeatable) {\n return <RepeatableComponent mainField={mainField} content={content} />;\n }\n\n return <SingleComponent mainField={mainField} content={content} />;\n\n case 'string':\n return (\n <Tooltip label={content}>\n <Typography maxWidth=\"30rem\" ellipsis textColor=\"neutral800\">\n <CellValue type={attribute.type} value={content} />\n </Typography>\n </Tooltip>\n );\n\n default:\n return (\n <Typography maxWidth=\"30rem\" ellipsis textColor=\"neutral800\">\n <CellValue type={attribute.type} value={content} />\n </Typography>\n );\n }\n};\n\nconst hasContent = (\n content: CellContentProps['content'],\n mainField: CellContentProps['mainField'],\n attribute: CellContentProps['attribute']\n) => {\n if (attribute.type === 'component') {\n // Repeatable fields show the ID as fallback, in case the mainField\n // doesn't have any content\n if (attribute.repeatable || !mainField) {\n return content?.length > 0;\n }\n\n const value = content?.[mainField.name];\n\n // relations, media ... show the id as fallback\n if (mainField.name === 'id' && ![undefined, null].includes(value)) {\n return true;\n }\n\n return !isEmpty(value);\n }\n\n if (attribute.type === 'relation') {\n if (isSingleRelation(attribute.relation)) {\n return !isEmpty(content);\n }\n\n if (Array.isArray(content)) {\n return content.length > 0;\n }\n\n return content?.count > 0;\n }\n\n /*\n Biginteger fields need to be treated as strings, as `isNumber`\n doesn't deal with them.\n */\n if (['integer', 'decimal', 'float', 'number'].includes(attribute.type)) {\n return typeof content === 'number';\n }\n\n if (attribute.type === 'boolean') {\n return content !== null;\n }\n\n return !isEmpty(content);\n};\n\nconst isSingleRelation = (\n type: Extract<CellContentProps['attribute'], { type: 'relation' }>['relation']\n) => ['oneToOne', 'manyToOne', 'oneToOneMorph'].includes(type);\n\nexport { CellContent };\nexport type { CellContentProps };\n"],"names":["CellContent","content","mainField","attribute","rowId","name","hasContent","_jsx","Typography","textColor","paddingLeft","type","paddingRight","multiple","MediaSingle","MediaMultiple","isSingleRelation","relation","RelationSingle","RelationMultiple","repeatable","RepeatableComponent","SingleComponent","Tooltip","label","maxWidth","ellipsis","CellValue","value","length","undefined","includes","isEmpty","Array","isArray","count"],"mappings":"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"}
@@ -22,7 +22,7 @@ const MediaSingle = ({ url, mime, alternativeText, name, ext, formats })=>{
22
22
  const fileExtension = getFileExtension(ext);
23
23
  const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;
24
24
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tooltip, {
25
- description: fileName,
25
+ label: fileName,
26
26
  children: /*#__PURE__*/ jsxRuntime.jsx(FileWrapper, {
27
27
  children: fileExtension
28
28
  })
@@ -1 +1 @@
1
- {"version":3,"file":"Media.js","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Media.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Avatar, Flex, Tooltip, Typography, TypographyComponent } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { prefixFileUrlWithBackendUrl } from '../../../../utils/urls';\n\nimport type { Data } from '@strapi/types';\n\ninterface MediaFile {\n id?: Data.ID;\n alternativeText?: string;\n ext: string;\n formats: {\n thumbnail?: {\n url?: string;\n };\n };\n mime: string;\n name: string;\n url: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Media\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaSingleProps extends MediaFile {}\n\nconst getFileExtension = (ext: string) => (ext && ext[0] === '.' ? ext.substring(1) : ext);\n\nconst MediaSingle = ({ url, mime, alternativeText, name, ext, formats }: MediaSingleProps) => {\n const fileURL = prefixFileUrlWithBackendUrl(url)!;\n\n if (mime.includes('image')) {\n const thumbnail = formats?.thumbnail?.url;\n const mediaURL = prefixFileUrlWithBackendUrl(thumbnail) || fileURL;\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || name}\n fallback={alternativeText || name}\n preview\n />\n );\n }\n\n const fileExtension = getFileExtension(ext);\n const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;\n\n return (\n <Tooltip description={fileName}>\n <FileWrapper>{fileExtension}</FileWrapper>\n </Tooltip>\n );\n};\n\nconst FileWrapper = ({ children }: { children: React.ReactNode }) => {\n return (\n <Flex\n tag=\"span\"\n position=\"relative\"\n borderRadius=\"50%\"\n width=\"26px\"\n height=\"26px\"\n borderColor=\"neutral200\"\n background=\"neutral150\"\n paddingLeft=\"1px\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <FileTypography variant=\"sigma\" textColor=\"neutral600\">\n {children}\n </FileTypography>\n </Flex>\n );\n};\n\nconst FileTypography = styled<TypographyComponent>(Typography)`\n font-size: 0.9rem;\n line-height: 0.9rem;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * MediaMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaMultipleProps {\n content: MediaFile[];\n}\n\nconst MediaMultiple = ({ content }: MediaMultipleProps) => {\n return (\n <Avatar.Group>\n {content.map((file, index) => {\n const key = `${file.id}${index}`;\n\n if (index === 3) {\n const remainingFiles = `+${content.length - 3}`;\n\n return <FileWrapper key={key}>{remainingFiles}</FileWrapper>;\n }\n\n if (index > 3) {\n return null;\n }\n\n return <MediaSingle key={key} {...file} />;\n })}\n </Avatar.Group>\n );\n};\n\nexport { MediaMultiple, MediaSingle };\nexport type { MediaMultipleProps, MediaSingleProps };\n"],"names":["getFileExtension","ext","substring","MediaSingle","url","mime","alternativeText","name","formats","fileURL","prefixFileUrlWithBackendUrl","includes","thumbnail","mediaURL","_jsx","Avatar","Item","src","alt","fallback","preview","fileExtension","fileName","length","Tooltip","description","FileWrapper","children","Flex","tag","position","borderRadius","width","height","borderColor","background","paddingLeft","justifyContent","alignItems","FileTypography","variant","textColor","styled","Typography","MediaMultiple","content","Group","map","file","index","key","id","remainingFiles"],"mappings":"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"}
1
+ {"version":3,"file":"Media.js","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Media.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Avatar, Flex, Tooltip, Typography, TypographyComponent } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { prefixFileUrlWithBackendUrl } from '../../../../utils/urls';\n\nimport type { Data } from '@strapi/types';\n\ninterface MediaFile {\n id?: Data.ID;\n alternativeText?: string;\n ext: string;\n formats: {\n thumbnail?: {\n url?: string;\n };\n };\n mime: string;\n name: string;\n url: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Media\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaSingleProps extends MediaFile {}\n\nconst getFileExtension = (ext: string) => (ext && ext[0] === '.' ? ext.substring(1) : ext);\n\nconst MediaSingle = ({ url, mime, alternativeText, name, ext, formats }: MediaSingleProps) => {\n const fileURL = prefixFileUrlWithBackendUrl(url)!;\n\n if (mime.includes('image')) {\n const thumbnail = formats?.thumbnail?.url;\n const mediaURL = prefixFileUrlWithBackendUrl(thumbnail) || fileURL;\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || name}\n fallback={alternativeText || name}\n preview\n />\n );\n }\n\n const fileExtension = getFileExtension(ext);\n const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;\n\n return (\n <Tooltip label={fileName}>\n <FileWrapper>{fileExtension}</FileWrapper>\n </Tooltip>\n );\n};\n\nconst FileWrapper = ({ children }: { children: React.ReactNode }) => {\n return (\n <Flex\n tag=\"span\"\n position=\"relative\"\n borderRadius=\"50%\"\n width=\"26px\"\n height=\"26px\"\n borderColor=\"neutral200\"\n background=\"neutral150\"\n paddingLeft=\"1px\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <FileTypography variant=\"sigma\" textColor=\"neutral600\">\n {children}\n </FileTypography>\n </Flex>\n );\n};\n\nconst FileTypography = styled<TypographyComponent>(Typography)`\n font-size: 0.9rem;\n line-height: 0.9rem;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * MediaMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaMultipleProps {\n content: MediaFile[];\n}\n\nconst MediaMultiple = ({ content }: MediaMultipleProps) => {\n return (\n <Avatar.Group>\n {content.map((file, index) => {\n const key = `${file.id}${index}`;\n\n if (index === 3) {\n const remainingFiles = `+${content.length - 3}`;\n\n return <FileWrapper key={key}>{remainingFiles}</FileWrapper>;\n }\n\n if (index > 3) {\n return null;\n }\n\n return <MediaSingle key={key} {...file} />;\n })}\n </Avatar.Group>\n );\n};\n\nexport { MediaMultiple, MediaSingle };\nexport type { MediaMultipleProps, MediaSingleProps };\n"],"names":["getFileExtension","ext","substring","MediaSingle","url","mime","alternativeText","name","formats","fileURL","prefixFileUrlWithBackendUrl","includes","thumbnail","mediaURL","_jsx","Avatar","Item","src","alt","fallback","preview","fileExtension","fileName","length","Tooltip","label","FileWrapper","children","Flex","tag","position","borderRadius","width","height","borderColor","background","paddingLeft","justifyContent","alignItems","FileTypography","variant","textColor","styled","Typography","MediaMultiple","content","Group","map","file","index","key","id","remainingFiles"],"mappings":"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"}
@@ -20,7 +20,7 @@ const MediaSingle = ({ url, mime, alternativeText, name, ext, formats })=>{
20
20
  const fileExtension = getFileExtension(ext);
21
21
  const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;
22
22
  return /*#__PURE__*/ jsx(Tooltip, {
23
- description: fileName,
23
+ label: fileName,
24
24
  children: /*#__PURE__*/ jsx(FileWrapper, {
25
25
  children: fileExtension
26
26
  })
@@ -1 +1 @@
1
- {"version":3,"file":"Media.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Media.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Avatar, Flex, Tooltip, Typography, TypographyComponent } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { prefixFileUrlWithBackendUrl } from '../../../../utils/urls';\n\nimport type { Data } from '@strapi/types';\n\ninterface MediaFile {\n id?: Data.ID;\n alternativeText?: string;\n ext: string;\n formats: {\n thumbnail?: {\n url?: string;\n };\n };\n mime: string;\n name: string;\n url: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Media\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaSingleProps extends MediaFile {}\n\nconst getFileExtension = (ext: string) => (ext && ext[0] === '.' ? ext.substring(1) : ext);\n\nconst MediaSingle = ({ url, mime, alternativeText, name, ext, formats }: MediaSingleProps) => {\n const fileURL = prefixFileUrlWithBackendUrl(url)!;\n\n if (mime.includes('image')) {\n const thumbnail = formats?.thumbnail?.url;\n const mediaURL = prefixFileUrlWithBackendUrl(thumbnail) || fileURL;\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || name}\n fallback={alternativeText || name}\n preview\n />\n );\n }\n\n const fileExtension = getFileExtension(ext);\n const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;\n\n return (\n <Tooltip description={fileName}>\n <FileWrapper>{fileExtension}</FileWrapper>\n </Tooltip>\n );\n};\n\nconst FileWrapper = ({ children }: { children: React.ReactNode }) => {\n return (\n <Flex\n tag=\"span\"\n position=\"relative\"\n borderRadius=\"50%\"\n width=\"26px\"\n height=\"26px\"\n borderColor=\"neutral200\"\n background=\"neutral150\"\n paddingLeft=\"1px\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <FileTypography variant=\"sigma\" textColor=\"neutral600\">\n {children}\n </FileTypography>\n </Flex>\n );\n};\n\nconst FileTypography = styled<TypographyComponent>(Typography)`\n font-size: 0.9rem;\n line-height: 0.9rem;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * MediaMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaMultipleProps {\n content: MediaFile[];\n}\n\nconst MediaMultiple = ({ content }: MediaMultipleProps) => {\n return (\n <Avatar.Group>\n {content.map((file, index) => {\n const key = `${file.id}${index}`;\n\n if (index === 3) {\n const remainingFiles = `+${content.length - 3}`;\n\n return <FileWrapper key={key}>{remainingFiles}</FileWrapper>;\n }\n\n if (index > 3) {\n return null;\n }\n\n return <MediaSingle key={key} {...file} />;\n })}\n </Avatar.Group>\n );\n};\n\nexport { MediaMultiple, MediaSingle };\nexport type { MediaMultipleProps, MediaSingleProps };\n"],"names":["getFileExtension","ext","substring","MediaSingle","url","mime","alternativeText","name","formats","fileURL","prefixFileUrlWithBackendUrl","includes","thumbnail","mediaURL","_jsx","Avatar","Item","src","alt","fallback","preview","fileExtension","fileName","length","Tooltip","description","FileWrapper","children","Flex","tag","position","borderRadius","width","height","borderColor","background","paddingLeft","justifyContent","alignItems","FileTypography","variant","textColor","styled","Typography","MediaMultiple","content","Group","map","file","index","key","id","remainingFiles"],"mappings":"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"}
1
+ {"version":3,"file":"Media.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Media.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Avatar, Flex, Tooltip, Typography, TypographyComponent } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { prefixFileUrlWithBackendUrl } from '../../../../utils/urls';\n\nimport type { Data } from '@strapi/types';\n\ninterface MediaFile {\n id?: Data.ID;\n alternativeText?: string;\n ext: string;\n formats: {\n thumbnail?: {\n url?: string;\n };\n };\n mime: string;\n name: string;\n url: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Media\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaSingleProps extends MediaFile {}\n\nconst getFileExtension = (ext: string) => (ext && ext[0] === '.' ? ext.substring(1) : ext);\n\nconst MediaSingle = ({ url, mime, alternativeText, name, ext, formats }: MediaSingleProps) => {\n const fileURL = prefixFileUrlWithBackendUrl(url)!;\n\n if (mime.includes('image')) {\n const thumbnail = formats?.thumbnail?.url;\n const mediaURL = prefixFileUrlWithBackendUrl(thumbnail) || fileURL;\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || name}\n fallback={alternativeText || name}\n preview\n />\n );\n }\n\n const fileExtension = getFileExtension(ext);\n const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;\n\n return (\n <Tooltip label={fileName}>\n <FileWrapper>{fileExtension}</FileWrapper>\n </Tooltip>\n );\n};\n\nconst FileWrapper = ({ children }: { children: React.ReactNode }) => {\n return (\n <Flex\n tag=\"span\"\n position=\"relative\"\n borderRadius=\"50%\"\n width=\"26px\"\n height=\"26px\"\n borderColor=\"neutral200\"\n background=\"neutral150\"\n paddingLeft=\"1px\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <FileTypography variant=\"sigma\" textColor=\"neutral600\">\n {children}\n </FileTypography>\n </Flex>\n );\n};\n\nconst FileTypography = styled<TypographyComponent>(Typography)`\n font-size: 0.9rem;\n line-height: 0.9rem;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * MediaMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaMultipleProps {\n content: MediaFile[];\n}\n\nconst MediaMultiple = ({ content }: MediaMultipleProps) => {\n return (\n <Avatar.Group>\n {content.map((file, index) => {\n const key = `${file.id}${index}`;\n\n if (index === 3) {\n const remainingFiles = `+${content.length - 3}`;\n\n return <FileWrapper key={key}>{remainingFiles}</FileWrapper>;\n }\n\n if (index > 3) {\n return null;\n }\n\n return <MediaSingle key={key} {...file} />;\n })}\n </Avatar.Group>\n );\n};\n\nexport { MediaMultiple, MediaSingle };\nexport type { MediaMultipleProps, MediaSingleProps };\n"],"names":["getFileExtension","ext","substring","MediaSingle","url","mime","alternativeText","name","formats","fileURL","prefixFileUrlWithBackendUrl","includes","thumbnail","mediaURL","_jsx","Avatar","Item","src","alt","fallback","preview","fileExtension","fileName","length","Tooltip","label","FileWrapper","children","Flex","tag","position","borderRadius","width","height","borderColor","background","paddingLeft","justifyContent","alignItems","FileTypography","variant","textColor","styled","Typography","MediaMultiple","content","Group","map","file","index","key","id","remainingFiles"],"mappings":"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"}