@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
|
@@ -1,24 +1,60 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { useNotification, useAPIErrorHandler, useQueryParams, useForm } from '@strapi/admin/strapi-admin';
|
|
4
|
-
import {
|
|
4
|
+
import { Flex, Button, Menu, VisuallyHidden, Dialog, Modal, Typography, Radio } from '@strapi/design-system';
|
|
5
5
|
import { More, Cross, WarningCircle } from '@strapi/icons';
|
|
6
6
|
import mapValues from 'lodash/fp/mapValues';
|
|
7
|
+
import get from 'lodash/get';
|
|
8
|
+
import merge from 'lodash/merge';
|
|
9
|
+
import set from 'lodash/set';
|
|
7
10
|
import { useIntl } from 'react-intl';
|
|
8
11
|
import { useNavigate, useMatch, useParams } from 'react-router-dom';
|
|
9
|
-
import { styled } from 'styled-components';
|
|
10
12
|
import { PUBLISHED_AT_ATTRIBUTE_NAME } from '../../../constants/attributes.mjs';
|
|
11
13
|
import { SINGLE_TYPES } from '../../../constants/collections.mjs';
|
|
12
14
|
import { useDocumentRBAC } from '../../../features/DocumentRBAC.mjs';
|
|
13
|
-
import { useDoc } from '../../../hooks/useDocument.mjs';
|
|
15
|
+
import { useDocument, useDoc } from '../../../hooks/useDocument.mjs';
|
|
14
16
|
import { useDocumentActions } from '../../../hooks/useDocumentActions.mjs';
|
|
15
17
|
import { useDocumentContext } from '../../../hooks/useDocumentContext.mjs';
|
|
16
18
|
import { usePreviewContext } from '../../../preview/pages/Preview.mjs';
|
|
17
19
|
import { LIST_PATH, CLONE_PATH } from '../../../router.mjs';
|
|
18
|
-
import { useGetDraftRelationCountQuery as useLazyGetDraftRelationCountQuery } from '../../../services/documents.mjs';
|
|
20
|
+
import { useGetDraftRelationCountQuery as useLazyGetDraftRelationCountQuery, useUpdateDocumentMutation } from '../../../services/documents.mjs';
|
|
19
21
|
import { isBaseQueryError, buildValidParams } from '../../../utils/api.mjs';
|
|
20
22
|
import { getTranslation } from '../../../utils/translations.mjs';
|
|
23
|
+
import { handleInvisibleAttributes } from '../utils/data.mjs';
|
|
24
|
+
import { useRelationModal } from './FormInputs/Relations/RelationModal.mjs';
|
|
21
25
|
|
|
26
|
+
const connectRelationToParent = (parentDataToUpdate, fieldToConnect, data, fieldToConnectUID)=>{
|
|
27
|
+
/*
|
|
28
|
+
* Check if the fieldToConnect is already present in the parentDataToUpdate.
|
|
29
|
+
* This happens in particular when in the parentDocument you have created
|
|
30
|
+
* a new component without saving.
|
|
31
|
+
*/ const isFieldPresent = !!get(parentDataToUpdate, fieldToConnect);
|
|
32
|
+
const fieldToConnectPath = isFieldPresent ? fieldToConnect : fieldToConnect.split('.').slice(0, -1).join('.');
|
|
33
|
+
const fieldToConnectValue = isFieldPresent ? {
|
|
34
|
+
connect: [
|
|
35
|
+
{
|
|
36
|
+
id: data.documentId,
|
|
37
|
+
documentId: data.documentId,
|
|
38
|
+
locale: data.locale
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
} : {
|
|
42
|
+
[fieldToConnect.split('.').pop()]: {
|
|
43
|
+
connect: [
|
|
44
|
+
{
|
|
45
|
+
id: data.documentId,
|
|
46
|
+
documentId: data.documentId,
|
|
47
|
+
locale: data.locale
|
|
48
|
+
}
|
|
49
|
+
],
|
|
50
|
+
disconnect: []
|
|
51
|
+
},
|
|
52
|
+
// In case the object was not present you need to pass the componentUID of the parent document
|
|
53
|
+
__component: fieldToConnectUID
|
|
54
|
+
};
|
|
55
|
+
const objectToConnect = set({}, fieldToConnectPath, fieldToConnectValue);
|
|
56
|
+
return merge(parentDataToUpdate, objectToConnect);
|
|
57
|
+
};
|
|
22
58
|
const DocumentActions = ({ actions })=>{
|
|
23
59
|
const { formatMessage } = useIntl();
|
|
24
60
|
const [primaryAction, secondaryAction, ...restActions] = actions.filter((action)=>{
|
|
@@ -117,11 +153,6 @@ const DocumentActionButton = (action)=>{
|
|
|
117
153
|
]
|
|
118
154
|
});
|
|
119
155
|
};
|
|
120
|
-
const MenuItem = styled(Menu.Item)`
|
|
121
|
-
&:hover {
|
|
122
|
-
background: ${({ theme, isVariantDanger, isDisabled })=>isVariantDanger && !isDisabled ? theme.colors.danger100 : 'neutral'};
|
|
123
|
-
}
|
|
124
|
-
`;
|
|
125
156
|
const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })=>{
|
|
126
157
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
127
158
|
const [dialogId, setDialogId] = React.useState(null);
|
|
@@ -183,27 +214,19 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
|
|
|
183
214
|
popoverPlacement: "bottom-end",
|
|
184
215
|
children: [
|
|
185
216
|
actions.map((action)=>{
|
|
186
|
-
return /*#__PURE__*/ jsx(
|
|
217
|
+
return /*#__PURE__*/ jsx(Menu.Item, {
|
|
187
218
|
disabled: action.disabled,
|
|
188
219
|
/* @ts-expect-error – TODO: this is an error in the DS where it is most likely a synthetic event, not regular. */ onSelect: handleClick(action),
|
|
189
220
|
display: "block",
|
|
190
|
-
|
|
191
|
-
|
|
221
|
+
variant: action.variant === 'danger' ? action.variant : 'default',
|
|
222
|
+
startIcon: action.icon,
|
|
192
223
|
children: /*#__PURE__*/ jsx(Flex, {
|
|
193
224
|
justifyContent: "space-between",
|
|
194
225
|
gap: 4,
|
|
195
|
-
children: /*#__PURE__*/
|
|
196
|
-
color: !action.disabled ? convertActionVariantToColor(action.variant) : 'inherit',
|
|
226
|
+
children: /*#__PURE__*/ jsx(Flex, {
|
|
197
227
|
gap: 2,
|
|
198
228
|
tag: "span",
|
|
199
|
-
children:
|
|
200
|
-
/*#__PURE__*/ jsx(Flex, {
|
|
201
|
-
tag: "span",
|
|
202
|
-
color: !action.disabled ? convertActionVariantToIconColor(action.variant) : 'inherit',
|
|
203
|
-
children: action.icon
|
|
204
|
-
}),
|
|
205
|
-
action.label
|
|
206
|
-
]
|
|
229
|
+
children: action.label
|
|
207
230
|
})
|
|
208
231
|
})
|
|
209
232
|
}, action.id);
|
|
@@ -231,30 +254,6 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
|
|
|
231
254
|
]
|
|
232
255
|
});
|
|
233
256
|
};
|
|
234
|
-
const convertActionVariantToColor = (variant = 'secondary')=>{
|
|
235
|
-
switch(variant){
|
|
236
|
-
case 'danger':
|
|
237
|
-
return 'danger600';
|
|
238
|
-
case 'secondary':
|
|
239
|
-
return undefined;
|
|
240
|
-
case 'success':
|
|
241
|
-
return 'success600';
|
|
242
|
-
default:
|
|
243
|
-
return 'primary600';
|
|
244
|
-
}
|
|
245
|
-
};
|
|
246
|
-
const convertActionVariantToIconColor = (variant = 'secondary')=>{
|
|
247
|
-
switch(variant){
|
|
248
|
-
case 'danger':
|
|
249
|
-
return 'danger600';
|
|
250
|
-
case 'secondary':
|
|
251
|
-
return 'neutral500';
|
|
252
|
-
case 'success':
|
|
253
|
-
return 'success600';
|
|
254
|
-
default:
|
|
255
|
-
return 'primary600';
|
|
256
|
-
}
|
|
257
|
-
};
|
|
258
257
|
const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, content, isOpen, variant = 'secondary', loading })=>{
|
|
259
258
|
const { formatMessage } = useIntl();
|
|
260
259
|
const handleClose = async ()=>{
|
|
@@ -360,7 +359,10 @@ const transformData = (data)=>{
|
|
|
360
359
|
const isCloning = useMatch(CLONE_PATH) !== null;
|
|
361
360
|
const { id } = useParams();
|
|
362
361
|
const { formatMessage } = useIntl();
|
|
363
|
-
const canPublish = useDocumentRBAC('PublishAction', ({ canPublish })=>
|
|
362
|
+
const { canPublish, canReadFields } = useDocumentRBAC('PublishAction', ({ canPublish, canReadFields })=>({
|
|
363
|
+
canPublish,
|
|
364
|
+
canReadFields
|
|
365
|
+
}));
|
|
364
366
|
const { publish, isLoading } = useDocumentActions();
|
|
365
367
|
const onPreview = usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
|
|
366
368
|
const [countDraftRelations, { isLoading: isLoadingDraftRelations, isError: isErrorDraftRelations }] = useLazyGetDraftRelationCountQuery();
|
|
@@ -374,7 +376,18 @@ const transformData = (data)=>{
|
|
|
374
376
|
const setErrors = useForm('PublishAction', (state)=>state.setErrors);
|
|
375
377
|
const formValues = useForm('PublishAction', ({ values })=>values);
|
|
376
378
|
const resetForm = useForm('PublishAction', ({ resetForm })=>resetForm);
|
|
379
|
+
const { currentDocument: { components } } = useDocumentContext('PublishAction');
|
|
380
|
+
// need to discriminate if the publish is coming from a relation modal or in the edit view
|
|
381
|
+
const relationContext = useRelationModal('PublishAction', ()=>true, false);
|
|
382
|
+
const fromRelationModal = relationContext != undefined;
|
|
383
|
+
const dispatch = useRelationModal('PublishAction', (state)=>state.dispatch);
|
|
384
|
+
const fieldToConnect = useRelationModal('PublishAction', (state)=>state.state.fieldToConnect, false);
|
|
385
|
+
const fieldToConnectUID = useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
|
|
386
|
+
const documentHistory = useRelationModal('PublishAction', (state)=>state.state.documentHistory, false);
|
|
387
|
+
const rootDocumentMeta = useRelationModal('PublishAction', (state)=>state.rootDocumentMeta);
|
|
377
388
|
const { currentDocumentMeta } = useDocumentContext('PublishAction');
|
|
389
|
+
const [updateDocumentMutation] = useUpdateDocumentMutation();
|
|
390
|
+
const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
|
|
378
391
|
const idToPublish = currentDocumentMeta.documentId || id;
|
|
379
392
|
React.useEffect(()=>{
|
|
380
393
|
if (isErrorDraftRelations) {
|
|
@@ -458,6 +471,16 @@ const transformData = (data)=>{
|
|
|
458
471
|
model,
|
|
459
472
|
currentDocumentMeta.params
|
|
460
473
|
]);
|
|
474
|
+
const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
|
|
475
|
+
const parentDocumentData = useDocument({
|
|
476
|
+
documentId: parentDocumentMetaToUpdate?.documentId,
|
|
477
|
+
model: parentDocumentMetaToUpdate?.model,
|
|
478
|
+
collectionType: parentDocumentMetaToUpdate?.collectionType,
|
|
479
|
+
params: parentDocumentMetaToUpdate?.params
|
|
480
|
+
}, {
|
|
481
|
+
skip: !parentDocumentMetaToUpdate
|
|
482
|
+
});
|
|
483
|
+
const { getInitialFormValues } = useDoc();
|
|
461
484
|
const isDocumentPublished = (document?.[PUBLISHED_AT_ATTRIBUTE_NAME] || meta?.availableStatus.some((doc)=>doc[PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) && document?.status !== 'modified';
|
|
462
485
|
if (!schema?.options?.draftAndPublish) {
|
|
463
486
|
return null;
|
|
@@ -469,21 +492,39 @@ const transformData = (data)=>{
|
|
|
469
492
|
status: 'published'
|
|
470
493
|
});
|
|
471
494
|
if (errors) {
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
id: 'content-manager.validation.error',
|
|
476
|
-
defaultMessage: 'There are validation errors in your document. Please fix them before saving.'
|
|
477
|
-
})
|
|
495
|
+
const hasUnreadableRequiredField = Object.keys(schema.attributes).some((fieldName)=>{
|
|
496
|
+
const attribute = schema.attributes[fieldName];
|
|
497
|
+
return attribute?.required && !(canReadFields ?? []).includes(fieldName);
|
|
478
498
|
});
|
|
499
|
+
if (hasUnreadableRequiredField) {
|
|
500
|
+
toggleNotification({
|
|
501
|
+
type: 'danger',
|
|
502
|
+
message: formatMessage({
|
|
503
|
+
id: 'content-manager.validation.error.unreadable-required-field',
|
|
504
|
+
defaultMessage: 'Your current permissions prevent access to certain required fields. Please request access from an administrator to proceed.'
|
|
505
|
+
})
|
|
506
|
+
});
|
|
507
|
+
} else {
|
|
508
|
+
toggleNotification({
|
|
509
|
+
type: 'danger',
|
|
510
|
+
message: formatMessage({
|
|
511
|
+
id: 'content-manager.validation.error',
|
|
512
|
+
defaultMessage: 'There are validation errors in your document. Please fix them before saving.'
|
|
513
|
+
})
|
|
514
|
+
});
|
|
515
|
+
}
|
|
479
516
|
return;
|
|
480
517
|
}
|
|
518
|
+
const { data } = handleInvisibleAttributes(transformData(formValues), {
|
|
519
|
+
schema,
|
|
520
|
+
components
|
|
521
|
+
});
|
|
481
522
|
const res = await publish({
|
|
482
523
|
collectionType,
|
|
483
524
|
model,
|
|
484
525
|
documentId,
|
|
485
526
|
params: currentDocumentMeta.params
|
|
486
|
-
},
|
|
527
|
+
}, data);
|
|
487
528
|
// Reset form if successful
|
|
488
529
|
if ('data' in res) {
|
|
489
530
|
resetForm();
|
|
@@ -491,11 +532,59 @@ const transformData = (data)=>{
|
|
|
491
532
|
if ('data' in res && collectionType !== SINGLE_TYPES) {
|
|
492
533
|
/**
|
|
493
534
|
* TODO: refactor the router so we can just do `../${res.data.documentId}` instead of this.
|
|
494
|
-
*/ if (idToPublish === 'create') {
|
|
535
|
+
*/ if (idToPublish === 'create' && !fromRelationModal) {
|
|
495
536
|
navigate({
|
|
496
537
|
pathname: `../${collectionType}/${model}/${res.data.documentId}`,
|
|
497
538
|
search: rawQuery
|
|
498
539
|
});
|
|
540
|
+
} else if (fromRelationModal) {
|
|
541
|
+
const newRelation = {
|
|
542
|
+
documentId: res.data.documentId,
|
|
543
|
+
collectionType,
|
|
544
|
+
model,
|
|
545
|
+
params: currentDocumentMeta.params
|
|
546
|
+
};
|
|
547
|
+
/*
|
|
548
|
+
* Update, if needed, the parent relation with the newly published document.
|
|
549
|
+
* Check if in history we have the parent relation otherwise use the
|
|
550
|
+
* rootDocument
|
|
551
|
+
*/ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES)) {
|
|
552
|
+
const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
|
|
553
|
+
const metaDocumentToUpdate = documentHistory.at(-2) ?? rootDocumentMeta;
|
|
554
|
+
const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
|
|
555
|
+
try {
|
|
556
|
+
const updateRes = await updateDocumentMutation({
|
|
557
|
+
collectionType: metaDocumentToUpdate.collectionType,
|
|
558
|
+
model: metaDocumentToUpdate.model,
|
|
559
|
+
documentId: metaDocumentToUpdate.collectionType !== SINGLE_TYPES ? metaDocumentToUpdate.documentId : undefined,
|
|
560
|
+
params: metaDocumentToUpdate.params,
|
|
561
|
+
data: dataToUpdate
|
|
562
|
+
});
|
|
563
|
+
if ('error' in updateRes) {
|
|
564
|
+
toggleNotification({
|
|
565
|
+
type: 'danger',
|
|
566
|
+
message: formatAPIError(updateRes.error)
|
|
567
|
+
});
|
|
568
|
+
return;
|
|
569
|
+
}
|
|
570
|
+
} catch (err) {
|
|
571
|
+
toggleNotification({
|
|
572
|
+
type: 'danger',
|
|
573
|
+
message: formatMessage({
|
|
574
|
+
id: 'notification.error',
|
|
575
|
+
defaultMessage: 'An error occurred'
|
|
576
|
+
})
|
|
577
|
+
});
|
|
578
|
+
throw err;
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
dispatch({
|
|
582
|
+
type: 'GO_TO_CREATED_RELATION',
|
|
583
|
+
payload: {
|
|
584
|
+
document: newRelation,
|
|
585
|
+
shouldBypassConfirmation: true
|
|
586
|
+
}
|
|
587
|
+
});
|
|
499
588
|
}
|
|
500
589
|
} else if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
|
501
590
|
setErrors(formatValidationErrors(res.error));
|
|
@@ -569,16 +658,40 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
|
|
569
658
|
const isCloning = cloneMatch !== null;
|
|
570
659
|
const { formatMessage } = useIntl();
|
|
571
660
|
const { create, update, clone, isLoading } = useDocumentActions();
|
|
661
|
+
const { currentDocument: { components } } = useDocumentContext('UpdateAction');
|
|
572
662
|
const [{ rawQuery }] = useQueryParams();
|
|
573
663
|
const onPreview = usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
|
|
664
|
+
const { getInitialFormValues } = useDoc();
|
|
574
665
|
const isSubmitting = useForm('UpdateAction', ({ isSubmitting })=>isSubmitting);
|
|
575
666
|
const modified = useForm('UpdateAction', ({ modified })=>modified);
|
|
576
667
|
const setSubmitting = useForm('UpdateAction', ({ setSubmitting })=>setSubmitting);
|
|
668
|
+
const initialValues = useForm('UpdateAction', ({ initialValues })=>initialValues);
|
|
577
669
|
const document = useForm('UpdateAction', ({ values })=>values);
|
|
578
670
|
const validate = useForm('UpdateAction', (state)=>state.validate);
|
|
579
671
|
const setErrors = useForm('UpdateAction', (state)=>state.setErrors);
|
|
580
|
-
const resetForm = useForm('
|
|
672
|
+
const resetForm = useForm('UpdateAction', ({ resetForm })=>resetForm);
|
|
673
|
+
const dispatch = useRelationModal('UpdateAction', (state)=>state.dispatch);
|
|
674
|
+
// need to discriminate if the update is coming from a relation modal or in the edit view
|
|
675
|
+
const relationContext = useRelationModal('UpdateAction', ()=>true, false);
|
|
676
|
+
const relationalModalSchema = useRelationModal('UpdateAction', (state)=>state.currentDocument.schema, false);
|
|
677
|
+
const fieldToConnect = useRelationModal('UpdateAction', (state)=>state.state.fieldToConnect, false);
|
|
678
|
+
const fieldToConnectUID = useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
|
|
679
|
+
const documentHistory = useRelationModal('UpdateAction', (state)=>state.state.documentHistory, false);
|
|
680
|
+
const rootDocumentMeta = useRelationModal('UpdateAction', (state)=>state.rootDocumentMeta);
|
|
681
|
+
const fromRelationModal = relationContext != undefined;
|
|
581
682
|
const { currentDocumentMeta } = useDocumentContext('UpdateAction');
|
|
683
|
+
const [updateDocumentMutation] = useUpdateDocumentMutation();
|
|
684
|
+
const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
|
|
685
|
+
const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
|
|
686
|
+
const parentDocumentData = useDocument({
|
|
687
|
+
documentId: parentDocumentMetaToUpdate?.documentId,
|
|
688
|
+
model: parentDocumentMetaToUpdate?.model,
|
|
689
|
+
collectionType: parentDocumentMetaToUpdate?.collectionType,
|
|
690
|
+
params: parentDocumentMetaToUpdate?.params
|
|
691
|
+
}, {
|
|
692
|
+
skip: !parentDocumentMetaToUpdate
|
|
693
|
+
});
|
|
694
|
+
const { schema } = useDoc();
|
|
582
695
|
const handleUpdate = React.useCallback(async ()=>{
|
|
583
696
|
setSubmitting(true);
|
|
584
697
|
try {
|
|
@@ -615,30 +728,91 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
|
|
615
728
|
setErrors(formatValidationErrors(res.error));
|
|
616
729
|
}
|
|
617
730
|
} else if (documentId || collectionType === SINGLE_TYPES) {
|
|
731
|
+
const { data } = handleInvisibleAttributes(transformData(document), {
|
|
732
|
+
schema: fromRelationModal ? relationalModalSchema : schema,
|
|
733
|
+
initialValues,
|
|
734
|
+
components
|
|
735
|
+
});
|
|
618
736
|
const res = await update({
|
|
619
737
|
collectionType,
|
|
620
738
|
model,
|
|
621
739
|
documentId,
|
|
622
740
|
params: currentDocumentMeta.params
|
|
623
|
-
},
|
|
741
|
+
}, data);
|
|
624
742
|
if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
|
625
743
|
setErrors(formatValidationErrors(res.error));
|
|
626
744
|
} else {
|
|
627
745
|
resetForm();
|
|
628
746
|
}
|
|
629
747
|
} else {
|
|
748
|
+
const { data } = handleInvisibleAttributes(transformData(document), {
|
|
749
|
+
schema: fromRelationModal ? relationalModalSchema : schema,
|
|
750
|
+
initialValues,
|
|
751
|
+
components
|
|
752
|
+
});
|
|
630
753
|
const res = await create({
|
|
631
754
|
model,
|
|
632
755
|
params: currentDocumentMeta.params
|
|
633
|
-
},
|
|
756
|
+
}, data);
|
|
634
757
|
if ('data' in res && collectionType !== SINGLE_TYPES) {
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
758
|
+
if (fromRelationModal) {
|
|
759
|
+
const createdRelation = {
|
|
760
|
+
documentId: res.data.documentId,
|
|
761
|
+
collectionType,
|
|
762
|
+
model,
|
|
763
|
+
params: currentDocumentMeta.params
|
|
764
|
+
};
|
|
765
|
+
/*
|
|
766
|
+
* Update, if needed, the parent relation with the newly published document.
|
|
767
|
+
* Check if in history we have the parent relation otherwise use the
|
|
768
|
+
* rootDocument
|
|
769
|
+
*/ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES)) {
|
|
770
|
+
const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
|
|
771
|
+
const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
|
|
772
|
+
try {
|
|
773
|
+
const updateRes = await updateDocumentMutation({
|
|
774
|
+
collectionType: parentDocumentMetaToUpdate.collectionType,
|
|
775
|
+
model: parentDocumentMetaToUpdate.model,
|
|
776
|
+
documentId: parentDocumentMetaToUpdate.collectionType !== SINGLE_TYPES ? parentDocumentMetaToUpdate.documentId : undefined,
|
|
777
|
+
params: parentDocumentMetaToUpdate.params,
|
|
778
|
+
data: {
|
|
779
|
+
...dataToUpdate
|
|
780
|
+
}
|
|
781
|
+
});
|
|
782
|
+
if ('error' in updateRes) {
|
|
783
|
+
toggleNotification({
|
|
784
|
+
type: 'danger',
|
|
785
|
+
message: formatAPIError(updateRes.error)
|
|
786
|
+
});
|
|
787
|
+
return;
|
|
788
|
+
}
|
|
789
|
+
} catch (err) {
|
|
790
|
+
toggleNotification({
|
|
791
|
+
type: 'danger',
|
|
792
|
+
message: formatMessage({
|
|
793
|
+
id: 'notification.error',
|
|
794
|
+
defaultMessage: 'An error occurred'
|
|
795
|
+
})
|
|
796
|
+
});
|
|
797
|
+
throw err;
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
dispatch({
|
|
801
|
+
type: 'GO_TO_CREATED_RELATION',
|
|
802
|
+
payload: {
|
|
803
|
+
document: createdRelation,
|
|
804
|
+
shouldBypassConfirmation: true
|
|
805
|
+
}
|
|
806
|
+
});
|
|
807
|
+
} else {
|
|
808
|
+
navigate({
|
|
809
|
+
pathname: `../${res.data.documentId}`,
|
|
810
|
+
search: rawQuery
|
|
811
|
+
}, {
|
|
812
|
+
replace: true,
|
|
813
|
+
relative: 'path'
|
|
814
|
+
});
|
|
815
|
+
}
|
|
642
816
|
} else if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
|
643
817
|
setErrors(formatValidationErrors(res.error));
|
|
644
818
|
}
|
|
@@ -650,27 +824,41 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
|
|
650
824
|
}
|
|
651
825
|
}
|
|
652
826
|
}, [
|
|
827
|
+
setSubmitting,
|
|
828
|
+
modified,
|
|
829
|
+
validate,
|
|
830
|
+
isCloning,
|
|
831
|
+
documentId,
|
|
832
|
+
collectionType,
|
|
833
|
+
toggleNotification,
|
|
834
|
+
formatMessage,
|
|
653
835
|
clone,
|
|
836
|
+
model,
|
|
654
837
|
cloneMatch?.params.origin,
|
|
655
|
-
collectionType,
|
|
656
|
-
create,
|
|
657
838
|
currentDocumentMeta.params,
|
|
658
839
|
document,
|
|
659
|
-
documentId,
|
|
660
|
-
formatMessage,
|
|
661
|
-
formatValidationErrors,
|
|
662
|
-
isCloning,
|
|
663
|
-
model,
|
|
664
|
-
modified,
|
|
665
840
|
navigate,
|
|
666
841
|
rawQuery,
|
|
667
|
-
resetForm,
|
|
668
842
|
setErrors,
|
|
669
|
-
|
|
670
|
-
toggleNotification,
|
|
843
|
+
formatValidationErrors,
|
|
671
844
|
update,
|
|
672
|
-
|
|
673
|
-
|
|
845
|
+
resetForm,
|
|
846
|
+
create,
|
|
847
|
+
fromRelationModal,
|
|
848
|
+
fieldToConnect,
|
|
849
|
+
documentHistory,
|
|
850
|
+
parentDocumentMetaToUpdate,
|
|
851
|
+
dispatch,
|
|
852
|
+
getInitialFormValues,
|
|
853
|
+
parentDocumentData,
|
|
854
|
+
fieldToConnectUID,
|
|
855
|
+
updateDocumentMutation,
|
|
856
|
+
formatAPIError,
|
|
857
|
+
onPreview,
|
|
858
|
+
initialValues,
|
|
859
|
+
schema,
|
|
860
|
+
components,
|
|
861
|
+
relationalModalSchema
|
|
674
862
|
]);
|
|
675
863
|
// Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux
|
|
676
864
|
React.useEffect(()=>{
|