@strapi/content-manager 0.0.0-experimental.8bf99b7c43ed372264c198d347a2ada9dfed174d → 0.0.0-experimental.8c28a74d1219c09f4ee67402fd3a26f182c4990a

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 (195) hide show
  1. package/dist/admin/components/LeftMenu.js +30 -34
  2. package/dist/admin/components/LeftMenu.js.map +1 -1
  3. package/dist/admin/components/LeftMenu.mjs +32 -36
  4. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  5. package/dist/admin/components/Widgets.js +161 -0
  6. package/dist/admin/components/Widgets.js.map +1 -0
  7. package/dist/admin/components/Widgets.mjs +158 -0
  8. package/dist/admin/components/Widgets.mjs.map +1 -0
  9. package/dist/admin/content-manager.js.map +1 -1
  10. package/dist/admin/content-manager.mjs.map +1 -1
  11. package/dist/admin/history/pages/History.js +1 -9
  12. package/dist/admin/history/pages/History.js.map +1 -1
  13. package/dist/admin/history/pages/History.mjs +1 -9
  14. package/dist/admin/history/pages/History.mjs.map +1 -1
  15. package/dist/admin/hooks/useDocumentActions.js +13 -2
  16. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  17. package/dist/admin/hooks/useDocumentActions.mjs +13 -2
  18. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  19. package/dist/admin/hooks/useDocumentContext.js +57 -0
  20. package/dist/admin/hooks/useDocumentContext.js.map +1 -0
  21. package/dist/admin/hooks/useDocumentContext.mjs +36 -0
  22. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -0
  23. package/dist/admin/index.js +42 -5
  24. package/dist/admin/index.js.map +1 -1
  25. package/dist/admin/index.mjs +42 -3
  26. package/dist/admin/index.mjs.map +1 -1
  27. package/dist/admin/pages/EditView/EditViewPage.js +85 -93
  28. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  29. package/dist/admin/pages/EditView/EditViewPage.mjs +86 -94
  30. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/components/DocumentActions.js +232 -51
  32. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  33. package/dist/admin/pages/EditView/components/DocumentActions.mjs +238 -57
  34. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +7 -12
  36. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +8 -13
  38. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
  40. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
  42. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
  44. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
  46. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +2 -2
  48. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +2 -2
  50. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +4 -2
  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 +4 -2
  54. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +5 -16
  56. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +5 -16
  58. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +2 -3
  60. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +2 -3
  62. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +495 -345
  64. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +495 -347
  66. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +143 -86
  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 +146 -89
  70. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/UID.js +7 -7
  72. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +7 -7
  74. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
  76. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
  78. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  79. package/dist/admin/pages/EditView/components/InputRenderer.js +3 -10
  80. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  81. package/dist/admin/pages/EditView/components/InputRenderer.mjs +3 -10
  82. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  83. package/dist/admin/pages/ListView/ListViewPage.js +0 -77
  84. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  85. package/dist/admin/pages/ListView/ListViewPage.mjs +1 -78
  86. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  87. package/dist/admin/preview/components/PreviewHeader.js +3 -6
  88. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  89. package/dist/admin/preview/components/PreviewHeader.mjs +3 -6
  90. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  91. package/dist/admin/preview/pages/Preview.js +94 -102
  92. package/dist/admin/preview/pages/Preview.js.map +1 -1
  93. package/dist/admin/preview/pages/Preview.mjs +94 -102
  94. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  95. package/dist/admin/services/homepage.js +30 -0
  96. package/dist/admin/services/homepage.js.map +1 -0
  97. package/dist/admin/services/homepage.mjs +28 -0
  98. package/dist/admin/services/homepage.mjs.map +1 -0
  99. package/dist/admin/src/components/Widgets.d.ts +3 -0
  100. package/dist/admin/src/content-manager.d.ts +0 -3
  101. package/dist/admin/src/features/DocumentRBAC.d.ts +1 -1
  102. package/dist/admin/src/history/pages/History.d.ts +1 -1
  103. package/dist/admin/src/hooks/useDocumentContext.d.ts +30 -0
  104. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
  105. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -1
  106. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +1 -1
  107. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +73 -7
  108. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +1 -0
  109. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  110. package/dist/admin/src/preview/pages/Preview.d.ts +2 -1
  111. package/dist/admin/src/services/homepage.d.ts +5 -0
  112. package/dist/admin/translations/en.json.js +2 -1
  113. package/dist/admin/translations/en.json.js.map +1 -1
  114. package/dist/admin/translations/en.json.mjs +2 -1
  115. package/dist/admin/translations/en.json.mjs.map +1 -1
  116. package/dist/admin/translations/ru.json.js +235 -226
  117. package/dist/admin/translations/ru.json.js.map +1 -1
  118. package/dist/admin/translations/ru.json.mjs +230 -226
  119. package/dist/admin/translations/ru.json.mjs.map +1 -1
  120. package/dist/server/controllers/index.js +3 -1
  121. package/dist/server/controllers/index.js.map +1 -1
  122. package/dist/server/controllers/index.mjs +3 -1
  123. package/dist/server/controllers/index.mjs.map +1 -1
  124. package/dist/server/homepage/controllers/homepage.js +57 -0
  125. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  126. package/dist/server/homepage/controllers/homepage.mjs +36 -0
  127. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  128. package/dist/server/homepage/controllers/index.js +10 -0
  129. package/dist/server/homepage/controllers/index.js.map +1 -0
  130. package/dist/server/homepage/controllers/index.mjs +8 -0
  131. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  132. package/dist/server/homepage/index.js +14 -0
  133. package/dist/server/homepage/index.js.map +1 -0
  134. package/dist/server/homepage/index.mjs +12 -0
  135. package/dist/server/homepage/index.mjs.map +1 -0
  136. package/dist/server/homepage/routes/homepage.js +25 -0
  137. package/dist/server/homepage/routes/homepage.js.map +1 -0
  138. package/dist/server/homepage/routes/homepage.mjs +23 -0
  139. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  140. package/dist/server/homepage/routes/index.js +13 -0
  141. package/dist/server/homepage/routes/index.js.map +1 -0
  142. package/dist/server/homepage/routes/index.mjs +11 -0
  143. package/dist/server/homepage/routes/index.mjs.map +1 -0
  144. package/dist/server/homepage/services/homepage.js +157 -0
  145. package/dist/server/homepage/services/homepage.js.map +1 -0
  146. package/dist/server/homepage/services/homepage.mjs +155 -0
  147. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  148. package/dist/server/homepage/services/index.js +10 -0
  149. package/dist/server/homepage/services/index.js.map +1 -0
  150. package/dist/server/homepage/services/index.mjs +8 -0
  151. package/dist/server/homepage/services/index.mjs.map +1 -0
  152. package/dist/server/preview/services/preview.js +0 -1
  153. package/dist/server/preview/services/preview.js.map +1 -1
  154. package/dist/server/preview/services/preview.mjs +0 -1
  155. package/dist/server/preview/services/preview.mjs.map +1 -1
  156. package/dist/server/routes/index.js +3 -1
  157. package/dist/server/routes/index.js.map +1 -1
  158. package/dist/server/routes/index.mjs +3 -1
  159. package/dist/server/routes/index.mjs.map +1 -1
  160. package/dist/server/services/index.js +3 -1
  161. package/dist/server/services/index.js.map +1 -1
  162. package/dist/server/services/index.mjs +3 -1
  163. package/dist/server/services/index.mjs.map +1 -1
  164. package/dist/server/src/controllers/index.d.ts.map +1 -1
  165. package/dist/server/src/homepage/controllers/homepage.d.ts +7 -0
  166. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  167. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  168. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  169. package/dist/server/src/homepage/index.d.ts +16 -0
  170. package/dist/server/src/homepage/index.d.ts.map +1 -0
  171. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  172. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  173. package/dist/server/src/homepage/routes/index.d.ts +8 -0
  174. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  175. package/dist/server/src/homepage/services/homepage.d.ts +11 -0
  176. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  177. package/dist/server/src/homepage/services/index.d.ts +9 -0
  178. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  179. package/dist/server/src/index.d.ts +7 -1
  180. package/dist/server/src/index.d.ts.map +1 -1
  181. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  182. package/dist/server/src/routes/index.d.ts +1 -0
  183. package/dist/server/src/routes/index.d.ts.map +1 -1
  184. package/dist/server/src/services/data-mapper.d.ts +0 -1
  185. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  186. package/dist/server/src/services/index.d.ts +6 -1
  187. package/dist/server/src/services/index.d.ts.map +1 -1
  188. package/dist/shared/contracts/homepage.d.ts +25 -0
  189. package/dist/shared/contracts/homepage.d.ts.map +1 -0
  190. package/package.json +8 -8
  191. package/dist/admin/features/DocumentContext.js +0 -71
  192. package/dist/admin/features/DocumentContext.js.map +0 -1
  193. package/dist/admin/features/DocumentContext.mjs +0 -49
  194. package/dist/admin/features/DocumentContext.mjs.map +0 -1
  195. package/dist/admin/src/features/DocumentContext.d.ts +0 -53
