@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.
- package/dist/admin/components/DragPreviews/RelationDragPreview.js +1 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.mjs +1 -1
- package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -1
- package/dist/admin/components/LeftMenu.js +34 -30
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/LeftMenu.mjs +36 -32
- package/dist/admin/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/content-manager.js.map +1 -1
- package/dist/admin/content-manager.mjs.map +1 -1
- package/dist/admin/features/DocumentContext.js +71 -0
- package/dist/admin/features/DocumentContext.js.map +1 -0
- package/dist/admin/features/DocumentContext.mjs +49 -0
- package/dist/admin/features/DocumentContext.mjs.map +1 -0
- package/dist/admin/features/DocumentRBAC.js +7 -6
- package/dist/admin/features/DocumentRBAC.js.map +1 -1
- package/dist/admin/features/DocumentRBAC.mjs +7 -6
- package/dist/admin/features/DocumentRBAC.mjs.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
- package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
- package/dist/admin/history/pages/History.js +9 -1
- package/dist/admin/history/pages/History.js.map +1 -1
- package/dist/admin/history/pages/History.mjs +9 -1
- package/dist/admin/history/pages/History.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentActions.js +12 -3
- package/dist/admin/hooks/useDocumentActions.js.map +1 -1
- package/dist/admin/hooks/useDocumentActions.mjs +12 -3
- package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +95 -84
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +95 -84
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +26 -11
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +26 -11
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentStatus.js +1 -2
- package/dist/admin/pages/EditView/components/DocumentStatus.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentStatus.mjs +1 -2
- package/dist/admin/pages/EditView/components/DocumentStatus.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +4 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +4 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +5 -3
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +5 -3
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +17 -8
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +17 -8
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +16 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +17 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +3 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +460 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +438 -0
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/{Relations.js → Relations/Relations.js} +65 -42
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/{Relations.mjs → Relations/Relations.mjs} +66 -43
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -0
- package/dist/admin/pages/EditView/components/FormLayout.js +20 -13
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +20 -13
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +35 -8
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +18 -10
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +41 -0
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +42 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.js +0 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +0 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
- package/dist/admin/preview/components/PreviewHeader.js +5 -77
- package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
- package/dist/admin/preview/components/PreviewHeader.mjs +7 -78
- package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
- package/dist/admin/preview/pages/Preview.js +47 -39
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +48 -40
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/services/documents.js +16 -0
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs +16 -0
- package/dist/admin/services/documents.mjs.map +1 -1
- package/dist/admin/src/content-manager.d.ts +2 -0
- package/dist/admin/src/features/DocumentContext.d.ts +53 -0
- package/dist/admin/src/features/DocumentRBAC.d.ts +3 -2
- package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +8 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/{Relations.d.ts → Relations/Relations.d.ts} +8 -2
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +8 -3
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +7 -4
- package/dist/admin/src/preview/components/PreviewHeader.d.ts +1 -2
- package/dist/admin/src/preview/pages/Preview.d.ts +0 -2
- package/dist/admin/translations/en.json.js +3 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +3 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/zh-Hans.json.js +2 -1
- package/dist/admin/translations/zh-Hans.json.js.map +1 -1
- package/dist/admin/translations/zh-Hans.json.mjs +2 -1
- package/dist/admin/translations/zh-Hans.json.mjs.map +1 -1
- package/dist/server/src/index.d.ts +1 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/data-mapper.d.ts +1 -0
- package/dist/server/src/services/data-mapper.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +1 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/package.json +8 -8
- package/dist/admin/pages/EditView/components/FormInputs/Relations.js.map +0 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations.mjs.map +0 -1
- package/dist/admin/preview/components/PreviewContent.js +0 -25
- package/dist/admin/preview/components/PreviewContent.js.map +0 -1
- package/dist/admin/preview/components/PreviewContent.mjs +0 -23
- package/dist/admin/preview/components/PreviewContent.mjs.map +0 -1
- 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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"}
|