@strapi/content-manager 0.0.0-experimental.6b93a97ac754785f7894c17263d3b4fd5272454a → 0.0.0-experimental.6cc8ff695218d5a391739344d308dfb3683215c1

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 (133) hide show
  1. package/dist/admin/components/DragPreviews/RelationDragPreview.js +1 -1
  2. package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -1
  3. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs +1 -1
  4. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -1
  5. package/dist/admin/components/LeftMenu.js +34 -30
  6. package/dist/admin/components/LeftMenu.js.map +1 -1
  7. package/dist/admin/components/LeftMenu.mjs +36 -32
  8. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  9. package/dist/admin/content-manager.js.map +1 -1
  10. package/dist/admin/content-manager.mjs.map +1 -1
  11. package/dist/admin/features/DocumentContext.js +71 -0
  12. package/dist/admin/features/DocumentContext.js.map +1 -0
  13. package/dist/admin/features/DocumentContext.mjs +49 -0
  14. package/dist/admin/features/DocumentContext.mjs.map +1 -0
  15. package/dist/admin/features/DocumentRBAC.js +7 -6
  16. package/dist/admin/features/DocumentRBAC.js.map +1 -1
  17. package/dist/admin/features/DocumentRBAC.mjs +7 -6
  18. package/dist/admin/features/DocumentRBAC.mjs.map +1 -1
  19. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  20. package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
  21. package/dist/admin/history/pages/History.js +9 -1
  22. package/dist/admin/history/pages/History.js.map +1 -1
  23. package/dist/admin/history/pages/History.mjs +9 -1
  24. package/dist/admin/history/pages/History.mjs.map +1 -1
  25. package/dist/admin/hooks/useDocumentActions.js +12 -3
  26. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  27. package/dist/admin/hooks/useDocumentActions.mjs +12 -3
  28. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  29. package/dist/admin/pages/EditView/EditViewPage.js +95 -84
  30. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  31. package/dist/admin/pages/EditView/EditViewPage.mjs +95 -84
  32. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  33. package/dist/admin/pages/EditView/components/DocumentActions.js +26 -11
  34. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  35. package/dist/admin/pages/EditView/components/DocumentActions.mjs +26 -11
  36. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  37. package/dist/admin/pages/EditView/components/DocumentStatus.js +1 -2
  38. package/dist/admin/pages/EditView/components/DocumentStatus.js.map +1 -1
  39. package/dist/admin/pages/EditView/components/DocumentStatus.mjs +1 -2
  40. package/dist/admin/pages/EditView/components/DocumentStatus.mjs.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
  42. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
  44. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +4 -1
  46. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +4 -1
  48. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +5 -3
  50. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +5 -3
  52. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +17 -8
  54. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +17 -8
  56. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +16 -1
  58. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +17 -2
  60. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +3 -2
  62. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +3 -2
  64. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +460 -0
  66. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -0
  67. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +438 -0
  68. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -0
  69. package/dist/admin/pages/EditView/components/FormInputs/{Relations.js → Relations/Relations.js} +65 -42
  70. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -0
  71. package/dist/admin/pages/EditView/components/FormInputs/{Relations.mjs → Relations/Relations.mjs} +66 -43
  72. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -0
  73. package/dist/admin/pages/EditView/components/FormLayout.js +20 -13
  74. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormLayout.mjs +20 -13
  76. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  77. package/dist/admin/pages/EditView/components/InputRenderer.js +35 -8
  78. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  79. package/dist/admin/pages/EditView/components/InputRenderer.mjs +18 -10
  80. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  81. package/dist/admin/pages/ListView/ListViewPage.js +41 -0
  82. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  83. package/dist/admin/pages/ListView/ListViewPage.mjs +42 -1
  84. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  85. package/dist/admin/pages/ListView/components/TableCells/Relations.js +0 -1
  86. package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
  87. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +0 -1
  88. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
  89. package/dist/admin/preview/components/PreviewHeader.js +5 -77
  90. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  91. package/dist/admin/preview/components/PreviewHeader.mjs +7 -78
  92. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  93. package/dist/admin/preview/pages/Preview.js +47 -39
  94. package/dist/admin/preview/pages/Preview.js.map +1 -1
  95. package/dist/admin/preview/pages/Preview.mjs +48 -40
  96. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  97. package/dist/admin/services/documents.js +16 -0
  98. package/dist/admin/services/documents.js.map +1 -1
  99. package/dist/admin/services/documents.mjs +16 -0
  100. package/dist/admin/services/documents.mjs.map +1 -1
  101. package/dist/admin/src/content-manager.d.ts +2 -0
  102. package/dist/admin/src/features/DocumentContext.d.ts +53 -0
  103. package/dist/admin/src/features/DocumentRBAC.d.ts +3 -2
  104. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -1
  105. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
  106. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +8 -0
  107. package/dist/admin/src/pages/EditView/components/FormInputs/{Relations.d.ts → Relations/Relations.d.ts} +8 -2
  108. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +8 -3
  109. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +7 -4
  110. package/dist/admin/src/preview/components/PreviewHeader.d.ts +1 -2
  111. package/dist/admin/src/preview/pages/Preview.d.ts +0 -2
  112. package/dist/admin/translations/en.json.js +3 -0
  113. package/dist/admin/translations/en.json.js.map +1 -1
  114. package/dist/admin/translations/en.json.mjs +3 -0
  115. package/dist/admin/translations/en.json.mjs.map +1 -1
  116. package/dist/admin/translations/zh-Hans.json.js +2 -1
  117. package/dist/admin/translations/zh-Hans.json.js.map +1 -1
  118. package/dist/admin/translations/zh-Hans.json.mjs +2 -1
  119. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -1
  120. package/dist/server/src/index.d.ts +1 -0
  121. package/dist/server/src/index.d.ts.map +1 -1
  122. package/dist/server/src/services/data-mapper.d.ts +1 -0
  123. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  124. package/dist/server/src/services/index.d.ts +1 -0
  125. package/dist/server/src/services/index.d.ts.map +1 -1
  126. package/package.json +8 -8
  127. package/dist/admin/pages/EditView/components/FormInputs/Relations.js.map +0 -1
  128. package/dist/admin/pages/EditView/components/FormInputs/Relations.mjs.map +0 -1
  129. package/dist/admin/preview/components/PreviewContent.js +0 -25
  130. package/dist/admin/preview/components/PreviewContent.js.map +0 -1
  131. package/dist/admin/preview/components/PreviewContent.mjs +0 -23
  132. package/dist/admin/preview/components/PreviewContent.mjs.map +0 -1
  133. package/dist/admin/src/preview/components/PreviewContent.d.ts +0 -2
