@strapi/content-manager 0.0.0-next.daa3d4c4db6322f58233f0ccb757d80dbd1b48e9 → 0.0.0-next.df0d99415fc543d9747f3946fd7d1a4c39052b95

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 (261) hide show
  1. package/dist/admin/components/ConfigurationForm/Fields.js +300 -204
  2. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  3. package/dist/admin/components/ConfigurationForm/Fields.mjs +304 -209
  4. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  5. package/dist/admin/components/LeftMenu.js +34 -30
  6. package/dist/admin/components/LeftMenu.js.map +1 -1
  7. package/dist/admin/components/LeftMenu.mjs +36 -32
  8. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  9. package/dist/admin/components/Widgets.js +253 -0
  10. package/dist/admin/components/Widgets.js.map +1 -1
  11. package/dist/admin/components/Widgets.mjs +236 -3
  12. package/dist/admin/components/Widgets.mjs.map +1 -1
  13. package/dist/admin/history/components/VersionContent.js +24 -3
  14. package/dist/admin/history/components/VersionContent.js.map +1 -1
  15. package/dist/admin/history/components/VersionContent.mjs +25 -4
  16. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  17. package/dist/admin/history/components/VersionHeader.js +6 -0
  18. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  19. package/dist/admin/history/components/VersionHeader.mjs +7 -1
  20. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  21. package/dist/admin/hooks/useDocumentActions.js +7 -6
  22. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  23. package/dist/admin/hooks/useDocumentActions.mjs +8 -7
  24. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  25. package/dist/admin/index.js +47 -8
  26. package/dist/admin/index.js.map +1 -1
  27. package/dist/admin/index.mjs +47 -9
  28. package/dist/admin/index.mjs.map +1 -1
  29. package/dist/admin/layout.js +1 -27
  30. package/dist/admin/layout.js.map +1 -1
  31. package/dist/admin/layout.mjs +2 -9
  32. package/dist/admin/layout.mjs.map +1 -1
  33. package/dist/admin/pages/EditView/EditViewPage.js +99 -75
  34. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  35. package/dist/admin/pages/EditView/EditViewPage.mjs +101 -77
  36. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  37. package/dist/admin/pages/EditView/components/DocumentActions.js +83 -70
  38. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  39. package/dist/admin/pages/EditView/components/DocumentActions.mjs +85 -72
  40. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
  42. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
  44. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +54 -14
  46. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +55 -15
  48. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +21 -35
  50. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +21 -35
  52. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +12 -1
  54. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +13 -2
  56. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +13 -2
  58. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +14 -3
  60. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +18 -5
  62. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +20 -7
  64. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +1 -0
  66. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +1 -0
  68. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +158 -106
  70. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +161 -109
  72. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/UID.js +4 -2
  74. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +4 -2
  76. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
  78. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  79. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
  80. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  81. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
  82. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
  84. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormLayout.js +47 -27
  86. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormLayout.mjs +47 -27
  88. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  89. package/dist/admin/pages/EditView/utils/data.js +103 -0
  90. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  91. package/dist/admin/pages/EditView/utils/data.mjs +103 -1
  92. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  93. package/dist/admin/pages/ListView/ListViewPage.js +227 -132
  94. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  95. package/dist/admin/pages/ListView/ListViewPage.mjs +229 -134
  96. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  97. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +2 -1
  98. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  99. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -1
  100. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  101. package/dist/admin/pages/ListView/components/Filters.js +4 -1
  102. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  103. package/dist/admin/pages/ListView/components/Filters.mjs +4 -1
  104. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  105. package/dist/admin/pages/ListView/components/TableActions.js +13 -3
  106. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  107. package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
  108. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  109. package/dist/admin/preview/components/PreviewSidePanel.js +31 -4
  110. package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
  111. package/dist/admin/preview/components/PreviewSidePanel.mjs +32 -5
  112. package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
  113. package/dist/admin/preview/pages/Preview.js +101 -35
  114. package/dist/admin/preview/pages/Preview.js.map +1 -1
  115. package/dist/admin/preview/pages/Preview.mjs +102 -36
  116. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  117. package/dist/admin/services/api.js +3 -1
  118. package/dist/admin/services/api.js.map +1 -1
  119. package/dist/admin/services/api.mjs +3 -1
  120. package/dist/admin/services/api.mjs.map +1 -1
  121. package/dist/admin/services/documents.js +32 -16
  122. package/dist/admin/services/documents.js.map +1 -1
  123. package/dist/admin/services/documents.mjs +32 -16
  124. package/dist/admin/services/documents.mjs.map +1 -1
  125. package/dist/admin/services/homepage.js +11 -2
  126. package/dist/admin/services/homepage.js.map +1 -1
  127. package/dist/admin/services/homepage.mjs +11 -3
  128. package/dist/admin/services/homepage.mjs.map +1 -1
  129. package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
  130. package/dist/admin/src/components/Widgets.d.ts +2 -1
  131. package/dist/admin/src/exports.d.ts +1 -0
  132. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  133. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  134. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
  135. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -8
  136. package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
  137. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  138. package/dist/admin/src/services/api.d.ts +1 -1
  139. package/dist/admin/src/services/components.d.ts +2 -2
  140. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  141. package/dist/admin/src/services/documents.d.ts +23 -17
  142. package/dist/admin/src/services/homepage.d.ts +6 -2
  143. package/dist/admin/src/services/init.d.ts +1 -1
  144. package/dist/admin/src/services/relations.d.ts +2 -2
  145. package/dist/admin/src/services/uid.d.ts +3 -3
  146. package/dist/admin/src/utils/validation.d.ts +1 -0
  147. package/dist/admin/translations/en.json.js +7 -0
  148. package/dist/admin/translations/en.json.js.map +1 -1
  149. package/dist/admin/translations/en.json.mjs +7 -0
  150. package/dist/admin/translations/en.json.mjs.map +1 -1
  151. package/dist/admin/translations/es.json.js +5 -2
  152. package/dist/admin/translations/es.json.js.map +1 -1
  153. package/dist/admin/translations/es.json.mjs +5 -2
  154. package/dist/admin/translations/es.json.mjs.map +1 -1
  155. package/dist/admin/translations/fr.json.js +10 -2
  156. package/dist/admin/translations/fr.json.js.map +1 -1
  157. package/dist/admin/translations/fr.json.mjs +10 -2
  158. package/dist/admin/translations/fr.json.mjs.map +1 -1
  159. package/dist/admin/utils/validation.js +19 -7
  160. package/dist/admin/utils/validation.js.map +1 -1
  161. package/dist/admin/utils/validation.mjs +19 -7
  162. package/dist/admin/utils/validation.mjs.map +1 -1
  163. package/dist/server/controllers/content-types.js +11 -1
  164. package/dist/server/controllers/content-types.js.map +1 -1
  165. package/dist/server/controllers/content-types.mjs +11 -1
  166. package/dist/server/controllers/content-types.mjs.map +1 -1
  167. package/dist/server/controllers/relations.js +2 -2
  168. package/dist/server/controllers/relations.js.map +1 -1
  169. package/dist/server/controllers/relations.mjs +2 -2
  170. package/dist/server/controllers/relations.mjs.map +1 -1
  171. package/dist/server/controllers/validation/index.js +14 -2
  172. package/dist/server/controllers/validation/index.js.map +1 -1
  173. package/dist/server/controllers/validation/index.mjs +14 -2
  174. package/dist/server/controllers/validation/index.mjs.map +1 -1
  175. package/dist/server/history/services/lifecycles.js +23 -19
  176. package/dist/server/history/services/lifecycles.js.map +1 -1
  177. package/dist/server/history/services/lifecycles.mjs +23 -19
  178. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  179. package/dist/server/homepage/controllers/homepage.js +5 -0
  180. package/dist/server/homepage/controllers/homepage.js.map +1 -1
  181. package/dist/server/homepage/controllers/homepage.mjs +5 -0
  182. package/dist/server/homepage/controllers/homepage.mjs.map +1 -1
  183. package/dist/server/homepage/routes/homepage.js +11 -0
  184. package/dist/server/homepage/routes/homepage.js.map +1 -1
  185. package/dist/server/homepage/routes/homepage.mjs +11 -0
  186. package/dist/server/homepage/routes/homepage.mjs.map +1 -1
  187. package/dist/server/homepage/services/homepage.js +86 -46
  188. package/dist/server/homepage/services/homepage.js.map +1 -1
  189. package/dist/server/homepage/services/homepage.mjs +86 -46
  190. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  191. package/dist/server/preview/services/preview-config.js +5 -1
  192. package/dist/server/preview/services/preview-config.js.map +1 -1
  193. package/dist/server/preview/services/preview-config.mjs +5 -1
  194. package/dist/server/preview/services/preview-config.mjs.map +1 -1
  195. package/dist/server/preview/services/preview.js +4 -0
  196. package/dist/server/preview/services/preview.js.map +1 -1
  197. package/dist/server/preview/services/preview.mjs +4 -0
  198. package/dist/server/preview/services/preview.mjs.map +1 -1
  199. package/dist/server/services/data-mapper.js +4 -1
  200. package/dist/server/services/data-mapper.js.map +1 -1
  201. package/dist/server/services/data-mapper.mjs +4 -1
  202. package/dist/server/services/data-mapper.mjs.map +1 -1
  203. package/dist/server/services/document-manager.js +8 -1
  204. package/dist/server/services/document-manager.js.map +1 -1
  205. package/dist/server/services/document-manager.mjs +8 -1
  206. package/dist/server/services/document-manager.mjs.map +1 -1
  207. package/dist/server/services/document-metadata.js +3 -1
  208. package/dist/server/services/document-metadata.js.map +1 -1
  209. package/dist/server/services/document-metadata.mjs +3 -1
  210. package/dist/server/services/document-metadata.mjs.map +1 -1
  211. package/dist/server/services/utils/configuration/attributes.js +1 -1
  212. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  213. package/dist/server/services/utils/configuration/attributes.mjs +1 -1
  214. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  215. package/dist/server/services/utils/configuration/layouts.js +1 -1
  216. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  217. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  218. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  219. package/dist/server/services/utils/configuration/metadatas.js +8 -0
  220. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  221. package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
  222. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  223. package/dist/server/services/utils/populate.js +11 -0
  224. package/dist/server/services/utils/populate.js.map +1 -1
  225. package/dist/server/services/utils/populate.mjs +11 -0
  226. package/dist/server/services/utils/populate.mjs.map +1 -1
  227. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  228. package/dist/server/src/controllers/validation/index.d.ts +6 -1
  229. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  230. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  231. package/dist/server/src/homepage/controllers/homepage.d.ts +2 -1
  232. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -1
  233. package/dist/server/src/homepage/index.d.ts +7 -0
  234. package/dist/server/src/homepage/index.d.ts.map +1 -1
  235. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -1
  236. package/dist/server/src/homepage/services/homepage.d.ts +4 -1
  237. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  238. package/dist/server/src/homepage/services/index.d.ts +7 -0
  239. package/dist/server/src/homepage/services/index.d.ts.map +1 -1
  240. package/dist/server/src/index.d.ts +8 -0
  241. package/dist/server/src/index.d.ts.map +1 -1
  242. package/dist/server/src/preview/services/index.d.ts +1 -0
  243. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  244. package/dist/server/src/preview/services/preview-config.d.ts +1 -0
  245. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  246. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  247. package/dist/server/src/preview/utils.d.ts +1 -0
  248. package/dist/server/src/preview/utils.d.ts.map +1 -1
  249. package/dist/server/src/services/data-mapper.d.ts +1 -0
  250. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  251. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  252. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  253. package/dist/server/src/services/index.d.ts +8 -0
  254. package/dist/server/src/services/index.d.ts.map +1 -1
  255. package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
  256. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  257. package/dist/shared/contracts/collection-types.d.ts +0 -1
  258. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  259. package/dist/shared/contracts/homepage.d.ts +13 -0
  260. package/dist/shared/contracts/homepage.d.ts.map +1 -1
  261. package/package.json +11 -9