@@ -10,13 +10,15 @@ var reactRouterDom = require('react-router-dom');
10
10
  var styledComponents = require('styled-components');
11
11
  var collections = require('../../../../../constants/collections.js');
12
12
  var plugin = require('../../../../../constants/plugin.js');
13
- var DocumentContext = require('../../../../../features/DocumentContext.js');
14
- var DocumentRBAC = require('../../../../../features/DocumentRBAC.js');
15
- var useDocumentLayout = require('../../../../../hooks/useDocumentLayout.js');
13
+ var api = require('../../../../../utils/api.js');
14
+ var DocumentStatus = require('../../DocumentStatus.js');
15
+ var useDocument = require('../../../../../hooks/useDocument.js');
16
+ require('../../../../../preview/pages/Preview.js');
16
17
  var documents = require('../../../../../services/documents.js');
18
+ var useDocumentLayout = require('../../../../../hooks/useDocumentLayout.js');
19
+ var DocumentRBAC = require('../../../../../features/DocumentRBAC.js');
17
20
  var validation = require('../../../../../utils/validation.js');
18
21
  var DocumentActions = require('../../DocumentActions.js');
19
- var DocumentStatus = require('../../DocumentStatus.js');
20
22
  var FormLayout = require('../../FormLayout.js');
21
23
 
