@strapi/content-manager 0.0.0-experimental.e9303c99ae3c28b4b8421ab6971efae0748dd599 → 0.0.0-experimental.ea4dae06eba4c664d83b262ac7ba524f09357453
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/ConfigurationForm/Fields.js +300 -204
- package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Fields.mjs +304 -209
- package/dist/admin/components/ConfigurationForm/Fields.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/history/components/VersionContent.js +24 -3
- package/dist/admin/history/components/VersionContent.js.map +1 -1
- package/dist/admin/history/components/VersionContent.mjs +25 -4
- package/dist/admin/history/components/VersionContent.mjs.map +1 -1
- package/dist/admin/history/components/VersionHeader.js +6 -0
- package/dist/admin/history/components/VersionHeader.js.map +1 -1
- package/dist/admin/history/components/VersionHeader.mjs +7 -1
- package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentActions.js +12 -4
- package/dist/admin/hooks/useDocumentActions.js.map +1 -1
- package/dist/admin/hooks/useDocumentActions.mjs +12 -4
- package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentContext.js.map +1 -1
- package/dist/admin/hooks/useDocumentContext.mjs.map +1 -1
- package/dist/admin/index.js +1 -3
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +92 -75
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +93 -76
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +263 -75
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +266 -78
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +54 -14
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +55 -15
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +21 -35
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +21 -35
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +12 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +13 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +15 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +16 -3
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +18 -5
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +20 -7
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +128 -55
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +128 -55
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +120 -32
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +124 -36
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.js +4 -2
- package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +4 -2
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.js +47 -27
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +47 -27
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js +103 -0
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs +103 -1
- package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +77 -0
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +78 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +2 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +2 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.js +1 -0
- package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.mjs +1 -0
- package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.js +13 -3
- package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
- package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
- package/dist/admin/services/documents.js +2 -2
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs +2 -2
- package/dist/admin/services/documents.mjs.map +1 -1
- package/dist/admin/services/homepage.js +8 -4
- package/dist/admin/services/homepage.js.map +1 -1
- package/dist/admin/services/homepage.mjs +8 -4
- package/dist/admin/services/homepage.mjs.map +1 -1
- package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
- package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
- package/dist/admin/src/hooks/useDocumentContext.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +26 -5
- package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -8
- package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
- package/dist/admin/src/services/documents.d.ts +7 -1
- package/dist/admin/src/utils/validation.d.ts +1 -0
- package/dist/admin/translations/en.json.js +3 -1
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +3 -1
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/fr.json.js +6 -1
- package/dist/admin/translations/fr.json.js.map +1 -1
- package/dist/admin/translations/fr.json.mjs +6 -1
- package/dist/admin/translations/fr.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/admin/utils/validation.js +17 -6
- package/dist/admin/utils/validation.js.map +1 -1
- package/dist/admin/utils/validation.mjs +17 -6
- package/dist/admin/utils/validation.mjs.map +1 -1
- package/dist/server/controllers/content-types.js +11 -1
- package/dist/server/controllers/content-types.js.map +1 -1
- package/dist/server/controllers/content-types.mjs +11 -1
- package/dist/server/controllers/content-types.mjs.map +1 -1
- package/dist/server/controllers/relations.js +2 -2
- package/dist/server/controllers/relations.js.map +1 -1
- package/dist/server/controllers/relations.mjs +2 -2
- package/dist/server/controllers/relations.mjs.map +1 -1
- package/dist/server/controllers/validation/index.js +14 -2
- package/dist/server/controllers/validation/index.js.map +1 -1
- package/dist/server/controllers/validation/index.mjs +14 -2
- package/dist/server/controllers/validation/index.mjs.map +1 -1
- package/dist/server/history/services/lifecycles.js +3 -0
- package/dist/server/history/services/lifecycles.js.map +1 -1
- package/dist/server/history/services/lifecycles.mjs +3 -0
- package/dist/server/history/services/lifecycles.mjs.map +1 -1
- package/dist/server/services/data-mapper.js +4 -1
- package/dist/server/services/data-mapper.js.map +1 -1
- package/dist/server/services/data-mapper.mjs +4 -1
- package/dist/server/services/data-mapper.mjs.map +1 -1
- package/dist/server/services/document-manager.js +8 -1
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +8 -1
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/document-metadata.js +3 -1
- package/dist/server/services/document-metadata.js.map +1 -1
- package/dist/server/services/document-metadata.mjs +3 -1
- package/dist/server/services/document-metadata.mjs.map +1 -1
- package/dist/server/services/utils/configuration/attributes.js +1 -1
- package/dist/server/services/utils/configuration/attributes.js.map +1 -1
- package/dist/server/services/utils/configuration/attributes.mjs +1 -1
- package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
- package/dist/server/services/utils/configuration/layouts.js +1 -1
- package/dist/server/services/utils/configuration/layouts.js.map +1 -1
- package/dist/server/services/utils/configuration/layouts.mjs +1 -1
- package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
- package/dist/server/services/utils/configuration/metadatas.js +8 -0
- package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
- package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
- package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
- package/dist/server/services/utils/populate.js +11 -0
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs +11 -0
- package/dist/server/services/utils/populate.mjs.map +1 -1
- package/dist/server/src/controllers/content-types.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/index.d.ts +6 -1
- package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.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/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.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/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/dist/shared/contracts/collection-types.d.ts +0 -1
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/package.json +11 -8
|
@@ -6,9 +6,11 @@ var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
|
6
6
|
var designSystem = require('@strapi/design-system');
|
|
7
7
|
var Icons = require('@strapi/icons');
|
|
8
8
|
var mapValues = require('lodash/fp/mapValues');
|
|
9
|
+
var get = require('lodash/get');
|
|
10
|
+
var merge = require('lodash/merge');
|
|
11
|
+
var set = require('lodash/set');
|
|
9
12
|
var reactIntl = require('react-intl');
|
|
10
13
|
var reactRouterDom = require('react-router-dom');
|
|
11
|
-
var styledComponents = require('styled-components');
|
|
12
14
|
var attributes = require('../../../constants/attributes.js');
|
|
13
15
|
var collections = require('../../../constants/collections.js');
|
|
14
16
|
var DocumentRBAC = require('../../../features/DocumentRBAC.js');
|
|
@@ -20,6 +22,8 @@ var router = require('../../../router.js');
|
|
|
20
22
|
var documents = require('../../../services/documents.js');
|
|
21
23
|
var api = require('../../../utils/api.js');
|
|
22
24
|
var translations = require('../../../utils/translations.js');
|
|
25
|
+
var data = require('../utils/data.js');
|
|
26
|
+
var RelationModal = require('./FormInputs/Relations/RelationModal.js');
|
|
23
27
|
|
|
24
28
|
function _interopNamespaceDefault(e) {
|
|
25
29
|
var n = Object.create(null);
|
|
@@ -40,6 +44,38 @@ function _interopNamespaceDefault(e) {
|
|
|
40
44
|
|
|
41
45
|
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
42
46
|
|
|
47
|
+
const connectRelationToParent = (parentDataToUpdate, fieldToConnect, data, fieldToConnectUID)=>{
|
|
48
|
+
/*
|
|
49
|
+
* Check if the fieldToConnect is already present in the parentDataToUpdate.
|
|
50
|
+
* This happens in particular when in the parentDocument you have created
|
|
51
|
+
* a new component without saving.
|
|
52
|
+
*/ const isFieldPresent = !!get(parentDataToUpdate, fieldToConnect);
|
|
53
|
+
const fieldToConnectPath = isFieldPresent ? fieldToConnect : fieldToConnect.split('.').slice(0, -1).join('.');
|
|
54
|
+
const fieldToConnectValue = isFieldPresent ? {
|
|
55
|
+
connect: [
|
|
56
|
+
{
|
|
57
|
+
id: data.documentId,
|
|
58
|
+
documentId: data.documentId,
|
|
59
|
+
locale: data.locale
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
} : {
|
|
63
|
+
[fieldToConnect.split('.').pop()]: {
|
|
64
|
+
connect: [
|
|
65
|
+
{
|
|
66
|
+
id: data.documentId,
|
|
67
|
+
documentId: data.documentId,
|
|
68
|
+
locale: data.locale
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
disconnect: []
|
|
72
|
+
},
|
|
73
|
+
// In case the object was not present you need to pass the componentUID of the parent document
|
|
74
|
+
__component: fieldToConnectUID
|
|
75
|
+
};
|
|
76
|
+
const objectToConnect = set({}, fieldToConnectPath, fieldToConnectValue);
|
|
77
|
+
return merge(parentDataToUpdate, objectToConnect);
|
|
78
|
+
};
|
|
43
79
|
const DocumentActions = ({ actions })=>{
|
|
44
80
|
const { formatMessage } = reactIntl.useIntl();
|
|
45
81
|
const [primaryAction, secondaryAction, ...restActions] = actions.filter((action)=>{
|
|
@@ -138,11 +174,6 @@ const DocumentActionButton = (action)=>{
|
|
|
138
174
|
]
|
|
139
175
|
});
|
|
140
176
|
};
|
|
141
|
-
const MenuItem = styledComponents.styled(designSystem.Menu.Item)`
|
|
142
|
-
&:hover {
|
|
143
|
-
background: ${({ theme, isVariantDanger, isDisabled })=>isVariantDanger && !isDisabled ? theme.colors.danger100 : 'neutral'};
|
|
144
|
-
}
|
|
145
|
-
`;
|
|
146
177
|
const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })=>{
|
|
147
178
|
const [isOpen, setIsOpen] = React__namespace.useState(false);
|
|
148
179
|
const [dialogId, setDialogId] = React__namespace.useState(null);
|
|
@@ -204,27 +235,19 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
|
|
|
204
235
|
popoverPlacement: "bottom-end",
|
|
205
236
|
children: [
|
|
206
237
|
actions.map((action)=>{
|
|
207
|
-
return /*#__PURE__*/ jsxRuntime.jsx(
|
|
238
|
+
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Item, {
|
|
208
239
|
disabled: action.disabled,
|
|
209
240
|
/* @ts-expect-error – TODO: this is an error in the DS where it is most likely a synthetic event, not regular. */ onSelect: handleClick(action),
|
|
210
241
|
display: "block",
|
|
211
|
-
|
|
212
|
-
|
|
242
|
+
variant: action.variant === 'danger' ? action.variant : 'default',
|
|
243
|
+
startIcon: action.icon,
|
|
213
244
|
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
214
245
|
justifyContent: "space-between",
|
|
215
246
|
gap: 4,
|
|
216
|
-
children: /*#__PURE__*/ jsxRuntime.
|
|
217
|
-
color: !action.disabled ? convertActionVariantToColor(action.variant) : 'inherit',
|
|
247
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
218
248
|
gap: 2,
|
|
219
249
|
tag: "span",
|
|
220
|
-
children:
|
|
221
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
222
|
-
tag: "span",
|
|
223
|
-
color: !action.disabled ? convertActionVariantToIconColor(action.variant) : 'inherit',
|
|
224
|
-
children: action.icon
|
|
225
|
-
}),
|
|
226
|
-
action.label
|
|
227
|
-
]
|
|
250
|
+
children: action.label
|
|
228
251
|
})
|
|
229
252
|
})
|
|
230
253
|
}, action.id);
|
|
@@ -252,30 +275,6 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
|
|
|
252
275
|
]
|
|
253
276
|
});
|
|
254
277
|
};
|
|
255
|
-
const convertActionVariantToColor = (variant = 'secondary')=>{
|
|
256
|
-
switch(variant){
|
|
257
|
-
case 'danger':
|
|
258
|
-
return 'danger600';
|
|
259
|
-
case 'secondary':
|
|
260
|
-
return undefined;
|
|
261
|
-
case 'success':
|
|
262
|
-
return 'success600';
|
|
263
|
-
default:
|
|
264
|
-
return 'primary600';
|
|
265
|
-
}
|
|
266
|
-
};
|
|
267
|
-
const convertActionVariantToIconColor = (variant = 'secondary')=>{
|
|
268
|
-
switch(variant){
|
|
269
|
-
case 'danger':
|
|
270
|
-
return 'danger600';
|
|
271
|
-
case 'secondary':
|
|
272
|
-
return 'neutral500';
|
|
273
|
-
case 'success':
|
|
274
|
-
return 'success600';
|
|
275
|
-
default:
|
|
276
|
-
return 'primary600';
|
|
277
|
-
}
|
|
278
|
-
};
|
|
279
278
|
const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, content, isOpen, variant = 'secondary', loading })=>{
|
|
280
279
|
const { formatMessage } = reactIntl.useIntl();
|
|
281
280
|
const handleClose = async ()=>{
|
|
@@ -381,7 +380,10 @@ const transformData = (data)=>{
|
|
|
381
380
|
const isCloning = reactRouterDom.useMatch(router.CLONE_PATH) !== null;
|
|
382
381
|
const { id } = reactRouterDom.useParams();
|
|
383
382
|
const { formatMessage } = reactIntl.useIntl();
|
|
384
|
-
const canPublish = DocumentRBAC.useDocumentRBAC('PublishAction', ({ canPublish })=>
|
|
383
|
+
const { canPublish, canReadFields } = DocumentRBAC.useDocumentRBAC('PublishAction', ({ canPublish, canReadFields })=>({
|
|
384
|
+
canPublish,
|
|
385
|
+
canReadFields
|
|
386
|
+
}));
|
|
385
387
|
const { publish, isLoading } = useDocumentActions.useDocumentActions();
|
|
386
388
|
const onPreview = Preview.usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
|
|
387
389
|
const [countDraftRelations, { isLoading: isLoadingDraftRelations, isError: isErrorDraftRelations }] = documents.useGetDraftRelationCountQuery();
|
|
@@ -395,7 +397,18 @@ const transformData = (data)=>{
|
|
|
395
397
|
const setErrors = strapiAdmin.useForm('PublishAction', (state)=>state.setErrors);
|
|
396
398
|
const formValues = strapiAdmin.useForm('PublishAction', ({ values })=>values);
|
|
397
399
|
const resetForm = strapiAdmin.useForm('PublishAction', ({ resetForm })=>resetForm);
|
|
400
|
+
const { currentDocument: { components } } = useDocumentContext.useDocumentContext('PublishAction');
|
|
401
|
+
// need to discriminate if the publish is coming from a relation modal or in the edit view
|
|
402
|
+
const relationContext = RelationModal.useRelationModal('PublishAction', ()=>true, false);
|
|
403
|
+
const fromRelationModal = relationContext != undefined;
|
|
404
|
+
const dispatch = RelationModal.useRelationModal('PublishAction', (state)=>state.dispatch);
|
|
405
|
+
const fieldToConnect = RelationModal.useRelationModal('PublishAction', (state)=>state.state.fieldToConnect, false);
|
|
406
|
+
const fieldToConnectUID = RelationModal.useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
|
|
407
|
+
const documentHistory = RelationModal.useRelationModal('PublishAction', (state)=>state.state.documentHistory, false);
|
|
408
|
+
const rootDocumentMeta = RelationModal.useRelationModal('PublishAction', (state)=>state.rootDocumentMeta);
|
|
398
409
|
const { currentDocumentMeta } = useDocumentContext.useDocumentContext('PublishAction');
|
|
410
|
+
const [updateDocumentMutation] = documents.useUpdateDocumentMutation();
|
|
411
|
+
const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
|
399
412
|
const idToPublish = currentDocumentMeta.documentId || id;
|
|
400
413
|
React__namespace.useEffect(()=>{
|
|
401
414
|
if (isErrorDraftRelations) {
|
|
@@ -479,6 +492,16 @@ const transformData = (data)=>{
|
|
|
479
492
|
model,
|
|
480
493
|
currentDocumentMeta.params
|
|
481
494
|
]);
|
|
495
|
+
const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
|
|
496
|
+
const parentDocumentData = useDocument.useDocument({
|
|
497
|
+
documentId: parentDocumentMetaToUpdate?.documentId,
|
|
498
|
+
model: parentDocumentMetaToUpdate?.model,
|
|
499
|
+
collectionType: parentDocumentMetaToUpdate?.collectionType,
|
|
500
|
+
params: parentDocumentMetaToUpdate?.params
|
|
501
|
+
}, {
|
|
502
|
+
skip: !parentDocumentMetaToUpdate
|
|
503
|
+
});
|
|
504
|
+
const { getInitialFormValues } = useDocument.useDoc();
|
|
482
505
|
const isDocumentPublished = (document?.[attributes.PUBLISHED_AT_ATTRIBUTE_NAME] || meta?.availableStatus.some((doc)=>doc[attributes.PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) && document?.status !== 'modified';
|
|
483
506
|
if (!schema?.options?.draftAndPublish) {
|
|
484
507
|
return null;
|
|
@@ -490,21 +513,39 @@ const transformData = (data)=>{
|
|
|
490
513
|
status: 'published'
|
|
491
514
|
});
|
|
492
515
|
if (errors) {
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
id: 'content-manager.validation.error',
|
|
497
|
-
defaultMessage: 'There are validation errors in your document. Please fix them before saving.'
|
|
498
|
-
})
|
|
516
|
+
const hasUnreadableRequiredField = Object.keys(schema.attributes).some((fieldName)=>{
|
|
517
|
+
const attribute = schema.attributes[fieldName];
|
|
518
|
+
return attribute?.required && !(canReadFields ?? []).includes(fieldName);
|
|
499
519
|
});
|
|
520
|
+
if (hasUnreadableRequiredField) {
|
|
521
|
+
toggleNotification({
|
|
522
|
+
type: 'danger',
|
|
523
|
+
message: formatMessage({
|
|
524
|
+
id: 'content-manager.validation.error.unreadable-required-field',
|
|
525
|
+
defaultMessage: 'Your current permissions prevent access to certain required fields. Please request access from an administrator to proceed.'
|
|
526
|
+
})
|
|
527
|
+
});
|
|
528
|
+
} else {
|
|
529
|
+
toggleNotification({
|
|
530
|
+
type: 'danger',
|
|
531
|
+
message: formatMessage({
|
|
532
|
+
id: 'content-manager.validation.error',
|
|
533
|
+
defaultMessage: 'There are validation errors in your document. Please fix them before saving.'
|
|
534
|
+
})
|
|
535
|
+
});
|
|
536
|
+
}
|
|
500
537
|
return;
|
|
501
538
|
}
|
|
539
|
+
const { data: data$1 } = data.handleInvisibleAttributes(transformData(formValues), {
|
|
540
|
+
schema,
|
|
541
|
+
components
|
|
542
|
+
});
|
|
502
543
|
const res = await publish({
|
|
503
544
|
collectionType,
|
|
504
545
|
model,
|
|
505
546
|
documentId,
|
|
506
547
|
params: currentDocumentMeta.params
|
|
507
|
-
},
|
|
548
|
+
}, data$1);
|
|
508
549
|
// Reset form if successful
|
|
509
550
|
if ('data' in res) {
|
|
510
551
|
resetForm();
|
|
@@ -512,11 +553,59 @@ const transformData = (data)=>{
|
|
|
512
553
|
if ('data' in res && collectionType !== collections.SINGLE_TYPES) {
|
|
513
554
|
/**
|
|
514
555
|
* TODO: refactor the router so we can just do `../${res.data.documentId}` instead of this.
|
|
515
|
-
*/ if (idToPublish === 'create') {
|
|
556
|
+
*/ if (idToPublish === 'create' && !fromRelationModal) {
|
|
516
557
|
navigate({
|
|
517
558
|
pathname: `../${collectionType}/${model}/${res.data.documentId}`,
|
|
518
559
|
search: rawQuery
|
|
519
560
|
});
|
|
561
|
+
} else if (fromRelationModal) {
|
|
562
|
+
const newRelation = {
|
|
563
|
+
documentId: res.data.documentId,
|
|
564
|
+
collectionType,
|
|
565
|
+
model,
|
|
566
|
+
params: currentDocumentMeta.params
|
|
567
|
+
};
|
|
568
|
+
/*
|
|
569
|
+
* Update, if needed, the parent relation with the newly published document.
|
|
570
|
+
* Check if in history we have the parent relation otherwise use the
|
|
571
|
+
* rootDocument
|
|
572
|
+
*/ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === collections.SINGLE_TYPES)) {
|
|
573
|
+
const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === collections.SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
|
|
574
|
+
const metaDocumentToUpdate = documentHistory.at(-2) ?? rootDocumentMeta;
|
|
575
|
+
const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
|
|
576
|
+
try {
|
|
577
|
+
const updateRes = await updateDocumentMutation({
|
|
578
|
+
collectionType: metaDocumentToUpdate.collectionType,
|
|
579
|
+
model: metaDocumentToUpdate.model,
|
|
580
|
+
documentId: metaDocumentToUpdate.collectionType !== collections.SINGLE_TYPES ? metaDocumentToUpdate.documentId : undefined,
|
|
581
|
+
params: metaDocumentToUpdate.params,
|
|
582
|
+
data: dataToUpdate
|
|
583
|
+
});
|
|
584
|
+
if ('error' in updateRes) {
|
|
585
|
+
toggleNotification({
|
|
586
|
+
type: 'danger',
|
|
587
|
+
message: formatAPIError(updateRes.error)
|
|
588
|
+
});
|
|
589
|
+
return;
|
|
590
|
+
}
|
|
591
|
+
} catch (err) {
|
|
592
|
+
toggleNotification({
|
|
593
|
+
type: 'danger',
|
|
594
|
+
message: formatMessage({
|
|
595
|
+
id: 'notification.error',
|
|
596
|
+
defaultMessage: 'An error occurred'
|
|
597
|
+
})
|
|
598
|
+
});
|
|
599
|
+
throw err;
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
dispatch({
|
|
603
|
+
type: 'GO_TO_CREATED_RELATION',
|
|
604
|
+
payload: {
|
|
605
|
+
document: newRelation,
|
|
606
|
+
shouldBypassConfirmation: true
|
|
607
|
+
}
|
|
608
|
+
});
|
|
520
609
|
}
|
|
521
610
|
} else if ('error' in res && api.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
|
522
611
|
setErrors(formatValidationErrors(res.error));
|
|
@@ -590,16 +679,40 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
|
|
590
679
|
const isCloning = cloneMatch !== null;
|
|
591
680
|
const { formatMessage } = reactIntl.useIntl();
|
|
592
681
|
const { create, update, clone, isLoading } = useDocumentActions.useDocumentActions();
|
|
682
|
+
const { currentDocument: { components } } = useDocumentContext.useDocumentContext('UpdateAction');
|
|
593
683
|
const [{ rawQuery }] = strapiAdmin.useQueryParams();
|
|
594
684
|
const onPreview = Preview.usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
|
|
685
|
+
const { getInitialFormValues } = useDocument.useDoc();
|
|
595
686
|
const isSubmitting = strapiAdmin.useForm('UpdateAction', ({ isSubmitting })=>isSubmitting);
|
|
596
687
|
const modified = strapiAdmin.useForm('UpdateAction', ({ modified })=>modified);
|
|
597
688
|
const setSubmitting = strapiAdmin.useForm('UpdateAction', ({ setSubmitting })=>setSubmitting);
|
|
689
|
+
const initialValues = strapiAdmin.useForm('UpdateAction', ({ initialValues })=>initialValues);
|
|
598
690
|
const document = strapiAdmin.useForm('UpdateAction', ({ values })=>values);
|
|
599
691
|
const validate = strapiAdmin.useForm('UpdateAction', (state)=>state.validate);
|
|
600
692
|
const setErrors = strapiAdmin.useForm('UpdateAction', (state)=>state.setErrors);
|
|
601
|
-
const resetForm = strapiAdmin.useForm('
|
|
693
|
+
const resetForm = strapiAdmin.useForm('UpdateAction', ({ resetForm })=>resetForm);
|
|
694
|
+
const dispatch = RelationModal.useRelationModal('UpdateAction', (state)=>state.dispatch);
|
|
695
|
+
// need to discriminate if the update is coming from a relation modal or in the edit view
|
|
696
|
+
const relationContext = RelationModal.useRelationModal('UpdateAction', ()=>true, false);
|
|
697
|
+
const relationalModalSchema = RelationModal.useRelationModal('UpdateAction', (state)=>state.currentDocument.schema, false);
|
|
698
|
+
const fieldToConnect = RelationModal.useRelationModal('UpdateAction', (state)=>state.state.fieldToConnect, false);
|
|
699
|
+
const fieldToConnectUID = RelationModal.useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
|
|
700
|
+
const documentHistory = RelationModal.useRelationModal('UpdateAction', (state)=>state.state.documentHistory, false);
|
|
701
|
+
const rootDocumentMeta = RelationModal.useRelationModal('UpdateAction', (state)=>state.rootDocumentMeta);
|
|
702
|
+
const fromRelationModal = relationContext != undefined;
|
|
602
703
|
const { currentDocumentMeta } = useDocumentContext.useDocumentContext('UpdateAction');
|
|
704
|
+
const [updateDocumentMutation] = documents.useUpdateDocumentMutation();
|
|
705
|
+
const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
|
706
|
+
const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
|
|
707
|
+
const parentDocumentData = useDocument.useDocument({
|
|
708
|
+
documentId: parentDocumentMetaToUpdate?.documentId,
|
|
709
|
+
model: parentDocumentMetaToUpdate?.model,
|
|
710
|
+
collectionType: parentDocumentMetaToUpdate?.collectionType,
|
|
711
|
+
params: parentDocumentMetaToUpdate?.params
|
|
712
|
+
}, {
|
|
713
|
+
skip: !parentDocumentMetaToUpdate
|
|
714
|
+
});
|
|
715
|
+
const { schema } = useDocument.useDoc();
|
|
603
716
|
const handleUpdate = React__namespace.useCallback(async ()=>{
|
|
604
717
|
setSubmitting(true);
|
|
605
718
|
try {
|
|
@@ -636,30 +749,91 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
|
|
636
749
|
setErrors(formatValidationErrors(res.error));
|
|
637
750
|
}
|
|
638
751
|
} else if (documentId || collectionType === collections.SINGLE_TYPES) {
|
|
752
|
+
const { data: data$1 } = data.handleInvisibleAttributes(transformData(document), {
|
|
753
|
+
schema: fromRelationModal ? relationalModalSchema : schema,
|
|
754
|
+
initialValues,
|
|
755
|
+
components
|
|
756
|
+
});
|
|
639
757
|
const res = await update({
|
|
640
758
|
collectionType,
|
|
641
759
|
model,
|
|
642
760
|
documentId,
|
|
643
761
|
params: currentDocumentMeta.params
|
|
644
|
-
},
|
|
762
|
+
}, data$1);
|
|
645
763
|
if ('error' in res && api.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
|
646
764
|
setErrors(formatValidationErrors(res.error));
|
|
647
765
|
} else {
|
|
648
766
|
resetForm();
|
|
649
767
|
}
|
|
650
768
|
} else {
|
|
769
|
+
const { data: data$1 } = data.handleInvisibleAttributes(transformData(document), {
|
|
770
|
+
schema: fromRelationModal ? relationalModalSchema : schema,
|
|
771
|
+
initialValues,
|
|
772
|
+
components
|
|
773
|
+
});
|
|
651
774
|
const res = await create({
|
|
652
775
|
model,
|
|
653
776
|
params: currentDocumentMeta.params
|
|
654
|
-
},
|
|
777
|
+
}, data$1);
|
|
655
778
|
if ('data' in res && collectionType !== collections.SINGLE_TYPES) {
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
779
|
+
if (fromRelationModal) {
|
|
780
|
+
const createdRelation = {
|
|
781
|
+
documentId: res.data.documentId,
|
|
782
|
+
collectionType,
|
|
783
|
+
model,
|
|
784
|
+
params: currentDocumentMeta.params
|
|
785
|
+
};
|
|
786
|
+
/*
|
|
787
|
+
* Update, if needed, the parent relation with the newly published document.
|
|
788
|
+
* Check if in history we have the parent relation otherwise use the
|
|
789
|
+
* rootDocument
|
|
790
|
+
*/ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === collections.SINGLE_TYPES)) {
|
|
791
|
+
const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === collections.SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
|
|
792
|
+
const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
|
|
793
|
+
try {
|
|
794
|
+
const updateRes = await updateDocumentMutation({
|
|
795
|
+
collectionType: parentDocumentMetaToUpdate.collectionType,
|
|
796
|
+
model: parentDocumentMetaToUpdate.model,
|
|
797
|
+
documentId: parentDocumentMetaToUpdate.collectionType !== collections.SINGLE_TYPES ? parentDocumentMetaToUpdate.documentId : undefined,
|
|
798
|
+
params: parentDocumentMetaToUpdate.params,
|
|
799
|
+
data: {
|
|
800
|
+
...dataToUpdate
|
|
801
|
+
}
|
|
802
|
+
});
|
|
803
|
+
if ('error' in updateRes) {
|
|
804
|
+
toggleNotification({
|
|
805
|
+
type: 'danger',
|
|
806
|
+
message: formatAPIError(updateRes.error)
|
|
807
|
+
});
|
|
808
|
+
return;
|
|
809
|
+
}
|
|
810
|
+
} catch (err) {
|
|
811
|
+
toggleNotification({
|
|
812
|
+
type: 'danger',
|
|
813
|
+
message: formatMessage({
|
|
814
|
+
id: 'notification.error',
|
|
815
|
+
defaultMessage: 'An error occurred'
|
|
816
|
+
})
|
|
817
|
+
});
|
|
818
|
+
throw err;
|
|
819
|
+
}
|
|
820
|
+
}
|
|
821
|
+
dispatch({
|
|
822
|
+
type: 'GO_TO_CREATED_RELATION',
|
|
823
|
+
payload: {
|
|
824
|
+
document: createdRelation,
|
|
825
|
+
shouldBypassConfirmation: true
|
|
826
|
+
}
|
|
827
|
+
});
|
|
828
|
+
} else {
|
|
829
|
+
navigate({
|
|
830
|
+
pathname: `../${res.data.documentId}`,
|
|
831
|
+
search: rawQuery
|
|
832
|
+
}, {
|
|
833
|
+
replace: true,
|
|
834
|
+
relative: 'path'
|
|
835
|
+
});
|
|
836
|
+
}
|
|
663
837
|
} else if ('error' in res && api.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
|
664
838
|
setErrors(formatValidationErrors(res.error));
|
|
665
839
|
}
|
|
@@ -671,27 +845,41 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
|
|
671
845
|
}
|
|
672
846
|
}
|
|
673
847
|
}, [
|
|
848
|
+
setSubmitting,
|
|
849
|
+
modified,
|
|
850
|
+
validate,
|
|
851
|
+
isCloning,
|
|
852
|
+
documentId,
|
|
853
|
+
collectionType,
|
|
854
|
+
toggleNotification,
|
|
855
|
+
formatMessage,
|
|
674
856
|
clone,
|
|
857
|
+
model,
|
|
675
858
|
cloneMatch?.params.origin,
|
|
676
|
-
collectionType,
|
|
677
|
-
create,
|
|
678
859
|
currentDocumentMeta.params,
|
|
679
860
|
document,
|
|
680
|
-
documentId,
|
|
681
|
-
formatMessage,
|
|
682
|
-
formatValidationErrors,
|
|
683
|
-
isCloning,
|
|
684
|
-
model,
|
|
685
|
-
modified,
|
|
686
861
|
navigate,
|
|
687
862
|
rawQuery,
|
|
688
|
-
resetForm,
|
|
689
863
|
setErrors,
|
|
690
|
-
|
|
691
|
-
toggleNotification,
|
|
864
|
+
formatValidationErrors,
|
|
692
865
|
update,
|
|
693
|
-
|
|
694
|
-
|
|
866
|
+
resetForm,
|
|
867
|
+
create,
|
|
868
|
+
fromRelationModal,
|
|
869
|
+
fieldToConnect,
|
|
870
|
+
documentHistory,
|
|
871
|
+
parentDocumentMetaToUpdate,
|
|
872
|
+
dispatch,
|
|
873
|
+
getInitialFormValues,
|
|
874
|
+
parentDocumentData,
|
|
875
|
+
fieldToConnectUID,
|
|
876
|
+
updateDocumentMutation,
|
|
877
|
+
formatAPIError,
|
|
878
|
+
onPreview,
|
|
879
|
+
initialValues,
|
|
880
|
+
schema,
|
|
881
|
+
components,
|
|
882
|
+
relationalModalSchema
|
|
695
883
|
]);
|
|
696
884
|
// Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux
|
|
697
885
|
React__namespace.useEffect(()=>{
|