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