22
24
  function _interopNamespaceDefault(e) {
@@ -43,271 +45,422 @@ function getCollectionType(url) {
43
45
  const match = url.match(regex);
44
46
  return match ? match[1] : undefined;
45
47
  }
46
- const CustomModalContent = styledComponents.styled(designSystem.Modal.Content)`
48
+ const StyledModalContent = styledComponents.styled(designSystem.Modal.Content)`
47
49
  width: 90%;
48
50
  max-width: 100%;
49
51
  height: 90%;
50
52
  max-height: 100%;
51
53
  `;
52
- const [RelationModalProvider, useRelationModal] = strapiAdmin.createContext('RelationModal', {
53
- parentModified: false,
54
- depth: 0
55
- });
56
- const RelationModalForm = ({ relation, triggerButtonLabel })=>{
57
- const navigate = reactRouterDom.useNavigate();
58
- const { pathname, search } = reactRouterDom.useLocation();
59
- const { formatMessage } = reactIntl.useIntl();
60
- const [triggerRefetchDocument] = documents.useLazyGetDocumentQuery();
61
- const currentDocument = DocumentContext.useDocumentContext('RelationModalForm', (state)=>state.document);
62
- const rootDocumentMeta = DocumentContext.useDocumentContext('RelationModalForm', (state)=>state.rootDocumentMeta);
63
- const currentDocumentMeta = DocumentContext.useDocumentContext('RelationModalForm', (state)=>state.meta);
64
- const changeDocument = DocumentContext.useDocumentContext('RelationModalForm', (state)=>state.changeDocument);
65
- const documentHistory = DocumentContext.useDocumentContext('RelationModalForm', (state)=>state.documentHistory);
66
- const setDocumentHistory = DocumentContext.useDocumentContext('RelationModalForm', (state)=>state.setDocumentHistory);
67
- const [isConfirmationOpen, setIsConfirmationOpen] = React__namespace.useState(false);
68
- const [actionPosition, setActionPosition] = React__namespace.useState('cancel');
69
- const [isModalOpen, setIsModalOpen] = React__namespace.useState(false);
70
- // NOTE: Not sure about this relation modal context, maybe we should move this to DocumentContext?
71
- // Get parent modal context if it exists
72
- const parentContext = useRelationModal('RelationModalForm', (state)=>state);
73
- // Get depth of nested modals
74
- const depth = parentContext ? parentContext.depth + 1 : 0;
75
- // Check if this is a nested modal
76
- const isNested = depth > 0;
77
- const addDocumentToHistory = (document)=>setDocumentHistory((prev)=>[
78
- ...prev,
79
- document
80
- ]);
81
- const getPreviousDocument = ()=>{
82
- if (documentHistory.length === 0) return undefined;
83
- const lastDocument = documentHistory[documentHistory.length - 1];
84
- return lastDocument;
85
- };
86
- const removeLastDocumentFromHistory = ()=>{
87
- setDocumentHistory((prev)=>[
88
- ...prev
89
- ].slice(0, prev.length - 1));
90
- };
91
- const handleToggleModal = ()=>{
92
- if (isModalOpen) {
93
- setIsModalOpen(false);
94
- const document = {
95
- collectionType: rootDocumentMeta.collectionType,
96
- model: rootDocumentMeta.model,
97
- documentId: rootDocumentMeta.documentId
54
+ const getFullPageUrl = (currentDocumentMeta)=>{
55
+ const isSingleType = currentDocumentMeta.collectionType === collections.SINGLE_TYPES;
56
+ const queryParams = currentDocumentMeta.params?.locale ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}` : '';
57
+ return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}${isSingleType ? '' : '/' + currentDocumentMeta.documentId}${queryParams}`;
58
+ };
59
+ function reducer(state, action) {
60
+ switch(action.type){
61
+ case 'GO_TO_RELATION':
62
+ if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {
63
+ return {
64
+ ...state,
65
+ confirmDialogIntent: action.payload.document,
66
+ fieldToConnect: action.payload.fieldToConnect,
67
+ fieldToConnectUID: action.payload.fieldToConnectUID
68
+ };
69
+ }
70
+ const lastItemDocumentHistory = state.documentHistory.at(-1);
71
+ const hasToResetDocumentHistory = lastItemDocumentHistory && !lastItemDocumentHistory.documentId;
72
+ return {
73
+ ...state,
74
+ // Reset document history if the last item has documentId undefined
75
+ documentHistory: hasToResetDocumentHistory ? [
76
+ action.payload.document
77
+ ] : [
78
+ ...state.documentHistory,
79
+ action.payload.document
80
+ ],
81
+ confirmDialogIntent: null,
82
+ isModalOpen: true,
83
+ fieldToConnect: hasToResetDocumentHistory ? undefined : action.payload.fieldToConnect,
84
+ fieldToConnectUID: hasToResetDocumentHistory ? undefined : action.payload.fieldToConnectUID
98
85
  };
99
- // Change back to the root document
100
- changeDocument(document);
101
- // Reset the document history
102
- setDocumentHistory([]);
103
- // Reset action position
104
- setActionPosition('cancel');
105
- // Read from cache or refetch root document
106
- triggerRefetchDocument(document, // Favor the cache
107
- true);
108
- } else {
109
- changeDocument(relation);
110
- setIsModalOpen(true);
111
- }
112
- };
113
- const getFullPageLink = ()=>{
114
- const isSingleType = currentDocumentMeta.collectionType === collections.SINGLE_TYPES;
115
- const queryParams = currentDocumentMeta.params?.locale ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}` : '';
116
- return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}${isSingleType ? '' : '/' + currentDocumentMeta.documentId}${queryParams}`;
117
- };
118
- const handleRedirection = ()=>{
119
- const editViewUrl = `${pathname}${search}`;
120
- const isRootDocumentUrl = editViewUrl.includes(getFullPageLink());
121
- if (isRootDocumentUrl) {
122
- handleToggleModal();
123
- } else {
124
- navigate(getFullPageLink());
125
- }
126
- };
127
- const handleConfirm = ()=>{
128
- if (actionPosition === 'navigate') {
129
- handleRedirection();
130
- } else if (actionPosition === 'back') {
131
- const previousRelation = getPreviousDocument();
132
- if (previousRelation) {
133
- removeLastDocumentFromHistory();
134
- changeDocument(previousRelation);
86
+ case 'GO_BACK':
87
+ if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {
88
+ return {
89
+ ...state,
90
+ confirmDialogIntent: 'back'
91
+ };
135
92
  }
136
- } else {
137
- // Add current relation to history before opening a new one in case we are opening a new one
138
- if (currentDocumentMeta && Object.keys(currentDocumentMeta).length > 0) {
139
- addDocumentToHistory(currentDocumentMeta);
93
+ return {
94
+ ...state,
95
+ documentHistory: state.documentHistory.slice(0, -1),
96
+ confirmDialogIntent: null
97
+ };
98
+ case 'GO_FULL_PAGE':
99
+ if (state.hasUnsavedChanges) {
100
+ return {
101
+ ...state,
102
+ confirmDialogIntent: 'navigate'
103
+ };
140
104
  }
141
- handleToggleModal();
142
- }
105
+ return {
106
+ ...state,
107
+ documentHistory: [],
108
+ hasUnsavedChanges: false,
109
+ isModalOpen: false,
110
+ confirmDialogIntent: null
111
+ };
112
+ case 'GO_TO_CREATED_RELATION':
113
+ return {
114
+ ...state,
115
+ // Reset document history if the last item has documentId undefined
116
+ documentHistory: state.documentHistory ? [
117
+ ...state.documentHistory.slice(0, -1),
118
+ action.payload.document
119
+ ] : [
120
+ action.payload.document
121
+ ],
122
+ confirmDialogIntent: null,
123
+ isModalOpen: true,
124
+ fieldToConnect: undefined,
125
+ fieldToConnectUID: undefined
126
+ };
127
+ case 'CANCEL_CONFIRM_DIALOG':
128
+ return {
129
+ ...state,
130
+ confirmDialogIntent: null
131
+ };
132
+ case 'CLOSE_MODAL':
133
+ if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {
134
+ return {
135
+ ...state,
136
+ confirmDialogIntent: 'close'
137
+ };
138
+ }
139
+ return {
140
+ ...state,
141
+ documentHistory: [],
142
+ confirmDialogIntent: null,
143
+ hasUnsavedChanges: false,
144
+ isModalOpen: false
145
+ };
146
+ case 'SET_HAS_UNSAVED_CHANGES':
147
+ return {
148
+ ...state,
149
+ hasUnsavedChanges: action.payload.hasUnsavedChanges
150
+ };
151
+ default:
152
+ return state;
153
+ }
154
+ }
155
+ const [RelationModalProvider, useRelationModal] = strapiAdmin.createContext('RelationModal');
156
+ function isRenderProp(children) {
157
+ return typeof children === 'function';
158
+ }
159
+ const RootRelationRenderer = (props)=>{
160
+ const { children } = props;
161
+ const [state, dispatch] = React__namespace.useReducer(reducer, {
162
+ documentHistory: [],
163
+ confirmDialogIntent: null,
164
+ isModalOpen: false,
165
+ hasUnsavedChanges: false,
166
+ fieldToConnect: undefined
167
+ });
168
+ const rootDocument = useDocument.useDoc();
169
+ const [{ query }] = strapiAdmin.useQueryParams();
170
+ const params = React__namespace.useMemo(()=>api.buildValidParams(query ?? {}), [
171
+ query
172
+ ]);
173
+ const rootDocumentMeta = {
174
+ documentId: rootDocument.document?.documentId || '',
175
+ model: rootDocument.model,
176
+ collectionType: rootDocument.collectionType,
177
+ params
143
178
  };
144
- return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Form, {
145
- method: "PUT",
146
- initialValues: currentDocument.getInitialFormValues(),
147
- validate: (values, options)=>{
148
- const yupSchema = validation.createYupSchema(currentDocument.schema?.attributes, currentDocument.components, {
149
- status: currentDocument.document?.status,
150
- ...options
151
- });
152
- return yupSchema.validate(values, {
153
- abortEarly: false
154
- });
179
+ const currentDocumentMeta = state.documentHistory.at(-1) ?? rootDocumentMeta;
180
+ const currentDocument = useDocument.useDocument(currentDocumentMeta);
181
+ // TODO: check if we can remove the single type check
182
+ const isSingleType = currentDocumentMeta.collectionType === collections.SINGLE_TYPES;
183
+ const isCreating = !currentDocumentMeta.documentId && !isSingleType;
184
+ /**
185
+ * There is no parent relation, so the relation modal doesn't exist. Create it and set up all the
186
+ * pieces that will be used by potential child relations: the context, header, form, and footer.
187
+ */ return /*#__PURE__*/ jsxRuntime.jsx(RelationModalProvider, {
188
+ state: state,
189
+ dispatch: dispatch,
190
+ rootDocumentMeta: rootDocumentMeta,
191
+ currentDocumentMeta: currentDocumentMeta,
192
+ currentDocument: currentDocument,
193
+ isCreating: isCreating,
194
+ children: /*#__PURE__*/ jsxRuntime.jsx(RelationModal, {
195
+ children: isRenderProp(children) ? children({
196
+ dispatch
197
+ }) : props.relation && /*#__PURE__*/ jsxRuntime.jsx(RelationModalTrigger, {
198
+ relation: props.relation,
199
+ children: children
200
+ })
201
+ })
202
+ });
203
+ };
204
+ const NestedRelationRenderer = (props)=>{
205
+ const { children } = props;
206
+ const dispatch = useRelationModal('NestedRelation', (state)=>state.dispatch);
207
+ return isRenderProp(children) ? children({
208
+ dispatch
209
+ }) : props.relation && /*#__PURE__*/ jsxRuntime.jsx(RelationModalTrigger, {
210
+ relation: props.relation,
211
+ children: children
212
+ }); /* This is the trigger that will be rendered in the parent relation */
213
+ };
214
+ /**
215
+ * Component responsible for rendering its children wrapped in a modal, form and context if needed
216
+ */ const RelationModalRenderer = (props)=>{
217
+ // We're in a nested relation if the relation modal context is not undefined
218
+ const isNested = useRelationModal('RelationContextWrapper', (state)=>state != undefined, false);
219
+ return isNested ? /*#__PURE__*/ jsxRuntime.jsx(NestedRelationRenderer, {
220
+ ...props
221
+ }) : /*#__PURE__*/ jsxRuntime.jsx(RootRelationRenderer, {
222
+ ...props
223
+ });
224
+ };
225
+ /* -------------------------------------------------------------------------------------------------
226
+ * RelationModal
227
+ * -----------------------------------------------------------------------------------------------*/ const generateCreateUrl = (currentDocumentMeta)=>{
228
+ return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}/create${currentDocumentMeta.params?.locale ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}` : ''}`;
229
+ };
230
+ const RelationModal = ({ children })=>{
231
+ const { formatMessage } = reactIntl.useIntl();
232
+ const navigate = reactRouterDom.useNavigate();
233
+ const state = useRelationModal('RelationModalForm', (state)=>state.state);
234
+ const dispatch = useRelationModal('RelationModalForm', (state)=>state.dispatch);
235
+ const currentDocumentMeta = useRelationModal('RelationModalForm', (state)=>state.currentDocumentMeta);
236
+ const currentDocument = useRelationModal('RelationModalForm', (state)=>state.currentDocument);
237
+ const isCreating = useRelationModal('RelationModalForm', (state)=>state.isCreating);
238
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Root, {
239
+ open: state.isModalOpen,
240
+ onOpenChange: (open)=>{
241
+ if (!open) {
242
+ dispatch({
243
+ type: 'CLOSE_MODAL',
244
+ payload: {
245
+ shouldBypassConfirmation: false
246
+ }
247
+ });
248
+ }
155
249
  },
156
- children: ({ modified, isSubmitting, resetForm })=>{
157
- // We don't count the root document, so history starts after 1
158
- const hasHistory = documentHistory.length > 1;
159
- return /*#__PURE__*/ jsxRuntime.jsxs(RelationModalProvider, {
160
- parentModified: modified,
161
- depth: depth,
250
+ children: [
251
+ children,
252
+ /*#__PURE__*/ jsxRuntime.jsxs(StyledModalContent, {
162
253
  children: [
163
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Root, {
164
- open: isModalOpen,
165
- onOpenChange: ()=>{
166
- if (isModalOpen) {
167
- if (modified && !isSubmitting) {
168
- setIsConfirmationOpen(true);
169
- } else {
170
- handleToggleModal();
171
- }
172
- }
173
- },
174
- children: [
175
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Trigger, {
176
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tooltip, {
177
- description: triggerButtonLabel,
178
- children: /*#__PURE__*/ jsxRuntime.jsx(CustomTextButton, {
179
- onClick: ()=>{
180
- // Check if parent modal has unsaved changes
181
- if (isNested && parentContext.parentModified) {
182
- setIsConfirmationOpen(true);
183
- // Return early to avoid opening the modal
184
- return;
185
- } else {
186
- if (modified && !isSubmitting) {
187
- setIsConfirmationOpen(true);
188
- } else {
189
- // Add current relation to history before opening a new one
190
- if (currentDocumentMeta && Object.keys(currentDocumentMeta).length > 0) {
191
- addDocumentToHistory(currentDocumentMeta);
192
- }
193
- handleToggleModal();
194
- }
195
- if (!isModalOpen) {
196
- setIsModalOpen(true);
197
- }
198
- }
199
- },
200
- width: "100%",
201
- children: triggerButtonLabel
202
- })
203
- })
204
- }),
205
- /*#__PURE__*/ jsxRuntime.jsxs(CustomModalContent, {
206
- children: [
207
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Header, {
208
- gap: 2,
209
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
210
- justifyContent: "space-between",
211
- alignItems: "center",
212
- width: "100%",
213
- children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
214
- gap: 2,
215
- children: [
216
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
217
- withTooltip: false,
218
- label: "Back",
219
- variant: "ghost",
220
- disabled: !hasHistory,
221
- onClick: ()=>{
222
- setActionPosition('back');
223
- if (modified && !isSubmitting) {
224
- setIsConfirmationOpen(true);
225
- } else {
226
- const previousRelation = getPreviousDocument();
227
- if (previousRelation) {
228
- removeLastDocumentFromHistory();
229
- changeDocument(previousRelation);
230
- }
231
- }
232
- },
233
- marginRight: 1,
234
- children: /*#__PURE__*/ jsxRuntime.jsx(Icons.ArrowLeft, {})
235
- }),
236
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
237
- tag: "span",
238
- fontWeight: 600,
239
- children: formatMessage({
240
- id: 'content-manager.components.RelationInputModal.modal-title',
241
- defaultMessage: 'Edit a relation'
242
- })
243
- })
244
- ]
245
- })
246
- })
247
- }),
248
- /*#__PURE__*/ jsxRuntime.jsx(RelationModalBody, {
249
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
250
- onClick: ()=>{
251
- setActionPosition('navigate');
252
- if (modified && !isSubmitting) {
253
- setIsConfirmationOpen(true);
254
- } else {
255
- navigate(getFullPageLink());
256
- }
257
- },
258
- variant: "tertiary",
254
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Header, {
255
+ gap: 2,
256
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
257
+ justifyContent: "space-between",
258
+ alignItems: "center",
259
+ width: "100%",
260
+ children: [
261
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
262
+ gap: 2,
263
+ children: [
264
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
265
+ withTooltip: false,
259
266
  label: formatMessage({
260
- id: 'content-manager.components.RelationInputModal.button-fullpage',
261
- defaultMessage: 'Go to entry'
267
+ id: 'global.back',
268
+ defaultMessage: 'Back'
262
269
  }),
263
- children: /*#__PURE__*/ jsxRuntime.jsx(Icons.ArrowsOut, {})
264
- })
265
- }),
266
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Footer, {
267
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
270
+ variant: "ghost",
271
+ disabled: state.documentHistory.length < 2,
268
272
  onClick: ()=>{
269
- if (modified && !isSubmitting) {
270
- setIsConfirmationOpen(true);
271
- } else {
272
- handleToggleModal();
273
- }
273
+ dispatch({
274
+ type: 'GO_BACK',
275
+ payload: {
276
+ shouldBypassConfirmation: false
277
+ }
278
+ });
274
279
  },
275
- variant: "tertiary",
276
- children: formatMessage({
277
- id: 'app.components.Button.cancel',
278
- defaultMessage: 'Cancel'
280
+ marginRight: 1,
281
+ children: /*#__PURE__*/ jsxRuntime.jsx(Icons.ArrowLeft, {})
282
+ }),
283
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
284
+ tag: "span",
285
+ fontWeight: 600,
286
+ children: isCreating ? formatMessage({
287
+ id: 'content-manager.relation.create',
288
+ defaultMessage: 'Create a relation'
289
+ }) : formatMessage({
290
+ id: 'content-manager.components.RelationInputModal.modal-title',
291
+ defaultMessage: 'Edit a relation'
279
292
  })
280
293
  })
281
- })
282
- ]
283
- })
284
- ]
294
+ ]
295
+ }),
296
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
297
+ onClick: ()=>{
298
+ dispatch({
299
+ type: 'GO_FULL_PAGE'
300
+ });
301
+ if (!state.hasUnsavedChanges) {
302
+ if (isCreating) {
303
+ navigate(generateCreateUrl(currentDocumentMeta));
304
+ } else {
305
+ navigate(getFullPageUrl(currentDocumentMeta));
306
+ }
307
+ }
308
+ },
309
+ variant: "tertiary",
310
+ label: formatMessage({
311
+ id: 'content-manager.components.RelationInputModal.button-fullpage',
312
+ defaultMessage: 'Go to entry'
313
+ }),
314
+ children: /*#__PURE__*/ jsxRuntime.jsx(Icons.ArrowsOut, {})
315
+ })
316
+ ]
317
+ })
285
318
  }),
286
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Root, {
287
- open: isConfirmationOpen,
288
- onOpenChange: setIsConfirmationOpen,
289
- children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.ConfirmDialog, {
290
- onConfirm: ()=>{
291
- handleConfirm();
292
- setIsConfirmationOpen(false);
293
- resetForm();
319
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Body, {
320
+ children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Form, {
321
+ method: isCreating ? 'POST' : 'PUT',
322
+ initialValues: currentDocument.getInitialFormValues(isCreating),
323
+ validate: (values, options)=>{
324
+ const yupSchema = validation.createYupSchema(currentDocument.schema?.attributes, currentDocument.components, {
325
+ status: currentDocument.document?.status,
326
+ ...options
327
+ });
328
+ return yupSchema.validate(values, {
329
+ abortEarly: false
330
+ });
294
331
  },
295
- onCancel: ()=>{
296
- setIsConfirmationOpen(false);
297
- },
298
- variant: "danger",
299
- children: formatMessage({
300
- id: 'content-manager.components.RelationInputModal.confirmation-message',
301
- defaultMessage: 'Some changes were not saved. Are you sure you want to close this relation? All changes that were not saved will be lost.'
302
- })
332
+ children: /*#__PURE__*/ jsxRuntime.jsx(RelationModalBody, {})
303
333
  })
304
334
  })
305
335
  ]
336
+ })
337
+ ]
338
+ });
339
+ };
340
+ /**
341
+ * All the main content (not header and footer) of the relation modal, plus the confirmation dialog.
342
+ * Will be wrapped in a Modal.Body by the RelationModal component.
343
+ * Cannot be moved directly inside RelationModal because it needs access to the context via hooks.
344
+ */ const RelationModalBody = ()=>{
345
+ const navigate = reactRouterDom.useNavigate();
346
+ const { pathname, search } = reactRouterDom.useLocation();
347
+ const { formatMessage } = reactIntl.useIntl();
348
+ const [triggerRefetchDocument] = documents.useLazyGetDocumentQuery();
349
+ const state = useRelationModal('RelationModalForm', (state)=>state.state);
350
+ const dispatch = useRelationModal('RelationModalForm', (state)=>state.dispatch);
351
+ const rootDocumentMeta = useRelationModal('RelationModalForm', (state)=>state.rootDocumentMeta);
352
+ const currentDocumentMeta = useRelationModal('RelationModalForm', (state)=>state.currentDocumentMeta);
353
+ const isCreating = useRelationModal('RelationModalForm', (state)=>state.isCreating);
354
+ /**
355
+ * One-way sync the modified state from the form to the modal state.
356
+ * It is needed because we need to consume state from the form context in order to lift it up
357
+ * into the modal context. It is not possible otherwise because the modal needs the form state,
358
+ * but it must be a parent of the form.
359
+ */ const modified = strapiAdmin.useForm('FormWatcher', (state)=>state.modified);
360
+ const isSubmitting = strapiAdmin.useForm('FormWatcher', (state)=>state.isSubmitting);
361
+ const hasUnsavedChanges = modified && !isSubmitting;
362
+ React__namespace.useEffect(()=>{
363
+ dispatch({
364
+ type: 'SET_HAS_UNSAVED_CHANGES',
365
+ payload: {
366
+ hasUnsavedChanges
367
+ }
368
+ });
369
+ }, [
370
+ hasUnsavedChanges,
371
+ dispatch
372
+ ]);
373
+ const handleCloseModal = (shouldBypassConfirmation)=>{
374
+ dispatch({
375
+ type: 'CLOSE_MODAL',
376
+ payload: {
377
+ shouldBypassConfirmation
378
+ }
379
+ });
380
+ {
381
+ // TODO: check if we can avoid this by relying on RTK invalidatesTags.
382
+ // If so we can delete this function and dispatch the events directly
383
+ triggerRefetchDocument(// TODO check if params should be removed (as they were before)
384
+ rootDocumentMeta, // Favor the cache
385
+ true);
386
+ }
387
+ };
388
+ const handleRedirection = ()=>{
389
+ const editViewUrl = `${pathname}${search}`;
390
+ const fullPageUrl = getFullPageUrl(currentDocumentMeta);
391
+ const isRootDocumentUrl = editViewUrl.includes(fullPageUrl);
392
+ if (isRootDocumentUrl) {
393
+ handleCloseModal(true);
394
+ } else {
395
+ if (isCreating) {
396
+ navigate(generateCreateUrl(currentDocumentMeta));
397
+ } else {
398
+ navigate(fullPageUrl);
399
+ }
400
+ }
401
+ };
402
+ const handleConfirm = ()=>{
403
+ if (state.confirmDialogIntent === null) {
404
+ return;
405
+ }
406
+ if (state.confirmDialogIntent === 'navigate') {
407
+ handleRedirection();
408
+ } else if (state.confirmDialogIntent === 'back') {
409
+ dispatch({
410
+ type: 'GO_BACK',
411
+ payload: {
412
+ shouldBypassConfirmation: true
413
+ }
414
+ });
415
+ } else if (state.confirmDialogIntent === 'close') {
416
+ handleCloseModal(true);
417
+ } else if ('documentId' in state.confirmDialogIntent) {
418
+ dispatch({
419
+ type: 'GO_TO_RELATION',
420
+ payload: {
421
+ document: state.confirmDialogIntent,
422
+ shouldBypassConfirmation: true
423
+ }
306
424
  });
307
425
  }
426
+ };
427
+ return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
428
+ children: [
429
+ /*#__PURE__*/ jsxRuntime.jsx(RelationModalForm, {}),
430
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Root, {
431
+ open: state.confirmDialogIntent != null,
432
+ children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.ConfirmDialog, {
433
+ onConfirm: ()=>handleConfirm(),
434
+ onCancel: ()=>dispatch({
435
+ type: 'CANCEL_CONFIRM_DIALOG'
436
+ }),
437
+ variant: "danger",
438
+ children: formatMessage({
439
+ id: 'content-manager.components.RelationInputModal.confirmation-message',
440
+ defaultMessage: 'Some changes were not saved. Are you sure you want to close this relation? All changes that were not saved will be lost.'
441
+ })
442
+ })
443
+ })
444
+ ]
445
+ });
446
+ };
447
+ const RelationModalTrigger = ({ children, relation })=>{
448
+ const dispatch = useRelationModal('ModalTrigger', (state)=>state.dispatch);
449
+ return /*#__PURE__*/ jsxRuntime.jsx(StyledTextButton, {
450
+ onClick: ()=>{
451
+ dispatch({
452
+ type: 'GO_TO_RELATION',
453
+ payload: {
454
+ document: relation,
455
+ shouldBypassConfirmation: false
456
+ }
457
+ });
458
+ },
459
+ children: children
308
460
  });
309
461
  };
310
- const CustomTextButton = styledComponents.styled(designSystem.TextButton)`
462
+ const StyledTextButton = styledComponents.styled(designSystem.TextButton)`
463
+ max-width: 100%;
311
464
  & > span {
312
465
  font-size: ${({ theme })=>theme.fontSizes[2]};
313
466
  width: inherit;
@@ -316,20 +469,23 @@ const CustomTextButton = styledComponents.styled(designSystem.TextButton)`
316
469
  text-overflow: ellipsis;
