@strapi/content-manager 5.49.0 → 5.50.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. package/dist/admin/components/ComponentIcon.js.map +1 -1
  2. package/dist/admin/components/ComponentIcon.mjs.map +1 -1
  3. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  4. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  5. package/dist/admin/components/DragLayer.js.map +1 -1
  6. package/dist/admin/components/DragLayer.mjs.map +1 -1
  7. package/dist/admin/components/LeftMenu.js +66 -67
  8. package/dist/admin/components/LeftMenu.js.map +1 -1
  9. package/dist/admin/components/LeftMenu.mjs +68 -69
  10. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  11. package/dist/admin/history/components/VersionInputRenderer.js +3 -3
  12. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  13. package/dist/admin/history/components/VersionInputRenderer.mjs +3 -3
  14. package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
  15. package/dist/admin/history/routes.js.map +1 -1
  16. package/dist/admin/history/routes.mjs.map +1 -1
  17. package/dist/admin/hooks/useDocumentActions.js +15 -8
  18. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  19. package/dist/admin/hooks/useDocumentActions.mjs +15 -8
  20. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  21. package/dist/admin/hooks/useDocumentContext.js.map +1 -1
  22. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -1
  23. package/dist/admin/index.js.map +1 -1
  24. package/dist/admin/index.mjs.map +1 -1
  25. package/dist/admin/layout.js +21 -7
  26. package/dist/admin/layout.js.map +1 -1
  27. package/dist/admin/layout.mjs +23 -9
  28. package/dist/admin/layout.mjs.map +1 -1
  29. package/dist/admin/pages/ComponentConfigurationPage.js.map +1 -1
  30. package/dist/admin/pages/ComponentConfigurationPage.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/components/DocumentActions.js +168 -78
  32. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  33. package/dist/admin/pages/EditView/components/DocumentActions.mjs +168 -79
  34. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +6 -3
  36. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +6 -3
  38. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js +1 -1
  40. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs +1 -1
  42. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  44. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js.map +1 -1
  46. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +1 -1
  48. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +1 -1
  50. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +2 -1
  52. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +2 -1
  54. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +6 -1
  56. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +2 -1
  58. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +6 -2
  60. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +3 -2
  62. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +6 -1
  64. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +6 -1
  66. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +8 -5
  68. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +8 -5
  70. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/UID.js +5 -4
  72. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +5 -4
  74. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  76. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js +2 -2
  78. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs +2 -2
  80. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js.map +1 -1
  82. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs.map +1 -1
  83. package/dist/admin/pages/EditView/components/Panels.js.map +1 -1
  84. package/dist/admin/pages/EditView/components/Panels.mjs.map +1 -1
  85. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  86. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  87. package/dist/admin/pages/EditView/utils/draftRelationCounts.js +117 -0
  88. package/dist/admin/pages/EditView/utils/draftRelationCounts.js.map +1 -0
  89. package/dist/admin/pages/EditView/utils/draftRelationCounts.mjs +109 -0
  90. package/dist/admin/pages/EditView/utils/draftRelationCounts.mjs.map +1 -0
  91. package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
  92. package/dist/admin/pages/ListConfiguration/components/Settings.mjs.map +1 -1
  93. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.js.map +1 -1
  94. package/dist/admin/pages/ListConfiguration/components/SortDisplayedFields.mjs.map +1 -1
  95. package/dist/admin/pages/ListView/ListViewPage.js +71 -11
  96. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  97. package/dist/admin/pages/ListView/ListViewPage.mjs +73 -13
  98. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  99. package/dist/admin/pages/ListView/components/BulkActions/Actions.js +2 -1
  100. package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
  101. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs +2 -1
  102. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs.map +1 -1
  103. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +1 -1
  104. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  105. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +1 -1
  106. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  107. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  108. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  109. package/dist/admin/pages/ListView/components/Filters.js +5 -3
  110. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  111. package/dist/admin/pages/ListView/components/Filters.mjs +5 -3
  112. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  113. package/dist/admin/pages/ListView/components/TableActions.js +37 -0
  114. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  115. package/dist/admin/pages/ListView/components/TableActions.mjs +39 -2
  116. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  117. package/dist/admin/pages/ListView/components/TableCells/CellContent.js +28 -3
  118. package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
  119. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +28 -4
  120. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
  121. package/dist/admin/pages/ListView/components/TableCells/CellValue.js +8 -7
  122. package/dist/admin/pages/ListView/components/TableCells/CellValue.js.map +1 -1
  123. package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs +8 -7
  124. package/dist/admin/pages/ListView/components/TableCells/CellValue.mjs.map +1 -1
  125. package/dist/admin/pages/ListView/components/TableCells/Components.js.map +1 -1
  126. package/dist/admin/pages/ListView/components/TableCells/Components.mjs.map +1 -1
  127. package/dist/admin/pages/ListView/components/TableCells/Relations.js +1 -1
  128. package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
  129. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +1 -1
  130. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
  131. package/dist/admin/preview/pages/Preview.js +40 -11
  132. package/dist/admin/preview/pages/Preview.js.map +1 -1
  133. package/dist/admin/preview/pages/Preview.mjs +41 -12
  134. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  135. package/dist/admin/preview/routes.js.map +1 -1
  136. package/dist/admin/preview/routes.mjs.map +1 -1
  137. package/dist/admin/preview/utils/constants.js +9 -15
  138. package/dist/admin/preview/utils/constants.js.map +1 -1
  139. package/dist/admin/preview/utils/constants.mjs +10 -15
  140. package/dist/admin/preview/utils/constants.mjs.map +1 -1
  141. package/dist/admin/preview/utils/fieldUtils.js.map +1 -1
  142. package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -1
  143. package/dist/admin/router.js.map +1 -1
  144. package/dist/admin/router.mjs.map +1 -1
  145. package/dist/admin/services/documents.js.map +1 -1
  146. package/dist/admin/services/documents.mjs.map +1 -1
  147. package/dist/admin/src/components/ComponentIcon.d.ts +4 -3
  148. package/dist/admin/src/components/DragLayer.d.ts +1 -1
  149. package/dist/admin/src/components/InjectionZone.d.ts +1 -2
  150. package/dist/admin/src/content-manager.d.ts +15 -15
  151. package/dist/admin/src/history/routes.d.ts +2 -2
  152. package/dist/admin/src/history/services/historyVersion.d.ts +3 -3
  153. package/dist/admin/src/hooks/useContentTypeSchema.d.ts +1 -1
  154. package/dist/admin/src/hooks/useDocument.d.ts +8 -9
  155. package/dist/admin/src/hooks/useDocumentActions.d.ts +17 -16
  156. package/dist/admin/src/hooks/useDocumentContext.d.ts +1 -1
  157. package/dist/admin/src/hooks/useDocumentLayout.d.ts +3 -3
  158. package/dist/admin/src/hooks/useDragAndDrop.d.ts +4 -4
  159. package/dist/admin/src/hooks/useKeyboardDragAndDrop.d.ts +1 -1
  160. package/dist/admin/src/hooks/usePersistentQueryParams.d.ts +0 -1
  161. package/dist/admin/src/index.d.ts +1 -1
  162. package/dist/admin/src/modules/app.d.ts +5 -5
  163. package/dist/admin/src/pages/EditView/EditViewPage.d.ts +1 -1
  164. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +12 -1
  165. package/dist/admin/src/pages/EditView/components/EditorToolbarObserver.d.ts +1 -1
  166. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +1 -1
  167. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.d.ts +2 -2
  168. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -2
  169. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +4 -4
  170. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -1
  171. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/Editor.d.ts +1 -1
  172. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +2 -2
  173. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +19 -20
  174. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.d.ts +7 -1
  175. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +12 -12
  176. package/dist/admin/src/pages/EditView/utils/draftRelationCounts.d.ts +26 -0
  177. package/dist/admin/src/pages/ListView/components/BulkActions/PublishAction.d.ts +1 -1
  178. package/dist/admin/src/pages/ListView/components/Filters.d.ts +1 -1
  179. package/dist/admin/src/pages/ListView/components/TableCells/CellContent.d.ts +11 -2
  180. package/dist/admin/src/pages/ListView/components/TableCells/CellValue.d.ts +1 -1
  181. package/dist/admin/src/pages/formatComponentConfigurationEditLayout.d.ts +1 -1
  182. package/dist/admin/src/preview/routes.d.ts +2 -2
  183. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  184. package/dist/admin/src/preview/utils/constants.d.ts +1 -7
  185. package/dist/admin/src/preview/utils/getSendMessage.d.ts +0 -1
  186. package/dist/admin/src/router.d.ts +2 -2
  187. package/dist/admin/src/services/api.d.ts +1 -1
  188. package/dist/admin/src/services/components.d.ts +2 -2
  189. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  190. package/dist/admin/src/services/documents.d.ts +49 -89
  191. package/dist/admin/src/services/homepage.d.ts +1 -1
  192. package/dist/admin/src/services/init.d.ts +1 -1
  193. package/dist/admin/src/services/relations.d.ts +8 -22
  194. package/dist/admin/src/services/uid.d.ts +8 -8
  195. package/dist/admin/src/utils/api.d.ts +2 -2
  196. package/dist/admin/src/utils/conditionalFields.d.ts +1 -0
  197. package/dist/admin/src/utils/layouts/normalizeContentManagerLayout.d.ts +4 -4
  198. package/dist/admin/src/utils/objects.d.ts +7 -4
  199. package/dist/admin/src/utils/users.d.ts +1 -1
  200. package/dist/admin/src/utils/validation.d.ts +2 -1
  201. package/dist/admin/translations/en.json.js +6 -2
  202. package/dist/admin/translations/en.json.js.map +1 -1
  203. package/dist/admin/translations/en.json.mjs +6 -2
  204. package/dist/admin/translations/en.json.mjs.map +1 -1
  205. package/dist/admin/translations/ja.json.js +262 -87
  206. package/dist/admin/translations/ja.json.js.map +1 -1
  207. package/dist/admin/translations/ja.json.mjs +262 -87
  208. package/dist/admin/translations/ja.json.mjs.map +1 -1
  209. package/dist/admin/utils/api.js +6 -1
  210. package/dist/admin/utils/api.js.map +1 -1
  211. package/dist/admin/utils/api.mjs +6 -1
  212. package/dist/admin/utils/api.mjs.map +1 -1
  213. package/dist/admin/utils/conditionalFields.js.map +1 -1
  214. package/dist/admin/utils/conditionalFields.mjs.map +1 -1
  215. package/dist/admin/utils/objects.js +43 -13
  216. package/dist/admin/utils/objects.js.map +1 -1
  217. package/dist/admin/utils/objects.mjs +43 -13
  218. package/dist/admin/utils/objects.mjs.map +1 -1
  219. package/dist/admin/utils/validation.js.map +1 -1
  220. package/dist/admin/utils/validation.mjs.map +1 -1
  221. package/dist/server/controllers/collection-types.js +6 -3
  222. package/dist/server/controllers/collection-types.js.map +1 -1
  223. package/dist/server/controllers/collection-types.mjs +6 -3
  224. package/dist/server/controllers/collection-types.mjs.map +1 -1
  225. package/dist/server/controllers/relations.js +5 -4
  226. package/dist/server/controllers/relations.js.map +1 -1
  227. package/dist/server/controllers/relations.mjs +5 -4
  228. package/dist/server/controllers/relations.mjs.map +1 -1
  229. package/dist/server/controllers/single-types.js +2 -2
  230. package/dist/server/controllers/single-types.js.map +1 -1
  231. package/dist/server/controllers/single-types.mjs +2 -2
  232. package/dist/server/controllers/single-types.mjs.map +1 -1
  233. package/dist/server/controllers/validation/model-configuration.js +3 -1
  234. package/dist/server/controllers/validation/model-configuration.js.map +1 -1
  235. package/dist/server/controllers/validation/model-configuration.mjs +3 -1
  236. package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
  237. package/dist/server/homepage/services/homepage.js +27 -7
  238. package/dist/server/homepage/services/homepage.js.map +1 -1
  239. package/dist/server/homepage/services/homepage.mjs +27 -7
  240. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  241. package/dist/server/preview/controllers/preview.js +9 -0
  242. package/dist/server/preview/controllers/preview.js.map +1 -1
  243. package/dist/server/preview/controllers/preview.mjs +9 -0
  244. package/dist/server/preview/controllers/preview.mjs.map +1 -1
  245. package/dist/server/preview/controllers/previewScript.js +1450 -0
  246. package/dist/server/preview/routes/preview.js +11 -0
  247. package/dist/server/preview/routes/preview.js.map +1 -1
  248. package/dist/server/preview/routes/preview.mjs +11 -0
  249. package/dist/server/preview/routes/preview.mjs.map +1 -1
  250. package/dist/server/services/document-manager.js +13 -19
  251. package/dist/server/services/document-manager.js.map +1 -1
  252. package/dist/server/services/document-manager.mjs +13 -19
  253. package/dist/server/services/document-manager.mjs.map +1 -1
  254. package/dist/server/services/permission.js +4 -3
  255. package/dist/server/services/permission.js.map +1 -1
  256. package/dist/server/services/permission.mjs +4 -3
  257. package/dist/server/services/permission.mjs.map +1 -1
  258. package/dist/server/services/utils/draft-relations.js +9 -0
  259. package/dist/server/services/utils/draft-relations.js.map +1 -0
  260. package/dist/server/services/utils/draft-relations.mjs +7 -0
  261. package/dist/server/services/utils/draft-relations.mjs.map +1 -0
  262. package/dist/server/services/utils/draft.js +118 -25
  263. package/dist/server/services/utils/draft.js.map +1 -1
  264. package/dist/server/services/utils/draft.mjs +118 -25
  265. package/dist/server/services/utils/draft.mjs.map +1 -1
  266. package/dist/server/services/utils/populate.js +15 -1
  267. package/dist/server/services/utils/populate.js.map +1 -1
  268. package/dist/server/services/utils/populate.mjs +15 -1
  269. package/dist/server/services/utils/populate.mjs.map +1 -1
  270. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  271. package/dist/server/src/controllers/index.d.ts +1 -1
  272. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  273. package/dist/server/src/controllers/utils/clone.d.ts.map +1 -1
  274. package/dist/server/src/controllers/utils/document-status.d.ts +1 -1
  275. package/dist/server/src/controllers/utils/document-status.d.ts.map +1 -1
  276. package/dist/server/src/controllers/utils/metadata.d.ts +5 -5
  277. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  278. package/dist/server/src/controllers/validation/dimensions.d.ts.map +1 -1
  279. package/dist/server/src/controllers/validation/index.d.ts +3 -3
  280. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  281. package/dist/server/src/controllers/validation/model-configuration.d.ts.map +1 -1
  282. package/dist/server/src/controllers/validation/relations.d.ts +2 -2
  283. package/dist/server/src/history/controllers/history-version.d.ts +1 -7
  284. package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
  285. package/dist/server/src/history/controllers/index.d.ts +2 -1
  286. package/dist/server/src/history/controllers/index.d.ts.map +1 -1
  287. package/dist/server/src/history/controllers/validation/history-version.d.ts +1 -1
  288. package/dist/server/src/history/services/history.d.ts +0 -2
  289. package/dist/server/src/history/services/history.d.ts.map +1 -1
  290. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  291. package/dist/server/src/history/services/utils.d.ts +3 -3
  292. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  293. package/dist/server/src/history/utils.d.ts +1 -18
  294. package/dist/server/src/history/utils.d.ts.map +1 -1
  295. package/dist/server/src/homepage/controllers/homepage.d.ts +0 -1
  296. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -1
  297. package/dist/server/src/homepage/controllers/index.d.ts +2 -1
  298. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -1
  299. package/dist/server/src/homepage/index.d.ts +4 -8
  300. package/dist/server/src/homepage/index.d.ts.map +1 -1
  301. package/dist/server/src/homepage/services/homepage-query-utils.d.ts.map +1 -1
  302. package/dist/server/src/homepage/services/homepage.d.ts +3 -4
  303. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  304. package/dist/server/src/homepage/services/index.d.ts +4 -8
  305. package/dist/server/src/homepage/services/index.d.ts.map +1 -1
  306. package/dist/server/src/index.d.ts +79 -85
  307. package/dist/server/src/index.d.ts.map +1 -1
  308. package/dist/server/src/mcp/derive-content-type-mcp-tools.d.ts.map +1 -1
  309. package/dist/server/src/mcp/handlers/collection-handlers.d.ts.map +1 -1
  310. package/dist/server/src/mcp/handlers/single-type-handlers.d.ts.map +1 -1
  311. package/dist/server/src/mcp/permissions.d.ts +1 -1
  312. package/dist/server/src/mcp/permissions.d.ts.map +1 -1
  313. package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts.map +1 -1
  314. package/dist/server/src/mcp/sanitizers/shape-relations.d.ts.map +1 -1
  315. package/dist/server/src/mcp/schemas/blocks-schema.d.ts.map +1 -1
  316. package/dist/server/src/mcp/schemas/data-schema.d.ts.map +1 -1
  317. package/dist/server/src/mcp/schemas/filters-schema.d.ts.map +1 -1
  318. package/dist/server/src/mcp/schemas/output-schemas.d.ts.map +1 -1
  319. package/dist/server/src/mcp/schemas/sort-schema.d.ts.map +1 -1
  320. package/dist/server/src/mcp/utils.d.ts.map +1 -1
  321. package/dist/server/src/middlewares/routing.d.ts.map +1 -1
  322. package/dist/server/src/policies/hasPermissions.d.ts.map +1 -1
  323. package/dist/server/src/policies/index.d.ts.map +1 -1
  324. package/dist/server/src/preview/controllers/index.d.ts +2 -1
  325. package/dist/server/src/preview/controllers/index.d.ts.map +1 -1
  326. package/dist/server/src/preview/controllers/preview.d.ts +5 -0
  327. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -1
  328. package/dist/server/src/preview/controllers/validation/preview.d.ts +1 -2
  329. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -1
  330. package/dist/server/src/preview/routes/preview.d.ts.map +1 -1
  331. package/dist/server/src/preview/services/index.d.ts +1 -1
  332. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  333. package/dist/server/src/preview/services/preview-config.d.ts +1 -1
  334. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  335. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  336. package/dist/server/src/preview/utils.d.ts +1 -16
  337. package/dist/server/src/preview/utils.d.ts.map +1 -1
  338. package/dist/server/src/services/components.d.ts +2 -2
  339. package/dist/server/src/services/components.d.ts.map +1 -1
  340. package/dist/server/src/services/configuration.d.ts.map +1 -1
  341. package/dist/server/src/services/content-types.d.ts.map +1 -1
  342. package/dist/server/src/services/data-mapper.d.ts +5 -5
  343. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  344. package/dist/server/src/services/document-manager.d.ts +14 -14
  345. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  346. package/dist/server/src/services/document-metadata.d.ts +6 -6
  347. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  348. package/dist/server/src/services/field-sizes.d.ts +2 -2
  349. package/dist/server/src/services/field-sizes.d.ts.map +1 -1
  350. package/dist/server/src/services/index.d.ts +78 -84
  351. package/dist/server/src/services/index.d.ts.map +1 -1
  352. package/dist/server/src/services/metrics.d.ts.map +1 -1
  353. package/dist/server/src/services/permission-checker.d.ts +12 -31
  354. package/dist/server/src/services/permission-checker.d.ts.map +1 -1
  355. package/dist/server/src/services/permission.d.ts.map +1 -1
  356. package/dist/server/src/services/populate-builder.d.ts +4 -4
  357. package/dist/server/src/services/populate-builder.d.ts.map +1 -1
  358. package/dist/server/src/services/uid.d.ts.map +1 -1
  359. package/dist/server/src/services/utils/configuration/attributes.d.ts.map +1 -1
  360. package/dist/server/src/services/utils/configuration/settings.d.ts.map +1 -1
  361. package/dist/server/src/services/utils/count.d.ts.map +1 -1
  362. package/dist/server/src/services/utils/draft-relations.d.ts +19 -0
  363. package/dist/server/src/services/utils/draft-relations.d.ts.map +1 -0
  364. package/dist/server/src/services/utils/draft.d.ts +8 -7
  365. package/dist/server/src/services/utils/draft.d.ts.map +1 -1
  366. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  367. package/dist/server/src/services/utils/store.d.ts.map +1 -1
  368. package/dist/server/src/utils/index.d.ts.map +1 -1
  369. package/dist/server/src/validation/policies/hasPermissions.d.ts +1 -1
  370. package/dist/server/src/validation/zod.d.ts +1 -1
  371. package/dist/server/src/validation/zod.d.ts.map +1 -1
  372. package/dist/shared/contracts/collection-types.d.ts +4 -1
  373. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  374. package/dist/shared/contracts/single-types.d.ts +4 -1
  375. package/dist/shared/contracts/single-types.d.ts.map +1 -1
  376. package/package.json +9 -9
  377. package/dist/admin/preview/utils/previewScript.js +0 -1068
  378. package/dist/admin/preview/utils/previewScript.js.map +0 -1
  379. package/dist/admin/preview/utils/previewScript.mjs +0 -1066
  380. package/dist/admin/preview/utils/previewScript.mjs.map +0 -1
  381. package/dist/admin/src/preview/utils/previewScript.d.ts +0 -32