@@ -1 +1 @@
1
- {"version":3,"file":"RelationModal.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n DescriptionComponentRenderer,\n Form as FormContext,\n useRBAC,\n useStrapiApp,\n createContext,\n useForm,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Dialog,\n EmptyStateLayout,\n Flex,\n IconButton,\n Loader,\n Modal,\n Typography,\n TextButton,\n} from '@strapi/design-system';\nimport { ArrowLeft, ArrowsOut, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../../../../../constants/collections';\nimport { PERMISSIONS } from '../../../../../constants/plugin';\nimport { buildValidParams } from '../../../../../exports';\nimport { DocumentRBAC } from '../../../../../features/DocumentRBAC';\nimport { useDoc, useDocument, type UseDocument } from '../../../../../hooks/useDocument';\nimport { type DocumentMeta } from '../../../../../hooks/useDocumentContext';\nimport { useDocumentLayout } from '../../../../../hooks/useDocumentLayout';\nimport { useLazyGetDocumentQuery } from '../../../../../services/documents';\nimport { createYupSchema } from '../../../../../utils/validation';\nimport { DocumentActionButton } from '../../../components/DocumentActions';\nimport { DocumentStatus } from '../../DocumentStatus';\nimport { FormLayout } from '../../FormLayout';\nimport { ComponentProvider } from '../ComponentContext';\n\nimport type { ContentManagerPlugin, DocumentActionProps } from '../../../../../content-manager';\n\nexport function getCollectionType(url: string) {\n const regex = new RegExp(`(${COLLECTION_TYPES}|${SINGLE_TYPES})`);\n const match = url.match(regex);\n return match ? match[1] : undefined;\n}\n\nconst StyledModalContent = styled(Modal.Content)`\n width: 90%;\n max-width: 100%;\n height: 90%;\n max-height: 100%;\n`;\n\nconst getFullPageUrl = (currentDocumentMeta: DocumentMeta): string => {\n const isSingleType = currentDocumentMeta.collectionType === SINGLE_TYPES;\n const queryParams = currentDocumentMeta.params?.locale\n ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}`\n : '';\n\n return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}${isSingleType ? '' : '/' + currentDocumentMeta.documentId}${queryParams}`;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationModalRenderer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface State {\n documentHistory: DocumentMeta[];\n confirmDialogIntent:\n | null // No dialog\n | 'close' // Close the modal\n | 'back' // Go back one document in the modal's history\n | 'navigate' // Open the document in the edit view instead of in the modal\n | DocumentMeta; // Open a specific document in the modal\n isModalOpen: boolean;\n hasUnsavedChanges: boolean;\n fieldToConnect?: string;\n fieldToConnectUID?: string;\n}\n\ntype Action =\n | {\n type: 'GO_TO_RELATION';\n payload: {\n document: DocumentMeta;\n shouldBypassConfirmation: boolean;\n fieldToConnect?: string;\n fieldToConnectUID?: string;\n };\n }\n | {\n type: 'GO_BACK';\n payload: { shouldBypassConfirmation: boolean };\n }\n | {\n type: 'GO_FULL_PAGE';\n }\n | {\n type: 'GO_TO_CREATED_RELATION';\n payload: {\n document: DocumentMeta;\n shouldBypassConfirmation: boolean;\n fieldToConnect?: string;\n fieldToConnectUID?: string;\n };\n }\n | {\n type: 'CANCEL_CONFIRM_DIALOG';\n }\n | {\n type: 'CLOSE_MODAL';\n payload: { shouldBypassConfirmation: boolean };\n }\n | {\n type: 'SET_HAS_UNSAVED_CHANGES';\n payload: { hasUnsavedChanges: boolean };\n };\n\nfunction reducer(state: State, action: Action): State {\n switch (action.type) {\n case 'GO_TO_RELATION':\n if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {\n return {\n ...state,\n confirmDialogIntent: action.payload.document,\n fieldToConnect: action.payload.fieldToConnect,\n fieldToConnectUID: action.payload.fieldToConnectUID,\n };\n }\n\n const lastItemDocumentHistory = state.documentHistory.at(-1);\n const hasToResetDocumentHistory =\n lastItemDocumentHistory && !lastItemDocumentHistory.documentId;\n return {\n ...state,\n // Reset document history if the last item has documentId undefined\n documentHistory: hasToResetDocumentHistory\n ? [action.payload.document]\n : [...state.documentHistory, action.payload.document],\n confirmDialogIntent: null,\n isModalOpen: true,\n fieldToConnect: hasToResetDocumentHistory ? undefined : action.payload.fieldToConnect,\n fieldToConnectUID: hasToResetDocumentHistory ? undefined : action.payload.fieldToConnectUID,\n };\n case 'GO_BACK':\n if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {\n return { ...state, confirmDialogIntent: 'back' };\n }\n\n return {\n ...state,\n documentHistory: state.documentHistory.slice(0, -1),\n confirmDialogIntent: null,\n };\n case 'GO_FULL_PAGE':\n if (state.hasUnsavedChanges) {\n return { ...state, confirmDialogIntent: 'navigate' };\n }\n\n return {\n ...state,\n documentHistory: [],\n hasUnsavedChanges: false,\n isModalOpen: false,\n confirmDialogIntent: null,\n };\n case 'GO_TO_CREATED_RELATION':\n return {\n ...state,\n // Reset document history if the last item has documentId undefined\n documentHistory: state.documentHistory\n ? [...state.documentHistory.slice(0, -1), action.payload.document]\n : [action.payload.document],\n confirmDialogIntent: null,\n isModalOpen: true,\n fieldToConnect: undefined,\n fieldToConnectUID: undefined,\n };\n case 'CANCEL_CONFIRM_DIALOG':\n return {\n ...state,\n confirmDialogIntent: null,\n };\n case 'CLOSE_MODAL':\n if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {\n return { ...state, confirmDialogIntent: 'close' };\n }\n\n return {\n ...state,\n documentHistory: [],\n confirmDialogIntent: null,\n hasUnsavedChanges: false,\n isModalOpen: false,\n };\n case 'SET_HAS_UNSAVED_CHANGES':\n return {\n ...state,\n hasUnsavedChanges: action.payload.hasUnsavedChanges,\n };\n default:\n return state;\n }\n}\n\ninterface RelationModalContextValue {\n state: State;\n dispatch: React.Dispatch<Action>;\n rootDocumentMeta: DocumentMeta;\n currentDocumentMeta: DocumentMeta;\n currentDocument: ReturnType<UseDocument>;\n onPreview?: () => void;\n isCreating: boolean;\n}\n\nconst [RelationModalProvider, useRelationModal] =\n createContext<RelationModalContextValue>('RelationModal');\n\nfunction isRenderProp(\n children: RelationModalRendererProps['children']\n): children is (props: { dispatch: (action: Action) => void }) => React.ReactNode {\n return typeof children === 'function';\n}\n\ntype RelationModalRendererProps =\n // Is editing\n | {\n relation: DocumentMeta;\n children: React.ReactNode;\n }\n // Is creating\n | {\n relation?: never;\n children: (props: { dispatch: (action: Action) => void }) => React.ReactNode;\n };\n\nconst RootRelationRenderer = (props: RelationModalRendererProps) => {\n const { children } = props;\n\n const [state, dispatch] = React.useReducer(reducer, {\n documentHistory: [],\n confirmDialogIntent: null,\n isModalOpen: false,\n hasUnsavedChanges: false,\n fieldToConnect: undefined,\n });\n\n const rootDocument = useDoc();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query ?? {}), [query]);\n\n const rootDocumentMeta: DocumentMeta = {\n documentId: rootDocument.document?.documentId || '',\n model: rootDocument.model,\n collectionType: rootDocument.collectionType,\n params,\n };\n\n const currentDocumentMeta = state.documentHistory.at(-1) ?? rootDocumentMeta;\n const currentDocument = useDocument(currentDocumentMeta);\n // TODO: check if we can remove the single type check\n const isSingleType = currentDocumentMeta.collectionType === SINGLE_TYPES;\n const isCreating = !currentDocumentMeta.documentId && !isSingleType;\n /**\n * There is no parent relation, so the relation modal doesn't exist. Create it and set up all the\n * pieces that will be used by potential child relations: the context, header, form, and footer.\n */\n return (\n <RelationModalProvider\n state={state}\n dispatch={dispatch}\n rootDocumentMeta={rootDocumentMeta}\n currentDocumentMeta={currentDocumentMeta}\n currentDocument={currentDocument}\n isCreating={isCreating}\n >\n <RelationModal>\n {isRenderProp(children)\n ? children({ dispatch })\n : props.relation && (\n <RelationModalTrigger relation={props.relation}>{children}</RelationModalTrigger>\n )}\n </RelationModal>\n </RelationModalProvider>\n );\n};\n\nconst NestedRelationRenderer = (props: RelationModalRendererProps) => {\n const { children } = props;\n const dispatch = useRelationModal('NestedRelation', (state) => state.dispatch);\n\n return isRenderProp(children)\n ? children({ dispatch })\n : props.relation && (\n <RelationModalTrigger relation={props.relation}>{children}</RelationModalTrigger>\n ); /* This is the trigger that will be rendered in the parent relation */\n};\n\n/**\n * Component responsible for rendering its children wrapped in a modal, form and context if needed\n */\nconst RelationModalRenderer = (props: RelationModalRendererProps) => {\n // We're in a nested relation if the relation modal context is not undefined\n const isNested = useRelationModal('RelationContextWrapper', (state) => state != undefined, false);\n\n return isNested ? <NestedRelationRenderer {...props} /> : <RootRelationRenderer {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationModal\n * -----------------------------------------------------------------------------------------------*/\nconst generateCreateUrl = (currentDocumentMeta: DocumentMeta) => {\n return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}/create${\n currentDocumentMeta.params?.locale\n ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}`\n : ''\n }`;\n};\n\nconst RelationModal = ({ children }: { children: React.ReactNode }) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const state = useRelationModal('RelationModalForm', (state) => state.state);\n const dispatch = useRelationModal('RelationModalForm', (state) => state.dispatch);\n const currentDocumentMeta = useRelationModal(\n 'RelationModalForm',\n (state) => state.currentDocumentMeta\n );\n const currentDocument = useRelationModal('RelationModalForm', (state) => state.currentDocument);\n const isCreating = useRelationModal('RelationModalForm', (state) => state.isCreating);\n\n /*\n * We must wrap the modal window with Component Provider with reset values\n * to avoid inheriting id and uid from the root document and having weird\n * behaviors with simple relationships..\n */\n return (\n <ComponentProvider id={undefined} level={-1} uid={undefined} type={undefined}>\n <Modal.Root\n open={state.isModalOpen}\n onOpenChange={(open) => {\n if (!open) {\n dispatch({\n type: 'CLOSE_MODAL',\n payload: { shouldBypassConfirmation: false },\n });\n }\n }}\n >\n {children}\n <StyledModalContent>\n <Modal.Header gap={2}>\n <Flex justifyContent=\"space-between\" alignItems=\"center\" width=\"100%\">\n <Flex gap={2}>\n <IconButton\n withTooltip={false}\n label={formatMessage({ id: 'global.back', defaultMessage: 'Back' })}\n variant=\"ghost\"\n disabled={state.documentHistory.length < 2}\n onClick={() => {\n dispatch({\n type: 'GO_BACK',\n payload: { shouldBypassConfirmation: false },\n });\n }}\n marginRight={1}\n >\n <ArrowLeft />\n </IconButton>\n <Typography tag=\"span\" fontWeight={600}>\n {isCreating\n ? formatMessage({\n id: 'content-manager.relation.create',\n defaultMessage: 'Create a relation',\n })\n : formatMessage({\n id: 'content-manager.components.RelationInputModal.modal-title',\n defaultMessage: 'Edit a relation',\n })}\n </Typography>\n </Flex>\n <IconButton\n onClick={() => {\n dispatch({\n type: 'GO_FULL_PAGE',\n });\n if (!state.hasUnsavedChanges) {\n if (isCreating) {\n navigate(generateCreateUrl(currentDocumentMeta));\n } else {\n navigate(getFullPageUrl(currentDocumentMeta));\n }\n }\n }}\n variant=\"tertiary\"\n label={formatMessage({\n id: 'content-manager.components.RelationInputModal.button-fullpage',\n defaultMessage: 'Go to entry',\n })}\n >\n <ArrowsOut />\n </IconButton>\n </Flex>\n </Modal.Header>\n <Modal.Body>\n <FormContext\n method={isCreating ? 'POST' : 'PUT'}\n initialValues={currentDocument.getInitialFormValues(isCreating)}\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(\n currentDocument.schema?.attributes,\n currentDocument.components,\n {\n status: currentDocument.document?.status,\n ...options,\n }\n );\n\n return yupSchema.validate(values, { abortEarly: false });\n }}\n >\n <RelationModalBody />\n </FormContext>\n </Modal.Body>\n </StyledModalContent>\n </Modal.Root>\n </ComponentProvider>\n );\n};\n/**\n * All the main content (not header and footer) of the relation modal, plus the confirmation dialog.\n * Will be wrapped in a Modal.Body by the RelationModal component.\n * Cannot be moved directly inside RelationModal because it needs access to the context via hooks.\n */\nconst RelationModalBody = () => {\n const navigate = useNavigate();\n const { pathname, search } = useLocation();\n const { formatMessage } = useIntl();\n\n const [triggerRefetchDocument] = useLazyGetDocumentQuery();\n\n const state = useRelationModal('RelationModalForm', (state) => state.state);\n const dispatch = useRelationModal('RelationModalForm', (state) => state.dispatch);\n const rootDocumentMeta = useRelationModal('RelationModalForm', (state) => state.rootDocumentMeta);\n const currentDocumentMeta = useRelationModal(\n 'RelationModalForm',\n (state) => state.currentDocumentMeta\n );\n const isCreating = useRelationModal('RelationModalForm', (state) => state.isCreating);\n\n /**\n * One-way sync the modified state from the form to the modal state.\n * It is needed because we need to consume state from the form context in order to lift it up\n * into the modal context. It is not possible otherwise because the modal needs the form state,\n * but it must be a parent of the form.\n */\n const modified = useForm('FormWatcher', (state) => state.modified);\n const isSubmitting = useForm('FormWatcher', (state) => state.isSubmitting);\n const hasUnsavedChanges = modified && !isSubmitting;\n React.useEffect(() => {\n dispatch({ type: 'SET_HAS_UNSAVED_CHANGES', payload: { hasUnsavedChanges } });\n }, [hasUnsavedChanges, dispatch]);\n\n const handleCloseModal = (shouldBypassConfirmation: boolean) => {\n dispatch({ type: 'CLOSE_MODAL', payload: { shouldBypassConfirmation } });\n\n if (shouldBypassConfirmation || !state.hasUnsavedChanges) {\n // TODO: check if we can avoid this by relying on RTK invalidatesTags.\n // If so we can delete this function and dispatch the events directly\n triggerRefetchDocument(\n // TODO check if params should be removed (as they were before)\n rootDocumentMeta,\n // Favor the cache\n true\n );\n }\n };\n\n const handleRedirection = () => {\n const editViewUrl = `${pathname}${search}`;\n const fullPageUrl = getFullPageUrl(currentDocumentMeta);\n const isRootDocumentUrl = editViewUrl.includes(fullPageUrl);\n\n if (isRootDocumentUrl) {\n handleCloseModal(true);\n } else {\n if (isCreating) {\n navigate(generateCreateUrl(currentDocumentMeta));\n } else {\n navigate(fullPageUrl);\n }\n }\n };\n\n const handleConfirm = () => {\n if (state.confirmDialogIntent === null) {\n return;\n }\n if (state.confirmDialogIntent === 'navigate') {\n handleRedirection();\n } else if (state.confirmDialogIntent === 'back') {\n dispatch({ type: 'GO_BACK', payload: { shouldBypassConfirmation: true } });\n } else if (state.confirmDialogIntent === 'close') {\n handleCloseModal(true);\n } else if ('documentId' in state.confirmDialogIntent) {\n dispatch({\n type: 'GO_TO_RELATION',\n payload: { document: state.confirmDialogIntent, shouldBypassConfirmation: true },\n });\n }\n };\n\n return (\n <>\n <RelationModalForm />\n <Dialog.Root open={state.confirmDialogIntent != null}>\n <ConfirmDialog\n onConfirm={() => handleConfirm()}\n onCancel={() => dispatch({ type: 'CANCEL_CONFIRM_DIALOG' })}\n variant=\"danger\"\n >\n {formatMessage({\n id: 'content-manager.components.RelationInputModal.confirmation-message',\n defaultMessage:\n 'Some changes were not saved. Are you sure you want to close this relation? All changes that were not saved will be lost.',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </>\n );\n};\n\nconst RelationModalTrigger = ({\n children,\n relation,\n}: {\n children: React.ReactNode;\n relation: DocumentMeta;\n}) => {\n const dispatch = useRelationModal('ModalTrigger', (state) => state.dispatch);\n\n return (\n <StyledTextButton\n onClick={() => {\n dispatch({\n type: 'GO_TO_RELATION',\n payload: { document: relation, shouldBypassConfirmation: false },\n });\n }}\n >\n {children}\n </StyledTextButton>\n );\n};\n\nconst StyledTextButton = styled(TextButton)`\n max-width: 100%;\n & > span {\n font-size: ${({ theme }) => theme.fontSizes[2]};\n width: inherit;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n`;\n\n/**\n * The mini edit view for a relation that is displayed inside a modal.\n * It's complete with its header, document actions and form layout.\n */\nconst RelationModalForm = () => {\n const { formatMessage } = useIntl();\n\n const currentDocumentMeta = useRelationModal(\n 'RelationModalForm',\n (state) => state.currentDocumentMeta\n );\n const isCreating = useRelationModal('RelationModalForm', (state) => state.isCreating);\n const currentDocument = useRelationModal('RelationModalForm', (state) => state.currentDocument);\n const documentLayoutResponse = useDocumentLayout(currentDocumentMeta.model);\n const plugins = useStrapiApp('RelationModalForm', (state) => state.plugins);\n\n const initialValues = isCreating\n ? currentDocument.getInitialFormValues(isCreating)\n : currentDocument.getInitialFormValues();\n\n const {\n permissions = [],\n isLoading: isLoadingPermissions,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: currentDocumentMeta.model,\n }))\n );\n\n const isLoading =\n isLoadingPermissions || documentLayoutResponse.isLoading || currentDocument.isLoading;\n\n if (isLoading && !currentDocument.document?.documentId) {\n return (\n <Loader small>\n {formatMessage({\n id: 'content-manager.ListViewTable.relation-loading',\n defaultMessage: 'Relations are loading',\n })}\n </Loader>\n );\n }\n\n if (\n error ||\n !currentDocumentMeta.model ||\n documentLayoutResponse.error ||\n (!isCreating && !currentDocument.document) ||\n (!isCreating && !currentDocument.meta) ||\n !currentDocument.schema ||\n !initialValues\n ) {\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 const documentTitle = currentDocument.getTitle(documentLayoutResponse.edit.settings.mainField);\n const hasDraftAndPublished = currentDocument.schema?.options?.draftAndPublish ?? false;\n\n const props = {\n activeTab: 'draft',\n collectionType: currentDocumentMeta.collectionType,\n model: currentDocumentMeta.model,\n documentId: currentDocumentMeta.documentId,\n document: currentDocument.document,\n meta: currentDocument.meta,\n } satisfies DocumentActionProps;\n\n return (\n <DocumentRBAC permissions={permissions} model={currentDocumentMeta.model}>\n <Flex alignItems=\"flex-start\" direction=\"column\" gap={2}>\n <Flex width=\"100%\" justifyContent=\"space-between\" gap={2}>\n <Typography tag=\"h2\" variant=\"alpha\">\n {documentTitle}\n </Typography>\n <Flex gap={2}>\n <DescriptionComponentRenderer\n props={props}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('relation-modal')}\n >\n {(actions) => {\n const filteredActions = actions.filter((action) => {\n return [action.position].flat().includes('relation-modal');\n });\n const [primaryAction, secondaryAction] = filteredActions;\n\n if (!primaryAction && !secondaryAction) return null;\n\n // Both actions are available when draft and publish enabled\n if (primaryAction && secondaryAction) {\n return (\n <>\n {/* Save */}\n <DocumentActionButton\n {...secondaryAction}\n variant={secondaryAction.variant || 'secondary'}\n />\n {/* Publish */}\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'default'}\n />\n </>\n );\n }\n\n // Otherwise we just have the save action\n return (\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'secondary'}\n />\n );\n }}\n </DescriptionComponentRenderer>\n </Flex>\n </Flex>\n {hasDraftAndPublished ? (\n <Box>\n <DocumentStatus status={currentDocument.document?.status} />\n </Box>\n ) : null}\n </Flex>\n\n <Flex flex={1} overflow=\"auto\" alignItems=\"stretch\" paddingTop={7}>\n <Box overflow=\"auto\" flex={1}>\n <FormLayout\n layout={documentLayoutResponse.edit.layout}\n document={currentDocument}\n hasBackground={false}\n />\n </Box>\n </Flex>\n </DocumentRBAC>\n );\n};\n\nexport { reducer, RelationModalRenderer, useRelationModal };\nexport type { State, Action };\n"],"names":["getCollectionType","url","regex","RegExp","COLLECTION_TYPES","SINGLE_TYPES","match","undefined","StyledModalContent","styled","Modal","Content","getFullPageUrl","currentDocumentMeta","isSingleType","collectionType","queryParams","params","locale","model","documentId","reducer","state","action","type","hasUnsavedChanges","payload","shouldBypassConfirmation","confirmDialogIntent","document","fieldToConnect","fieldToConnectUID","lastItemDocumentHistory","documentHistory","at","hasToResetDocumentHistory","isModalOpen","slice","RelationModalProvider","useRelationModal","createContext","isRenderProp","children","RootRelationRenderer","props","dispatch","React","useReducer","rootDocument","useDoc","query","useQueryParams","useMemo","buildValidParams","rootDocumentMeta","currentDocument","useDocument","isCreating","_jsx","RelationModal","relation","RelationModalTrigger","NestedRelationRenderer","RelationModalRenderer","isNested","generateCreateUrl","formatMessage","useIntl","navigate","useNavigate","ComponentProvider","id","level","uid","_jsxs","Root","open","onOpenChange","Header","gap","Flex","justifyContent","alignItems","width","IconButton","withTooltip","label","defaultMessage","variant","disabled","length","onClick","marginRight","ArrowLeft","Typography","tag","fontWeight","ArrowsOut","Body","FormContext","method","initialValues","getInitialFormValues","validate","values","options","yupSchema","createYupSchema","schema","attributes","components","status","abortEarly","RelationModalBody","pathname","search","useLocation","triggerRefetchDocument","useLazyGetDocumentQuery","modified","useForm","isSubmitting","useEffect","handleCloseModal","handleRedirection","editViewUrl","fullPageUrl","isRootDocumentUrl","includes","handleConfirm","_Fragment","RelationModalForm","Dialog","ConfirmDialog","onConfirm","onCancel","StyledTextButton","TextButton","theme","fontSizes","documentLayoutResponse","useDocumentLayout","plugins","useStrapiApp","permissions","isLoading","isLoadingPermissions","error","useRBAC","PERMISSIONS","map","subject","Loader","small","meta","height","EmptyStateLayout","icon","WarningCircle","content","documentTitle","getTitle","edit","settings","mainField","hasDraftAndPublished","draftAndPublish","activeTab","DocumentRBAC","direction","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","actions","filteredActions","filter","position","flat","primaryAction","secondaryAction","DocumentActionButton","Box","DocumentStatus","flex","overflow","paddingTop","FormLayout","layout","hasBackground"],"mappings":"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"}
1
+ {"version":3,"file":"RelationModal.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n DescriptionComponentRenderer,\n Form as FormContext,\n useRBAC,\n useStrapiApp,\n createContext,\n useForm,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Dialog,\n EmptyStateLayout,\n Flex,\n IconButton,\n Loader,\n Modal,\n Typography,\n TextButton,\n} from '@strapi/design-system';\nimport { ArrowLeft, ArrowsOut, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../../../../../constants/collections';\nimport { PERMISSIONS } from '../../../../../constants/plugin';\nimport { buildValidParams } from '../../../../../exports';\nimport { DocumentRBAC } from '../../../../../features/DocumentRBAC';\nimport { useDoc, useDocument, type UseDocument } from '../../../../../hooks/useDocument';\nimport { type DocumentMeta } from '../../../../../hooks/useDocumentContext';\nimport { useDocumentLayout } from '../../../../../hooks/useDocumentLayout';\nimport { useLazyGetDocumentQuery } from '../../../../../services/documents';\nimport { createYupSchema } from '../../../../../utils/validation';\nimport { DocumentActionButton } from '../../../components/DocumentActions';\nimport { DocumentStatus } from '../../DocumentStatus';\nimport { FormLayout } from '../../FormLayout';\nimport { ComponentProvider } from '../ComponentContext';\n\nimport type { ContentManagerPlugin, DocumentActionProps } from '../../../../../content-manager';\n\nexport function getCollectionType(url: string) {\n const regex = new RegExp(`(${COLLECTION_TYPES}|${SINGLE_TYPES})`);\n const match = url.match(regex);\n return match ? match[1] : undefined;\n}\n\nconst StyledModalContent = styled(Modal.Content)`\n width: 90%;\n max-width: 100%;\n height: 90%;\n max-height: 100%;\n`;\n\nconst getFullPageUrl = (currentDocumentMeta: DocumentMeta): string => {\n const isSingleType = currentDocumentMeta.collectionType === SINGLE_TYPES;\n const queryParams = currentDocumentMeta.params?.locale\n ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}`\n : '';\n\n return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}${isSingleType ? '' : '/' + currentDocumentMeta.documentId}${queryParams}`;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationModalRenderer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface State {\n documentHistory: DocumentMeta[];\n confirmDialogIntent:\n | null // No dialog\n | 'close' // Close the modal\n | 'back' // Go back one document in the modal's history\n | 'navigate' // Open the document in the edit view instead of in the modal\n | DocumentMeta; // Open a specific document in the modal\n isModalOpen: boolean;\n hasUnsavedChanges: boolean;\n fieldToConnect?: string;\n fieldToConnectUID?: string;\n}\n\ntype Action =\n | {\n type: 'GO_TO_RELATION';\n payload: {\n document: DocumentMeta;\n shouldBypassConfirmation: boolean;\n fieldToConnect?: string;\n fieldToConnectUID?: string;\n };\n }\n | {\n type: 'GO_BACK';\n payload: { shouldBypassConfirmation: boolean };\n }\n | {\n type: 'GO_FULL_PAGE';\n }\n | {\n type: 'GO_TO_CREATED_RELATION';\n payload: {\n document: DocumentMeta;\n shouldBypassConfirmation: boolean;\n fieldToConnect?: string;\n fieldToConnectUID?: string;\n };\n }\n | {\n type: 'CANCEL_CONFIRM_DIALOG';\n }\n | {\n type: 'CLOSE_MODAL';\n payload: { shouldBypassConfirmation: boolean };\n }\n | {\n type: 'SET_HAS_UNSAVED_CHANGES';\n payload: { hasUnsavedChanges: boolean };\n };\n\nfunction reducer(state: State, action: Action): State {\n switch (action.type) {\n case 'GO_TO_RELATION':\n if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {\n return {\n ...state,\n confirmDialogIntent: action.payload.document,\n fieldToConnect: action.payload.fieldToConnect,\n fieldToConnectUID: action.payload.fieldToConnectUID,\n };\n }\n\n const lastItemDocumentHistory = state.documentHistory.at(-1);\n const hasToResetDocumentHistory =\n lastItemDocumentHistory && !lastItemDocumentHistory.documentId;\n return {\n ...state,\n // Reset document history if the last item has documentId undefined\n documentHistory: hasToResetDocumentHistory\n ? [action.payload.document]\n : [...state.documentHistory, action.payload.document],\n confirmDialogIntent: null,\n isModalOpen: true,\n fieldToConnect: hasToResetDocumentHistory ? undefined : action.payload.fieldToConnect,\n fieldToConnectUID: hasToResetDocumentHistory ? undefined : action.payload.fieldToConnectUID,\n };\n case 'GO_BACK':\n if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {\n return { ...state, confirmDialogIntent: 'back' };\n }\n\n return {\n ...state,\n documentHistory: state.documentHistory.slice(0, -1),\n confirmDialogIntent: null,\n };\n case 'GO_FULL_PAGE':\n if (state.hasUnsavedChanges) {\n return { ...state, confirmDialogIntent: 'navigate' };\n }\n\n return {\n ...state,\n documentHistory: [],\n hasUnsavedChanges: false,\n isModalOpen: false,\n confirmDialogIntent: null,\n };\n case 'GO_TO_CREATED_RELATION':\n return {\n ...state,\n // Reset document history if the last item has documentId undefined\n documentHistory: state.documentHistory\n ? [...state.documentHistory.slice(0, -1), action.payload.document]\n : [action.payload.document],\n confirmDialogIntent: null,\n isModalOpen: true,\n fieldToConnect: undefined,\n fieldToConnectUID: undefined,\n };\n case 'CANCEL_CONFIRM_DIALOG':\n return {\n ...state,\n confirmDialogIntent: null,\n };\n case 'CLOSE_MODAL':\n if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {\n return { ...state, confirmDialogIntent: 'close' };\n }\n\n return {\n ...state,\n documentHistory: [],\n confirmDialogIntent: null,\n hasUnsavedChanges: false,\n isModalOpen: false,\n };\n case 'SET_HAS_UNSAVED_CHANGES':\n return {\n ...state,\n hasUnsavedChanges: action.payload.hasUnsavedChanges,\n };\n default:\n return state;\n }\n}\n\ninterface RelationModalContextValue {\n state: State;\n dispatch: React.Dispatch<Action>;\n rootDocumentMeta: DocumentMeta;\n currentDocumentMeta: DocumentMeta;\n currentDocument: ReturnType<UseDocument>;\n onPreview?: () => void;\n isCreating: boolean;\n}\n\nconst [RelationModalProvider, useRelationModal] =\n createContext<RelationModalContextValue>('RelationModal');\n\nfunction isRenderProp(\n children: RelationModalRendererProps['children']\n): children is (props: { dispatch: (action: Action) => void }) => React.ReactNode {\n return typeof children === 'function';\n}\n\ntype RelationModalRendererProps =\n // Is editing\n | {\n relation: DocumentMeta;\n children: React.ReactNode;\n }\n // Is creating\n | {\n relation?: never;\n children: (props: { dispatch: (action: Action) => void }) => React.ReactNode;\n };\n\nconst RootRelationRenderer = (props: RelationModalRendererProps) => {\n const { children } = props;\n\n const [state, dispatch] = React.useReducer(reducer, {\n documentHistory: [],\n confirmDialogIntent: null,\n isModalOpen: false,\n hasUnsavedChanges: false,\n fieldToConnect: undefined,\n });\n\n const rootDocument = useDoc();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query ?? {}), [query]);\n\n const rootDocumentMeta: DocumentMeta = {\n documentId: rootDocument.document?.documentId || '',\n model: rootDocument.model,\n collectionType: rootDocument.collectionType,\n params,\n };\n\n const currentDocumentMeta = state.documentHistory.at(-1) ?? rootDocumentMeta;\n const currentDocument = useDocument(currentDocumentMeta);\n // TODO: check if we can remove the single type check\n const isSingleType = currentDocumentMeta.collectionType === SINGLE_TYPES;\n const isCreating = !currentDocumentMeta.documentId && !isSingleType;\n /**\n * There is no parent relation, so the relation modal doesn't exist. Create it and set up all the\n * pieces that will be used by potential child relations: the context, header, form, and footer.\n */\n return (\n <RelationModalProvider\n state={state}\n dispatch={dispatch}\n rootDocumentMeta={rootDocumentMeta}\n currentDocumentMeta={currentDocumentMeta}\n currentDocument={currentDocument}\n isCreating={isCreating}\n >\n <RelationModal>\n {isRenderProp(children)\n ? children({ dispatch })\n : props.relation && (\n <RelationModalTrigger relation={props.relation}>{children}</RelationModalTrigger>\n )}\n </RelationModal>\n </RelationModalProvider>\n );\n};\n\nconst NestedRelationRenderer = (props: RelationModalRendererProps) => {\n const { children } = props;\n const dispatch = useRelationModal('NestedRelation', (state) => state.dispatch);\n\n return isRenderProp(children)\n ? children({ dispatch })\n : props.relation && (\n <RelationModalTrigger relation={props.relation}>{children}</RelationModalTrigger>\n ); /* This is the trigger that will be rendered in the parent relation */\n};\n\n/**\n * Component responsible for rendering its children wrapped in a modal, form and context if needed\n */\nconst RelationModalRenderer = (props: RelationModalRendererProps) => {\n // We're in a nested relation if the relation modal context is not undefined\n const isNested = useRelationModal('RelationContextWrapper', (state) => state != undefined, false);\n\n return isNested ? <NestedRelationRenderer {...props} /> : <RootRelationRenderer {...props} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationModal\n * -----------------------------------------------------------------------------------------------*/\nconst generateCreateUrl = (currentDocumentMeta: DocumentMeta) => {\n return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}/create${\n currentDocumentMeta.params?.locale\n ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}`\n : ''\n }`;\n};\n\nconst RelationModal = ({ children }: { children: React.ReactNode }) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const state = useRelationModal('RelationModalForm', (state) => state.state);\n const dispatch = useRelationModal('RelationModalForm', (state) => state.dispatch);\n const currentDocumentMeta = useRelationModal(\n 'RelationModalForm',\n (state) => state.currentDocumentMeta\n );\n const currentDocument = useRelationModal('RelationModalForm', (state) => state.currentDocument);\n const isCreating = useRelationModal('RelationModalForm', (state) => state.isCreating);\n\n /*\n * We must wrap the modal window with Component Provider with reset values\n * to avoid inheriting id and uid from the root document and having weird\n * behaviors with simple relationships..\n */\n return (\n <ComponentProvider id={undefined} level={-1} uid={undefined} type={undefined}>\n <Modal.Root\n open={state.isModalOpen}\n onOpenChange={(open) => {\n if (!open) {\n dispatch({\n type: 'CLOSE_MODAL',\n payload: { shouldBypassConfirmation: false },\n });\n }\n }}\n >\n {children}\n <StyledModalContent>\n <Modal.Header gap={2}>\n <Flex justifyContent=\"space-between\" alignItems=\"center\" width=\"100%\">\n <Flex gap={2}>\n <IconButton\n withTooltip={false}\n label={formatMessage({ id: 'global.back', defaultMessage: 'Back' })}\n variant=\"ghost\"\n disabled={state.documentHistory.length < 2}\n onClick={() => {\n dispatch({\n type: 'GO_BACK',\n payload: { shouldBypassConfirmation: false },\n });\n }}\n marginRight={1}\n >\n <ArrowLeft />\n </IconButton>\n <Typography tag=\"span\" fontWeight={600}>\n {isCreating\n ? formatMessage({\n id: 'content-manager.relation.create',\n defaultMessage: 'Create a relation',\n })\n : formatMessage({\n id: 'content-manager.components.RelationInputModal.modal-title',\n defaultMessage: 'Edit a relation',\n })}\n </Typography>\n </Flex>\n <IconButton\n onClick={() => {\n dispatch({\n type: 'GO_FULL_PAGE',\n });\n if (!state.hasUnsavedChanges) {\n if (isCreating) {\n navigate(generateCreateUrl(currentDocumentMeta));\n } else {\n navigate(getFullPageUrl(currentDocumentMeta));\n }\n }\n }}\n variant=\"tertiary\"\n label={formatMessage({\n id: 'content-manager.components.RelationInputModal.button-fullpage',\n defaultMessage: 'Go to entry',\n })}\n >\n <ArrowsOut />\n </IconButton>\n </Flex>\n </Modal.Header>\n <Modal.Body>\n <FormContext\n method={isCreating ? 'POST' : 'PUT'}\n initialValues={currentDocument.getInitialFormValues(isCreating)}\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(\n currentDocument.schema?.attributes,\n currentDocument.components,\n {\n status: currentDocument.document?.status,\n ...options,\n }\n );\n\n return yupSchema.validate(values, { abortEarly: false });\n }}\n >\n <RelationModalBody />\n </FormContext>\n </Modal.Body>\n </StyledModalContent>\n </Modal.Root>\n </ComponentProvider>\n );\n};\n/**\n * All the main content (not header and footer) of the relation modal, plus the confirmation dialog.\n * Will be wrapped in a Modal.Body by the RelationModal component.\n * Cannot be moved directly inside RelationModal because it needs access to the context via hooks.\n */\nconst RelationModalBody = () => {\n const navigate = useNavigate();\n const { pathname, search } = useLocation();\n const { formatMessage } = useIntl();\n\n const [triggerRefetchDocument] = useLazyGetDocumentQuery();\n\n const state = useRelationModal('RelationModalForm', (state) => state.state);\n const dispatch = useRelationModal('RelationModalForm', (state) => state.dispatch);\n const rootDocumentMeta = useRelationModal('RelationModalForm', (state) => state.rootDocumentMeta);\n const currentDocumentMeta = useRelationModal(\n 'RelationModalForm',\n (state) => state.currentDocumentMeta\n );\n const isCreating = useRelationModal('RelationModalForm', (state) => state.isCreating);\n\n /**\n * One-way sync the modified state from the form to the modal state.\n * It is needed because we need to consume state from the form context in order to lift it up\n * into the modal context. It is not possible otherwise because the modal needs the form state,\n * but it must be a parent of the form.\n */\n const modified = useForm('FormWatcher', (state) => state.modified);\n const isSubmitting = useForm('FormWatcher', (state) => state.isSubmitting);\n const hasUnsavedChanges = modified && !isSubmitting;\n React.useEffect(() => {\n dispatch({ type: 'SET_HAS_UNSAVED_CHANGES', payload: { hasUnsavedChanges } });\n }, [hasUnsavedChanges, dispatch]);\n\n const handleCloseModal = (shouldBypassConfirmation: boolean) => {\n dispatch({ type: 'CLOSE_MODAL', payload: { shouldBypassConfirmation } });\n\n if (shouldBypassConfirmation || !state.hasUnsavedChanges) {\n // TODO: check if we can avoid this by relying on RTK invalidatesTags.\n // If so we can delete this function and dispatch the events directly\n triggerRefetchDocument(\n // TODO check if params should be removed (as they were before)\n rootDocumentMeta,\n // Favor the cache\n true\n );\n }\n };\n\n const handleRedirection = () => {\n const editViewUrl = `${pathname}${search}`;\n const fullPageUrl = getFullPageUrl(currentDocumentMeta);\n const isRootDocumentUrl = editViewUrl.includes(fullPageUrl);\n\n if (isRootDocumentUrl) {\n handleCloseModal(true);\n } else {\n if (isCreating) {\n navigate(generateCreateUrl(currentDocumentMeta));\n } else {\n navigate(fullPageUrl);\n }\n }\n };\n\n const handleConfirm = () => {\n if (state.confirmDialogIntent === null) {\n return;\n }\n if (state.confirmDialogIntent === 'navigate') {\n handleRedirection();\n } else if (state.confirmDialogIntent === 'back') {\n dispatch({ type: 'GO_BACK', payload: { shouldBypassConfirmation: true } });\n } else if (state.confirmDialogIntent === 'close') {\n handleCloseModal(true);\n } else if ('documentId' in state.confirmDialogIntent) {\n dispatch({\n type: 'GO_TO_RELATION',\n payload: { document: state.confirmDialogIntent, shouldBypassConfirmation: true },\n });\n }\n };\n\n return (\n <>\n <RelationModalForm />\n <Dialog.Root open={state.confirmDialogIntent != null}>\n <ConfirmDialog\n onConfirm={() => handleConfirm()}\n onCancel={() => dispatch({ type: 'CANCEL_CONFIRM_DIALOG' })}\n variant=\"danger\"\n >\n {formatMessage({\n id: 'content-manager.components.RelationInputModal.confirmation-message',\n defaultMessage:\n 'Some changes were not saved. Are you sure you want to close this relation? All changes that were not saved will be lost.',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </>\n );\n};\n\nconst RelationModalTrigger = ({\n children,\n relation,\n}: {\n children: React.ReactNode;\n relation: DocumentMeta;\n}) => {\n const dispatch = useRelationModal('ModalTrigger', (state) => state.dispatch);\n\n return (\n <StyledTextButton\n onClick={() => {\n dispatch({\n type: 'GO_TO_RELATION',\n payload: { document: relation, shouldBypassConfirmation: false },\n });\n }}\n >\n {children}\n </StyledTextButton>\n );\n};\n\nconst StyledTextButton = styled(TextButton)`\n max-width: 100%;\n & > span {\n font-size: ${({ theme }) => theme.fontSizes[2]};\n width: inherit;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n`;\n\n/**\n * The mini edit view for a relation that is displayed inside a modal.\n * It's complete with its header, document actions and form layout.\n */\nconst RelationModalForm = () => {\n const { formatMessage } = useIntl();\n\n const currentDocumentMeta = useRelationModal(\n 'RelationModalForm',\n (state) => state.currentDocumentMeta\n );\n const isCreating = useRelationModal('RelationModalForm', (state) => state.isCreating);\n const currentDocument = useRelationModal('RelationModalForm', (state) => state.currentDocument);\n const documentLayoutResponse = useDocumentLayout(currentDocumentMeta.model);\n const plugins = useStrapiApp('RelationModalForm', (state) => state.plugins);\n\n const initialValues = isCreating\n ? currentDocument.getInitialFormValues(isCreating)\n : currentDocument.getInitialFormValues();\n\n const {\n permissions = [],\n isLoading: isLoadingPermissions,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: currentDocumentMeta.model,\n }))\n );\n\n const isLoading =\n isLoadingPermissions || documentLayoutResponse.isLoading || currentDocument.isLoading;\n\n if (isLoading && !currentDocument.document?.documentId) {\n return (\n <Loader small>\n {formatMessage({\n id: 'content-manager.ListViewTable.relation-loading',\n defaultMessage: 'Relations are loading',\n })}\n </Loader>\n );\n }\n\n if (\n error ||\n !currentDocumentMeta.model ||\n documentLayoutResponse.error ||\n (!isCreating && !currentDocument.document) ||\n (!isCreating && !currentDocument.meta) ||\n !currentDocument.schema ||\n !initialValues\n ) {\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 const documentTitle = currentDocument.getTitle(documentLayoutResponse.edit.settings.mainField);\n const hasDraftAndPublished = currentDocument.schema?.options?.draftAndPublish ?? false;\n\n const props = {\n activeTab: 'draft',\n collectionType: currentDocumentMeta.collectionType,\n model: currentDocumentMeta.model,\n documentId: currentDocumentMeta.documentId,\n document: currentDocument.document,\n meta: currentDocument.meta,\n } satisfies DocumentActionProps;\n\n return (\n <DocumentRBAC permissions={permissions} model={currentDocumentMeta.model}>\n <Flex alignItems=\"flex-start\" direction=\"column\" gap={2}>\n <Flex width=\"100%\" justifyContent=\"space-between\" gap={2}>\n <Typography tag=\"h2\" variant=\"alpha\">\n {documentTitle}\n </Typography>\n <Flex gap={2}>\n <DescriptionComponentRenderer\n props={props}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('relation-modal')}\n >\n {(actions) => {\n const filteredActions = actions.filter((action) => {\n return [action.position].flat().includes('relation-modal');\n });\n const [primaryAction, secondaryAction] = filteredActions;\n\n if (!primaryAction && !secondaryAction) return null;\n\n // Both actions are available when draft and publish enabled\n if (primaryAction && secondaryAction) {\n return (\n <>\n {/* Save */}\n <DocumentActionButton\n {...secondaryAction}\n variant={secondaryAction.variant || 'secondary'}\n />\n {/* Publish */}\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'default'}\n />\n </>\n );\n }\n\n // Otherwise we just have the save action\n return (\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'secondary'}\n />\n );\n }}\n </DescriptionComponentRenderer>\n </Flex>\n </Flex>\n {hasDraftAndPublished ? (\n <Box>\n <DocumentStatus status={currentDocument.document?.status} />\n </Box>\n ) : null}\n </Flex>\n\n <Flex flex={1} overflow=\"auto\" alignItems=\"stretch\" paddingTop={7}>\n <Box overflow=\"auto\" flex={1}>\n <FormLayout\n layout={documentLayoutResponse.edit.layout}\n document={currentDocument}\n hasBackground={false}\n />\n </Box>\n </Flex>\n </DocumentRBAC>\n );\n};\n\nexport { reducer, RelationModalRenderer, useRelationModal };\nexport type { State, Action };\n"],"names":["getCollectionType","url","regex","RegExp","COLLECTION_TYPES","SINGLE_TYPES","match","undefined","StyledModalContent","styled","Modal","Content","getFullPageUrl","currentDocumentMeta","isSingleType","collectionType","queryParams","params","locale","model","documentId","reducer","state","action","type","hasUnsavedChanges","payload","shouldBypassConfirmation","confirmDialogIntent","document","fieldToConnect","fieldToConnectUID","lastItemDocumentHistory","documentHistory","at","hasToResetDocumentHistory","isModalOpen","slice","RelationModalProvider","useRelationModal","createContext","isRenderProp","children","RootRelationRenderer","props","dispatch","React","useReducer","rootDocument","useDoc","query","useQueryParams","useMemo","buildValidParams","rootDocumentMeta","currentDocument","useDocument","isCreating","_jsx","RelationModal","relation","RelationModalTrigger","NestedRelationRenderer","RelationModalRenderer","isNested","generateCreateUrl","formatMessage","useIntl","navigate","useNavigate","ComponentProvider","id","level","uid","_jsxs","Root","open","onOpenChange","Header","gap","Flex","justifyContent","alignItems","width","IconButton","withTooltip","label","defaultMessage","variant","disabled","length","onClick","marginRight","ArrowLeft","Typography","tag","fontWeight","ArrowsOut","Body","FormContext","method","initialValues","getInitialFormValues","validate","values","options","yupSchema","createYupSchema","schema","attributes","components","status","abortEarly","RelationModalBody","pathname","search","useLocation","triggerRefetchDocument","useLazyGetDocumentQuery","modified","useForm","isSubmitting","useEffect","handleCloseModal","handleRedirection","editViewUrl","fullPageUrl","isRootDocumentUrl","includes","handleConfirm","_Fragment","RelationModalForm","Dialog","ConfirmDialog","onConfirm","onCancel","StyledTextButton","TextButton","theme","fontSizes","documentLayoutResponse","useDocumentLayout","plugins","useStrapiApp","permissions","isLoading","isLoadingPermissions","error","useRBAC","PERMISSIONS","map","subject","Loader","small","meta","height","EmptyStateLayout","icon","WarningCircle","content","documentTitle","getTitle","edit","settings","mainField","hasDraftAndPublished","draftAndPublish","activeTab","DocumentRBAC","direction","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","actions","filteredActions","filter","position","flat","primaryAction","secondaryAction","DocumentActionButton","Box","DocumentStatus","flex","overflow","paddingTop","FormLayout","layout","hasBackground"],"mappings":"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"}
@@ -13,6 +13,8 @@ var reactWindow = require('react-window');
13
13
  var styledComponents = require('styled-components');
