@strapi/content-manager 5.12.5 → 5.13.0-beta.0

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 (117) hide show
  1. package/dist/admin/hooks/useDocumentActions.js +5 -1
  2. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  3. package/dist/admin/hooks/useDocumentActions.mjs +5 -1
  4. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  5. package/dist/admin/hooks/useDocumentContext.js.map +1 -1
  6. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -1
  7. package/dist/admin/pages/EditView/components/DocumentActions.js +206 -21
  8. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  9. package/dist/admin/pages/EditView/components/DocumentActions.mjs +208 -23
  10. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  11. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +7 -12
  12. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  13. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +8 -13
  14. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  15. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
  16. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  17. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
  18. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  19. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +2 -0
  20. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  21. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +2 -0
  22. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  23. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +199 -137
  24. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  25. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +199 -137
  26. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  27. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +89 -50
  28. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +91 -52
  30. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
  32. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
  34. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  35. package/dist/admin/preview/components/PreviewHeader.js +1 -1
  36. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  37. package/dist/admin/preview/components/PreviewHeader.mjs +1 -1
  38. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  39. package/dist/admin/services/homepage.js +9 -5
  40. package/dist/admin/services/homepage.js.map +1 -1
  41. package/dist/admin/services/homepage.mjs +9 -5
  42. package/dist/admin/services/homepage.mjs.map +1 -1
  43. package/dist/admin/src/hooks/useDocumentContext.d.ts +1 -1
  44. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
  45. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +26 -5
  46. package/dist/admin/translations/en.json.js +2 -1
  47. package/dist/admin/translations/en.json.js.map +1 -1
  48. package/dist/admin/translations/en.json.mjs +2 -1
  49. package/dist/admin/translations/en.json.mjs.map +1 -1
  50. package/dist/server/controllers/index.js +3 -1
  51. package/dist/server/controllers/index.js.map +1 -1
  52. package/dist/server/controllers/index.mjs +3 -1
  53. package/dist/server/controllers/index.mjs.map +1 -1
  54. package/dist/server/homepage/controllers/homepage.js +57 -0
  55. package/dist/server/homepage/controllers/homepage.js.map +1 -0
  56. package/dist/server/homepage/controllers/homepage.mjs +36 -0
  57. package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
  58. package/dist/server/homepage/controllers/index.js +10 -0
  59. package/dist/server/homepage/controllers/index.js.map +1 -0
  60. package/dist/server/homepage/controllers/index.mjs +8 -0
  61. package/dist/server/homepage/controllers/index.mjs.map +1 -0
  62. package/dist/server/homepage/index.js +14 -0
  63. package/dist/server/homepage/index.js.map +1 -0
  64. package/dist/server/homepage/index.mjs +12 -0
  65. package/dist/server/homepage/index.mjs.map +1 -0
  66. package/dist/server/homepage/routes/homepage.js +25 -0
  67. package/dist/server/homepage/routes/homepage.js.map +1 -0
  68. package/dist/server/homepage/routes/homepage.mjs +23 -0
  69. package/dist/server/homepage/routes/homepage.mjs.map +1 -0
  70. package/dist/server/homepage/routes/index.js +13 -0
  71. package/dist/server/homepage/routes/index.js.map +1 -0
  72. package/dist/server/homepage/routes/index.mjs +11 -0
  73. package/dist/server/homepage/routes/index.mjs.map +1 -0
  74. package/dist/server/homepage/services/homepage.js +157 -0
  75. package/dist/server/homepage/services/homepage.js.map +1 -0
  76. package/dist/server/homepage/services/homepage.mjs +155 -0
  77. package/dist/server/homepage/services/homepage.mjs.map +1 -0
  78. package/dist/server/homepage/services/index.js +10 -0
  79. package/dist/server/homepage/services/index.js.map +1 -0
  80. package/dist/server/homepage/services/index.mjs +8 -0
  81. package/dist/server/homepage/services/index.mjs.map +1 -0
  82. package/dist/server/preview/services/preview.js +0 -1
  83. package/dist/server/preview/services/preview.js.map +1 -1
  84. package/dist/server/preview/services/preview.mjs +0 -1
  85. package/dist/server/preview/services/preview.mjs.map +1 -1
  86. package/dist/server/routes/index.js +3 -1
  87. package/dist/server/routes/index.js.map +1 -1
  88. package/dist/server/routes/index.mjs +3 -1
  89. package/dist/server/routes/index.mjs.map +1 -1
  90. package/dist/server/services/index.js +3 -1
  91. package/dist/server/services/index.js.map +1 -1
  92. package/dist/server/services/index.mjs +3 -1
  93. package/dist/server/services/index.mjs.map +1 -1
  94. package/dist/server/src/controllers/index.d.ts.map +1 -1
  95. package/dist/server/src/homepage/controllers/homepage.d.ts +7 -0
  96. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
  97. package/dist/server/src/homepage/controllers/index.d.ts +2 -0
  98. package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
  99. package/dist/server/src/homepage/index.d.ts +16 -0
  100. package/dist/server/src/homepage/index.d.ts.map +1 -0
  101. package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
  102. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
  103. package/dist/server/src/homepage/routes/index.d.ts +8 -0
  104. package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
  105. package/dist/server/src/{services → homepage/services}/homepage.d.ts +1 -1
  106. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
  107. package/dist/server/src/homepage/services/index.d.ts +9 -0
  108. package/dist/server/src/homepage/services/index.d.ts.map +1 -0
  109. package/dist/server/src/index.d.ts +7 -0
  110. package/dist/server/src/index.d.ts.map +1 -1
  111. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  112. package/dist/server/src/routes/index.d.ts +1 -0
  113. package/dist/server/src/routes/index.d.ts.map +1 -1
  114. package/dist/server/src/services/index.d.ts +6 -0
  115. package/dist/server/src/services/index.d.ts.map +1 -1
  116. package/package.json +7 -7
  117. package/dist/server/src/services/homepage.d.ts.map +0 -1