@@ -1 +1 @@
1
- {"version":3,"file":"Relations.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Relations/Relations.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n type InputProps,\n useField,\n useForm,\n useNotification,\n useFocusInputField,\n useRBAC,\n useIsDesktop,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Combobox,\n ComboboxOption,\n Flex,\n IconButton,\n TextButton,\n Typography,\n VisuallyHidden,\n useComposedRefs,\n Link,\n Field,\n FlexComponent,\n BoxComponent,\n EmptyStateLayout,\n} from '@strapi/design-system';\nimport { Cross, Drag, ArrowClockwise, Link as LinkIcon, Plus, WarningCircle } from '@strapi/icons';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport pipe from 'lodash/fp/pipe';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { FixedSizeList, ListChildComponentProps } from 'react-window';\nimport { styled } from 'styled-components';\n\nimport { RelationDragPreviewProps } from '../../../../../components/DragPreviews/RelationDragPreview';\nimport { COLLECTION_TYPES } from '../../../../../constants/collections';\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { PERMISSIONS } from '../../../../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../../../../features/DocumentRBAC';\nimport { useDebounce } from '../../../../../hooks/useDebounce';\nimport { useDocument } from '../../../../../hooks/useDocument';\nimport { type DocumentMeta, useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout } from '../../../../../hooks/useDocumentLayout';\nimport {\n DROP_SENSITIVITY,\n UseDragAndDropOptions,\n useDragAndDrop,\n} from '../../../../../hooks/useDragAndDrop';\nimport {\n useGetRelationsQuery,\n useLazySearchRelationsQuery,\n RelationResult,\n} from '../../../../../services/relations';\nimport { type MainField } from '../../../../../utils/attributes';\nimport { getRelationLabel } from '../../../../../utils/relations';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { DocumentStatus } from '../../DocumentStatus';\nimport { useComponent } from '../ComponentContext';\nimport { RelationModalRenderer, getCollectionType } from '../Relations/RelationModal';\n\nimport type { FindAvailable } from '../../../../../../../shared/contracts/relations';\nimport type { Schema } from '@strapi/types';\n\n/**\n * Remove a relation, whether it's been already saved or not.\n * It's used both in RelationsList, where the \"remove relation\" button is, and in the input,\n * because we sometimes need to remove a previous relation when selecting a new one.\n */\nfunction useHandleDisconnect(fieldName: string, consumerName: string) {\n const field = useField(fieldName);\n const removeFieldRow = useForm(consumerName, (state) => state.removeFieldRow);\n const addFieldRow = useForm(consumerName, (state) => state.addFieldRow);\n\n const handleDisconnect = React.useCallback<ListItemProps['data']['handleDisconnect']>(\n (relation) => {\n if (field.value && field.value.connect) {\n /**\n * A relation will exist in the `connect` array _if_ it has\n * been added without saving. In this case, we just remove it\n * from the connect array\n */\n const indexOfRelationInConnectArray = field.value.connect.findIndex(\n (rel: NonNullable<RelationsFormValue['connect']>[number]) => rel.id === relation.id\n );\n\n if (indexOfRelationInConnectArray >= 0) {\n removeFieldRow(`${fieldName}.connect`, indexOfRelationInConnectArray);\n return;\n }\n }\n\n addFieldRow(`${fieldName}.disconnect`, {\n id: relation.id,\n apiData: {\n id: relation.id,\n documentId: relation.documentId,\n locale: relation.locale,\n },\n });\n },\n [addFieldRow, field.value, fieldName, removeFieldRow]\n );\n\n return handleDisconnect;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * RelationsField\n * -----------------------------------------------------------------------------------------------*/\n\nconst RELATIONS_TO_DISPLAY = 5;\nconst ONE_WAY_RELATIONS = ['oneWay', 'oneToOne', 'manyToOne', 'oneToManyMorph', 'oneToOneMorph'];\nconst EMPTY_RELATION_RESULTS: RelationResult[] = [];\n\ntype RelationPosition =\n | (Pick<RelationResult, 'status' | 'locale'> & {\n before: string;\n end?: never;\n })\n | { end: boolean; before?: never; status?: never; locale?: never };\n\ninterface Relation extends Pick<RelationResult, 'documentId' | 'id' | 'locale' | 'status'> {\n href: string;\n label: string;\n position?: RelationPosition;\n __temp_key__: string;\n apiData?: {\n documentId: RelationResult['documentId'];\n id: RelationResult['id'];\n locale?: RelationResult['locale'];\n position: RelationPosition;\n // Added this property to prevent call useDocument with a not temporary relation (one already saved in the database)\n isTemporary?: boolean;\n };\n}\n\ninterface RelationsFieldProps\n extends Omit<Extract<EditFieldLayout, { type: 'relation' }>, 'size' | 'hint'>,\n Pick<InputProps, 'hint'> {}\n\nexport interface RelationsFormValue {\n connect?: Relation[];\n disconnect?: Pick<Relation, 'id'>[];\n}\n\n/**\n * TODO: we get a rather ugly flash when we remove a single relation from the list leaving\n * no other relations when we press save. The initial relation re-renders, probably because\n * of the lag in the Form cleaning it's \"disconnect\" array, whilst our data has not been invalidated.\n *\n * Could we invalidate relation data on the document actions? Should we?\n */\n\n/**\n * @internal\n * @description The relations field holds a lot of domain logic for handling relations which is rather complicated\n * At present we do not expose this to plugin developers, however, they are able to overwrite it themselves should\n * they wish to do so.\n */\nconst RelationsField = React.forwardRef<HTMLDivElement, RelationsFieldProps>(\n ({ disabled, label, ...props }, ref) => {\n const { currentDocument, currentDocumentMeta } = useDocumentContext('RelationsField');\n\n const [currentPage, setCurrentPage] = React.useState(1);\n\n // Use the documentId from the actual document, not the params (meta)\n const documentId = currentDocument.document?.documentId;\n\n const { formatMessage } = useIntl();\n\n const isMorph = props.attribute.relation.toLowerCase().includes('morph');\n const isDisabled = isMorph || disabled;\n // @ts-expect-error – `targetModel` exists on supported non-morph relations (morph is disabled).\n const targetModel = props.attribute.targetModel;\n\n const componentId = useComponent('RelationsField', (state) => state.id);\n const componentUID = useComponent('RelationsField', (state) => state.uid);\n\n const isSubmitting = useForm('RelationsList', (state) => state.isSubmitting);\n\n React.useEffect(() => {\n setCurrentPage(1);\n }, [isSubmitting]);\n\n const component = componentUID ? currentDocument.components[componentUID] : undefined;\n\n /**\n * We'll always have a documentId in a created entry, so we look for a componentId first.\n * Same with `uid` and `documentModel`.\n * The componentId is empty when adding a new component in a repeatable. Let it be null to skip isRelatedToCurrentDocument\n */\n const model = componentUID || currentDocumentMeta.model;\n const id = componentUID ? componentId?.toString() : documentId;\n\n /**\n * The `name` prop is a complete path to the field, e.g. `field1.field2.field3`.\n * Where the above example would a nested field within two components, however\n * we only require the field on the component not the complete path since we query\n * individual components. Therefore we split the string and take the last item.\n */\n const [targetField] = props.name.split('.').slice(-1);\n\n const schemaAttributes = component\n ? (component.attributes ?? {})\n : (currentDocument.schema?.attributes ?? {});\n\n /**\n * Confirm the target field is related to the current document.\n * Since relations can exist in a modal on top of the root document,\n * we need to ensure we are fetching relations for the correct document (root document vs related document),\n */\n const isRelatedToCurrentDocument =\n Object.values(schemaAttributes).filter(\n (attribute) =>\n attribute.type === 'relation' &&\n 'target' in attribute &&\n 'target' in props.attribute &&\n attribute.target === props.attribute.target\n ).length > 0;\n\n const { data, isLoading, isFetching } = useGetRelationsQuery(\n {\n model,\n targetField,\n // below we don't run the query if there is no id.\n id,\n params: {\n ...currentDocumentMeta.params,\n pageSize: RELATIONS_TO_DISPLAY,\n page: currentPage,\n },\n },\n {\n refetchOnMountOrArgChange: true,\n skip: !id || !isRelatedToCurrentDocument,\n }\n );\n\n const handleLoadMore = () => {\n setCurrentPage((prev) => prev + 1);\n };\n\n const field = useField(props.name);\n const serverData = data?.results ?? EMPTY_RELATION_RESULTS;\n\n const isFetchingMoreRelations = isLoading || isFetching;\n\n const realServerRelationsCount = data?.pagination ? data.pagination.total : 0;\n\n /**\n * Items that are already connected, but reordered would be in\n * this list, so to get an accurate figure, we remove them.\n */\n const relationsConnected =\n (field.value?.connect ?? []).filter(\n (rel: Relation) => serverData.findIndex((relation) => relation.id === rel.id) === -1\n ).length ?? 0;\n const relationsDisconnected = field.value?.disconnect?.length ?? 0;\n\n const relationsCount = realServerRelationsCount + relationsConnected - relationsDisconnected;\n\n /**\n * This is it, the source of truth for reordering in conjunction with partial loading & updating\n * of relations. Relations on load are given __temp_key__ when fetched, because we don't want to\n * create brand new keys everytime the data updates, just keep adding them onto the newly loaded ones.\n */\n const relations = React.useMemo(() => {\n const ctx = {\n field: field.value,\n href: `../${COLLECTION_TYPES}/${targetModel}`,\n mainField: props.mainField,\n };\n\n /**\n * Tidy up our data.\n */\n const transformations = pipe(\n removeConnected(ctx),\n removeDisconnected(ctx),\n addLabelAndHref(ctx)\n );\n\n const transformedRels = transformations([...serverData]);\n\n /**\n * Connect items (e.g. from fill-from-locale) may lack href/label. Ensure they have them\n * so ListItem's getCollectionType(href) and display work correctly.\n */\n const connectItems = (field.value?.connect ?? []).map((rel: Relation) => {\n const urlLocaleParam = rel.locale ? `?plugins[i18n][locale]=${rel.locale}` : '';\n if (rel.href) return rel;\n return {\n ...rel,\n label: rel.label ?? getRelationLabel(rel, props.mainField),\n href: `../${COLLECTION_TYPES}/${targetModel}/${rel.documentId}${urlLocaleParam}`,\n };\n });\n\n /**\n * THIS IS CRUCIAL. If you don't sort by the __temp_key__ which comes from fractional indexing\n * then the list will be in the wrong order.\n */\n return [...transformedRels, ...connectItems].sort((a, b) => {\n if (a.__temp_key__ < b.__temp_key__) return -1;\n if (a.__temp_key__ > b.__temp_key__) return 1;\n return 0;\n });\n }, [serverData, field.value, targetModel, props.mainField]);\n\n const handleDisconnect = useHandleDisconnect(props.name, 'RelationsField');\n\n const handleConnect = React.useCallback<RelationsInputProps['onChange']>(\n (relation) => {\n const [lastItemInList] = relations.slice(-1);\n const item = {\n id: relation.id,\n apiData: {\n id: relation.id,\n documentId: relation.documentId,\n locale: relation.locale,\n isTemporary: true,\n },\n status: relation.status,\n /**\n * If there's a last item, that's the first key we use to generate out next one.\n */\n __temp_key__: generateNKeysBetween(lastItemInList?.__temp_key__ ?? null, null, 1)[0],\n // Fallback to `id` if there is no `mainField` value, which will overwrite the above `id` property with the exact same data.\n [props.mainField?.name ?? 'documentId']: relation[props.mainField?.name ?? 'documentId'],\n label: getRelationLabel(relation, props.mainField),\n href: `../${COLLECTION_TYPES}/${targetModel}/${relation.documentId}?${relation.locale ? `plugins[i18n][locale]=${relation.locale}` : ''}`,\n };\n\n if (ONE_WAY_RELATIONS.includes(props.attribute.relation)) {\n // Remove any existing relation so they can be replaced with the new one\n field.value?.connect?.forEach(handleDisconnect);\n relations.forEach(handleDisconnect);\n\n field.onChange(`${props.name}.connect`, [item]);\n } else {\n field.onChange(`${props.name}.connect`, [...(field.value?.connect ?? []), item]);\n }\n },\n [\n field,\n handleDisconnect,\n props.attribute.relation,\n props.mainField,\n props.name,\n relations,\n targetModel,\n ]\n );\n\n return (\n <Flex\n ref={ref}\n direction=\"column\"\n gap={3}\n justifyContent=\"space-between\"\n alignItems=\"stretch\"\n wrap=\"wrap\"\n >\n <StyledFlex direction=\"column\" alignItems=\"start\" gap={2} width=\"100%\">\n <MemoizedRelationsComboboxInput\n disabled={isDisabled}\n // NOTE: we should not default to using the documentId if the component is being created (componentUID is undefined)\n id={id}\n label={`${label} ${relationsCount > 0 ? `(${relationsCount})` : ''}`}\n model={model}\n onChange={handleConnect}\n isRelatedToCurrentDocument={isRelatedToCurrentDocument}\n {...props}\n />\n {data?.pagination && data.pagination.pageCount > data.pagination.page ? (\n <TextButton\n disabled={isFetchingMoreRelations}\n onClick={handleLoadMore}\n loading={isFetchingMoreRelations}\n startIcon={<ArrowClockwise />}\n // prevent the label from line-wrapping\n shrink={0}\n >\n {formatMessage({\n id: getTranslation('relation.loadMore'),\n defaultMessage: 'Load More',\n })}\n </TextButton>\n ) : null}\n </StyledFlex>\n <MemoizedRelationsList\n data={relations}\n serverData={serverData}\n disabled={isDisabled}\n name={props.name}\n isLoading={isFetchingMoreRelations}\n relationType={props.attribute.relation}\n targetModel={targetModel}\n documentParams={currentDocumentMeta.params}\n mainField={props.mainField}\n />\n </Flex>\n );\n }\n);\n\n/**\n * TODO: this can be removed once we stop shipping Inputs with\n * labels wrapped round in DS@2.\n */\nconst StyledFlex = styled<FlexComponent>(Flex)`\n & > div {\n width: 100%;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * Relation Transformations\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TransformationContext extends Pick<RelationsFieldProps, 'mainField'> {\n field?: RelationsFormValue;\n href: string;\n}\n\n/**\n * If it's in the connected array, it can get out of our data array,\n * we'll be putting it back in later and sorting it anyway.\n */\nconst removeConnected =\n ({ field }: TransformationContext) =>\n (relations: RelationResult[]) => {\n return relations.filter((relation) => {\n const connectedRelations = field?.connect ?? [];\n\n return connectedRelations.findIndex((rel) => rel.id === relation.id) === -1;\n });\n };\n\n/**\n * @description Removes relations that are in the `disconnect` array of the field\n */\nconst removeDisconnected =\n ({ field }: TransformationContext) =>\n (relations: RelationResult[]): RelationResult[] =>\n relations.filter((relation) => {\n const disconnectedRelations = field?.disconnect ?? [];\n\n return disconnectedRelations.findIndex((rel) => rel.id === relation.id) === -1;\n });\n\n/**\n * @description Adds a label and href to the relation object we use this to render\n * a better UI where we can link to the relation and display a human-readable label.\n */\nconst addLabelAndHref =\n ({ mainField, href }: TransformationContext) =>\n (relations: RelationResult[]): Relation[] =>\n relations.map((relation) => {\n return {\n ...relation,\n // Fallback to `id` if there is no `mainField` value, which will overwrite the above `documentId` property with the exact same data.\n [mainField?.name ?? 'documentId']: relation[mainField?.name ?? 'documentId'],\n label: getRelationLabel(relation, mainField),\n href: `${href}/${relation.documentId}?${relation.locale ? `plugins[i18n][locale]=${relation.locale}` : ''}`,\n };\n });\n\n/* -------------------------------------------------------------------------------------------------\n * RelationsInput\n * -----------------------------------------------------------------------------------------------*/\ninterface RelationsInputProps extends Omit<RelationsFieldProps, 'type'> {\n id?: string;\n model: string;\n isRelatedToCurrentDocument: boolean;\n onChange: (\n relation: Pick<RelationResult, 'documentId' | 'id' | 'locale' | 'status'> & {\n [key: string]: any;\n }\n ) => void;\n}\n\n/**\n * @description Contains all the logic for the combobox that can search\n * for relations and then add them to the field's connect array.\n */\nconst RelationsInput = ({\n hint,\n id,\n model,\n label,\n labelAction,\n name,\n mainField,\n placeholder,\n required,\n unique: _unique,\n 'aria-label': _ariaLabel,\n onChange,\n isRelatedToCurrentDocument,\n ...props\n}: RelationsInputProps) => {\n const [searchParams, setSearchParams] = React.useState({\n _q: '',\n page: 1,\n });\n const { toggleNotification } = useNotification();\n const { currentDocumentMeta } = useDocumentContext('RelationsInput');\n const { formatMessage } = useIntl();\n\n const field = useField<RelationsFormValue>(name);\n // @ts-expect-error – `targetModel` exists on supported non-morph relations (morph is disabled).\n const targetModel = props.attribute.targetModel;\n\n const searchParamsDebounced = useDebounce(searchParams, 300);\n const [searchForTrigger, { data, isLoading }] = useLazySearchRelationsQuery();\n\n /**\n * Because we're using a lazy query, we need to trigger the search\n * when the component mounts and when the search params change.\n * We also need to trigger the search when the field value changes\n * so that we can filter out the relations that are already connected.\n */\n React.useEffect(() => {\n /**\n * The `name` prop is a complete path to the field, e.g. `field1.field2.field3`.\n * Where the above example would a nested field within two components, however\n * we only require the field on the component not the complete path since we query\n * individual components. Therefore we split the string and take the last item.\n */\n const [targetField] = name.split('.').slice(-1);\n\n // Return early if there is no relation to the document\n if (!isRelatedToCurrentDocument) return;\n\n searchForTrigger({\n model,\n targetField,\n params: {\n ...currentDocumentMeta.params,\n id: id ?? '',\n pageSize: 10,\n idsToInclude: field.value?.disconnect?.map((rel) => rel.id.toString()) ?? [],\n idsToOmit: field.value?.connect?.map((rel) => rel.id.toString()) ?? [],\n ...searchParamsDebounced,\n },\n });\n }, [\n field.value?.connect,\n field.value?.disconnect,\n id,\n model,\n name,\n searchForTrigger,\n searchParamsDebounced,\n isRelatedToCurrentDocument,\n currentDocumentMeta.params,\n ]);\n\n const hasNextPage = data?.pagination ? data.pagination.page < data.pagination.pageCount : false;\n\n const handleChange = React.useCallback(\n (relationId?: string) => {\n if (!relationId) {\n return;\n }\n\n const options = data?.results ?? [];\n const relation = options.find((opt) => opt.id.toString() === relationId);\n\n if (!relation) {\n // This is very unlikely to happen, but it ensures we don't have any data for.\n console.error(\n \"You've tried to add a relation with an id that does not exist in the options you can see, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: getTranslation('relation.error-adding-relation'),\n defaultMessage: 'An error occurred while trying to add the relation.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n /**\n * You need to give this relation a correct _temp_key_ but\n * this component doesn't know about those ones, you can't rely\n * on the connect array because that doesn't hold items that haven't\n * moved. So use a callback to fill in the gaps when connecting.\n *\n */\n onChange(relation);\n },\n [data, formatMessage, onChange, toggleNotification]\n );\n\n const relation = React.useMemo(\n () =>\n ({\n collectionType: COLLECTION_TYPES,\n model: targetModel,\n documentId: '',\n params: currentDocumentMeta.params,\n }) as DocumentMeta,\n [currentDocumentMeta.params, targetModel]\n );\n\n const {\n permissions = [],\n isLoading: isLoadingPermissions,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: relation.model,\n }))\n );\n\n if (error) {\n return (\n <Flex alignItems=\"center\" height=\"100%\" justifyContent=\"center\">\n <EmptyStateLayout\n icon={<WarningCircle width=\"16rem\" />}\n content={formatMessage({\n id: 'anErrorOccurred',\n defaultMessage: 'Whoops! Something went wrong. Please, try again.',\n })}\n />\n </Flex>\n );\n }\n\n return (\n <Field.Root error={field.error} hint={hint} name={name} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <DocumentRBAC permissions={permissions} model={relation.model}>\n <MemoizedRelationModalWithContext\n relation={relation}\n name={name}\n placeholder={placeholder}\n hasNextPage={hasNextPage}\n isLoadingPermissions={isLoadingPermissions}\n isLoadingSearchRelations={isLoading}\n handleChange={handleChange}\n setSearchParams={setSearchParams}\n data={data}\n mainField={mainField}\n fieldValue={field.value}\n {...props}\n />\n </DocumentRBAC>\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n};\n\nconst MemoizedRelationsComboboxInput = React.memo(RelationsInput);\n\ninterface RelationModalWithContextProps\n extends Omit<RelationsInputProps, 'onChange' | 'label' | 'model' | 'isRelatedToCurrentDocument'> {\n relation: DocumentMeta;\n hasNextPage: boolean;\n isLoadingSearchRelations: boolean;\n isLoadingPermissions: boolean;\n handleChange: (relationId?: string) => void;\n data?: FindAvailable.Response;\n fieldValue?: RelationsFormValue;\n setSearchParams: React.Dispatch<\n React.SetStateAction<{\n _q: string;\n page: number;\n }>\n >;\n}\n\nconst RelationModalWithContext = ({\n relation,\n name,\n placeholder,\n hasNextPage,\n isLoadingSearchRelations,\n isLoadingPermissions,\n handleChange,\n mainField,\n setSearchParams,\n fieldValue,\n data,\n ...props\n}: RelationModalWithContextProps) => {\n const [textValue, setTextValue] = React.useState<string | undefined>('');\n const { formatMessage } = useIntl();\n const canCreate = useDocumentRBAC('RelationModalWrapper', (state) => state.canCreate);\n const fieldRef = useFocusInputField<HTMLInputElement>(name);\n const componentUID = useComponent('RelationsField', (state) => state.uid);\n\n const handleLoadMore = () => {\n if (!data || !data.pagination) {\n return;\n } else if (data.pagination.page < data.pagination.pageCount) {\n setSearchParams((s) => ({ ...s, page: s.page + 1 }));\n }\n };\n\n const options = data?.results ?? [];\n\n React.useLayoutEffect(() => {\n setTextValue('');\n }, [fieldValue]);\n\n const handleSearch = async (search: string) => {\n setSearchParams((s) => ({ ...s, _q: search, page: 1 }));\n };\n return (\n <RelationModalRenderer>\n {({ dispatch }) => (\n <Combobox\n ref={fieldRef}\n creatable=\"visible\"\n creatableDisabled={!canCreate}\n createMessage={() =>\n formatMessage({\n id: getTranslation('relation.create'),\n defaultMessage: 'Create a relation',\n })\n }\n onCreateOption={() => {\n if (canCreate) {\n dispatch({\n type: 'GO_TO_RELATION',\n payload: {\n document: relation,\n shouldBypassConfirmation: false,\n fieldToConnect: name,\n fieldToConnectUID: componentUID,\n },\n });\n }\n }}\n creatableStartIcon={<Plus fill=\"neutral500\" />}\n name={name}\n autocomplete={{ type: 'list', filter: 'contains' }}\n placeholder={\n placeholder ||\n formatMessage({\n id: getTranslation('relation.add'),\n defaultMessage: 'Add relation',\n })\n }\n hasMoreItems={hasNextPage}\n loading={isLoadingSearchRelations || isLoadingPermissions}\n onOpenChange={() => {\n handleSearch(textValue ?? '');\n }}\n noOptionsMessage={() =>\n formatMessage({\n id: getTranslation('relation.notAvailable'),\n defaultMessage: 'No relations available',\n })\n }\n loadingMessage={formatMessage({\n id: getTranslation('relation.isLoading'),\n defaultMessage: 'Relations are loading',\n })}\n onLoadMore={handleLoadMore}\n textValue={textValue}\n onChange={handleChange}\n onTextValueChange={(text) => {\n setTextValue(text);\n }}\n onInputChange={(event) => {\n handleSearch(event.currentTarget.value);\n }}\n {...props}\n >\n {options?.map((opt) => {\n const textValue = getRelationLabel(opt, mainField);\n\n return (\n <ComboboxOption key={opt.id} value={opt.id.toString()} textValue={textValue}>\n <Flex gap={2} justifyContent=\"space-between\">\n <Flex gap={2}>\n <LinkIcon fill=\"neutral500\" />\n <Typography ellipsis>{textValue}</Typography>\n </Flex>\n {opt.status ? <DocumentStatus status={opt.status} /> : null}\n </Flex>\n </ComboboxOption>\n );\n })}\n </Combobox>\n )}\n </RelationModalRenderer>\n );\n};\n\nconst MemoizedRelationModalWithContext = React.memo(RelationModalWithContext);\n\n/* -------------------------------------------------------------------------------------------------\n * RelationsList\n * -----------------------------------------------------------------------------------------------*/\nconst RELATION_ITEM_HEIGHT = 50;\nconst RELATION_GUTTER = 4;\n\ninterface RelationsListProps extends Pick<RelationsFieldProps, 'disabled' | 'name'> {\n data: Relation[];\n isLoading?: boolean;\n relationType: Schema.Attribute.RelationKind.Any;\n /**\n * The existing relations connected on the server. We need these to diff against.\n */\n serverData: RelationResult[];\n targetModel: string;\n documentParams?: DocumentMeta['params'];\n mainField?: MainField;\n}\n\nconst RelationsList = ({\n data,\n serverData,\n disabled,\n name,\n isLoading,\n relationType,\n targetModel,\n documentParams,\n mainField,\n}: RelationsListProps) => {\n const ariaDescriptionId = React.useId();\n const { formatMessage } = useIntl();\n const listRef = React.useRef<FixedSizeList>(null);\n const outerListRef = React.useRef<HTMLUListElement>(null);\n const [overflow, setOverflow] = React.useState<'top' | 'bottom' | 'top-bottom'>();\n const [liveText, setLiveText] = React.useState('');\n const field = useField(name);\n\n React.useEffect(() => {\n if (data.length <= RELATIONS_TO_DISPLAY) {\n return setOverflow(undefined);\n }\n\n const handleNativeScroll = (e: Event) => {\n const el = e.target as HTMLUListElement;\n const parentScrollContainerHeight = (el.parentNode as HTMLDivElement).scrollHeight;\n const maxScrollBottom = el.scrollHeight - el.scrollTop;\n\n if (el.scrollTop === 0) {\n return setOverflow('bottom');\n }\n\n if (maxScrollBottom === parentScrollContainerHeight) {\n return setOverflow('top');\n }\n\n return setOverflow('top-bottom');\n };\n\n const outerListRefCurrent = outerListRef?.current;\n\n if (!isLoading && data.length > 0 && outerListRefCurrent) {\n outerListRef.current.addEventListener('scroll', handleNativeScroll);\n }\n\n return () => {\n if (outerListRefCurrent) {\n outerListRefCurrent.removeEventListener('scroll', handleNativeScroll);\n }\n };\n }, [isLoading, data.length]);\n\n const getItemPos = React.useCallback(\n (index: number) => `${index + 1} of ${data.length}`,\n [data.length]\n );\n\n const handleMoveItem = React.useCallback<NonNullable<UseDragAndDropOptions['onMoveItem']>>(\n (newIndex, oldIndex) => {\n const item = data[oldIndex];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: item.label ?? item.documentId,\n position: getItemPos(newIndex),\n }\n )\n );\n\n /**\n * Splicing mutates the array, so we need to create a new array\n */\n const newData = [...data];\n const currentRow = data[oldIndex];\n\n const startKey =\n oldIndex > newIndex ? newData[newIndex - 1]?.__temp_key__ : newData[newIndex]?.__temp_key__;\n const endKey =\n oldIndex > newIndex ? newData[newIndex]?.__temp_key__ : newData[newIndex + 1]?.__temp_key__;\n\n /**\n * We're moving the relation between two other relations, so\n * we need to generate a new key that keeps the order\n */\n const [newKey] = generateNKeysBetween(startKey, endKey, 1);\n\n newData.splice(oldIndex, 1);\n newData.splice(newIndex, 0, { ...currentRow, __temp_key__: newKey });\n\n /**\n * Now we diff against the server to understand what's different so we\n * can keep the connect array nice and tidy. It also needs reversing because\n * we reverse the relations from the server in the first place.\n */\n const connectedRelations = newData\n .reduce<Relation[]>((acc, relation, currentIndex, array) => {\n const relationOnServer = serverData.find((oldRelation) => oldRelation.id === relation.id);\n\n const relationInFront = array[currentIndex + 1];\n\n if (!relationOnServer || relationOnServer.__temp_key__ !== relation.__temp_key__) {\n const position = relationInFront\n ? {\n before: relationInFront.documentId,\n locale: relationInFront.locale,\n status:\n 'publishedAt' in relationInFront && relationInFront.publishedAt\n ? ('published' as Relation['status'])\n : ('draft' as Relation['status']),\n }\n : { end: true };\n\n const relationWithPosition: Relation = {\n ...relation,\n ...{\n apiData: {\n id: relation.id,\n documentId: relation.documentId ?? relation.apiData?.documentId ?? '',\n locale: relation.locale || relation.apiData?.locale,\n isTemporary: relation.apiData?.isTemporary,\n position,\n },\n },\n };\n\n return [...acc, relationWithPosition];\n }\n\n return acc;\n }, [])\n .toReversed();\n\n field.onChange(`${name}.connect`, connectedRelations);\n },\n [data, serverData, field, name, formatMessage, getItemPos]\n );\n\n const handleGrabItem = React.useCallback<NonNullable<UseDragAndDropOptions['onGrabItem']>>(\n (index) => {\n const item = data[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: item.label ?? item.documentId,\n position: getItemPos(index),\n }\n )\n );\n },\n [data, formatMessage, getItemPos]\n );\n\n const handleDropItem = React.useCallback<NonNullable<UseDragAndDropOptions['onDropItem']>>(\n (index) => {\n const { href: _href, label, ...item } = data[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: label ?? item.documentId,\n position: getItemPos(index),\n }\n )\n );\n },\n [data, formatMessage, getItemPos]\n );\n\n const handleCancel = React.useCallback<NonNullable<UseDragAndDropOptions['onCancel']>>(\n (index) => {\n const item = data[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: item.label ?? item.documentId,\n }\n )\n );\n },\n [data, formatMessage]\n );\n\n const handleDisconnect = useHandleDisconnect(name, 'RelationsList');\n\n /**\n * These relation types will only ever have one item\n * in their list, so you can't reorder a single item!\n */\n const canReorder = !ONE_WAY_RELATIONS.includes(relationType);\n\n const dynamicListHeight =\n data.length > RELATIONS_TO_DISPLAY\n ? Math.min(data.length, RELATIONS_TO_DISPLAY) * (RELATION_ITEM_HEIGHT + RELATION_GUTTER) +\n RELATION_ITEM_HEIGHT / 2\n : Math.min(data.length, RELATIONS_TO_DISPLAY) * (RELATION_ITEM_HEIGHT + RELATION_GUTTER);\n\n const itemData = React.useMemo(\n () => ({\n ariaDescribedBy: ariaDescriptionId,\n canDrag: canReorder,\n disabled,\n documentParams,\n handleCancel,\n handleDropItem,\n handleGrabItem,\n handleMoveItem,\n name,\n handleDisconnect,\n relations: data,\n targetModel,\n mainField,\n }),\n [\n ariaDescriptionId,\n canReorder,\n disabled,\n documentParams,\n handleCancel,\n handleDisconnect,\n handleDropItem,\n handleGrabItem,\n handleMoveItem,\n name,\n data,\n targetModel,\n mainField,\n ]\n );\n\n return (\n <ShadowBox $overflowDirection={overflow}>\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n {/* @ts-expect-error – width is expected, but we've not needed to pass it before. */}\n <FixedSizeList\n height={dynamicListHeight}\n ref={listRef}\n outerRef={outerListRef}\n itemCount={data.length}\n itemSize={RELATION_ITEM_HEIGHT + RELATION_GUTTER}\n itemData={itemData}\n itemKey={(index) => data[index].id}\n innerElementType=\"ol\"\n >\n {ListItem}\n </FixedSizeList>\n </ShadowBox>\n );\n};\n\nconst MemoizedRelationsList = React.memo(RelationsList);\n\nconst ShadowBox = styled<BoxComponent>(Box)<{\n $overflowDirection?: 'top-bottom' | 'top' | 'bottom';\n}>`\n position: relative;\n overflow: hidden;\n flex: 1;\n\n &:before,\n &:after {\n position: absolute;\n width: 100%;\n height: 4px;\n z-index: 1;\n }\n\n &:before {\n /* TODO: as for DS Table component we would need this to be handled by the DS theme */\n content: '';\n background: linear-gradient(rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);\n top: 0;\n opacity: ${({ $overflowDirection }) =>\n $overflowDirection === 'top-bottom' || $overflowDirection === 'top' ? 1 : 0};\n transition: opacity 0.2s ease-in-out;\n }\n\n &:after {\n /* TODO: as for DS Table component we would need this to be handled by the DS theme */\n content: '';\n background: linear-gradient(0deg, rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);\n bottom: 0;\n opacity: ${({ $overflowDirection }) =>\n $overflowDirection === 'top-bottom' || $overflowDirection === 'bottom' ? 1 : 0};\n transition: opacity 0.2s ease-in-out;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ListItem\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ListItemProps extends Pick<ListChildComponentProps, 'style' | 'index'> {\n data: {\n ariaDescribedBy: string;\n canDrag?: boolean;\n disabled?: boolean;\n handleCancel: UseDragAndDropOptions['onCancel'];\n handleDropItem: UseDragAndDropOptions['onDropItem'];\n handleGrabItem: UseDragAndDropOptions['onGrabItem'];\n handleMoveItem: UseDragAndDropOptions['onMoveItem'];\n handleDisconnect: (relation: Relation) => void;\n name: string;\n relations: Relation[];\n targetModel: string;\n documentParams?: DocumentMeta['params'];\n mainField?: MainField;\n };\n}\n\nconst RelationRow = styled<FlexComponent>(Flex)`\n padding-top: calc(${({ theme }) => theme.spaces[1]} - 1px); // minus the border width\n padding-bottom: calc(${({ theme }) => theme.spaces[1]} - 1px); // minus the border width\n\n ${({ theme }) => theme.breakpoints.medium} {\n padding-top: ${({ theme }) => theme.spaces[2]};\n padding-bottom: ${({ theme }) => theme.spaces[2]};\n }\n`;\n\nconst ListItem = React.memo(({ data, index, style }: ListItemProps) => {\n const {\n ariaDescribedBy,\n canDrag = false,\n disabled = false,\n handleCancel,\n handleDisconnect,\n handleDropItem,\n handleGrabItem,\n handleMoveItem,\n name,\n relations,\n targetModel,\n documentParams,\n mainField,\n } = data;\n const isDesktop = useIsDesktop();\n\n const { formatMessage } = useIntl();\n\n const {\n href,\n id,\n label: originalLabel,\n status: originalStatus,\n documentId,\n apiData,\n locale,\n } = relations[index];\n\n /**\n * The code above attempts to retrieve the updated value of a relation that has not yet been saved.\n * This is necessary when a relation modal is opened, and the mainField or its status is updated.\n * These changes need to be reflected in the initial relation field.\n */\n const collectionType = getCollectionType(href)!;\n const isTemporary = apiData?.isTemporary ?? false;\n const { document } = useDocument(\n {\n collectionType,\n model: targetModel,\n documentId: documentId ?? apiData?.documentId,\n params: documentParams,\n },\n { skip: !isTemporary }\n );\n const label = isTemporary && document ? getRelationLabel(document, mainField) : originalLabel;\n const status = isTemporary && document ? document?.status : originalStatus;\n\n const [{ handlerId, isDragging, handleKeyDown }, relationRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop<number, Omit<RelationDragPreviewProps, 'width'>, HTMLDivElement>(\n canDrag && !disabled,\n {\n type: `${ItemTypes.RELATION}_${name}`,\n index,\n item: {\n displayedValue: label,\n status,\n id: id,\n index,\n },\n onMoveItem: handleMoveItem,\n onDropItem: handleDropItem,\n onGrabItem: handleGrabItem,\n onCancel: handleCancel,\n dropSensitivity: DROP_SENSITIVITY.REGULAR,\n }\n );\n\n const composedRefs = useComposedRefs<HTMLDivElement>(relationRef, dragRef);\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage());\n }, [dragPreviewRef]);\n\n const safeDocumentId = documentId ?? apiData?.documentId;\n const safeLocale = locale ?? apiData?.locale ?? null;\n const documentMeta = React.useMemo(\n () =>\n ({\n documentId: safeDocumentId,\n model: targetModel,\n collectionType: getCollectionType(href)!,\n params: {\n locale: safeLocale,\n },\n }) as DocumentMeta,\n [safeDocumentId, href, safeLocale, targetModel]\n );\n\n return (\n <Box\n style={style}\n tag=\"li\"\n ref={dropRef}\n aria-describedby={ariaDescribedBy}\n cursor={canDrag ? 'all-scroll' : 'default'}\n >\n {isDragging ? (\n <RelationItemPlaceholder />\n ) : (\n <RelationRow\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={canDrag ? 2 : 4}\n paddingRight={4}\n hasRadius\n borderColor=\"neutral200\"\n background={disabled ? 'neutral150' : 'neutral0'}\n justifyContent=\"space-between\"\n ref={composedRefs}\n data-handler-id={handlerId}\n >\n <FlexWrapper gap={1}>\n {canDrag && isDesktop ? (\n <IconButton\n tag=\"div\"\n role=\"button\"\n tabIndex={0}\n withTooltip={false}\n label={formatMessage({\n id: getTranslation('components.RelationInput.icon-button-aria-label'),\n defaultMessage: 'Drag',\n })}\n variant=\"ghost\"\n onKeyDown={handleKeyDown}\n disabled={disabled}\n >\n <Drag />\n </IconButton>\n ) : null}\n <Flex width=\"100%\" minWidth={0} gap={4} justifyContent=\"space-between\">\n <Box flex={1} minWidth={0} paddingTop={1} paddingBottom={1}>\n <RelationModalRenderer relation={documentMeta}>{label}</RelationModalRenderer>\n </Box>\n {status ? <DocumentStatus status={status} /> : null}\n </Flex>\n </FlexWrapper>\n <Box paddingLeft={4}>\n <IconButton\n onClick={() => handleDisconnect(relations[index])}\n disabled={disabled}\n label={formatMessage({\n id: getTranslation('relation.disconnect'),\n defaultMessage: 'Remove',\n })}\n variant=\"ghost\"\n size=\"S\"\n >\n <Cross />\n </IconButton>\n </Box>\n </RelationRow>\n )}\n </Box>\n );\n});\n\nconst FlexWrapper = styled<FlexComponent>(Flex)`\n width: 100%;\n /* Used to prevent endAction to be pushed out of container */\n min-width: 0;\n\n & > div[role='button'] {\n cursor: all-scroll;\n }\n`;\n\nconst DisconnectButton = styled.button`\n svg path {\n fill: ${({ theme, disabled }) =>\n disabled ? theme.colors.neutral600 : theme.colors.neutral500};\n }\n\n &:hover svg path,\n &:focus svg path {\n fill: ${({ theme, disabled }) => !disabled && theme.colors.neutral600};\n }\n`;\n\nconst LinkEllipsis = styled(Link)`\n display: block;\n\n & > span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n }\n`;\n\nconst RelationItemPlaceholder = () => (\n <Box\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={4}\n paddingRight={4}\n hasRadius\n borderStyle=\"dashed\"\n borderColor=\"primary600\"\n borderWidth=\"1px\"\n background=\"primary100\"\n height={`calc(100% - ${RELATION_GUTTER}px)`}\n />\n);\n\nconst MemoizedRelationsField = React.memo(RelationsField);\n\nexport { MemoizedRelationsField as RelationsInput, FlexWrapper, DisconnectButton, LinkEllipsis };\nexport type { RelationsFieldProps };\n"],"names":["useHandleDisconnect","fieldName","consumerName","field","useField","removeFieldRow","useForm","state","addFieldRow","handleDisconnect","React","useCallback","relation","value","connect","indexOfRelationInConnectArray","findIndex","rel","id","apiData","documentId","locale","RELATIONS_TO_DISPLAY","ONE_WAY_RELATIONS","EMPTY_RELATION_RESULTS","RelationsField","forwardRef","disabled","label","props","ref","currentDocument","currentDocumentMeta","useDocumentContext","currentPage","setCurrentPage","useState","document","formatMessage","useIntl","isMorph","attribute","toLowerCase","includes","isDisabled","targetModel","componentId","useComponent","componentUID","uid","isSubmitting","useEffect","component","components","undefined","model","toString","targetField","name","split","slice","schemaAttributes","attributes","schema","isRelatedToCurrentDocument","Object","values","filter","type","target","length","data","isLoading","isFetching","useGetRelationsQuery","params","pageSize","page","refetchOnMountOrArgChange","skip","handleLoadMore","prev","serverData","results","isFetchingMoreRelations","realServerRelationsCount","pagination","total","relationsConnected","relationsDisconnected","disconnect","relationsCount","relations","useMemo","ctx","href","COLLECTION_TYPES","mainField","transformations","pipe","removeConnected","removeDisconnected","addLabelAndHref","transformedRels","connectItems","map","urlLocaleParam","getRelationLabel","sort","a","b","__temp_key__","handleConnect","lastItemInList","item","isTemporary","status","generateNKeysBetween","forEach","onChange","_jsxs","Flex","direction","gap","justifyContent","alignItems","wrap","StyledFlex","width","_jsx","MemoizedRelationsComboboxInput","pageCount","TextButton","onClick","loading","startIcon","ArrowClockwise","shrink","getTranslation","defaultMessage","MemoizedRelationsList","relationType","documentParams","styled","connectedRelations","disconnectedRelations","RelationsInput","hint","labelAction","placeholder","required","unique","_unique","_ariaLabel","searchParams","setSearchParams","_q","toggleNotification","useNotification","searchParamsDebounced","useDebounce","searchForTrigger","useLazySearchRelationsQuery","idsToInclude","idsToOmit","hasNextPage","handleChange","relationId","options","find","opt","console","error","message","collectionType","permissions","isLoadingPermissions","useRBAC","PERMISSIONS","action","subject","height","EmptyStateLayout","icon","WarningCircle","content","Field","Root","Label","DocumentRBAC","MemoizedRelationModalWithContext","isLoadingSearchRelations","fieldValue","Error","Hint","memo","RelationModalWithContext","textValue","setTextValue","canCreate","useDocumentRBAC","fieldRef","useFocusInputField","s","useLayoutEffect","handleSearch","search","RelationModalRenderer","dispatch","Combobox","creatable","creatableDisabled","createMessage","onCreateOption","payload","shouldBypassConfirmation","fieldToConnect","fieldToConnectUID","creatableStartIcon","Plus","fill","autocomplete","hasMoreItems","onOpenChange","noOptionsMessage","loadingMessage","onLoadMore","onTextValueChange","text","onInputChange","event","currentTarget","ComboboxOption","LinkIcon","Typography","ellipsis","DocumentStatus","RELATION_ITEM_HEIGHT","RELATION_GUTTER","RelationsList","ariaDescriptionId","useId","listRef","useRef","outerListRef","overflow","setOverflow","liveText","setLiveText","handleNativeScroll","e","el","parentScrollContainerHeight","parentNode","scrollHeight","maxScrollBottom","scrollTop","outerListRefCurrent","current","addEventListener","removeEventListener","getItemPos","index","handleMoveItem","newIndex","oldIndex","position","newData","currentRow","startKey","endKey","newKey","splice","reduce","acc","currentIndex","array","relationOnServer","oldRelation","relationInFront","before","publishedAt","end","relationWithPosition","toReversed","handleGrabItem","handleDropItem","_href","handleCancel","canReorder","dynamicListHeight","Math","min","itemData","ariaDescribedBy","canDrag","ShadowBox","$overflowDirection","VisuallyHidden","aria-live","FixedSizeList","outerRef","itemCount","itemSize","itemKey","innerElementType","ListItem","Box","RelationRow","theme","spaces","breakpoints","medium","style","isDesktop","useIsDesktop","originalLabel","originalStatus","getCollectionType","useDocument","handlerId","isDragging","handleKeyDown","relationRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","ItemTypes","RELATION","displayedValue","onMoveItem","onDropItem","onGrabItem","onCancel","dropSensitivity","DROP_SENSITIVITY","REGULAR","composedRefs","useComposedRefs","getEmptyImage","safeDocumentId","safeLocale","documentMeta","tag","aria-describedby","cursor","RelationItemPlaceholder","paddingTop","paddingBottom","paddingLeft","paddingRight","hasRadius","borderColor","background","data-handler-id","FlexWrapper","IconButton","role","tabIndex","withTooltip","variant","onKeyDown","Drag","minWidth","flex","size","Cross","DisconnectButton","button","colors","neutral600","neutral500","LinkEllipsis","Link","borderStyle","borderWidth","MemoizedRelationsField"],"mappings":"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"}
1
+ {"version":3,"file":"Relations.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Relations/Relations.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n type InputProps,\n useField,\n useForm,\n useNotification,\n useFocusInputField,\n useRBAC,\n useIsDesktop,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Combobox,\n ComboboxOption,\n Flex,\n IconButton,\n TextButton,\n Typography,\n VisuallyHidden,\n useComposedRefs,\n Link,\n Field,\n FlexComponent,\n BoxComponent,\n EmptyStateLayout,\n} from '@strapi/design-system';\nimport { Cross, Drag, ArrowClockwise, Link as LinkIcon, Plus, WarningCircle } from '@strapi/icons';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport pipe from 'lodash/fp/pipe';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { FixedSizeList, ListChildComponentProps } from 'react-window';\nimport { styled } from 'styled-components';\n\nimport { RelationDragPreviewProps } from '../../../../../components/DragPreviews/RelationDragPreview';\nimport { COLLECTION_TYPES } from '../../../../../constants/collections';\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { PERMISSIONS } from '../../../../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../../../../features/DocumentRBAC';\nimport { useDebounce } from '../../../../../hooks/useDebounce';\nimport { useDocument } from '../../../../../hooks/useDocument';\nimport { type DocumentMeta, useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout } from '../../../../../hooks/useDocumentLayout';\nimport {\n DROP_SENSITIVITY,\n UseDragAndDropOptions,\n useDragAndDrop,\n} from '../../../../../hooks/useDragAndDrop';\nimport {\n useGetRelationsQuery,\n useLazySearchRelationsQuery,\n RelationResult,\n} from '../../../../../services/relations';\nimport { type MainField } from '../../../../../utils/attributes';\nimport { getRelationLabel } from '../../../../../utils/relations';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { DocumentStatus } from '../../DocumentStatus';\nimport { useComponent } from '../ComponentContext';\nimport { RelationModalRenderer, getCollectionType } from '../Relations/RelationModal';\n\nimport type { FindAvailable } from '../../../../../../../shared/contracts/relations';\nimport type { Schema } from '@strapi/types';\n\n/**\n * Remove a relation, whether it's been already saved or not.\n * It's used both in RelationsList, where the \"remove relation\" button is, and in the input,\n * because we sometimes need to remove a previous relation when selecting a new one.\n */\nfunction useHandleDisconnect(fieldName: string, consumerName: string) {\n const field = useField<RelationsFormValue>(fieldName);\n const removeFieldRow = useForm(consumerName, (state) => state.removeFieldRow);\n const addFieldRow = useForm(consumerName, (state) => state.addFieldRow);\n\n const handleDisconnect = React.useCallback<ListItemProps['data']['handleDisconnect']>(\n (relation) => {\n if (field.value && field.value.connect) {\n /**\n * A relation will exist in the `connect` array _if_ it has\n * been added without saving. In this case, we just remove it\n * from the connect array\n */\n const indexOfRelationInConnectArray = field.value.connect.findIndex(\n (rel: NonNullable<RelationsFormValue['connect']>[number]) => rel.id === relation.id\n );\n\n if (indexOfRelationInConnectArray >= 0) {\n removeFieldRow(`${fieldName}.connect`, indexOfRelationInConnectArray);\n return;\n }\n }\n\n addFieldRow(`${fieldName}.disconnect`, {\n id: relation.id,\n apiData: {\n id: relation.id,\n documentId: relation.documentId,\n locale: relation.locale,\n },\n });\n },\n [addFieldRow, field.value, fieldName, removeFieldRow]\n );\n\n return handleDisconnect;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * RelationsField\n * -----------------------------------------------------------------------------------------------*/\n\nconst RELATIONS_TO_DISPLAY = 5;\nconst ONE_WAY_RELATIONS = ['oneWay', 'oneToOne', 'manyToOne', 'oneToManyMorph', 'oneToOneMorph'];\nconst EMPTY_RELATION_RESULTS: RelationResult[] = [];\n\ntype RelationPosition =\n | (Pick<RelationResult, 'status' | 'locale'> & {\n before: string;\n end?: never;\n })\n | { end: boolean; before?: never; status?: never; locale?: never };\n\ninterface Relation extends Pick<RelationResult, 'documentId' | 'id' | 'locale' | 'status'> {\n href: string;\n label: string;\n position?: RelationPosition;\n __temp_key__: string;\n apiData?: {\n documentId: RelationResult['documentId'];\n id: RelationResult['id'];\n locale?: RelationResult['locale'];\n position: RelationPosition;\n // Added this property to prevent call useDocument with a not temporary relation (one already saved in the database)\n isTemporary?: boolean;\n };\n}\n\ninterface RelationsFieldProps\n extends Omit<Extract<EditFieldLayout, { type: 'relation' }>, 'size' | 'hint'>,\n Pick<InputProps, 'hint'> {}\n\nexport interface RelationsFormValue {\n connect?: Relation[];\n disconnect?: Pick<Relation, 'id'>[];\n}\n\n/**\n * TODO: we get a rather ugly flash when we remove a single relation from the list leaving\n * no other relations when we press save. The initial relation re-renders, probably because\n * of the lag in the Form cleaning it's \"disconnect\" array, whilst our data has not been invalidated.\n *\n * Could we invalidate relation data on the document actions? Should we?\n */\n\n/**\n * @internal\n * @description The relations field holds a lot of domain logic for handling relations which is rather complicated\n * At present we do not expose this to plugin developers, however, they are able to overwrite it themselves should\n * they wish to do so.\n */\nconst RelationsField = React.forwardRef<HTMLDivElement, RelationsFieldProps>(\n ({ disabled, label, ...props }, ref) => {\n const { currentDocument, currentDocumentMeta } = useDocumentContext('RelationsField');\n\n const [currentPage, setCurrentPage] = React.useState(1);\n\n // Use the documentId from the actual document, not the params (meta)\n const documentId = currentDocument.document?.documentId;\n\n const { formatMessage } = useIntl();\n\n const isMorph = props.attribute.relation.toLowerCase().includes('morph');\n const isDisabled = isMorph || disabled;\n // @ts-expect-error – `targetModel` exists on supported non-morph relations (morph is disabled).\n const targetModel = props.attribute.targetModel;\n\n const componentId = useComponent('RelationsField', (state) => state.id);\n const componentUID = useComponent('RelationsField', (state) => state.uid);\n\n const isSubmitting = useForm('RelationsList', (state) => state.isSubmitting);\n\n React.useEffect(() => {\n setCurrentPage(1);\n }, [isSubmitting]);\n\n const component = componentUID ? currentDocument.components[componentUID] : undefined;\n\n /**\n * We'll always have a documentId in a created entry, so we look for a componentId first.\n * Same with `uid` and `documentModel`.\n * The componentId is empty when adding a new component in a repeatable. Let it be null to skip isRelatedToCurrentDocument\n */\n const model = componentUID || currentDocumentMeta.model;\n const id = componentUID ? componentId?.toString() : documentId;\n\n /**\n * The `name` prop is a complete path to the field, e.g. `field1.field2.field3`.\n * Where the above example would a nested field within two components, however\n * we only require the field on the component not the complete path since we query\n * individual components. Therefore we split the string and take the last item.\n */\n const [targetField] = props.name.split('.').slice(-1);\n\n const schemaAttributes = component\n ? (component.attributes ?? {})\n : (currentDocument.schema?.attributes ?? {});\n\n /**\n * Confirm the target field is related to the current document.\n * Since relations can exist in a modal on top of the root document,\n * we need to ensure we are fetching relations for the correct document (root document vs related document),\n */\n const isRelatedToCurrentDocument =\n Object.values(schemaAttributes).filter(\n (attribute) =>\n attribute.type === 'relation' &&\n 'target' in attribute &&\n 'target' in props.attribute &&\n attribute.target === props.attribute.target\n ).length > 0;\n\n const { data, isLoading, isFetching } = useGetRelationsQuery(\n {\n model,\n targetField,\n // below we don't run the query if there is no id.\n id,\n params: {\n ...currentDocumentMeta.params,\n pageSize: RELATIONS_TO_DISPLAY,\n page: currentPage,\n },\n },\n {\n refetchOnMountOrArgChange: true,\n skip: !id || !isRelatedToCurrentDocument,\n }\n );\n\n const handleLoadMore = () => {\n setCurrentPage((prev) => prev + 1);\n };\n\n const field = useField<RelationsFormValue>(props.name);\n const onChangeRelationField = field.onChange as (eventOrPath: string, value?: unknown) => void;\n const serverData = data?.results ?? EMPTY_RELATION_RESULTS;\n\n const isFetchingMoreRelations = isLoading || isFetching;\n\n const realServerRelationsCount = data?.pagination ? data.pagination.total : 0;\n\n /**\n * Items that are already connected, but reordered would be in\n * this list, so to get an accurate figure, we remove them.\n */\n const relationsConnected =\n (field.value?.connect ?? []).filter(\n (rel: Relation) => serverData.findIndex((relation) => relation.id === rel.id) === -1\n ).length ?? 0;\n const relationsDisconnected = field.value?.disconnect?.length ?? 0;\n\n const relationsCount = realServerRelationsCount + relationsConnected - relationsDisconnected;\n\n /**\n * This is it, the source of truth for reordering in conjunction with partial loading & updating\n * of relations. Relations on load are given __temp_key__ when fetched, because we don't want to\n * create brand new keys everytime the data updates, just keep adding them onto the newly loaded ones.\n */\n const relations = React.useMemo(() => {\n const ctx = {\n field: field.value,\n href: `../${COLLECTION_TYPES}/${targetModel}`,\n mainField: props.mainField,\n };\n\n /**\n * Tidy up our data.\n */\n const transformations = pipe(\n removeConnected(ctx),\n removeDisconnected(ctx),\n addLabelAndHref(ctx)\n );\n\n const transformedRels = transformations([...serverData]);\n\n /**\n * Connect items (e.g. from fill-from-locale) may lack href/label. Ensure they have them\n * so ListItem's getCollectionType(href) and display work correctly.\n */\n const connectItems = (field.value?.connect ?? []).map((rel: Relation) => {\n const urlLocaleParam = rel.locale ? `?plugins[i18n][locale]=${rel.locale}` : '';\n if (rel.href) return rel;\n return {\n ...rel,\n label: rel.label ?? getRelationLabel(rel, props.mainField),\n href: `../${COLLECTION_TYPES}/${targetModel}/${rel.documentId}${urlLocaleParam}`,\n };\n });\n\n /**\n * THIS IS CRUCIAL. If you don't sort by the __temp_key__ which comes from fractional indexing\n * then the list will be in the wrong order.\n */\n return [...transformedRels, ...connectItems].sort((a, b) => {\n if (a.__temp_key__ < b.__temp_key__) return -1;\n if (a.__temp_key__ > b.__temp_key__) return 1;\n return 0;\n });\n }, [serverData, field.value, targetModel, props.mainField]);\n\n const handleDisconnect = useHandleDisconnect(props.name, 'RelationsField');\n\n const handleConnect = React.useCallback<RelationsInputProps['onChange']>(\n (relation) => {\n const [lastItemInList] = relations.slice(-1);\n const item = {\n id: relation.id,\n apiData: {\n id: relation.id,\n documentId: relation.documentId,\n locale: relation.locale,\n isTemporary: true,\n },\n status: relation.status,\n /**\n * If there's a last item, that's the first key we use to generate out next one.\n */\n __temp_key__: generateNKeysBetween(lastItemInList?.__temp_key__ ?? null, null, 1)[0],\n // Fallback to `id` if there is no `mainField` value, which will overwrite the above `id` property with the exact same data.\n [props.mainField?.name ?? 'documentId']: relation[props.mainField?.name ?? 'documentId'],\n label: getRelationLabel(relation, props.mainField),\n href: `../${COLLECTION_TYPES}/${targetModel}/${relation.documentId}?${relation.locale ? `plugins[i18n][locale]=${relation.locale}` : ''}`,\n };\n\n if (ONE_WAY_RELATIONS.includes(props.attribute.relation)) {\n // Remove any existing relation so they can be replaced with the new one\n field.value?.connect?.forEach(handleDisconnect);\n relations.forEach(handleDisconnect);\n\n onChangeRelationField(`${props.name}.connect`, [item]);\n } else {\n onChangeRelationField(`${props.name}.connect`, [...(field.value?.connect ?? []), item]);\n }\n },\n [\n field,\n handleDisconnect,\n onChangeRelationField,\n props.attribute.relation,\n props.mainField,\n props.name,\n relations,\n targetModel,\n ]\n );\n\n return (\n <Flex\n ref={ref}\n direction=\"column\"\n gap={3}\n justifyContent=\"space-between\"\n alignItems=\"stretch\"\n wrap=\"wrap\"\n >\n <StyledFlex direction=\"column\" alignItems=\"start\" gap={2} width=\"100%\">\n <MemoizedRelationsComboboxInput\n disabled={isDisabled}\n // NOTE: we should not default to using the documentId if the component is being created (componentUID is undefined)\n id={id}\n label={`${label} ${relationsCount > 0 ? `(${relationsCount})` : ''}`}\n model={model}\n onChange={handleConnect}\n isRelatedToCurrentDocument={isRelatedToCurrentDocument}\n {...props}\n />\n {data?.pagination && data.pagination.pageCount > data.pagination.page ? (\n <TextButton\n disabled={isFetchingMoreRelations}\n onClick={handleLoadMore}\n loading={isFetchingMoreRelations}\n startIcon={<ArrowClockwise />}\n // prevent the label from line-wrapping\n shrink={0}\n >\n {formatMessage({\n id: getTranslation('relation.loadMore'),\n defaultMessage: 'Load More',\n })}\n </TextButton>\n ) : null}\n </StyledFlex>\n <MemoizedRelationsList\n data={relations}\n serverData={serverData}\n disabled={isDisabled}\n name={props.name}\n isLoading={isFetchingMoreRelations}\n relationType={props.attribute.relation}\n targetModel={targetModel}\n documentParams={currentDocumentMeta.params}\n mainField={props.mainField}\n />\n </Flex>\n );\n }\n);\n\n/**\n * TODO: this can be removed once we stop shipping Inputs with\n * labels wrapped round in DS@2.\n */\nconst StyledFlex = styled<FlexComponent>(Flex)`\n & > div {\n width: 100%;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * Relation Transformations\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TransformationContext extends Pick<RelationsFieldProps, 'mainField'> {\n field?: RelationsFormValue;\n href: string;\n}\n\n/**\n * If it's in the connected array, it can get out of our data array,\n * we'll be putting it back in later and sorting it anyway.\n */\nconst removeConnected =\n ({ field }: TransformationContext) =>\n (relations: RelationResult[]) => {\n return relations.filter((relation) => {\n const connectedRelations = field?.connect ?? [];\n\n return connectedRelations.findIndex((rel) => rel.id === relation.id) === -1;\n });\n };\n\n/**\n * @description Removes relations that are in the `disconnect` array of the field\n */\nconst removeDisconnected =\n ({ field }: TransformationContext) =>\n (relations: RelationResult[]): RelationResult[] =>\n relations.filter((relation) => {\n const disconnectedRelations = field?.disconnect ?? [];\n\n return disconnectedRelations.findIndex((rel) => rel.id === relation.id) === -1;\n });\n\n/**\n * @description Adds a label and href to the relation object we use this to render\n * a better UI where we can link to the relation and display a human-readable label.\n */\nconst addLabelAndHref =\n ({ mainField, href }: TransformationContext) =>\n (relations: RelationResult[]): Relation[] =>\n relations.map((relation) => {\n return {\n ...relation,\n // Fallback to `id` if there is no `mainField` value, which will overwrite the above `documentId` property with the exact same data.\n [mainField?.name ?? 'documentId']: relation[mainField?.name ?? 'documentId'],\n label: getRelationLabel(relation, mainField),\n href: `${href}/${relation.documentId}?${relation.locale ? `plugins[i18n][locale]=${relation.locale}` : ''}`,\n };\n });\n\n/* -------------------------------------------------------------------------------------------------\n * RelationsInput\n * -----------------------------------------------------------------------------------------------*/\ninterface RelationsInputProps extends Omit<RelationsFieldProps, 'type'> {\n id?: string;\n model: string;\n isRelatedToCurrentDocument: boolean;\n onChange: (\n relation: Pick<RelationResult, 'documentId' | 'id' | 'locale' | 'status'> & {\n [key: string]: unknown;\n }\n ) => void;\n}\n\n/**\n * @description Contains all the logic for the combobox that can search\n * for relations and then add them to the field's connect array.\n */\nconst RelationsInput = ({\n hint,\n id,\n model,\n label,\n labelAction,\n name,\n mainField,\n placeholder,\n required,\n unique: _unique,\n 'aria-label': _ariaLabel,\n onChange,\n isRelatedToCurrentDocument,\n ...props\n}: RelationsInputProps) => {\n const [searchParams, setSearchParams] = React.useState({\n _q: '',\n page: 1,\n });\n const { toggleNotification } = useNotification();\n const { currentDocumentMeta } = useDocumentContext('RelationsInput');\n const { formatMessage } = useIntl();\n\n const field = useField<RelationsFormValue>(name);\n // @ts-expect-error – `targetModel` exists on supported non-morph relations (morph is disabled).\n const targetModel = props.attribute.targetModel;\n\n const searchParamsDebounced = useDebounce(searchParams, 300);\n const [searchForTrigger, { data, isLoading }] = useLazySearchRelationsQuery();\n\n /**\n * Because we're using a lazy query, we need to trigger the search\n * when the component mounts and when the search params change.\n * We also need to trigger the search when the field value changes\n * so that we can filter out the relations that are already connected.\n */\n React.useEffect(() => {\n /**\n * The `name` prop is a complete path to the field, e.g. `field1.field2.field3`.\n * Where the above example would a nested field within two components, however\n * we only require the field on the component not the complete path since we query\n * individual components. Therefore we split the string and take the last item.\n */\n const [targetField] = name.split('.').slice(-1);\n\n // Return early if there is no relation to the document\n if (!isRelatedToCurrentDocument) return;\n\n searchForTrigger({\n model,\n targetField,\n params: {\n ...currentDocumentMeta.params,\n id: id ?? '',\n pageSize: 10,\n idsToInclude: field.value?.disconnect?.map((rel) => rel.id.toString()) ?? [],\n idsToOmit: field.value?.connect?.map((rel) => rel.id.toString()) ?? [],\n ...searchParamsDebounced,\n },\n });\n }, [\n field.value?.connect,\n field.value?.disconnect,\n id,\n model,\n name,\n searchForTrigger,\n searchParamsDebounced,\n isRelatedToCurrentDocument,\n currentDocumentMeta.params,\n ]);\n\n const hasNextPage = data?.pagination ? data.pagination.page < data.pagination.pageCount : false;\n\n const handleChange = React.useCallback(\n (relationId?: string) => {\n if (!relationId) {\n return;\n }\n\n const options = data?.results ?? [];\n const relation = options.find((opt) => opt.id.toString() === relationId);\n\n if (!relation) {\n // This is very unlikely to happen, but it ensures we don't have any data for.\n console.error(\n \"You've tried to add a relation with an id that does not exist in the options you can see, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: getTranslation('relation.error-adding-relation'),\n defaultMessage: 'An error occurred while trying to add the relation.',\n }),\n type: 'danger',\n });\n\n return;\n }\n\n /**\n * You need to give this relation a correct _temp_key_ but\n * this component doesn't know about those ones, you can't rely\n * on the connect array because that doesn't hold items that haven't\n * moved. So use a callback to fill in the gaps when connecting.\n *\n */\n onChange(relation);\n },\n [data, formatMessage, onChange, toggleNotification]\n );\n\n const relation = React.useMemo(\n () =>\n ({\n collectionType: COLLECTION_TYPES,\n model: targetModel,\n documentId: '',\n params: currentDocumentMeta.params,\n }) as DocumentMeta,\n [currentDocumentMeta.params, targetModel]\n );\n\n const {\n permissions = [],\n isLoading: isLoadingPermissions,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: relation.model,\n }))\n );\n\n if (error) {\n return (\n <Flex alignItems=\"center\" height=\"100%\" justifyContent=\"center\">\n <EmptyStateLayout\n icon={<WarningCircle width=\"16rem\" />}\n content={formatMessage({\n id: 'anErrorOccurred',\n defaultMessage: 'Whoops! Something went wrong. Please, try again.',\n })}\n />\n </Flex>\n );\n }\n\n return (\n <Field.Root error={field.error} hint={hint} name={name} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <DocumentRBAC permissions={permissions} model={relation.model}>\n <MemoizedRelationModalWithContext\n relation={relation}\n name={name}\n placeholder={placeholder}\n hasNextPage={hasNextPage}\n isLoadingPermissions={isLoadingPermissions}\n isLoadingSearchRelations={isLoading}\n handleChange={handleChange}\n setSearchParams={setSearchParams}\n data={data}\n mainField={mainField}\n fieldValue={field.value}\n {...props}\n />\n </DocumentRBAC>\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n};\n\nconst MemoizedRelationsComboboxInput = React.memo(RelationsInput);\n\ninterface RelationModalWithContextProps\n extends Omit<RelationsInputProps, 'onChange' | 'label' | 'model' | 'isRelatedToCurrentDocument'> {\n relation: DocumentMeta;\n hasNextPage: boolean;\n isLoadingSearchRelations: boolean;\n isLoadingPermissions: boolean;\n handleChange: (relationId?: string) => void;\n data?: FindAvailable.Response;\n fieldValue?: RelationsFormValue;\n setSearchParams: React.Dispatch<\n React.SetStateAction<{\n _q: string;\n page: number;\n }>\n >;\n}\n\nconst RelationModalWithContext = ({\n relation,\n name,\n placeholder,\n hasNextPage,\n isLoadingSearchRelations,\n isLoadingPermissions,\n handleChange,\n mainField,\n setSearchParams,\n fieldValue,\n data,\n ...props\n}: RelationModalWithContextProps) => {\n const [textValue, setTextValue] = React.useState<string | undefined>('');\n const { formatMessage } = useIntl();\n const canCreate = useDocumentRBAC('RelationModalWrapper', (state) => state.canCreate);\n const fieldRef = useFocusInputField<HTMLInputElement>(name);\n const componentUID = useComponent('RelationsField', (state) => state.uid);\n\n const handleLoadMore = () => {\n if (!data || !data.pagination) {\n return;\n } else if (data.pagination.page < data.pagination.pageCount) {\n setSearchParams((s) => ({ ...s, page: s.page + 1 }));\n }\n };\n\n const options = data?.results ?? [];\n\n React.useLayoutEffect(() => {\n setTextValue('');\n }, [fieldValue]);\n\n const handleSearch = async (search: string) => {\n setSearchParams((s) => ({ ...s, _q: search, page: 1 }));\n };\n return (\n <RelationModalRenderer>\n {({ dispatch }) => (\n <Combobox\n ref={fieldRef}\n creatable=\"visible\"\n creatableDisabled={!canCreate}\n createMessage={() =>\n formatMessage({\n id: getTranslation('relation.create'),\n defaultMessage: 'Create a relation',\n })\n }\n onCreateOption={() => {\n if (canCreate) {\n dispatch({\n type: 'GO_TO_RELATION',\n payload: {\n document: relation,\n shouldBypassConfirmation: false,\n fieldToConnect: name,\n fieldToConnectUID: componentUID,\n },\n });\n }\n }}\n creatableStartIcon={<Plus fill=\"neutral500\" />}\n name={name}\n autocomplete={{ type: 'list', filter: 'contains' }}\n placeholder={\n placeholder ||\n formatMessage({\n id: getTranslation('relation.add'),\n defaultMessage: 'Add relation',\n })\n }\n hasMoreItems={hasNextPage}\n loading={isLoadingSearchRelations || isLoadingPermissions}\n onOpenChange={() => {\n handleSearch(textValue ?? '');\n }}\n noOptionsMessage={() =>\n formatMessage({\n id: getTranslation('relation.notAvailable'),\n defaultMessage: 'No relations available',\n })\n }\n loadingMessage={formatMessage({\n id: getTranslation('relation.isLoading'),\n defaultMessage: 'Relations are loading',\n })}\n onLoadMore={handleLoadMore}\n textValue={textValue}\n onChange={handleChange}\n onTextValueChange={(text) => {\n setTextValue(text);\n }}\n onInputChange={(event) => {\n handleSearch(event.currentTarget.value);\n }}\n {...props}\n >\n {options?.map((opt) => {\n const textValue = getRelationLabel(opt, mainField);\n\n return (\n <ComboboxOption key={opt.id} value={opt.id.toString()} textValue={textValue}>\n <Flex gap={2} justifyContent=\"space-between\">\n <Flex gap={2}>\n <LinkIcon fill=\"neutral500\" />\n <Typography ellipsis>{textValue}</Typography>\n </Flex>\n {opt.status ? <DocumentStatus status={opt.status} /> : null}\n </Flex>\n </ComboboxOption>\n );\n })}\n </Combobox>\n )}\n </RelationModalRenderer>\n );\n};\n\nconst MemoizedRelationModalWithContext = React.memo(RelationModalWithContext);\n\n/* -------------------------------------------------------------------------------------------------\n * RelationsList\n * -----------------------------------------------------------------------------------------------*/\nconst RELATION_ITEM_HEIGHT = 50;\nconst RELATION_GUTTER = 4;\n\ninterface RelationsListProps extends Pick<RelationsFieldProps, 'disabled' | 'name'> {\n data: Relation[];\n isLoading?: boolean;\n relationType: Schema.Attribute.RelationKind.Any;\n /**\n * The existing relations connected on the server. We need these to diff against.\n */\n serverData: RelationResult[];\n targetModel: string;\n documentParams?: DocumentMeta['params'];\n mainField?: MainField;\n}\n\nconst RelationsList = ({\n data,\n serverData,\n disabled,\n name,\n isLoading,\n relationType,\n targetModel,\n documentParams,\n mainField,\n}: RelationsListProps) => {\n const ariaDescriptionId = React.useId();\n const { formatMessage } = useIntl();\n const listRef = React.useRef<FixedSizeList>(null);\n const outerListRef = React.useRef<HTMLUListElement>(null);\n const [overflow, setOverflow] = React.useState<'top' | 'bottom' | 'top-bottom'>();\n const [liveText, setLiveText] = React.useState('');\n const field = useField<RelationsFormValue>(name);\n const onChangeRelationField = field.onChange as (eventOrPath: string, value?: unknown) => void;\n\n React.useEffect(() => {\n if (data.length <= RELATIONS_TO_DISPLAY) {\n return setOverflow(undefined);\n }\n\n const handleNativeScroll = (e: Event) => {\n const el = e.target as HTMLUListElement;\n const parentScrollContainerHeight = (el.parentNode as HTMLDivElement).scrollHeight;\n const maxScrollBottom = el.scrollHeight - el.scrollTop;\n\n if (el.scrollTop === 0) {\n return setOverflow('bottom');\n }\n\n if (maxScrollBottom === parentScrollContainerHeight) {\n return setOverflow('top');\n }\n\n return setOverflow('top-bottom');\n };\n\n const outerListRefCurrent = outerListRef?.current;\n\n if (!isLoading && data.length > 0 && outerListRefCurrent) {\n outerListRef.current.addEventListener('scroll', handleNativeScroll);\n }\n\n return () => {\n if (outerListRefCurrent) {\n outerListRefCurrent.removeEventListener('scroll', handleNativeScroll);\n }\n };\n }, [isLoading, data.length]);\n\n const getItemPos = React.useCallback(\n (index: number) => `${index + 1} of ${data.length}`,\n [data.length]\n );\n\n const handleMoveItem = React.useCallback<NonNullable<UseDragAndDropOptions['onMoveItem']>>(\n (newIndex, oldIndex) => {\n const item = data[oldIndex];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: item.label ?? item.documentId,\n position: getItemPos(newIndex),\n }\n )\n );\n\n /**\n * Splicing mutates the array, so we need to create a new array\n */\n const newData = [...data];\n const currentRow = data[oldIndex];\n\n const startKey =\n oldIndex > newIndex ? newData[newIndex - 1]?.__temp_key__ : newData[newIndex]?.__temp_key__;\n const endKey =\n oldIndex > newIndex ? newData[newIndex]?.__temp_key__ : newData[newIndex + 1]?.__temp_key__;\n\n /**\n * We're moving the relation between two other relations, so\n * we need to generate a new key that keeps the order\n */\n const [newKey] = generateNKeysBetween(startKey, endKey, 1);\n\n newData.splice(oldIndex, 1);\n newData.splice(newIndex, 0, { ...currentRow, __temp_key__: newKey });\n\n /**\n * Now we diff against the server to understand what's different so we\n * can keep the connect array nice and tidy. It also needs reversing because\n * we reverse the relations from the server in the first place.\n */\n const connectedRelations = newData\n .reduce<Relation[]>((acc, relation, currentIndex, array) => {\n const relationOnServer = serverData.find((oldRelation) => oldRelation.id === relation.id);\n\n const relationInFront = array[currentIndex + 1];\n\n if (!relationOnServer || relationOnServer.__temp_key__ !== relation.__temp_key__) {\n const position = relationInFront\n ? {\n before: relationInFront.documentId,\n locale: relationInFront.locale,\n status:\n 'publishedAt' in relationInFront && relationInFront.publishedAt\n ? ('published' as Relation['status'])\n : ('draft' as Relation['status']),\n }\n : { end: true };\n\n const relationWithPosition: Relation = {\n ...relation,\n ...{\n apiData: {\n id: relation.id,\n documentId: relation.documentId ?? relation.apiData?.documentId ?? '',\n locale: relation.locale || relation.apiData?.locale,\n isTemporary: relation.apiData?.isTemporary,\n position,\n },\n },\n };\n\n return [...acc, relationWithPosition];\n }\n\n return acc;\n }, [])\n .toReversed();\n\n onChangeRelationField(`${name}.connect`, connectedRelations);\n },\n [data, serverData, name, formatMessage, getItemPos, onChangeRelationField]\n );\n\n const handleGrabItem = React.useCallback<NonNullable<UseDragAndDropOptions['onGrabItem']>>(\n (index) => {\n const item = data[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: item.label ?? item.documentId,\n position: getItemPos(index),\n }\n )\n );\n },\n [data, formatMessage, getItemPos]\n );\n\n const handleDropItem = React.useCallback<NonNullable<UseDragAndDropOptions['onDropItem']>>(\n (index) => {\n const { href: _href, label, ...item } = data[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: label ?? item.documentId,\n position: getItemPos(index),\n }\n )\n );\n },\n [data, formatMessage, getItemPos]\n );\n\n const handleCancel = React.useCallback<NonNullable<UseDragAndDropOptions['onCancel']>>(\n (index) => {\n const item = data[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: item.label ?? item.documentId,\n }\n )\n );\n },\n [data, formatMessage]\n );\n\n const handleDisconnect = useHandleDisconnect(name, 'RelationsList');\n\n /**\n * These relation types will only ever have one item\n * in their list, so you can't reorder a single item!\n */\n const canReorder = !ONE_WAY_RELATIONS.includes(relationType);\n\n const dynamicListHeight =\n data.length > RELATIONS_TO_DISPLAY\n ? Math.min(data.length, RELATIONS_TO_DISPLAY) * (RELATION_ITEM_HEIGHT + RELATION_GUTTER) +\n RELATION_ITEM_HEIGHT / 2\n : Math.min(data.length, RELATIONS_TO_DISPLAY) * (RELATION_ITEM_HEIGHT + RELATION_GUTTER);\n\n const itemData = React.useMemo(\n () => ({\n ariaDescribedBy: ariaDescriptionId,\n canDrag: canReorder,\n disabled,\n documentParams,\n handleCancel,\n handleDropItem,\n handleGrabItem,\n handleMoveItem,\n name,\n handleDisconnect,\n relations: data,\n targetModel,\n mainField,\n }),\n [\n ariaDescriptionId,\n canReorder,\n disabled,\n documentParams,\n handleCancel,\n handleDisconnect,\n handleDropItem,\n handleGrabItem,\n handleMoveItem,\n name,\n data,\n targetModel,\n mainField,\n ]\n );\n\n return (\n <ShadowBox $overflowDirection={overflow}>\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n {/* @ts-expect-error – width is expected, but we've not needed to pass it before. */}\n <FixedSizeList\n height={dynamicListHeight}\n ref={listRef}\n outerRef={outerListRef}\n itemCount={data.length}\n itemSize={RELATION_ITEM_HEIGHT + RELATION_GUTTER}\n itemData={itemData}\n itemKey={(index) => data[index].id}\n innerElementType=\"ol\"\n >\n {ListItem}\n </FixedSizeList>\n </ShadowBox>\n );\n};\n\nconst MemoizedRelationsList = React.memo(RelationsList);\n\nconst ShadowBox = styled<BoxComponent>(Box)<{\n $overflowDirection?: 'top-bottom' | 'top' | 'bottom';\n}>`\n position: relative;\n overflow: hidden;\n flex: 1;\n\n &:before,\n &:after {\n position: absolute;\n width: 100%;\n height: 4px;\n z-index: 1;\n }\n\n &:before {\n /* TODO: as for DS Table component we would need this to be handled by the DS theme */\n content: '';\n background: linear-gradient(rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);\n top: 0;\n opacity: ${({ $overflowDirection }) =>\n $overflowDirection === 'top-bottom' || $overflowDirection === 'top' ? 1 : 0};\n transition: opacity 0.2s ease-in-out;\n }\n\n &:after {\n /* TODO: as for DS Table component we would need this to be handled by the DS theme */\n content: '';\n background: linear-gradient(0deg, rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);\n bottom: 0;\n opacity: ${({ $overflowDirection }) =>\n $overflowDirection === 'top-bottom' || $overflowDirection === 'bottom' ? 1 : 0};\n transition: opacity 0.2s ease-in-out;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ListItem\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ListItemProps extends Pick<ListChildComponentProps, 'style' | 'index'> {\n data: {\n ariaDescribedBy: string;\n canDrag?: boolean;\n disabled?: boolean;\n handleCancel: UseDragAndDropOptions['onCancel'];\n handleDropItem: UseDragAndDropOptions['onDropItem'];\n handleGrabItem: UseDragAndDropOptions['onGrabItem'];\n handleMoveItem: UseDragAndDropOptions['onMoveItem'];\n handleDisconnect: (relation: Relation) => void;\n name: string;\n relations: Relation[];\n targetModel: string;\n documentParams?: DocumentMeta['params'];\n mainField?: MainField;\n };\n}\n\nconst RelationRow = styled<FlexComponent>(Flex)`\n padding-top: calc(${({ theme }) => theme.spaces[1]} - 1px); // minus the border width\n padding-bottom: calc(${({ theme }) => theme.spaces[1]} - 1px); // minus the border width\n\n ${({ theme }) => theme.breakpoints.medium} {\n padding-top: ${({ theme }) => theme.spaces[2]};\n padding-bottom: ${({ theme }) => theme.spaces[2]};\n }\n`;\n\nconst ListItem = React.memo(({ data, index, style }: ListItemProps) => {\n const {\n ariaDescribedBy,\n canDrag = false,\n disabled = false,\n handleCancel,\n handleDisconnect,\n handleDropItem,\n handleGrabItem,\n handleMoveItem,\n name,\n relations,\n targetModel,\n documentParams,\n mainField,\n } = data;\n const isDesktop = useIsDesktop();\n\n const { formatMessage } = useIntl();\n\n const {\n href,\n id,\n label: originalLabel,\n status: originalStatus,\n documentId,\n apiData,\n locale,\n } = relations[index];\n\n /**\n * The code above attempts to retrieve the updated value of a relation that has not yet been saved.\n * This is necessary when a relation modal is opened, and the mainField or its status is updated.\n * These changes need to be reflected in the initial relation field.\n */\n const collectionType = getCollectionType(href)!;\n const isTemporary = apiData?.isTemporary ?? false;\n const { document } = useDocument(\n {\n collectionType,\n model: targetModel,\n documentId: documentId ?? apiData?.documentId,\n params: documentParams,\n },\n { skip: !isTemporary }\n );\n const label = isTemporary && document ? getRelationLabel(document, mainField) : originalLabel;\n const status = isTemporary && document ? document?.status : originalStatus;\n\n const [{ handlerId, isDragging, handleKeyDown }, relationRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop<number, Omit<RelationDragPreviewProps, 'width'>, HTMLDivElement>(\n canDrag && !disabled,\n {\n type: `${ItemTypes.RELATION}_${name}`,\n index,\n item: {\n displayedValue: label,\n status,\n id: id,\n index,\n },\n onMoveItem: handleMoveItem,\n onDropItem: handleDropItem,\n onGrabItem: handleGrabItem,\n onCancel: handleCancel,\n dropSensitivity: DROP_SENSITIVITY.REGULAR,\n }\n );\n\n const composedRefs = useComposedRefs<HTMLDivElement>(relationRef, dragRef);\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage());\n }, [dragPreviewRef]);\n\n const safeDocumentId = documentId ?? apiData?.documentId;\n const safeLocale = locale ?? apiData?.locale ?? null;\n const documentMeta = React.useMemo(\n () =>\n ({\n documentId: safeDocumentId,\n model: targetModel,\n collectionType: getCollectionType(href)!,\n params: {\n locale: safeLocale,\n },\n }) as DocumentMeta,\n [safeDocumentId, href, safeLocale, targetModel]\n );\n\n return (\n <Box\n style={style}\n tag=\"li\"\n ref={dropRef}\n aria-describedby={ariaDescribedBy}\n cursor={canDrag ? 'all-scroll' : 'default'}\n >\n {isDragging ? (\n <RelationItemPlaceholder />\n ) : (\n <RelationRow\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={canDrag ? 2 : 4}\n paddingRight={4}\n hasRadius\n borderColor=\"neutral200\"\n background={disabled ? 'neutral150' : 'neutral0'}\n justifyContent=\"space-between\"\n ref={composedRefs}\n data-handler-id={handlerId}\n >\n <FlexWrapper gap={1}>\n {canDrag && isDesktop ? (\n <IconButton\n tag=\"div\"\n role=\"button\"\n tabIndex={0}\n withTooltip={false}\n label={formatMessage({\n id: getTranslation('components.RelationInput.icon-button-aria-label'),\n defaultMessage: 'Drag',\n })}\n variant=\"ghost\"\n onKeyDown={handleKeyDown}\n disabled={disabled}\n >\n <Drag />\n </IconButton>\n ) : null}\n <Flex width=\"100%\" minWidth={0} gap={4} justifyContent=\"space-between\">\n <Box flex={1} minWidth={0} paddingTop={1} paddingBottom={1}>\n <RelationModalRenderer relation={documentMeta}>{label}</RelationModalRenderer>\n </Box>\n {status ? <DocumentStatus status={status} /> : null}\n </Flex>\n </FlexWrapper>\n <Box paddingLeft={4}>\n <IconButton\n onClick={() => handleDisconnect(relations[index])}\n disabled={disabled}\n label={formatMessage({\n id: getTranslation('relation.disconnect'),\n defaultMessage: 'Remove',\n })}\n variant=\"ghost\"\n size=\"S\"\n >\n <Cross />\n </IconButton>\n </Box>\n </RelationRow>\n )}\n </Box>\n );\n});\n\nconst FlexWrapper = styled<FlexComponent>(Flex)`\n width: 100%;\n /* Used to prevent endAction to be pushed out of container */\n min-width: 0;\n\n & > div[role='button'] {\n cursor: all-scroll;\n }\n`;\n\nconst DisconnectButton = styled.button`\n svg path {\n fill: ${({ theme, disabled }) =>\n disabled ? theme.colors.neutral600 : theme.colors.neutral500};\n }\n\n &:hover svg path,\n &:focus svg path {\n fill: ${({ theme, disabled }) => !disabled && theme.colors.neutral600};\n }\n`;\n\nconst LinkEllipsis = styled(Link)`\n display: block;\n\n & > span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n }\n`;\n\nconst RelationItemPlaceholder = () => (\n <Box\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={4}\n paddingRight={4}\n hasRadius\n borderStyle=\"dashed\"\n borderColor=\"primary600\"\n borderWidth=\"1px\"\n background=\"primary100\"\n height={`calc(100% - ${RELATION_GUTTER}px)`}\n />\n);\n\nconst MemoizedRelationsField = React.memo(RelationsField);\n\nexport { MemoizedRelationsField as RelationsInput, FlexWrapper, DisconnectButton, LinkEllipsis };\nexport type { RelationsFieldProps };\n"],"names":["useHandleDisconnect","fieldName","consumerName","field","useField","removeFieldRow","useForm","state","addFieldRow","handleDisconnect","React","useCallback","relation","value","connect","indexOfRelationInConnectArray","findIndex","rel","id","apiData","documentId","locale","RELATIONS_TO_DISPLAY","ONE_WAY_RELATIONS","EMPTY_RELATION_RESULTS","RelationsField","forwardRef","disabled","label","props","ref","currentDocument","currentDocumentMeta","useDocumentContext","currentPage","setCurrentPage","useState","document","formatMessage","useIntl","isMorph","attribute","toLowerCase","includes","isDisabled","targetModel","componentId","useComponent","componentUID","uid","isSubmitting","useEffect","component","components","undefined","model","toString","targetField","name","split","slice","schemaAttributes","attributes","schema","isRelatedToCurrentDocument","Object","values","filter","type","target","length","data","isLoading","isFetching","useGetRelationsQuery","params","pageSize","page","refetchOnMountOrArgChange","skip","handleLoadMore","prev","onChangeRelationField","onChange","serverData","results","isFetchingMoreRelations","realServerRelationsCount","pagination","total","relationsConnected","relationsDisconnected","disconnect","relationsCount","relations","useMemo","ctx","href","COLLECTION_TYPES","mainField","transformations","pipe","removeConnected","removeDisconnected","addLabelAndHref","transformedRels","connectItems","map","urlLocaleParam","getRelationLabel","sort","a","b","__temp_key__","handleConnect","lastItemInList","item","isTemporary","status","generateNKeysBetween","forEach","_jsxs","Flex","direction","gap","justifyContent","alignItems","wrap","StyledFlex","width","_jsx","MemoizedRelationsComboboxInput","pageCount","TextButton","onClick","loading","startIcon","ArrowClockwise","shrink","getTranslation","defaultMessage","MemoizedRelationsList","relationType","documentParams","styled","connectedRelations","disconnectedRelations","RelationsInput","hint","labelAction","placeholder","required","unique","_unique","_ariaLabel","searchParams","setSearchParams","_q","toggleNotification","useNotification","searchParamsDebounced","useDebounce","searchForTrigger","useLazySearchRelationsQuery","idsToInclude","idsToOmit","hasNextPage","handleChange","relationId","options","find","opt","console","error","message","collectionType","permissions","isLoadingPermissions","useRBAC","PERMISSIONS","action","subject","height","EmptyStateLayout","icon","WarningCircle","content","Field","Root","Label","DocumentRBAC","MemoizedRelationModalWithContext","isLoadingSearchRelations","fieldValue","Error","Hint","memo","RelationModalWithContext","textValue","setTextValue","canCreate","useDocumentRBAC","fieldRef","useFocusInputField","s","useLayoutEffect","handleSearch","search","RelationModalRenderer","dispatch","Combobox","creatable","creatableDisabled","createMessage","onCreateOption","payload","shouldBypassConfirmation","fieldToConnect","fieldToConnectUID","creatableStartIcon","Plus","fill","autocomplete","hasMoreItems","onOpenChange","noOptionsMessage","loadingMessage","onLoadMore","onTextValueChange","text","onInputChange","event","currentTarget","ComboboxOption","LinkIcon","Typography","ellipsis","DocumentStatus","RELATION_ITEM_HEIGHT","RELATION_GUTTER","RelationsList","ariaDescriptionId","useId","listRef","useRef","outerListRef","overflow","setOverflow","liveText","setLiveText","handleNativeScroll","e","el","parentScrollContainerHeight","parentNode","scrollHeight","maxScrollBottom","scrollTop","outerListRefCurrent","current","addEventListener","removeEventListener","getItemPos","index","handleMoveItem","newIndex","oldIndex","position","newData","currentRow","startKey","endKey","newKey","splice","reduce","acc","currentIndex","array","relationOnServer","oldRelation","relationInFront","before","publishedAt","end","relationWithPosition","toReversed","handleGrabItem","handleDropItem","_href","handleCancel","canReorder","dynamicListHeight","Math","min","itemData","ariaDescribedBy","canDrag","ShadowBox","$overflowDirection","VisuallyHidden","aria-live","FixedSizeList","outerRef","itemCount","itemSize","itemKey","innerElementType","ListItem","Box","RelationRow","theme","spaces","breakpoints","medium","style","isDesktop","useIsDesktop","originalLabel","originalStatus","getCollectionType","useDocument","handlerId","isDragging","handleKeyDown","relationRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","ItemTypes","RELATION","displayedValue","onMoveItem","onDropItem","onGrabItem","onCancel","dropSensitivity","DROP_SENSITIVITY","REGULAR","composedRefs","useComposedRefs","getEmptyImage","safeDocumentId","safeLocale","documentMeta","tag","aria-describedby","cursor","RelationItemPlaceholder","paddingTop","paddingBottom","paddingLeft","paddingRight","hasRadius","borderColor","background","data-handler-id","FlexWrapper","IconButton","role","tabIndex","withTooltip","variant","onKeyDown","Drag","minWidth","flex","size","Cross","DisconnectButton","button","colors","neutral600","neutral500","LinkEllipsis","Link","borderStyle","borderWidth","MemoizedRelationsField"],"mappings":"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"}
@@ -55,6 +55,7 @@ const UIDInput = /*#__PURE__*/ React__namespace.forwardRef(({ hint, label, label
55
55
  ]);
56
56
  const { regex } = attribute;
57
57
  const validationRegExp = regex ? new RegExp(regex) : UID_REGEX;
58
+ const trimmedDebouncedValue = debouncedValue?.trim() ?? '';
58
59
  const { data: defaultGeneratedUID, isLoading: isGeneratingDefaultUID, error: apiError } = uid.useGetDefaultUIDQuery({
59
60
  contentTypeUID: currentDocumentMeta.model,
60
61
  field: name,
@@ -64,7 +65,7 @@ const UIDInput = /*#__PURE__*/ React__namespace.forwardRef(({ hint, label, label
64
65
  },
65
66
  params
66
67
  }, {
67
- skip: field.value || !required
68
+ skip: field.value !== undefined && field.value !== '' || !required
68
69
  });
69
70
  React__namespace.useEffect(()=>{
70
71
  if (apiError) {
@@ -123,11 +124,11 @@ const UIDInput = /*#__PURE__*/ React__namespace.forwardRef(({ hint, label, label
123
124
  const { data: availabilityData, isLoading: isCheckingAvailability, error: availabilityError } = uid.useGetAvailabilityQuery({
124
125
  contentTypeUID: currentDocumentMeta.model,
125
126
  field: name,
126
- value: debouncedValue ? debouncedValue.trim() : '',
127
+ value: trimmedDebouncedValue,
127
128
  params
128
129
  }, {
129
130
  // Don't check availability if the value is empty or wasn't changed
130
- skip: !Boolean((hasChanged || isCloning) && debouncedValue && validationRegExp.test(debouncedValue.trim()))
131
+ skip: !Boolean((hasChanged || isCloning) && trimmedDebouncedValue !== '' && validationRegExp.test(trimmedDebouncedValue))
131
132
  });
132
133
  React__namespace.useEffect(()=>{
133
134
  if (availabilityError) {
@@ -163,7 +164,7 @@ const UIDInput = /*#__PURE__*/ React__namespace.forwardRef(({ hint, label, label
163
164
  const isLoading = isGeneratingDefaultUID || isGeneratingUID || isCheckingAvailability;
164
165
  const fieldRef = strapiAdmin.useFocusInputField(name);
165
166
  const composedRefs = designSystem.useComposedRefs(ref, fieldRef);
166
- const shouldShowAvailability = (hasChanged || isCloning) && debouncedValue != null && availability && !showRegenerate;
167
+ const shouldShowAvailability = (hasChanged || isCloning) && trimmedDebouncedValue !== '' && availability && !showRegenerate;
167
168
  return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
168
169
  hint: hint,
169
170
  name: name,
@@ -1 +1 @@
1
- {"version":3,"file":"UID.js","sources":["../../../../../../admin/src/pages/EditView/components/FormInputs/UID.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n type InputProps,\n useField,\n useForm,\n useNotification,\n useAPIErrorHandler,\n useQueryParams,\n useFocusInputField,\n} from '@strapi/admin/strapi-admin';\nimport {\n Field,\n Flex,\n FlexComponent,\n TextInput,\n Typography,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { CheckCircle, WarningCircle, Loader, ArrowClockwise } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMatch } from 'react-router-dom';\nimport { styled, keyframes } from 'styled-components';\n\nimport { useDebounce } from '../../../../hooks/useDebounce';\nimport { useDocumentContext } from '../../../../hooks/useDocumentContext';\nimport { CLONE_PATH } from '../../../../router';\nimport {\n useGenerateUIDMutation,\n useGetAvailabilityQuery,\n useGetDefaultUIDQuery,\n} from '../../../../services/uid';\nimport { buildValidParams } from '../../../../utils/api';\n\nimport type { CheckUIDAvailability } from '../../../../../../shared/contracts/uid';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * InputUID\n * -----------------------------------------------------------------------------------------------*/\n\nconst UID_REGEX = /^[A-Za-z0-9-_.~]*$/;\n\ninterface UIDInputProps extends Omit<InputProps, 'type'> {\n attribute?: Pick<Schema.Attribute.UIDProperties, 'regex'>;\n type: Schema.Attribute.TypeOf<Schema.Attribute.UID>;\n}\n\nconst UIDInput = React.forwardRef<any, UIDInputProps>(\n ({ hint, label, labelAction, name, required, attribute = {}, ...props }, ref) => {\n const { currentDocumentMeta } = useDocumentContext('UIDInput');\n const allFormValues = useForm('InputUID', (form) => form.values);\n const [availability, setAvailability] = React.useState<CheckUIDAvailability.Response>();\n const [showRegenerate, setShowRegenerate] = React.useState(false);\n const isCloning = useMatch(CLONE_PATH) !== null;\n const field = useField(name);\n const debouncedValue = useDebounce(field.value, 300);\n const hasChanged = debouncedValue !== field.initialValue;\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const { regex } = attribute;\n const validationRegExp = regex ? new RegExp(regex) : UID_REGEX;\n\n const {\n data: defaultGeneratedUID,\n isLoading: isGeneratingDefaultUID,\n error: apiError,\n } = useGetDefaultUIDQuery(\n {\n contentTypeUID: currentDocumentMeta.model,\n field: name,\n data: {\n id: currentDocumentMeta.documentId ?? '',\n ...allFormValues,\n },\n params,\n },\n {\n skip: field.value || !required,\n }\n );\n\n React.useEffect(() => {\n if (apiError) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(apiError),\n });\n }\n }, [apiError, formatAPIError, toggleNotification]);\n\n /**\n * If the defaultGeneratedUID is available, then we set it as the value,\n * but we also want to set it as the initialValue too.\n */\n React.useEffect(() => {\n if (defaultGeneratedUID && field.value === undefined) {\n field.onChange(name, defaultGeneratedUID);\n }\n }, [defaultGeneratedUID, field, name]);\n\n const [generateUID, { isLoading: isGeneratingUID }] = useGenerateUIDMutation();\n\n const handleRegenerateClick = async () => {\n try {\n const res = await generateUID({\n contentTypeUID: currentDocumentMeta.model,\n field: name,\n data: { id: currentDocumentMeta.documentId ?? '', ...allFormValues },\n params,\n });\n\n if ('data' in res) {\n field.onChange(name, res.data);\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred.',\n }),\n });\n }\n };\n\n const {\n data: availabilityData,\n isLoading: isCheckingAvailability,\n error: availabilityError,\n } = useGetAvailabilityQuery(\n {\n contentTypeUID: currentDocumentMeta.model,\n field: name,\n value: debouncedValue ? debouncedValue.trim() : '',\n params,\n },\n {\n // Don't check availability if the value is empty or wasn't changed\n skip: !Boolean(\n (hasChanged || isCloning) &&\n debouncedValue &&\n validationRegExp.test(debouncedValue.trim())\n ),\n }\n );\n\n React.useEffect(() => {\n if (availabilityError) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(availabilityError),\n });\n }\n }, [availabilityError, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n /**\n * always store the data in state because that way as seen below\n * we can then remove the data to stop showing the label.\n */\n setAvailability(availabilityData);\n\n let timer: number;\n\n if (availabilityData?.isAvailable) {\n timer = window.setTimeout(() => {\n setAvailability(undefined);\n }, 4000);\n }\n\n return () => {\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [availabilityData]);\n\n const isLoading = isGeneratingDefaultUID || isGeneratingUID || isCheckingAvailability;\n\n const fieldRef = useFocusInputField(name);\n const composedRefs = useComposedRefs(ref, fieldRef);\n\n const shouldShowAvailability =\n (hasChanged || isCloning) && debouncedValue != null && availability && !showRegenerate;\n\n return (\n <Field.Root hint={hint} name={name} error={field.error} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <TextInput\n ref={composedRefs}\n disabled={props.disabled}\n endAction={\n <Flex position=\"relative\" gap={1}>\n {shouldShowAvailability && (\n <TextValidation\n alignItems=\"center\"\n gap={1}\n justifyContent=\"flex-end\"\n $available={!!availability?.isAvailable}\n data-not-here-outer\n position=\"absolute\"\n pointerEvents=\"none\"\n right={6}\n width=\"100px\"\n >\n {availability?.isAvailable ? <CheckCircle /> : <WarningCircle />}\n\n <Typography\n textColor={availability.isAvailable ? 'success600' : 'danger600'}\n variant=\"pi\"\n >\n {formatMessage(\n availability.isAvailable\n ? {\n id: 'content-manager.components.uid.available',\n defaultMessage: 'Available',\n }\n : {\n id: 'content-manager.components.uid.unavailable',\n defaultMessage: 'Unavailable',\n }\n )}\n </Typography>\n </TextValidation>\n )}\n\n {!props.disabled && (\n <>\n {showRegenerate && (\n <TextValidation alignItems=\"center\" justifyContent=\"flex-end\" gap={1}>\n <Typography textColor=\"primary600\" variant=\"pi\">\n {formatMessage({\n id: 'content-manager.components.uid.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Typography>\n </TextValidation>\n )}\n\n <FieldActionWrapper\n onClick={handleRegenerateClick}\n label={formatMessage({\n id: 'content-manager.components.uid.regenerate',\n defaultMessage: 'Regenerate',\n })}\n onMouseEnter={() => setShowRegenerate(true)}\n onMouseLeave={() => setShowRegenerate(false)}\n >\n {isLoading ? (\n <LoadingWrapper data-testid=\"loading-wrapper\">\n <Loader />\n </LoadingWrapper>\n ) : (\n <ArrowClockwise />\n )}\n </FieldActionWrapper>\n </>\n )}\n </Flex>\n }\n onChange={field.onChange}\n value={field.value ?? ''}\n {...props}\n type=\"text\"\n />\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * FieldActionWrapper\n * -----------------------------------------------------------------------------------------------*/\n\nconst FieldActionWrapper = styled(Field.Action)`\n width: 1.6rem;\n\n svg {\n height: 1.6rem;\n width: 1.6rem;\n path {\n fill: ${({ theme }) => theme.colors.neutral400};\n }\n }\n\n svg:hover {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * TextValidation\n * -----------------------------------------------------------------------------------------------*/\n\nconst TextValidation = styled<FlexComponent>(Flex)<{ $available?: boolean }>`\n svg {\n height: 1.2rem;\n width: 1.2rem;\n\n path {\n fill: ${({ theme, $available }) =>\n $available ? theme.colors.success600 : theme.colors.danger600};\n }\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * LoadingWrapper\n * -----------------------------------------------------------------------------------------------*/\n\nconst rotation = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(359deg);\n }\n`;\n\nconst LoadingWrapper = styled<FlexComponent>(Flex)`\n animation: ${rotation} 2s infinite linear;\n`;\n\nconst MemoizedUIDInput = React.memo(UIDInput);\n\nexport { MemoizedUIDInput as UIDInput };\nexport type { UIDInputProps };\n"],"names":["UID_REGEX","UIDInput","React","forwardRef","hint","label","labelAction","name","required","attribute","props","ref","currentDocumentMeta","useDocumentContext","allFormValues","useForm","form","values","availability","setAvailability","useState","showRegenerate","setShowRegenerate","isCloning","useMatch","CLONE_PATH","field","useField","debouncedValue","useDebounce","value","hasChanged","initialValue","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","formatMessage","useIntl","query","useQueryParams","params","useMemo","buildValidParams","regex","validationRegExp","RegExp","data","defaultGeneratedUID","isLoading","isGeneratingDefaultUID","error","apiError","useGetDefaultUIDQuery","contentTypeUID","model","id","documentId","skip","useEffect","type","message","undefined","onChange","generateUID","isGeneratingUID","useGenerateUIDMutation","handleRegenerateClick","res","err","defaultMessage","availabilityData","isCheckingAvailability","availabilityError","useGetAvailabilityQuery","trim","Boolean","test","timer","isAvailable","window","setTimeout","clearTimeout","fieldRef","useFocusInputField","composedRefs","useComposedRefs","shouldShowAvailability","_jsxs","Field","Root","_jsx","Label","action","TextInput","disabled","endAction","Flex","position","gap","TextValidation","alignItems","justifyContent","$available","data-not-here-outer","pointerEvents","right","width","CheckCircle","WarningCircle","Typography","textColor","variant","_Fragment","FieldActionWrapper","onClick","onMouseEnter","onMouseLeave","LoadingWrapper","data-testid","Loader","ArrowClockwise","Error","Hint","styled","Action","theme","colors","neutral400","primary600","success600","danger600","rotation","keyframes","MemoizedUIDInput","memo"],"mappings":"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"}
1
+ {"version":3,"file":"UID.js","sources":["../../../../../../admin/src/pages/EditView/components/FormInputs/UID.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n type InputProps,\n useField,\n useForm,\n useNotification,\n useAPIErrorHandler,\n useQueryParams,\n useFocusInputField,\n} from '@strapi/admin/strapi-admin';\nimport {\n Field,\n Flex,\n FlexComponent,\n TextInput,\n Typography,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { CheckCircle, WarningCircle, Loader, ArrowClockwise } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMatch } from 'react-router-dom';\nimport { styled, keyframes } from 'styled-components';\n\nimport { useDebounce } from '../../../../hooks/useDebounce';\nimport { useDocumentContext } from '../../../../hooks/useDocumentContext';\nimport { CLONE_PATH } from '../../../../router';\nimport {\n useGenerateUIDMutation,\n useGetAvailabilityQuery,\n useGetDefaultUIDQuery,\n} from '../../../../services/uid';\nimport { buildValidParams } from '../../../../utils/api';\n\nimport type { CheckUIDAvailability } from '../../../../../../shared/contracts/uid';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * InputUID\n * -----------------------------------------------------------------------------------------------*/\n\nconst UID_REGEX = /^[A-Za-z0-9-_.~]*$/;\n\ninterface UIDInputProps extends Omit<InputProps, 'type'> {\n attribute?: Pick<Schema.Attribute.UIDProperties, 'regex'>;\n type: Schema.Attribute.TypeOf<Schema.Attribute.UID>;\n}\n\nconst UIDInput = React.forwardRef<HTMLInputElement, UIDInputProps>(\n ({ hint, label, labelAction, name, required, attribute = {}, ...props }, ref) => {\n const { currentDocumentMeta } = useDocumentContext('UIDInput');\n const allFormValues = useForm('InputUID', (form) => form.values);\n const [availability, setAvailability] = React.useState<CheckUIDAvailability.Response>();\n const [showRegenerate, setShowRegenerate] = React.useState(false);\n const isCloning = useMatch(CLONE_PATH) !== null;\n const field = useField<string>(name);\n const debouncedValue = useDebounce(field.value, 300);\n const hasChanged = debouncedValue !== field.initialValue;\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const { regex } = attribute;\n const validationRegExp = regex ? new RegExp(regex) : UID_REGEX;\n const trimmedDebouncedValue = debouncedValue?.trim() ?? '';\n\n const {\n data: defaultGeneratedUID,\n isLoading: isGeneratingDefaultUID,\n error: apiError,\n } = useGetDefaultUIDQuery(\n {\n contentTypeUID: currentDocumentMeta.model,\n field: name,\n data: {\n id: currentDocumentMeta.documentId ?? '',\n ...allFormValues,\n },\n params,\n },\n {\n skip: (field.value !== undefined && field.value !== '') || !required,\n }\n );\n\n React.useEffect(() => {\n if (apiError) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(apiError),\n });\n }\n }, [apiError, formatAPIError, toggleNotification]);\n\n /**\n * If the defaultGeneratedUID is available, then we set it as the value,\n * but we also want to set it as the initialValue too.\n */\n React.useEffect(() => {\n if (defaultGeneratedUID && field.value === undefined) {\n field.onChange(name, defaultGeneratedUID);\n }\n }, [defaultGeneratedUID, field, name]);\n\n const [generateUID, { isLoading: isGeneratingUID }] = useGenerateUIDMutation();\n\n const handleRegenerateClick = async () => {\n try {\n const res = await generateUID({\n contentTypeUID: currentDocumentMeta.model,\n field: name,\n data: { id: currentDocumentMeta.documentId ?? '', ...allFormValues },\n params,\n });\n\n if ('data' in res) {\n field.onChange(name, res.data);\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred.',\n }),\n });\n }\n };\n\n const {\n data: availabilityData,\n isLoading: isCheckingAvailability,\n error: availabilityError,\n } = useGetAvailabilityQuery(\n {\n contentTypeUID: currentDocumentMeta.model,\n field: name,\n value: trimmedDebouncedValue,\n params,\n },\n {\n // Don't check availability if the value is empty or wasn't changed\n skip: !Boolean(\n (hasChanged || isCloning) &&\n trimmedDebouncedValue !== '' &&\n validationRegExp.test(trimmedDebouncedValue)\n ),\n }\n );\n\n React.useEffect(() => {\n if (availabilityError) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(availabilityError),\n });\n }\n }, [availabilityError, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n /**\n * always store the data in state because that way as seen below\n * we can then remove the data to stop showing the label.\n */\n setAvailability(availabilityData);\n\n let timer: number;\n\n if (availabilityData?.isAvailable) {\n timer = window.setTimeout(() => {\n setAvailability(undefined);\n }, 4000);\n }\n\n return () => {\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [availabilityData]);\n\n const isLoading = isGeneratingDefaultUID || isGeneratingUID || isCheckingAvailability;\n\n const fieldRef = useFocusInputField<HTMLInputElement>(name);\n const composedRefs = useComposedRefs(ref, fieldRef);\n\n const shouldShowAvailability =\n (hasChanged || isCloning) && trimmedDebouncedValue !== '' && availability && !showRegenerate;\n\n return (\n <Field.Root hint={hint} name={name} error={field.error} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <TextInput\n ref={composedRefs}\n disabled={props.disabled}\n endAction={\n <Flex position=\"relative\" gap={1}>\n {shouldShowAvailability && (\n <TextValidation\n alignItems=\"center\"\n gap={1}\n justifyContent=\"flex-end\"\n $available={!!availability?.isAvailable}\n data-not-here-outer\n position=\"absolute\"\n pointerEvents=\"none\"\n right={6}\n width=\"100px\"\n >\n {availability?.isAvailable ? <CheckCircle /> : <WarningCircle />}\n\n <Typography\n textColor={availability.isAvailable ? 'success600' : 'danger600'}\n variant=\"pi\"\n >\n {formatMessage(\n availability.isAvailable\n ? {\n id: 'content-manager.components.uid.available',\n defaultMessage: 'Available',\n }\n : {\n id: 'content-manager.components.uid.unavailable',\n defaultMessage: 'Unavailable',\n }\n )}\n </Typography>\n </TextValidation>\n )}\n\n {!props.disabled && (\n <>\n {showRegenerate && (\n <TextValidation alignItems=\"center\" justifyContent=\"flex-end\" gap={1}>\n <Typography textColor=\"primary600\" variant=\"pi\">\n {formatMessage({\n id: 'content-manager.components.uid.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Typography>\n </TextValidation>\n )}\n\n <FieldActionWrapper\n onClick={handleRegenerateClick}\n label={formatMessage({\n id: 'content-manager.components.uid.regenerate',\n defaultMessage: 'Regenerate',\n })}\n onMouseEnter={() => setShowRegenerate(true)}\n onMouseLeave={() => setShowRegenerate(false)}\n >\n {isLoading ? (\n <LoadingWrapper data-testid=\"loading-wrapper\">\n <Loader />\n </LoadingWrapper>\n ) : (\n <ArrowClockwise />\n )}\n </FieldActionWrapper>\n </>\n )}\n </Flex>\n }\n onChange={field.onChange}\n value={field.value ?? ''}\n {...props}\n type=\"text\"\n />\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * FieldActionWrapper\n * -----------------------------------------------------------------------------------------------*/\n\nconst FieldActionWrapper = styled(Field.Action)`\n width: 1.6rem;\n\n svg {\n height: 1.6rem;\n width: 1.6rem;\n path {\n fill: ${({ theme }) => theme.colors.neutral400};\n }\n }\n\n svg:hover {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * TextValidation\n * -----------------------------------------------------------------------------------------------*/\n\nconst TextValidation = styled<FlexComponent>(Flex)<{ $available?: boolean }>`\n svg {\n height: 1.2rem;\n width: 1.2rem;\n\n path {\n fill: ${({ theme, $available }) =>\n $available ? theme.colors.success600 : theme.colors.danger600};\n }\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * LoadingWrapper\n * -----------------------------------------------------------------------------------------------*/\n\nconst rotation = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(359deg);\n }\n`;\n\nconst LoadingWrapper = styled<FlexComponent>(Flex)`\n animation: ${rotation} 2s infinite linear;\n`;\n\nconst MemoizedUIDInput = React.memo(UIDInput);\n\nexport { MemoizedUIDInput as UIDInput };\nexport type { UIDInputProps };\n"],"names":["UID_REGEX","UIDInput","React","forwardRef","hint","label","labelAction","name","required","attribute","props","ref","currentDocumentMeta","useDocumentContext","allFormValues","useForm","form","values","availability","setAvailability","useState","showRegenerate","setShowRegenerate","isCloning","useMatch","CLONE_PATH","field","useField","debouncedValue","useDebounce","value","hasChanged","initialValue","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","formatMessage","useIntl","query","useQueryParams","params","useMemo","buildValidParams","regex","validationRegExp","RegExp","trimmedDebouncedValue","trim","data","defaultGeneratedUID","isLoading","isGeneratingDefaultUID","error","apiError","useGetDefaultUIDQuery","contentTypeUID","model","id","documentId","skip","undefined","useEffect","type","message","onChange","generateUID","isGeneratingUID","useGenerateUIDMutation","handleRegenerateClick","res","err","defaultMessage","availabilityData","isCheckingAvailability","availabilityError","useGetAvailabilityQuery","Boolean","test","timer","isAvailable","window","setTimeout","clearTimeout","fieldRef","useFocusInputField","composedRefs","useComposedRefs","shouldShowAvailability","_jsxs","Field","Root","_jsx","Label","action","TextInput","disabled","endAction","Flex","position","gap","TextValidation","alignItems","justifyContent","$available","data-not-here-outer","pointerEvents","right","width","CheckCircle","WarningCircle","Typography","textColor","variant","_Fragment","FieldActionWrapper","onClick","onMouseEnter","onMouseLeave","LoadingWrapper","data-testid","Loader","ArrowClockwise","Error","Hint","styled","Action","theme","colors","neutral400","primary600","success600","danger600","rotation","keyframes","MemoizedUIDInput","memo"],"mappings":"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"}