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