@@ -30,23 +30,37 @@ const StyledModalContent = styled(Modal.Content)`
30
30
  height: 90%;
31
31
  max-height: 100%;
32
32
  `;
33
+ const getFullPageUrl = (currentDocumentMeta)=>{
34
+ const isSingleType = currentDocumentMeta.collectionType === SINGLE_TYPES;
35
+ const queryParams = currentDocumentMeta.params?.locale ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}` : '';
36
+ return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}${isSingleType ? '' : '/' + currentDocumentMeta.documentId}${queryParams}`;
37
+ };
33
38
  function reducer(state, action) {
34
39
  switch(action.type){
35
40
  case 'GO_TO_RELATION':
36
41
  if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {
37
42
  return {
38
43
  ...state,
39
- confirmDialogIntent: action.payload.document
44
+ confirmDialogIntent: action.payload.document,
45
+ fieldToConnect: action.payload.fieldToConnect,
46
+ fieldToConnectUID: action.payload.fieldToConnectUID
40
47
  };
41
48
  }
49
+ const lastItemDocumentHistory = state.documentHistory.at(-1);
50
+ const hasToResetDocumentHistory = lastItemDocumentHistory && !lastItemDocumentHistory.documentId;
42
51
  return {
43
52
  ...state,
44
- documentHistory: [
53
+ // Reset document history if the last item has documentId undefined
54
+ documentHistory: hasToResetDocumentHistory ? [
55
+ action.payload.document
56
+ ] : [
45
57
  ...state.documentHistory,
46
58
  action.payload.document
47
59
  ],
48
60
  confirmDialogIntent: null,
49
- isModalOpen: true
61
+ isModalOpen: true,
62
+ fieldToConnect: hasToResetDocumentHistory ? undefined : action.payload.fieldToConnect,
63
+ fieldToConnectUID: hasToResetDocumentHistory ? undefined : action.payload.fieldToConnectUID
50
64
  };
51
65
  case 'GO_BACK':
52
66
  if (state.hasUnsavedChanges && !action.payload.shouldBypassConfirmation) {
@@ -74,6 +88,21 @@ function reducer(state, action) {
74
88
  isModalOpen: false,
75
89
  confirmDialogIntent: null
76
90
  };
91
+ case 'GO_TO_CREATED_RELATION':
92
+ return {
93
+ ...state,
94
+ // Reset document history if the last item has documentId undefined
95
+ documentHistory: state.documentHistory ? [
96
+ ...state.documentHistory.slice(0, -1),
97
+ action.payload.document
98
+ ] : [
99
+ action.payload.document
100
+ ],
101
+ confirmDialogIntent: null,
102
+ isModalOpen: true,
103
+ fieldToConnect: undefined,
104
+ fieldToConnectUID: undefined
105
+ };
77
106
  case 'CANCEL_CONFIRM_DIALOG':
78
107
  return {
79
108
  ...state,
@@ -103,21 +132,17 @@ function reducer(state, action) {
103
132
  }
104
133
  }
105
134
  const [RelationModalProvider, useRelationModal] = createContext('RelationModal');
106
- const getFullPageUrl = (currentDocumentMeta)=>{
107
- const isSingleType = currentDocumentMeta.collectionType === SINGLE_TYPES;
108
- const queryParams = currentDocumentMeta.params?.locale ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}` : '';
109
- return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}${isSingleType ? '' : '/' + currentDocumentMeta.documentId}${queryParams}`;
110
- };
111
- /**
112
- * Component responsible of rendering its children wrapped in a modal, form and context if needed
113
- */ const RelationModalRenderer = ({ children, trigger, relation })=>{
114
- const { formatMessage } = useIntl();
115
- const navigate = useNavigate();
135
+ function isRenderProp(children) {
136
+ return typeof children === 'function';
137
+ }
138
+ const RootRelationRenderer = (props)=>{
139
+ const { children } = props;
116
140
  const [state, dispatch] = React.useReducer(reducer, {
117
141
  documentHistory: [],
118
142
  confirmDialogIntent: null,
119
143
  isModalOpen: false,
120
- hasUnsavedChanges: false
144
+ hasUnsavedChanges: false,
145
+ fieldToConnect: undefined
121
146
  });
122
147
  const rootDocument = useDoc();
123
148
  const [{ query }] = useQueryParams();
@@ -132,11 +157,9 @@ const getFullPageUrl = (currentDocumentMeta)=>{
132
157
  };
133
158
  const currentDocumentMeta = state.documentHistory.at(-1) ?? rootDocumentMeta;
134
159
  const currentDocument = useDocument(currentDocumentMeta);
135
- const parentContextValue = useRelationModal('RelationContextWrapper', (state)=>state, false);
136
- // A parent relation is already rendering a modal. In this case simply render the trigger
137
- if (parentContextValue) {
138
- return trigger;
139
- }
160
+ // TODO: check if we can remove the single type check
161
+ const isSingleType = currentDocumentMeta.collectionType === SINGLE_TYPES;
162
+ const isCreating = !currentDocumentMeta.documentId && !isSingleType;
140
163
  /**
141
164
  * There is no parent relation, so the relation modal doesn't exist. Create it and set up all the
142
165
  * pieces that will be used by potential child relations: the context, header, form, and footer.
@@ -146,113 +169,156 @@ const getFullPageUrl = (currentDocumentMeta)=>{
146
169
  rootDocumentMeta: rootDocumentMeta,
147
170
  currentDocumentMeta: currentDocumentMeta,
148
171
  currentDocument: currentDocument,
149
- children: /*#__PURE__*/ jsxs(Modal.Root, {
150
- open: state.isModalOpen,
151
- onOpenChange: (open)=>{
152
- if (open) {
153
- dispatch({
154
- type: 'GO_TO_RELATION',
155
- payload: {
156
- document: relation,
157
- shouldBypassConfirmation: false
158
- }
159
- });
160
- } else {
161
- dispatch({
162
- type: 'CLOSE_MODAL',
163
- payload: {
164
- shouldBypassConfirmation: false
165
- }
166
- });
167
- }
168
- },
169
- children: [
170
- trigger,
171
- /*#__PURE__*/ jsxs(StyledModalContent, {
172
- children: [
173
- /*#__PURE__*/ jsx(Modal.Header, {
174
- gap: 2,
175
- children: /*#__PURE__*/ jsxs(Flex, {
176
- justifyContent: "space-between",
177
- alignItems: "center",
178
- width: "100%",
179
- children: [
180
- /*#__PURE__*/ jsxs(Flex, {
181
- gap: 2,
182
- children: [
183
- /*#__PURE__*/ jsx(IconButton, {
184
- withTooltip: false,
185
- label: formatMessage({
186
- id: 'global.back',
187
- defaultMessage: 'Back'
188
- }),
189
- variant: "ghost",
190
- disabled: state.documentHistory.length < 2,
191
- onClick: ()=>{
192
- dispatch({
193
- type: 'GO_BACK',
194
- payload: {
195
- shouldBypassConfirmation: false
196
- }
197
- });
198
- },
199
- marginRight: 1,
200
- children: /*#__PURE__*/ jsx(ArrowLeft, {})
172
+ isCreating: isCreating,
173
+ children: /*#__PURE__*/ jsx(RelationModal, {
174
+ children: isRenderProp(children) ? children({
175
+ dispatch
176
+ }) : props.relation && /*#__PURE__*/ jsx(RelationModalTrigger, {
177
+ relation: props.relation,
178
+ children: children
179
+ })
180
+ })
181
+ });
182
+ };
183
+ const NestedRelationRenderer = (props)=>{
184
+ const { children } = props;
185
+ const dispatch = useRelationModal('NestedRelation', (state)=>state.dispatch);
186
+ return isRenderProp(children) ? children({
187
+ dispatch
188
+ }) : props.relation && /*#__PURE__*/ jsx(RelationModalTrigger, {
189
+ relation: props.relation,
190
+ children: children
191
+ }); /* This is the trigger that will be rendered in the parent relation */
192
+ };
193
+ /**
194
+ * Component responsible for rendering its children wrapped in a modal, form and context if needed
195
+ */ const RelationModalRenderer = (props)=>{
196
+ // We're in a nested relation if the relation modal context is not undefined
197
+ const isNested = useRelationModal('RelationContextWrapper', (state)=>state != undefined, false);
198
+ return isNested ? /*#__PURE__*/ jsx(NestedRelationRenderer, {
199
+ ...props
200
+ }) : /*#__PURE__*/ jsx(RootRelationRenderer, {
201
+ ...props
202
+ });
203
+ };
204
+ /* -------------------------------------------------------------------------------------------------
205
+ * RelationModal
206
+ * -----------------------------------------------------------------------------------------------*/ const generateCreateUrl = (currentDocumentMeta)=>{
207
+ return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}/create${currentDocumentMeta.params?.locale ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}` : ''}`;
208
+ };
209
+ const RelationModal = ({ children })=>{
210
+ const { formatMessage } = useIntl();
211
+ const navigate = useNavigate();
212
+ const state = useRelationModal('RelationModalForm', (state)=>state.state);
213
+ const dispatch = useRelationModal('RelationModalForm', (state)=>state.dispatch);
214
+ const currentDocumentMeta = useRelationModal('RelationModalForm', (state)=>state.currentDocumentMeta);
215
+ const currentDocument = useRelationModal('RelationModalForm', (state)=>state.currentDocument);
216
+ const isCreating = useRelationModal('RelationModalForm', (state)=>state.isCreating);
217
+ return /*#__PURE__*/ jsxs(Modal.Root, {
218
+ open: state.isModalOpen,
219
+ onOpenChange: (open)=>{
220
+ if (!open) {
221
+ dispatch({
222
+ type: 'CLOSE_MODAL',
223
+ payload: {
224
+ shouldBypassConfirmation: false
225
+ }
226
+ });
227
+ }
228
+ },
229
+ children: [
230
+ children,
231
+ /*#__PURE__*/ jsxs(StyledModalContent, {
232
+ children: [
233
+ /*#__PURE__*/ jsx(Modal.Header, {
234
+ gap: 2,
235
+ children: /*#__PURE__*/ jsxs(Flex, {
236
+ justifyContent: "space-between",
237
+ alignItems: "center",
238
+ width: "100%",
239
+ children: [
240
+ /*#__PURE__*/ jsxs(Flex, {
241
+ gap: 2,
242
+ children: [
243
+ /*#__PURE__*/ jsx(IconButton, {
244
+ withTooltip: false,
245
+ label: formatMessage({
246
+ id: 'global.back',
247
+ defaultMessage: 'Back'
201
248
  }),
202
- /*#__PURE__*/ jsx(Typography, {
203
- tag: "span",
204
- fontWeight: 600,
205
- children: formatMessage({
206
- id: 'content-manager.components.RelationInputModal.modal-title',
207
- defaultMessage: 'Edit a relation'
208
- })
249
+ variant: "ghost",
250
+ disabled: state.documentHistory.length < 2,
251
+ onClick: ()=>{
252
+ dispatch({
253
+ type: 'GO_BACK',
254
+ payload: {
255
+ shouldBypassConfirmation: false
256
+ }
257
+ });
258
+ },
259
+ marginRight: 1,
260
+ children: /*#__PURE__*/ jsx(ArrowLeft, {})
261
+ }),
262
+ /*#__PURE__*/ jsx(Typography, {
263
+ tag: "span",
264
+ fontWeight: 600,
265
+ children: isCreating ? formatMessage({
266
+ id: 'content-manager.relation.create',
267
+ defaultMessage: 'Create a relation'
268
+ }) : formatMessage({
269
+ id: 'content-manager.components.RelationInputModal.modal-title',
270
+ defaultMessage: 'Edit a relation'
209
271
  })
210
- ]
211
- }),
212
- /*#__PURE__*/ jsx(IconButton, {
213
- onClick: ()=>{
214
- dispatch({
215
- type: 'GO_FULL_PAGE'
216
- });
217
- if (!state.hasUnsavedChanges) {
272
+ })
273
+ ]
274
+ }),
275
+ /*#__PURE__*/ jsx(IconButton, {
276
+ onClick: ()=>{
277
+ dispatch({
278
+ type: 'GO_FULL_PAGE'
279
+ });
280
+ if (!state.hasUnsavedChanges) {
281
+ if (isCreating) {
282
+ navigate(generateCreateUrl(currentDocumentMeta));
283
+ } else {
218
284
  navigate(getFullPageUrl(currentDocumentMeta));
219
285
  }
220
- },
221
- variant: "tertiary",
222
- label: formatMessage({
223
- id: 'content-manager.components.RelationInputModal.button-fullpage',
224
- defaultMessage: 'Go to entry'
225
- }),
226
- children: /*#__PURE__*/ jsx(ArrowsOut, {})
227
- })
228
- ]
229
- })
230
- }),
231
- /*#__PURE__*/ jsx(Modal.Body, {
232
- children: /*#__PURE__*/ jsx(Form, {
233
- method: "PUT",
234
- initialValues: currentDocument.getInitialFormValues(),
235
- validate: (values, options)=>{
236
- const yupSchema = createYupSchema(currentDocument.schema?.attributes, currentDocument.components, {
237
- status: currentDocument.document?.status,
238
- ...options
239
- });
240
- return yupSchema.validate(values, {
241
- abortEarly: false
242
- });
243
- },
244
- children: children
245
- })
286
+ }
287
+ },
288
+ variant: "tertiary",
289
+ label: formatMessage({
290
+ id: 'content-manager.components.RelationInputModal.button-fullpage',
291
+ defaultMessage: 'Go to entry'
292
+ }),
293
+ children: /*#__PURE__*/ jsx(ArrowsOut, {})
294
+ })
295
+ ]
246
296
  })
247
- ]
248
- })
249
- ]
250
- })
297
+ }),
298
+ /*#__PURE__*/ jsx(Modal.Body, {
299
+ children: /*#__PURE__*/ jsx(Form, {
300
+ method: isCreating ? 'POST' : 'PUT',
301
+ initialValues: currentDocument.getInitialFormValues(isCreating),
302
+ validate: (values, options)=>{
303
+ const yupSchema = createYupSchema(currentDocument.schema?.attributes, currentDocument.components, {
304
+ status: currentDocument.document?.status,
305
+ ...options
306
+ });
307
+ return yupSchema.validate(values, {
308
+ abortEarly: false
309
+ });
310
+ },
311
+ children: /*#__PURE__*/ jsx(RelationModalBody, {})
312
+ })
313
+ })
314
+ ]
315
+ })
316
+ ]
251
317
  });
252
318
  };
253
319
  /**
254
320
  * All the main content (not header and footer) of the relation modal, plus the confirmation dialog.
255
- * Will be wrapped in a Modal.Body by the RelationModalRenderer.
321
+ * Will be wrapped in a Modal.Body by the RelationModal component.
256
322
  * Cannot be moved directly inside RelationModal because it needs access to the context via hooks.
257
323
  */ const RelationModalBody = ()=>{
258
324
  const navigate = useNavigate();
@@ -263,6 +329,7 @@ const getFullPageUrl = (currentDocumentMeta)=>{
263
329
  const dispatch = useRelationModal('RelationModalForm', (state)=>state.dispatch);
264
330
  const rootDocumentMeta = useRelationModal('RelationModalForm', (state)=>state.rootDocumentMeta);
265
331
  const currentDocumentMeta = useRelationModal('RelationModalForm', (state)=>state.currentDocumentMeta);
332
+ const isCreating = useRelationModal('RelationModalForm', (state)=>state.isCreating);
266
333
  /**
267
334
  * One-way sync the modified state from the form to the modal state.
268
335
  * It is needed because we need to consume state from the form context in order to lift it up
@@ -304,7 +371,11 @@ const getFullPageUrl = (currentDocumentMeta)=>{
304
371
  if (isRootDocumentUrl) {
305
372
  handleCloseModal(true);
306
373
  } else {
307
- navigate(fullPageUrl);
374
+ if (isCreating) {
375
+ navigate(generateCreateUrl(currentDocumentMeta));
376
+ } else {
377
+ navigate(fullPageUrl);
378
+ }
308
379
  }
309
380
  };
310
381
  const handleConfirm = ()=>{
@@ -334,7 +405,7 @@ const getFullPageUrl = (currentDocumentMeta)=>{
334
405
  };
335
406
  return /*#__PURE__*/ jsxs(Fragment, {
336
407
  children: [
337
- /*#__PURE__*/ jsx(RelationEditView, {}),
408
+ /*#__PURE__*/ jsx(RelationModalForm, {}),
338
409
  /*#__PURE__*/ jsx(Dialog.Root, {
339
410
  open: state.confirmDialogIntent != null,
340
411
  children: /*#__PURE__*/ jsx(ConfirmDialog, {
@@ -352,7 +423,7 @@ const getFullPageUrl = (currentDocumentMeta)=>{
352
423
  ]
353
424
  });
354
425
  };
355
- const ModalTrigger = ({ children, relation })=>{
426
+ const RelationModalTrigger = ({ children, relation })=>{
356
427
  const dispatch = useRelationModal('ModalTrigger', (state)=>state.dispatch);
357
428
  return /*#__PURE__*/ jsx(StyledTextButton, {
358
429
  onClick: ()=>{
@@ -367,16 +438,6 @@ const ModalTrigger = ({ children, relation })=>{
367
438
  children: children
368
439
  });
369
440
  };
370
- const RelationModal = /*#__PURE__*/ React.memo(({ relation, children })=>{
371
- return /*#__PURE__*/ jsx(RelationModalRenderer, {
372
- relation: relation,
373
- trigger: /*#__PURE__*/ jsx(ModalTrigger, {
374
- relation: relation,
375
- children: children
376
- }),
377
- children: /*#__PURE__*/ jsx(RelationModalBody, {})
378
- });
379
- });
380
441
  const StyledTextButton = styled(TextButton)`
381
442
  max-width: 100%;
382
443
  & > span {
@@ -390,13 +451,14 @@ const StyledTextButton = styled(TextButton)`
390
451
  /**
391
452
  * The mini edit view for a relation that is displayed inside a modal.
392
453
  * It's complete with its header, document actions and form layout.
393
- */ const RelationEditView = ()=>{
454
+ */ const RelationModalForm = ()=>{
394
455
  const { formatMessage } = useIntl();
395
- const currentDocumentMeta = useRelationModal('RelationModalBody', (state)=>state.currentDocumentMeta);
396
- const currentDocument = useRelationModal('RelationModalBody', (state)=>state.currentDocument);
456
+ const currentDocumentMeta = useRelationModal('RelationModalForm', (state)=>state.currentDocumentMeta);
457
+ const isCreating = useRelationModal('RelationModalForm', (state)=>state.isCreating);
458
+ const currentDocument = useRelationModal('RelationModalForm', (state)=>state.currentDocument);
397
459
  const documentLayoutResponse = useDocumentLayout(currentDocumentMeta.model);
398
- const plugins = useStrapiApp('RelationModalBody', (state)=>state.plugins);
399
- const initialValues = currentDocument.getInitialFormValues();
460
+ const plugins = useStrapiApp('RelationModalForm', (state)=>state.plugins);
461
+ const initialValues = isCreating ? currentDocument.getInitialFormValues(isCreating) : currentDocument.getInitialFormValues();
400
462
  const { permissions = [], isLoading: isLoadingPermissions, error } = useRBAC(PERMISSIONS.map((action)=>({
401
463
  action,
402
464
  subject: currentDocumentMeta.model
@@ -411,7 +473,7 @@ const StyledTextButton = styled(TextButton)`
411
473
  })
412
474
  });
413
475
  }
414
- if (error || !currentDocumentMeta.model || documentLayoutResponse.error || !currentDocument.document || !currentDocument.meta || !currentDocument.schema || !initialValues) {
476
+ if (error || !currentDocumentMeta.model || documentLayoutResponse.error || !isCreating && !currentDocument.document || !isCreating && !currentDocument.meta || !currentDocument.schema || !initialValues) {
415
477
  return /*#__PURE__*/ jsx(Flex, {
416
478
  alignItems: "center",
417
479
  height: "100%",
@@ -520,5 +582,5 @@ const StyledTextButton = styled(TextButton)`
520
582
  });
521
583
  };
522
584
 
523
- export { RelationModal, getCollectionType, reducer, useRelationModal };
585
+ export { RelationModalRenderer, getCollectionType, reducer, useRelationModal };
524
586
  //# sourceMappingURL=RelationModal.mjs.map