@@ -0,0 +1,438 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
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';
5
+ import { ArrowLeft, ArrowsOut, WarningCircle } from '@strapi/icons';
6
+ import { useIntl } from 'react-intl';
7
+ import { useNavigate, useLocation } from 'react-router-dom';
8
+ import { styled } from 'styled-components';
9
+ import { COLLECTION_TYPES, SINGLE_TYPES } from '../../../../../constants/collections.mjs';
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';
14
+ import { useLazyGetDocumentQuery } from '../../../../../services/documents.mjs';
15
+ import { createYupSchema } from '../../../../../utils/validation.mjs';
16
+ import { DocumentActionButton } from '../../DocumentActions.mjs';
17
+ import { DocumentStatus } from '../../DocumentStatus.mjs';
18
+ import { FormLayout } from '../../FormLayout.mjs';
19
+
20
+ function getCollectionType(url) {
21
+ const regex = new RegExp(`(${COLLECTION_TYPES}|${SINGLE_TYPES})`);
22
+ const match = url.match(regex);
23
+ return match ? match[1] : undefined;
24
+ }
25
+ const CustomModalContent = styled(Modal.Content)`
26
+ width: 90%;
27
+ max-width: 100%;
28
+ height: 90%;
29
+ max-height: 100%;
30
+ `;
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
77
+ };
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);
114
+ }
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);
119
+ }
120
+ handleToggleModal();
121
+ }
122
+ };
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
+ });
134
+ },
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,
141
+ 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",
238
+ label: formatMessage({
239
+ id: 'content-manager.components.RelationInputModal.button-fullpage',
240
+ defaultMessage: 'Go to entry'
241
+ }),
242
+ children: /*#__PURE__*/ jsx(ArrowsOut, {})
243
+ })
244
+ }),
245
+ /*#__PURE__*/ jsx(Modal.Footer, {
246
+ children: /*#__PURE__*/ jsx(Button, {
247
+ onClick: ()=>{
248
+ if (modified && !isSubmitting) {
249
+ setIsConfirmationOpen(true);
250
+ } else {
251
+ handleToggleModal();
252
+ }
253
+ },
254
+ variant: "tertiary",
255
+ children: formatMessage({
256
+ id: 'app.components.Button.cancel',
257
+ defaultMessage: 'Cancel'
258
+ })
259
+ })
260
+ })
261
+ ]
262
+ })
263
+ ]
264
+ }),
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();
273
+ },
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
+ })
282
+ })
283
+ })
284
+ ]
285
+ });
286
+ }
287
+ });
288
+ };
289
+ const CustomTextButton = styled(TextButton)`
290
+ & > span {
291
+ font-size: ${({ theme })=>theme.fontSizes[2]};
292
+ width: inherit;
293
+ overflow: hidden;
294
+ white-space: nowrap;
295
+ text-overflow: ellipsis;
296
+ }
297
+ `;
298
+ const RelationModalBody = ({ children })=>{
299
+ 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();
306
+ const { permissions = [], isLoading: isLoadingPermissions, error } = useRBAC(PERMISSIONS.map((action)=>({
307
+ action,
308
+ subject: documentMeta.model
309
+ })));
310
+ const isLoading = isLoadingPermissions || documentLayoutResponse.isLoading || documentResponse.isLoading;
311
+ if (isLoading && !documentResponse.document?.documentId) {
312
+ return /*#__PURE__*/ jsx(Loader, {
313
+ small: true,
314
+ children: formatMessage({
315
+ id: 'content-manager.ListViewTable.relation-loading',
316
+ defaultMessage: 'Relations are loading'
317
+ })
318
+ });
319
+ }
320
+ if (error || !documentMeta.model || documentLayoutResponse.error || !documentResponse.document || !documentResponse.meta || !documentResponse.schema || !initialValues) {
321
+ return /*#__PURE__*/ jsx(Flex, {
322
+ alignItems: "center",
323
+ height: "100%",
324
+ justifyContent: "center",
325
+ children: /*#__PURE__*/ jsx(EmptyStateLayout, {
326
+ icon: /*#__PURE__*/ jsx(WarningCircle, {
327
+ width: "16rem"
328
+ }),
329
+ content: formatMessage({
330
+ id: 'anErrorOccurred',
331
+ defaultMessage: 'Whoops! Something went wrong. Please, try again.'
332
+ })
333
+ })
334
+ });
335
+ }
336
+ const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);
337
+ const hasDraftAndPublished = documentResponse.schema?.options?.draftAndPublish ?? false;
338
+ const props = {
339
+ 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
348
+ };
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
+ ]
407
+ })
408
+ ]
409
+ }),
410
+ hasDraftAndPublished ? /*#__PURE__*/ jsx(Box, {
411
+ children: /*#__PURE__*/ jsx(DocumentStatus, {
412
+ status: documentResponse.document?.status
413
+ })
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
429
+ })
430
+ })
431
+ })
432
+ ]
433
+ })
434
+ });
435
+ };
436
+
437
+ export { RelationModalForm, getCollectionType };
438
+ //# sourceMappingURL=RelationModal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationModal.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n ConfirmDialog,\n DescriptionComponentRenderer,\n Form as FormContext,\n useRBAC,\n useStrapiApp,\n createContext,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Button,\n Dialog,\n EmptyStateLayout,\n Flex,\n IconButton,\n Loader,\n Modal,\n Typography,\n Tooltip,\n TextButton,\n} from '@strapi/design-system';\nimport { ArrowLeft, ArrowsOut, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { COLLECTION_TYPES, SINGLE_TYPES } from '../../../../../constants/collections';\nimport { PERMISSIONS } from '../../../../../constants/plugin';\nimport { type DocumentMeta, useDocumentContext } from '../../../../../features/DocumentContext';\nimport { DocumentRBAC } from '../../../../../features/DocumentRBAC';\nimport { useDocumentLayout } from '../../../../../hooks/useDocumentLayout';\nimport { useLazyGetDocumentQuery } from '../../../../../services/documents';\nimport { createYupSchema } from '../../../../../utils/validation';\nimport { DocumentActionButton } from '../../../components/DocumentActions';\nimport { DocumentStatus } from '../../DocumentStatus';\nimport { FormLayout } from '../../FormLayout';\n\nimport type { ContentManagerPlugin, DocumentActionProps } from '../../../../../content-manager';\n\ninterface RelationModalProps {\n triggerButtonLabel: string;\n relation: DocumentMeta;\n}\n\nexport function getCollectionType(url: string) {\n const regex = new RegExp(`(${COLLECTION_TYPES}|${SINGLE_TYPES})`);\n const match = url.match(regex);\n return match ? match[1] : undefined;\n}\n\nconst CustomModalContent = styled(Modal.Content)`\n width: 90%;\n max-width: 100%;\n height: 90%;\n max-height: 100%;\n`;\n\ninterface RelationModalContextValue {\n parentModified: boolean;\n depth: number;\n}\n\nconst [RelationModalProvider, useRelationModal] = createContext<RelationModalContextValue>(\n 'RelationModal',\n {\n parentModified: false,\n depth: 0,\n }\n);\n\nconst RelationModalForm = ({ relation, triggerButtonLabel }: RelationModalProps) => {\n const navigate = useNavigate();\n const { pathname, search } = useLocation();\n const { formatMessage } = useIntl();\n\n const [triggerRefetchDocument] = useLazyGetDocumentQuery();\n\n const currentDocument = useDocumentContext('RelationModalForm', (state) => state.document);\n const rootDocumentMeta = useDocumentContext(\n 'RelationModalForm',\n (state) => state.rootDocumentMeta\n );\n const currentDocumentMeta = useDocumentContext('RelationModalForm', (state) => state.meta);\n const changeDocument = useDocumentContext('RelationModalForm', (state) => state.changeDocument);\n const documentHistory = useDocumentContext('RelationModalForm', (state) => state.documentHistory);\n const setDocumentHistory = useDocumentContext(\n 'RelationModalForm',\n (state) => state.setDocumentHistory\n );\n\n const [isConfirmationOpen, setIsConfirmationOpen] = React.useState(false);\n const [actionPosition, setActionPosition] = React.useState<'cancel' | 'back' | 'navigate'>(\n 'cancel'\n );\n\n const [isModalOpen, setIsModalOpen] = React.useState(false);\n // NOTE: Not sure about this relation modal context, maybe we should move this to DocumentContext?\n // Get parent modal context if it exists\n const parentContext = useRelationModal('RelationModalForm', (state) => state);\n // Get depth of nested modals\n const depth = parentContext ? parentContext.depth + 1 : 0;\n // Check if this is a nested modal\n const isNested = depth > 0;\n\n const addDocumentToHistory = (document: DocumentMeta) =>\n setDocumentHistory((prev) => [...prev, document]);\n\n const getPreviousDocument = () => {\n if (documentHistory.length === 0) return undefined;\n\n const lastDocument = documentHistory[documentHistory.length - 1];\n\n return lastDocument;\n };\n\n const removeLastDocumentFromHistory = () => {\n setDocumentHistory((prev) => [...prev].slice(0, prev.length - 1));\n };\n\n const handleToggleModal = () => {\n if (isModalOpen) {\n setIsModalOpen(false);\n const document = {\n collectionType: rootDocumentMeta.collectionType,\n model: rootDocumentMeta.model,\n documentId: rootDocumentMeta.documentId,\n };\n // Change back to the root document\n changeDocument(document);\n // Reset the document history\n setDocumentHistory([]);\n // Reset action position\n setActionPosition('cancel');\n // Read from cache or refetch root document\n triggerRefetchDocument(\n document,\n // Favor the cache\n true\n );\n } else {\n changeDocument(relation);\n setIsModalOpen(true);\n }\n };\n\n const getFullPageLink = (): string => {\n const isSingleType = currentDocumentMeta.collectionType === SINGLE_TYPES;\n const queryParams = currentDocumentMeta.params?.locale\n ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}`\n : '';\n\n return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}${isSingleType ? '' : '/' + currentDocumentMeta.documentId}${queryParams}`;\n };\n\n const handleRedirection = () => {\n const editViewUrl = `${pathname}${search}`;\n const isRootDocumentUrl = editViewUrl.includes(getFullPageLink());\n\n if (isRootDocumentUrl) {\n handleToggleModal();\n } else {\n navigate(getFullPageLink());\n }\n };\n\n const handleConfirm = () => {\n if (actionPosition === 'navigate') {\n handleRedirection();\n } else if (actionPosition === 'back') {\n const previousRelation = getPreviousDocument();\n if (previousRelation) {\n removeLastDocumentFromHistory();\n changeDocument(previousRelation);\n }\n } else {\n // Add current relation to history before opening a new one in case we are opening a new one\n if (currentDocumentMeta && Object.keys(currentDocumentMeta).length > 0) {\n addDocumentToHistory(currentDocumentMeta);\n }\n handleToggleModal();\n }\n };\n\n return (\n <FormContext\n method=\"PUT\"\n initialValues={currentDocument.getInitialFormValues()}\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(\n currentDocument.schema?.attributes,\n currentDocument.components,\n {\n status: currentDocument.document?.status,\n ...options,\n }\n );\n\n return yupSchema.validate(values, { abortEarly: false });\n }}\n >\n {({ modified, isSubmitting, resetForm }) => {\n // We don't count the root document, so history starts after 1\n const hasHistory = documentHistory.length > 1;\n\n return (\n <RelationModalProvider parentModified={modified} depth={depth}>\n <Modal.Root\n open={isModalOpen}\n onOpenChange={() => {\n if (isModalOpen) {\n if (modified && !isSubmitting) {\n setIsConfirmationOpen(true);\n } else {\n handleToggleModal();\n }\n }\n }}\n >\n <Modal.Trigger>\n <Tooltip description={triggerButtonLabel}>\n <CustomTextButton\n onClick={() => {\n // Check if parent modal has unsaved changes\n if (isNested && parentContext.parentModified) {\n setIsConfirmationOpen(true);\n // Return early to avoid opening the modal\n return;\n } else {\n if (modified && !isSubmitting) {\n setIsConfirmationOpen(true);\n } else {\n // Add current relation to history before opening a new one\n if (currentDocumentMeta && Object.keys(currentDocumentMeta).length > 0) {\n addDocumentToHistory(currentDocumentMeta);\n }\n handleToggleModal();\n }\n\n if (!isModalOpen) {\n setIsModalOpen(true);\n }\n }\n }}\n width=\"100%\"\n >\n {triggerButtonLabel}\n </CustomTextButton>\n </Tooltip>\n </Modal.Trigger>\n <CustomModalContent>\n <Modal.Header gap={2}>\n <Flex justifyContent=\"space-between\" alignItems=\"center\" width=\"100%\">\n <Flex gap={2}>\n <IconButton\n withTooltip={false}\n label=\"Back\"\n variant=\"ghost\"\n disabled={!hasHistory}\n onClick={() => {\n setActionPosition('back');\n if (modified && !isSubmitting) {\n setIsConfirmationOpen(true);\n } else {\n const previousRelation = getPreviousDocument();\n if (previousRelation) {\n removeLastDocumentFromHistory();\n changeDocument(previousRelation);\n }\n }\n }}\n marginRight={1}\n >\n <ArrowLeft />\n </IconButton>\n <Typography tag=\"span\" fontWeight={600}>\n {formatMessage({\n id: 'content-manager.components.RelationInputModal.modal-title',\n defaultMessage: 'Edit a relation',\n })}\n </Typography>\n </Flex>\n </Flex>\n </Modal.Header>\n <RelationModalBody>\n <IconButton\n onClick={() => {\n setActionPosition('navigate');\n\n if (modified && !isSubmitting) {\n setIsConfirmationOpen(true);\n } else {\n navigate(getFullPageLink());\n }\n }}\n variant=\"tertiary\"\n label={formatMessage({\n id: 'content-manager.components.RelationInputModal.button-fullpage',\n defaultMessage: 'Go to entry',\n })}\n >\n <ArrowsOut />\n </IconButton>\n </RelationModalBody>\n <Modal.Footer>\n <Button\n onClick={() => {\n if (modified && !isSubmitting) {\n setIsConfirmationOpen(true);\n } else {\n handleToggleModal();\n }\n }}\n variant=\"tertiary\"\n >\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n </Modal.Footer>\n </CustomModalContent>\n </Modal.Root>\n <Dialog.Root open={isConfirmationOpen} onOpenChange={setIsConfirmationOpen}>\n <ConfirmDialog\n onConfirm={() => {\n handleConfirm();\n setIsConfirmationOpen(false);\n resetForm();\n }}\n onCancel={() => {\n setIsConfirmationOpen(false);\n }}\n variant=\"danger\"\n >\n {formatMessage({\n id: 'content-manager.components.RelationInputModal.confirmation-message',\n defaultMessage:\n 'Some changes were not saved. Are you sure you want to close this relation? All changes that were not saved will be lost.',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n </RelationModalProvider>\n );\n }}\n </FormContext>\n );\n};\n\nconst CustomTextButton = styled(TextButton)`\n & > span {\n font-size: ${({ theme }) => theme.fontSizes[2]};\n width: inherit;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n`;\n\ninterface RelationModalBodyProps {\n /**\n * Additional modal actions such as \"Open in full page\"\n */\n children: React.ReactNode;\n}\n\nconst RelationModalBody = ({ children }: RelationModalBodyProps) => {\n const { formatMessage } = useIntl();\n\n const documentMeta = useDocumentContext('RelationModalBody', (state) => state.meta);\n const documentResponse = useDocumentContext('RelationModalBody', (state) => state.document);\n const onPreview = useDocumentContext('RelationModalBody', (state) => state.onPreview);\n const documentLayoutResponse = useDocumentLayout(documentMeta.model);\n const plugins = useStrapiApp('RelationModalBody', (state) => state.plugins);\n\n const initialValues = documentResponse.getInitialFormValues();\n\n const {\n permissions = [],\n isLoading: isLoadingPermissions,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: documentMeta.model,\n }))\n );\n\n const isLoading =\n isLoadingPermissions || documentLayoutResponse.isLoading || documentResponse.isLoading;\n if (isLoading && !documentResponse.document?.documentId) {\n return (\n <Loader small>\n {formatMessage({\n id: 'content-manager.ListViewTable.relation-loading',\n defaultMessage: 'Relations are loading',\n })}\n </Loader>\n );\n }\n\n if (\n error ||\n !documentMeta.model ||\n documentLayoutResponse.error ||\n !documentResponse.document ||\n !documentResponse.meta ||\n !documentResponse.schema ||\n !initialValues\n ) {\n return (\n <Flex alignItems=\"center\" height=\"100%\" justifyContent=\"center\">\n <EmptyStateLayout\n icon={<WarningCircle width=\"16rem\" />}\n content={formatMessage({\n id: 'anErrorOccurred',\n defaultMessage: 'Whoops! Something went wrong. Please, try again.',\n })}\n />\n </Flex>\n );\n }\n\n const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);\n const hasDraftAndPublished = documentResponse.schema?.options?.draftAndPublish ?? false;\n\n const props = {\n activeTab: 'draft',\n collectionType: documentMeta.collectionType,\n model: documentMeta.model,\n documentId: documentMeta.documentId,\n document: documentResponse.document,\n meta: documentResponse.meta,\n onPreview,\n fromRelationModal: true,\n fromPreview: onPreview !== undefined,\n } satisfies DocumentActionProps;\n\n return (\n <Modal.Body>\n <DocumentRBAC permissions={permissions} model={documentMeta.model}>\n <Flex alignItems=\"flex-start\" direction=\"column\" gap={2}>\n <Flex width=\"100%\" justifyContent=\"space-between\" gap={2}>\n <Typography tag=\"h2\" variant=\"alpha\">\n {documentTitle}\n </Typography>\n <Flex gap={2}>\n {children}\n <DescriptionComponentRenderer\n props={props}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('relation-modal')}\n >\n {(actions) => {\n const filteredActions = actions.filter((action) => {\n return [action.position].flat().includes('relation-modal');\n });\n const [primaryAction, secondaryAction] = filteredActions;\n\n if (!primaryAction && !secondaryAction) return null;\n\n // Both actions are available when draft and publish enabled\n if (primaryAction && secondaryAction) {\n return (\n <>\n {/* Save */}\n <DocumentActionButton\n {...secondaryAction}\n variant={secondaryAction.variant || 'secondary'}\n />\n {/* Publish */}\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'default'}\n />\n </>\n );\n }\n\n // Otherwise we just have the save action\n return (\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'secondary'}\n />\n );\n }}\n </DescriptionComponentRenderer>\n </Flex>\n </Flex>\n {hasDraftAndPublished ? (\n <Box>\n <DocumentStatus status={documentResponse.document?.status} />\n </Box>\n ) : null}\n </Flex>\n\n <Flex flex={1} overflow=\"auto\" alignItems=\"stretch\" paddingTop={7}>\n <Box overflow=\"auto\" flex={1}>\n <FormLayout\n layout={documentLayoutResponse.edit.layout}\n document={documentResponse}\n hasBackground={false}\n />\n </Box>\n </Flex>\n </DocumentRBAC>\n </Modal.Body>\n );\n};\n\nexport { RelationModalForm };\n"],"names":["getCollectionType","url","regex","RegExp","COLLECTION_TYPES","SINGLE_TYPES","match","undefined","CustomModalContent","styled","Modal","Content","RelationModalProvider","useRelationModal","createContext","parentModified","depth","RelationModalForm","relation","triggerButtonLabel","navigate","useNavigate","pathname","search","useLocation","formatMessage","useIntl","triggerRefetchDocument","useLazyGetDocumentQuery","currentDocument","useDocumentContext","state","document","rootDocumentMeta","currentDocumentMeta","meta","changeDocument","documentHistory","setDocumentHistory","isConfirmationOpen","setIsConfirmationOpen","React","useState","actionPosition","setActionPosition","isModalOpen","setIsModalOpen","parentContext","isNested","addDocumentToHistory","prev","getPreviousDocument","length","lastDocument","removeLastDocumentFromHistory","slice","handleToggleModal","collectionType","model","documentId","getFullPageLink","isSingleType","queryParams","params","locale","handleRedirection","editViewUrl","isRootDocumentUrl","includes","handleConfirm","previousRelation","Object","keys","_jsx","FormContext","method","initialValues","getInitialFormValues","validate","values","options","yupSchema","createYupSchema","schema","attributes","components","status","abortEarly","modified","isSubmitting","resetForm","hasHistory","_jsxs","Root","open","onOpenChange","Trigger","Tooltip","description","CustomTextButton","onClick","width","Header","gap","Flex","justifyContent","alignItems","IconButton","withTooltip","label","variant","disabled","marginRight","ArrowLeft","Typography","tag","fontWeight","id","defaultMessage","RelationModalBody","ArrowsOut","Footer","Button","Dialog","ConfirmDialog","onConfirm","onCancel","TextButton","theme","fontSizes","children","documentMeta","documentResponse","onPreview","documentLayoutResponse","useDocumentLayout","plugins","useStrapiApp","permissions","isLoading","isLoadingPermissions","error","useRBAC","PERMISSIONS","map","action","subject","Loader","small","height","EmptyStateLayout","icon","WarningCircle","content","documentTitle","getTitle","edit","settings","mainField","hasDraftAndPublished","draftAndPublish","props","activeTab","fromRelationModal","fromPreview","Body","DocumentRBAC","direction","DescriptionComponentRenderer","descriptions","apis","getDocumentActions","actions","filteredActions","filter","position","flat","primaryAction","secondaryAction","_Fragment","DocumentActionButton","Box","DocumentStatus","flex","overflow","paddingTop","FormLayout","layout","hasBackground"],"mappings":"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"}