317
470
  }
318
471
  `;
319
- const RelationModalBody = ({ children })=>{
472
+ /**
473
+ * The mini edit view for a relation that is displayed inside a modal.
474
+ * It's complete with its header, document actions and form layout.
475
+ */ const RelationModalForm = ()=>{
320
476
  const { formatMessage } = reactIntl.useIntl();
321
- const documentMeta = DocumentContext.useDocumentContext('RelationModalBody', (state)=>state.meta);
322
- const documentResponse = DocumentContext.useDocumentContext('RelationModalBody', (state)=>state.document);
323
- const onPreview = DocumentContext.useDocumentContext('RelationModalBody', (state)=>state.onPreview);
324
- const documentLayoutResponse = useDocumentLayout.useDocumentLayout(documentMeta.model);
325
- const plugins = strapiAdmin.useStrapiApp('RelationModalBody', (state)=>state.plugins);
326
- const initialValues = documentResponse.getInitialFormValues();
477
+ const currentDocumentMeta = useRelationModal('RelationModalForm', (state)=>state.currentDocumentMeta);
478
+ const isCreating = useRelationModal('RelationModalForm', (state)=>state.isCreating);
479
+ const currentDocument = useRelationModal('RelationModalForm', (state)=>state.currentDocument);
480
+ const documentLayoutResponse = useDocumentLayout.useDocumentLayout(currentDocumentMeta.model);
481
+ const plugins = strapiAdmin.useStrapiApp('RelationModalForm', (state)=>state.plugins);
482
+ const initialValues = isCreating ? currentDocument.getInitialFormValues(isCreating) : currentDocument.getInitialFormValues();
327
483
  const { permissions = [], isLoading: isLoadingPermissions, error } = strapiAdmin.useRBAC(plugin.PERMISSIONS.map((action)=>({
328
484
  action,
329
- subject: documentMeta.model
485
+ subject: currentDocumentMeta.model
330
486
  })));
331
- const isLoading = isLoadingPermissions || documentLayoutResponse.isLoading || documentResponse.isLoading;
332
- if (isLoading && !documentResponse.document?.documentId) {
487
+ const isLoading = isLoadingPermissions || documentLayoutResponse.isLoading || currentDocument.isLoading;
488
+ if (isLoading && !currentDocument.document?.documentId) {
333
489
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Loader, {
334
490
  small: true,
335
491
  children: formatMessage({
@@ -338,7 +494,7 @@ const RelationModalBody = ({ children })=>{
338
494
  })
339
495
  });
340
496
  }
341
- if (error || !documentMeta.model || documentLayoutResponse.error || !documentResponse.document || !documentResponse.meta || !documentResponse.schema || !initialValues) {
497
+ if (error || !currentDocumentMeta.model || documentLayoutResponse.error || !isCreating && !currentDocument.document || !isCreating && !currentDocument.meta || !currentDocument.schema || !initialValues) {
342
498
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
343
499
  alignItems: "center",
344
500
  height: "100%",
@@ -354,107 +510,101 @@ const RelationModalBody = ({ children })=>{
354
510
  })
355
511
  });
356
512
  }
357
- const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);
358
- const hasDraftAndPublished = documentResponse.schema?.options?.draftAndPublish ?? false;
513
+ const documentTitle = currentDocument.getTitle(documentLayoutResponse.edit.settings.mainField);
514
+ const hasDraftAndPublished = currentDocument.schema?.options?.draftAndPublish ?? false;
359
515
  const props = {
360
516
  activeTab: 'draft',
361
- collectionType: documentMeta.collectionType,
362
- model: documentMeta.model,
363
- documentId: documentMeta.documentId,
364
- document: documentResponse.document,
365
- meta: documentResponse.meta,
366
- onPreview,
367
- fromRelationModal: true,
368
- fromPreview: onPreview !== undefined
517
+ collectionType: currentDocumentMeta.collectionType,
518
+ model: currentDocumentMeta.model,
519
+ documentId: currentDocumentMeta.documentId,
520
+ document: currentDocument.document,
521
+ meta: currentDocument.meta
369
522
  };
370
- return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Body, {
371
- children: /*#__PURE__*/ jsxRuntime.jsxs(DocumentRBAC.DocumentRBAC, {
372
- permissions: permissions,
373
- model: documentMeta.model,
374
- children: [
375
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
376
- alignItems: "flex-start",
377
- direction: "column",
378
- gap: 2,
379
- children: [
380
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
381
- width: "100%",
382
- justifyContent: "space-between",
383
- gap: 2,
384
- children: [
385
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
386
- tag: "h2",
387
- variant: "alpha",
388
- children: documentTitle
389
- }),
390
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
391
- gap: 2,
392
- children: [
393
- children,
394
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.DescriptionComponentRenderer, {
395
- props: props,
396
- descriptions: plugins['content-manager'].apis.getDocumentActions('relation-modal'),
397
- children: (actions)=>{
398
- const filteredActions = actions.filter((action)=>{
399
- return [
400
- action.position
401
- ].flat().includes('relation-modal');
402
- });
403
- const [primaryAction, secondaryAction] = filteredActions;
404
- if (!primaryAction && !secondaryAction) return null;
405
- // Both actions are available when draft and publish enabled
406
- if (primaryAction && secondaryAction) {
407
- return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
408
- children: [
409
- /*#__PURE__*/ jsxRuntime.jsx(DocumentActions.DocumentActionButton, {
410
- ...secondaryAction,
411
- variant: secondaryAction.variant || 'secondary'
412
- }),
413
- /*#__PURE__*/ jsxRuntime.jsx(DocumentActions.DocumentActionButton, {
414
- ...primaryAction,
415
- variant: primaryAction.variant || 'default'
416
- })
417
- ]
418
- });
419
- }
420
- // Otherwise we just have the save action
421
- return /*#__PURE__*/ jsxRuntime.jsx(DocumentActions.DocumentActionButton, {
422
- ...primaryAction,
423
- variant: primaryAction.variant || 'secondary'
424
- });
425
- }
426
- })
427
- ]
523
+ return /*#__PURE__*/ jsxRuntime.jsxs(DocumentRBAC.DocumentRBAC, {
524
+ permissions: permissions,
525
+ model: currentDocumentMeta.model,
526
+ children: [
527
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
528
+ alignItems: "flex-start",
529
+ direction: "column",
530
+ gap: 2,
531
+ children: [
532
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
533
+ width: "100%",
534
+ justifyContent: "space-between",
535
+ gap: 2,
536
+ children: [
537
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
538
+ tag: "h2",
539
+ variant: "alpha",
540
+ children: documentTitle
541
+ }),
542
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
543
+ gap: 2,
544
+ children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.DescriptionComponentRenderer, {
545
+ props: props,
546
+ descriptions: plugins['content-manager'].apis.getDocumentActions('relation-modal'),
547
+ children: (actions)=>{
548
+ const filteredActions = actions.filter((action)=>{
549
+ return [
550
+ action.position
551
+ ].flat().includes('relation-modal');
552
+ });
553
+ const [primaryAction, secondaryAction] = filteredActions;
554
+ if (!primaryAction && !secondaryAction) return null;
555
+ // Both actions are available when draft and publish enabled
556
+ if (primaryAction && secondaryAction) {
557
+ return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
558
+ children: [
559
+ /*#__PURE__*/ jsxRuntime.jsx(DocumentActions.DocumentActionButton, {
560
+ ...secondaryAction,
561
+ variant: secondaryAction.variant || 'secondary'
562
+ }),
563
+ /*#__PURE__*/ jsxRuntime.jsx(DocumentActions.DocumentActionButton, {
564
+ ...primaryAction,
565
+ variant: primaryAction.variant || 'default'
566
+ })
567
+ ]
568
+ });
569
+ }
570
+ // Otherwise we just have the save action
571
+ return /*#__PURE__*/ jsxRuntime.jsx(DocumentActions.DocumentActionButton, {
572
+ ...primaryAction,
573
+ variant: primaryAction.variant || 'secondary'
574
+ });
575
+ }
428
576
  })
429
- ]
430
- }),
431
- hasDraftAndPublished ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
432
- children: /*#__PURE__*/ jsxRuntime.jsx(DocumentStatus.DocumentStatus, {
433
- status: documentResponse.document?.status
434
577
  })
435
- }) : null
436
- ]
437
- }),
438
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
439
- flex: 1,
440
- overflow: "auto",
441
- alignItems: "stretch",
442
- paddingTop: 7,
443
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
444
- overflow: "auto",
445
- flex: 1,
446
- children: /*#__PURE__*/ jsxRuntime.jsx(FormLayout.FormLayout, {
447
- layout: documentLayoutResponse.edit.layout,
448
- document: documentResponse,
449
- hasBackground: false
578
+ ]
579
+ }),
580
+ hasDraftAndPublished ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
581
+ children: /*#__PURE__*/ jsxRuntime.jsx(DocumentStatus.DocumentStatus, {
582
+ status: currentDocument.document?.status
450
583
  })
584
+ }) : null
585
+ ]
586
+ }),
587
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
588
+ flex: 1,
589
+ overflow: "auto",
590
+ alignItems: "stretch",
591
+ paddingTop: 7,
592
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
593
+ overflow: "auto",
594
+ flex: 1,
595
+ children: /*#__PURE__*/ jsxRuntime.jsx(FormLayout.FormLayout, {
596
+ layout: documentLayoutResponse.edit.layout,
597
+ document: currentDocument,
598
+ hasBackground: false
451
599
  })
452
600
  })
453
- ]
454
- })
601
+ })
602
+ ]
455
603
  });
456
604
  };
457
605
 
458
- exports.RelationModalForm = RelationModalForm;
606
+ exports.RelationModalRenderer = RelationModalRenderer;
459
607
  exports.getCollectionType = getCollectionType;
608
+ exports.reducer = reducer;
609
+ exports.useRelationModal = useRelationModal;
460
610
  //# sourceMappingURL=RelationModal.js.map