14
14
  var collections = require('../../../../../constants/collections.js');
15
15
  var dragAndDrop = require('../../../../../constants/dragAndDrop.js');
16
+ var plugin = require('../../../../../constants/plugin.js');
17
+ var DocumentRBAC = require('../../../../../features/DocumentRBAC.js');
16
18
  var useDebounce = require('../../../../../hooks/useDebounce.js');
17
19
  var useDocument = require('../../../../../hooks/useDocument.js');
18
20
  var useDocumentContext = require('../../../../../hooks/useDocumentContext.js');
@@ -117,8 +119,9 @@ const ONE_WAY_RELATIONS = [
117
119
  /**
118
120
  * We'll always have a documentId in a created entry, so we look for a componentId first.
119
121
  * Same with `uid` and `documentModel`.
122
+ * The componentId is empty when adding a new component in a repeatable. Let it be null to skip isRelatedToCurrentDocument
120
123
  */ const model = component ? component.uid : currentDocumentMeta.model;
121
- const id = component && componentId ? componentId.toString() : documentId;
124
+ const id = component ? componentId?.toString() : documentId;
122
125
  /**
123
126
  * The `name` prop is a complete path to the field, e.g. `field1.field2.field3`.
124
127
  * Where the above example would a nested field within two components, however
@@ -327,7 +330,6 @@ const ONE_WAY_RELATIONS = [
327
330
  * @description Contains all the logic for the combobox that can search
328
331
  * for relations and then add them to the field's connect array.
329
332
  */ const RelationsInput = ({ hint, id, model, label, labelAction, name, mainField, placeholder, required, unique: _unique, 'aria-label': _ariaLabel, onChange, isRelatedToCurrentDocument, ...props })=>{
330
- const [textValue, setTextValue] = React__namespace.useState('');
331
333
  const [searchParams, setSearchParams] = React__namespace.useState({
332
334
  _q: '',
333
335
  page: 1
@@ -335,7 +337,6 @@ const ONE_WAY_RELATIONS = [
335
337
  const { toggleNotification } = strapiAdmin.useNotification();
336
338
  const { currentDocumentMeta } = useDocumentContext.useDocumentContext('RelationsInput');
337
339
  const { formatMessage } = reactIntl.useIntl();
338
- const fieldRef = strapiAdmin.useFocusInputField(name);
339
340
  const field = strapiAdmin.useField(name);
340
341
  const searchParamsDebounced = useDebounce.useDebounce(searchParams, 300);
341
342
  const [searchForTrigger, { data, isLoading }] = relations.useLazySearchRelationsQuery();
@@ -376,13 +377,6 @@ const ONE_WAY_RELATIONS = [
376
377
  isRelatedToCurrentDocument,
377
378
  currentDocumentMeta.params
378
379
  ]);
379
- const handleSearch = async (search)=>{
380
- setSearchParams((s)=>({
381
- ...s,
382
- _q: search,
383
- page: 1
384
- }));
385
- };
386
380
  const hasNextPage = data?.pagination ? data.pagination.page < data.pagination.pageCount : false;
387
381
  const options = data?.results ?? [];
388
382
  const handleChange = (relationId)=>{
@@ -410,21 +404,6 @@ const ONE_WAY_RELATIONS = [
410
404
  *
411
405
  */ onChange(relation);
412
406
  };
413
- const handleLoadMore = ()=>{
414
- if (!data || !data.pagination) {
415
- return;
416
- } else if (data.pagination.page < data.pagination.pageCount) {
417
- setSearchParams((s)=>({
418
- ...s,
419
- page: s.page + 1
420
- }));
421
- }
422
- };
423
- React__namespace.useLayoutEffect(()=>{
424
- setTextValue('');
425
- }, [
426
- field.value
427
- ]);
428
407
  const relation = {
429
408
  collectionType: collections.COLLECTION_TYPES,
430
409
  // @ts-expect-error – targetModel does exist on the attribute. But it's not typed.
@@ -432,9 +411,26 @@ const ONE_WAY_RELATIONS = [
432
411
  documentId: '',
433
412
  params: currentDocumentMeta.params
434
413
  };
435
- const { componentUID } = ComponentContext.useComponent('RelationsField', ({ uid })=>({
436
- componentUID: uid
437
- }));
414
+ const { permissions = [], isLoading: isLoadingPermissions, error } = strapiAdmin.useRBAC(plugin.PERMISSIONS.map((action)=>({
415
+ action,
416
+ subject: relation.model
417
+ })));
418
+ if (error) {
419
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
420
+ alignItems: "center",
421
+ height: "100%",
422
+ justifyContent: "center",
423
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.EmptyStateLayout, {
424
+ icon: /*#__PURE__*/ jsxRuntime.jsx(Icons.WarningCircle, {
425
+ width: "16rem"
426
+ }),
427
+ content: formatMessage({
428
+ id: 'anErrorOccurred',
429
+ defaultMessage: 'Whoops! Something went wrong. Please, try again.'
430
+ })
431
+ })
432
+ });
433
+ }
438
434
  return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
439
435
  error: field.error,
440
436
  hint: hint,
@@ -445,90 +441,146 @@ const ONE_WAY_RELATIONS = [
445
441
  action: labelAction,
446
442
  children: label
447
443
  }),
448
- /*#__PURE__*/ jsxRuntime.jsx(RelationModal.RelationModalRenderer, {
449
- children: ({ dispatch })=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Combobox, {
450
- ref: fieldRef,
451
- creatable: "visible",
452
- createMessage: ()=>formatMessage({
453
- id: translations.getTranslation('relation.create'),
454
- defaultMessage: 'Create a relation'
455
- }),
456
- onCreateOption: ()=>{
457
- dispatch({
458
- type: 'GO_TO_RELATION',
459
- payload: {
460
- document: relation,
461
- shouldBypassConfirmation: false,
462
- fieldToConnect: name,
463
- fieldToConnectUID: componentUID
464
- }
465
- });
466
- },
467
- creatableStartIcon: /*#__PURE__*/ jsxRuntime.jsx(Icons.Plus, {
468
- fill: "neutral500"
469
- }),
470
- name: name,
471
- autocomplete: "list",
472
- placeholder: placeholder || formatMessage({
473
- id: translations.getTranslation('relation.add'),
474
- defaultMessage: 'Add relation'
475
- }),
476
- hasMoreItems: hasNextPage,
477
- loading: isLoading,
478
- onOpenChange: ()=>{
479
- handleSearch(textValue ?? '');
480
- },
481
- noOptionsMessage: ()=>formatMessage({
482
- id: translations.getTranslation('relation.notAvailable'),
483
- defaultMessage: 'No relations available'
484
- }),
485
- loadingMessage: formatMessage({
486
- id: translations.getTranslation('relation.isLoading'),
487
- defaultMessage: 'Relations are loading'
488
- }),
489
- onLoadMore: handleLoadMore,
444
+ /*#__PURE__*/ jsxRuntime.jsx(DocumentRBAC.DocumentRBAC, {
445
+ permissions: permissions,
446
+ model: relation.model,
447
+ children: /*#__PURE__*/ jsxRuntime.jsx(RelationModalWithContext, {
448
+ relation: relation,
449
+ name: name,
450
+ placeholder: placeholder,
451
+ hasNextPage: hasNextPage,
452
+ isLoadingPermissions: isLoadingPermissions,
453
+ isLoadingSearchRelations: isLoading,
454
+ handleChange: handleChange,
455
+ setSearchParams: setSearchParams,
456
+ data: data,
457
+ mainField: mainField,
458
+ fieldValue: field.value,
459
+ ...props
460
+ })
461
+ }),
462
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Error, {}),
463
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Hint, {})
464
+ ]
465
+ });
466
+ };
467
+ const RelationModalWithContext = ({ relation, name, placeholder, hasNextPage, isLoadingSearchRelations, isLoadingPermissions, handleChange, mainField, setSearchParams, fieldValue, data, ...props })=>{
468
+ const [textValue, setTextValue] = React__namespace.useState('');
469
+ const { formatMessage } = reactIntl.useIntl();
470
+ const canCreate = DocumentRBAC.useDocumentRBAC('RelationModalWrapper', (state)=>state.canCreate);
471
+ const fieldRef = strapiAdmin.useFocusInputField(name);
472
+ const { componentUID } = ComponentContext.useComponent('RelationsField', ({ uid })=>({
473
+ componentUID: uid
474
+ }));
475
+ const handleLoadMore = ()=>{
476
+ if (!data || !data.pagination) {
477
+ return;
478
+ } else if (data.pagination.page < data.pagination.pageCount) {
479
+ setSearchParams((s)=>({
480
+ ...s,
481
+ page: s.page + 1
482
+ }));
483
+ }
484
+ };
485
+ const options = data?.results ?? [];
486
+ React__namespace.useLayoutEffect(()=>{
487
+ setTextValue('');
488
+ }, [
489
+ fieldValue
490
+ ]);
491
+ const handleSearch = async (search)=>{
492
+ setSearchParams((s)=>({
493
+ ...s,
494
+ _q: search,
495
+ page: 1
496
+ }));
497
+ };
498
+ return /*#__PURE__*/ jsxRuntime.jsx(RelationModal.RelationModalRenderer, {
499
+ children: ({ dispatch })=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Combobox, {
500
+ ref: fieldRef,
501
+ creatable: "visible",
502
+ creatableDisabled: !canCreate,
503
+ createMessage: ()=>formatMessage({
504
+ id: translations.getTranslation('relation.create'),
505
+ defaultMessage: 'Create a relation'
506
+ }),
507
+ onCreateOption: ()=>{
508
+ if (canCreate) {
509
+ dispatch({
510
+ type: 'GO_TO_RELATION',
511
+ payload: {
512
+ document: relation,
513
+ shouldBypassConfirmation: false,
514
+ fieldToConnect: name,
515
+ fieldToConnectUID: componentUID
516
+ }
517
+ });
518
+ }
519
+ },
520
+ creatableStartIcon: /*#__PURE__*/ jsxRuntime.jsx(Icons.Plus, {
521
+ fill: "neutral500"
522
+ }),
523
+ name: name,
524
+ autocomplete: {
525
+ type: 'list',
526
+ filter: 'contains'
527
+ },
528
+ placeholder: placeholder || formatMessage({
529
+ id: translations.getTranslation('relation.add'),
530
+ defaultMessage: 'Add relation'
531
+ }),
532
+ hasMoreItems: hasNextPage,
533
+ loading: isLoadingSearchRelations || isLoadingPermissions,
534
+ onOpenChange: ()=>{
535
+ handleSearch(textValue ?? '');
536
+ },
537
+ noOptionsMessage: ()=>formatMessage({
538
+ id: translations.getTranslation('relation.notAvailable'),
539
+ defaultMessage: 'No relations available'
540
+ }),
541
+ loadingMessage: formatMessage({
542
+ id: translations.getTranslation('relation.isLoading'),
543
+ defaultMessage: 'Relations are loading'
544
+ }),
545
+ onLoadMore: handleLoadMore,
546
+ textValue: textValue,
547
+ onChange: handleChange,
548
+ onTextValueChange: (text)=>{
549
+ setTextValue(text);
550
+ },
551
+ onInputChange: (event)=>{
552
+ handleSearch(event.currentTarget.value);
553
+ },
554
+ ...props,
555
+ children: options?.map((opt)=>{
556
+ const textValue = relations$1.getRelationLabel(opt, mainField);
557
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.ComboboxOption, {
558
+ value: opt.id.toString(),
490
559
  textValue: textValue,
491
- onChange: handleChange,
492
- onTextValueChange: (text)=>{
493
- setTextValue(text);
494
- },
495
- onInputChange: (event)=>{
496
- handleSearch(event.currentTarget.value);
497
- },
498
- ...props,
499
- children: options.map((opt)=>{
500
- const textValue = relations$1.getRelationLabel(opt, mainField);
501
- return /*#__PURE__*/ jsxRuntime.jsx(designSystem.ComboboxOption, {
502
- value: opt.id.toString(),
503
- textValue: textValue,
504
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
560
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
561
+ gap: 2,
562
+ justifyContent: "space-between",
563
+ children: [
564
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
505
565
  gap: 2,
506
- justifyContent: "space-between",
507
566
  children: [
508
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
509
- gap: 2,
510
- children: [
511
- /*#__PURE__*/ jsxRuntime.jsx(Icons.Link, {
512
- fill: "neutral500"
513
- }),
514
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
515
- ellipsis: true,
516
- children: textValue
517
- })
518
- ]
567
+ /*#__PURE__*/ jsxRuntime.jsx(Icons.Link, {
568
+ fill: "neutral500"
519
569
  }),
520
- opt.status ? /*#__PURE__*/ jsxRuntime.jsx(DocumentStatus.DocumentStatus, {
521
- status: opt.status
522
- }) : null
570
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
571
+ ellipsis: true,
572
+ children: textValue
573
+ })
523
574
  ]
524
- })
525
- }, opt.id);
575
+ }),
576
+ opt.status ? /*#__PURE__*/ jsxRuntime.jsx(DocumentStatus.DocumentStatus, {
577
+ status: opt.status
578
+ }) : null
579
+ ]
526
580
  })
527
- })
528
- }),
529
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Error, {}),
530
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Hint, {})
531
- ]
581
+ }, opt.id);
582
+ })
583
+ })
532
584
  });
533
585
  };
534
586
  /* -------------------------------------------------------------------------------------------------