@strapi/content-manager 0.0.0-next.e21fe90bf2ab9906267ea6e6ca620bdcc729906c → 0.0.0-next.e3eb76a86aff89979cc9098aec129d2ffa600c56
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/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 +81 -74
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +82 -75
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +235 -71
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +238 -74
- 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 +61 -26
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +63 -28
- 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/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/Repeatable.js +2 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +2 -0
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +3 -3
- 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/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/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 +20 -24
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +20 -24
- package/dist/admin/pages/EditView/components/FormLayout.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/preview/components/PreviewHeader.js +1 -1
- package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
- package/dist/admin/preview/components/PreviewHeader.mjs +1 -1
- package/dist/admin/preview/components/PreviewHeader.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 +9 -5
- package/dist/admin/services/homepage.js.map +1 -1
- package/dist/admin/services/homepage.mjs +9 -5
- 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/BlocksInput/EditorLayout.d.ts +2 -2
- 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/services/documents.d.ts +7 -1
- 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/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 +1 -1
- package/dist/admin/utils/validation.js.map +1 -1
- package/dist/admin/utils/validation.mjs +1 -1
- 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/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/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/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/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/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/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/index.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/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/{services → homepage/services}/homepage.d.ts +1 -1
- 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 +8 -0
- 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 +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 +7 -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
- package/dist/server/src/services/homepage.d.ts.map +0 -1
|
@@ -1,24 +1,59 @@
|
|
|
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 { useRelationModal } from './FormInputs/Relations/RelationModal.mjs';
|
|
21
24
|
|
|
25
|
+
const connectRelationToParent = (parentDataToUpdate, fieldToConnect, data, fieldToConnectUID)=>{
|
|
26
|
+
/*
|
|
27
|
+
* Check if the fieldToConnect is already present in the parentDataToUpdate.
|
|
28
|
+
* This happens in particular when in the parentDocument you have created
|
|
29
|
+
* a new component without saving.
|
|
30
|
+
*/ const isFieldPresent = !!get(parentDataToUpdate, fieldToConnect);
|
|
31
|
+
const fieldToConnectPath = isFieldPresent ? fieldToConnect : fieldToConnect.split('.').slice(0, -1).join('.');
|
|
32
|
+
const fieldToConnectValue = isFieldPresent ? {
|
|
33
|
+
connect: [
|
|
34
|
+
{
|
|
35
|
+
id: data.documentId,
|
|
36
|
+
documentId: data.documentId,
|
|
37
|
+
locale: data.locale
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
} : {
|
|
41
|
+
[fieldToConnect.split('.').pop()]: {
|
|
42
|
+
connect: [
|
|
43
|
+
{
|
|
44
|
+
id: data.documentId,
|
|
45
|
+
documentId: data.documentId,
|
|
46
|
+
locale: data.locale
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
disconnect: []
|
|
50
|
+
},
|
|
51
|
+
// In case the object was not present you need to pass the componentUID of the parent document
|
|
52
|
+
__component: fieldToConnectUID
|
|
53
|
+
};
|
|
54
|
+
const objectToConnect = set({}, fieldToConnectPath, fieldToConnectValue);
|
|
55
|
+
return merge(parentDataToUpdate, objectToConnect);
|
|
56
|
+
};
|
|
22
57
|
const DocumentActions = ({ actions })=>{
|
|
23
58
|
const { formatMessage } = useIntl();
|
|
24
59
|
const [primaryAction, secondaryAction, ...restActions] = actions.filter((action)=>{
|
|
@@ -117,11 +152,6 @@ const DocumentActionButton = (action)=>{
|
|
|
117
152
|
]
|
|
118
153
|
});
|
|
119
154
|
};
|
|
120
|
-
const MenuItem = styled(Menu.Item)`
|
|
121
|
-
&:hover {
|
|
122
|
-
background: ${({ theme, isVariantDanger, isDisabled })=>isVariantDanger && !isDisabled ? theme.colors.danger100 : 'neutral'};
|
|
123
|
-
}
|
|
124
|
-
`;
|
|
125
155
|
const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })=>{
|
|
126
156
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
127
157
|
const [dialogId, setDialogId] = React.useState(null);
|
|
@@ -183,27 +213,19 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
|
|
|
183
213
|
popoverPlacement: "bottom-end",
|
|
184
214
|
children: [
|
|
185
215
|
actions.map((action)=>{
|
|
186
|
-
return /*#__PURE__*/ jsx(
|
|
216
|
+
return /*#__PURE__*/ jsx(Menu.Item, {
|
|
187
217
|
disabled: action.disabled,
|
|
188
218
|
/* @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
219
|
display: "block",
|
|
190
|
-
|
|
191
|
-
|
|
220
|
+
variant: action.variant === 'danger' ? action.variant : 'default',
|
|
221
|
+
startIcon: action.icon,
|
|
192
222
|
children: /*#__PURE__*/ jsx(Flex, {
|
|
193
223
|
justifyContent: "space-between",
|
|
194
224
|
gap: 4,
|
|
195
|
-
children: /*#__PURE__*/
|
|
196
|
-
color: !action.disabled ? convertActionVariantToColor(action.variant) : 'inherit',
|
|
225
|
+
children: /*#__PURE__*/ jsx(Flex, {
|
|
197
226
|
gap: 2,
|
|
198
227
|
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
|
-
]
|
|
228
|
+
children: action.label
|
|
207
229
|
})
|
|
208
230
|
})
|
|
209
231
|
}, action.id);
|
|
@@ -231,30 +253,6 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
|
|
|
231
253
|
]
|
|
232
254
|
});
|
|
233
255
|
};
|
|
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
256
|
const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, content, isOpen, variant = 'secondary', loading })=>{
|
|
259
257
|
const { formatMessage } = useIntl();
|
|
260
258
|
const handleClose = async ()=>{
|
|
@@ -360,7 +358,10 @@ const transformData = (data)=>{
|
|
|
360
358
|
const isCloning = useMatch(CLONE_PATH) !== null;
|
|
361
359
|
const { id } = useParams();
|
|
362
360
|
const { formatMessage } = useIntl();
|
|
363
|
-
const canPublish = useDocumentRBAC('PublishAction', ({ canPublish })=>
|
|
361
|
+
const { canPublish, canReadFields } = useDocumentRBAC('PublishAction', ({ canPublish, canReadFields })=>({
|
|
362
|
+
canPublish,
|
|
363
|
+
canReadFields
|
|
364
|
+
}));
|
|
364
365
|
const { publish, isLoading } = useDocumentActions();
|
|
365
366
|
const onPreview = usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
|
|
366
367
|
const [countDraftRelations, { isLoading: isLoadingDraftRelations, isError: isErrorDraftRelations }] = useLazyGetDraftRelationCountQuery();
|
|
@@ -374,7 +375,17 @@ const transformData = (data)=>{
|
|
|
374
375
|
const setErrors = useForm('PublishAction', (state)=>state.setErrors);
|
|
375
376
|
const formValues = useForm('PublishAction', ({ values })=>values);
|
|
376
377
|
const resetForm = useForm('PublishAction', ({ resetForm })=>resetForm);
|
|
378
|
+
// need to discriminate if the publish is coming from a relation modal or in the edit view
|
|
379
|
+
const relationContext = useRelationModal('PublishAction', ()=>true, false);
|
|
380
|
+
const fromRelationModal = relationContext != undefined;
|
|
381
|
+
const dispatch = useRelationModal('PublishAction', (state)=>state.dispatch);
|
|
382
|
+
const fieldToConnect = useRelationModal('PublishAction', (state)=>state.state.fieldToConnect, false);
|
|
383
|
+
const fieldToConnectUID = useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
|
|
384
|
+
const documentHistory = useRelationModal('PublishAction', (state)=>state.state.documentHistory, false);
|
|
385
|
+
const rootDocumentMeta = useRelationModal('PublishAction', (state)=>state.rootDocumentMeta);
|
|
377
386
|
const { currentDocumentMeta } = useDocumentContext('PublishAction');
|
|
387
|
+
const [updateDocumentMutation] = useUpdateDocumentMutation();
|
|
388
|
+
const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
|
|
378
389
|
const idToPublish = currentDocumentMeta.documentId || id;
|
|
379
390
|
React.useEffect(()=>{
|
|
380
391
|
if (isErrorDraftRelations) {
|
|
@@ -458,6 +469,16 @@ const transformData = (data)=>{
|
|
|
458
469
|
model,
|
|
459
470
|
currentDocumentMeta.params
|
|
460
471
|
]);
|
|
472
|
+
const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
|
|
473
|
+
const parentDocumentData = useDocument({
|
|
474
|
+
documentId: parentDocumentMetaToUpdate?.documentId,
|
|
475
|
+
model: parentDocumentMetaToUpdate?.model,
|
|
476
|
+
collectionType: parentDocumentMetaToUpdate?.collectionType,
|
|
477
|
+
params: parentDocumentMetaToUpdate?.params
|
|
478
|
+
}, {
|
|
479
|
+
skip: !parentDocumentMetaToUpdate
|
|
480
|
+
});
|
|
481
|
+
const { getInitialFormValues } = useDoc();
|
|
461
482
|
const isDocumentPublished = (document?.[PUBLISHED_AT_ATTRIBUTE_NAME] || meta?.availableStatus.some((doc)=>doc[PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) && document?.status !== 'modified';
|
|
462
483
|
if (!schema?.options?.draftAndPublish) {
|
|
463
484
|
return null;
|
|
@@ -469,13 +490,27 @@ const transformData = (data)=>{
|
|
|
469
490
|
status: 'published'
|
|
470
491
|
});
|
|
471
492
|
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
|
-
})
|
|
493
|
+
const hasUnreadableRequiredField = Object.keys(schema.attributes).some((fieldName)=>{
|
|
494
|
+
const attribute = schema.attributes[fieldName];
|
|
495
|
+
return attribute?.required && !(canReadFields ?? []).includes(fieldName);
|
|
478
496
|
});
|
|
497
|
+
if (hasUnreadableRequiredField) {
|
|
498
|
+
toggleNotification({
|
|
499
|
+
type: 'danger',
|
|
500
|
+
message: formatMessage({
|
|
501
|
+
id: 'content-manager.validation.error.unreadable-required-field',
|
|
502
|
+
defaultMessage: 'Your current permissions prevent access to certain required fields. Please request access from an administrator to proceed.'
|
|
503
|
+
})
|
|
504
|
+
});
|
|
505
|
+
} else {
|
|
506
|
+
toggleNotification({
|
|
507
|
+
type: 'danger',
|
|
508
|
+
message: formatMessage({
|
|
509
|
+
id: 'content-manager.validation.error',
|
|
510
|
+
defaultMessage: 'There are validation errors in your document. Please fix them before saving.'
|
|
511
|
+
})
|
|
512
|
+
});
|
|
513
|
+
}
|
|
479
514
|
return;
|
|
480
515
|
}
|
|
481
516
|
const res = await publish({
|
|
@@ -491,11 +526,59 @@ const transformData = (data)=>{
|
|
|
491
526
|
if ('data' in res && collectionType !== SINGLE_TYPES) {
|
|
492
527
|
/**
|
|
493
528
|
* TODO: refactor the router so we can just do `../${res.data.documentId}` instead of this.
|
|
494
|
-
*/ if (idToPublish === 'create') {
|
|
529
|
+
*/ if (idToPublish === 'create' && !fromRelationModal) {
|
|
495
530
|
navigate({
|
|
496
531
|
pathname: `../${collectionType}/${model}/${res.data.documentId}`,
|
|
497
532
|
search: rawQuery
|
|
498
533
|
});
|
|
534
|
+
} else if (fromRelationModal) {
|
|
535
|
+
const newRelation = {
|
|
536
|
+
documentId: res.data.documentId,
|
|
537
|
+
collectionType,
|
|
538
|
+
model,
|
|
539
|
+
params: currentDocumentMeta.params
|
|
540
|
+
};
|
|
541
|
+
/*
|
|
542
|
+
* Update, if needed, the parent relation with the newly published document.
|
|
543
|
+
* Check if in history we have the parent relation otherwise use the
|
|
544
|
+
* rootDocument
|
|
545
|
+
*/ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES)) {
|
|
546
|
+
const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
|
|
547
|
+
const metaDocumentToUpdate = documentHistory.at(-2) ?? rootDocumentMeta;
|
|
548
|
+
const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
|
|
549
|
+
try {
|
|
550
|
+
const updateRes = await updateDocumentMutation({
|
|
551
|
+
collectionType: metaDocumentToUpdate.collectionType,
|
|
552
|
+
model: metaDocumentToUpdate.model,
|
|
553
|
+
documentId: metaDocumentToUpdate.collectionType !== SINGLE_TYPES ? metaDocumentToUpdate.documentId : undefined,
|
|
554
|
+
params: metaDocumentToUpdate.params,
|
|
555
|
+
data: dataToUpdate
|
|
556
|
+
});
|
|
557
|
+
if ('error' in updateRes) {
|
|
558
|
+
toggleNotification({
|
|
559
|
+
type: 'danger',
|
|
560
|
+
message: formatAPIError(updateRes.error)
|
|
561
|
+
});
|
|
562
|
+
return;
|
|
563
|
+
}
|
|
564
|
+
} catch (err) {
|
|
565
|
+
toggleNotification({
|
|
566
|
+
type: 'danger',
|
|
567
|
+
message: formatMessage({
|
|
568
|
+
id: 'notification.error',
|
|
569
|
+
defaultMessage: 'An error occurred'
|
|
570
|
+
})
|
|
571
|
+
});
|
|
572
|
+
throw err;
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
dispatch({
|
|
576
|
+
type: 'GO_TO_CREATED_RELATION',
|
|
577
|
+
payload: {
|
|
578
|
+
document: newRelation,
|
|
579
|
+
shouldBypassConfirmation: true
|
|
580
|
+
}
|
|
581
|
+
});
|
|
499
582
|
}
|
|
500
583
|
} else if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
|
501
584
|
setErrors(formatValidationErrors(res.error));
|
|
@@ -571,14 +654,34 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
|
|
571
654
|
const { create, update, clone, isLoading } = useDocumentActions();
|
|
572
655
|
const [{ rawQuery }] = useQueryParams();
|
|
573
656
|
const onPreview = usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
|
|
657
|
+
const { getInitialFormValues } = useDoc();
|
|
574
658
|
const isSubmitting = useForm('UpdateAction', ({ isSubmitting })=>isSubmitting);
|
|
575
659
|
const modified = useForm('UpdateAction', ({ modified })=>modified);
|
|
576
660
|
const setSubmitting = useForm('UpdateAction', ({ setSubmitting })=>setSubmitting);
|
|
577
661
|
const document = useForm('UpdateAction', ({ values })=>values);
|
|
578
662
|
const validate = useForm('UpdateAction', (state)=>state.validate);
|
|
579
663
|
const setErrors = useForm('UpdateAction', (state)=>state.setErrors);
|
|
580
|
-
const resetForm = useForm('
|
|
664
|
+
const resetForm = useForm('UpdateAction', ({ resetForm })=>resetForm);
|
|
665
|
+
const dispatch = useRelationModal('UpdateAction', (state)=>state.dispatch);
|
|
666
|
+
// need to discriminate if the update is coming from a relation modal or in the edit view
|
|
667
|
+
const relationContext = useRelationModal('UpdateAction', ()=>true, false);
|
|
668
|
+
const fieldToConnect = useRelationModal('UpdateAction', (state)=>state.state.fieldToConnect, false);
|
|
669
|
+
const fieldToConnectUID = useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
|
|
670
|
+
const documentHistory = useRelationModal('UpdateAction', (state)=>state.state.documentHistory, false);
|
|
671
|
+
const rootDocumentMeta = useRelationModal('UpdateAction', (state)=>state.rootDocumentMeta);
|
|
672
|
+
const fromRelationModal = relationContext != undefined;
|
|
581
673
|
const { currentDocumentMeta } = useDocumentContext('UpdateAction');
|
|
674
|
+
const [updateDocumentMutation] = useUpdateDocumentMutation();
|
|
675
|
+
const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
|
|
676
|
+
const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
|
|
677
|
+
const parentDocumentData = useDocument({
|
|
678
|
+
documentId: parentDocumentMetaToUpdate?.documentId,
|
|
679
|
+
model: parentDocumentMetaToUpdate?.model,
|
|
680
|
+
collectionType: parentDocumentMetaToUpdate?.collectionType,
|
|
681
|
+
params: parentDocumentMetaToUpdate?.params
|
|
682
|
+
}, {
|
|
683
|
+
skip: !parentDocumentMetaToUpdate
|
|
684
|
+
});
|
|
582
685
|
const handleUpdate = React.useCallback(async ()=>{
|
|
583
686
|
setSubmitting(true);
|
|
584
687
|
try {
|
|
@@ -632,13 +735,64 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
|
|
632
735
|
params: currentDocumentMeta.params
|
|
633
736
|
}, transformData(document));
|
|
634
737
|
if ('data' in res && collectionType !== SINGLE_TYPES) {
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
738
|
+
if (fromRelationModal) {
|
|
739
|
+
const createdRelation = {
|
|
740
|
+
documentId: res.data.documentId,
|
|
741
|
+
collectionType,
|
|
742
|
+
model,
|
|
743
|
+
params: currentDocumentMeta.params
|
|
744
|
+
};
|
|
745
|
+
/*
|
|
746
|
+
* Update, if needed, the parent relation with the newly published document.
|
|
747
|
+
* Check if in history we have the parent relation otherwise use the
|
|
748
|
+
* rootDocument
|
|
749
|
+
*/ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES)) {
|
|
750
|
+
const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
|
|
751
|
+
const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
|
|
752
|
+
try {
|
|
753
|
+
const updateRes = await updateDocumentMutation({
|
|
754
|
+
collectionType: parentDocumentMetaToUpdate.collectionType,
|
|
755
|
+
model: parentDocumentMetaToUpdate.model,
|
|
756
|
+
documentId: parentDocumentMetaToUpdate.collectionType !== SINGLE_TYPES ? parentDocumentMetaToUpdate.documentId : undefined,
|
|
757
|
+
params: parentDocumentMetaToUpdate.params,
|
|
758
|
+
data: {
|
|
759
|
+
...dataToUpdate
|
|
760
|
+
}
|
|
761
|
+
});
|
|
762
|
+
if ('error' in updateRes) {
|
|
763
|
+
toggleNotification({
|
|
764
|
+
type: 'danger',
|
|
765
|
+
message: formatAPIError(updateRes.error)
|
|
766
|
+
});
|
|
767
|
+
return;
|
|
768
|
+
}
|
|
769
|
+
} catch (err) {
|
|
770
|
+
toggleNotification({
|
|
771
|
+
type: 'danger',
|
|
772
|
+
message: formatMessage({
|
|
773
|
+
id: 'notification.error',
|
|
774
|
+
defaultMessage: 'An error occurred'
|
|
775
|
+
})
|
|
776
|
+
});
|
|
777
|
+
throw err;
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
dispatch({
|
|
781
|
+
type: 'GO_TO_CREATED_RELATION',
|
|
782
|
+
payload: {
|
|
783
|
+
document: createdRelation,
|
|
784
|
+
shouldBypassConfirmation: true
|
|
785
|
+
}
|
|
786
|
+
});
|
|
787
|
+
} else {
|
|
788
|
+
navigate({
|
|
789
|
+
pathname: `../${res.data.documentId}`,
|
|
790
|
+
search: rawQuery
|
|
791
|
+
}, {
|
|
792
|
+
replace: true,
|
|
793
|
+
relative: 'path'
|
|
794
|
+
});
|
|
795
|
+
}
|
|
642
796
|
} else if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
|
643
797
|
setErrors(formatValidationErrors(res.error));
|
|
644
798
|
}
|
|
@@ -650,26 +804,36 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
|
|
650
804
|
}
|
|
651
805
|
}
|
|
652
806
|
}, [
|
|
807
|
+
setSubmitting,
|
|
808
|
+
modified,
|
|
809
|
+
validate,
|
|
810
|
+
isCloning,
|
|
811
|
+
documentId,
|
|
812
|
+
collectionType,
|
|
813
|
+
toggleNotification,
|
|
814
|
+
formatMessage,
|
|
653
815
|
clone,
|
|
816
|
+
model,
|
|
654
817
|
cloneMatch?.params.origin,
|
|
655
|
-
collectionType,
|
|
656
|
-
create,
|
|
657
818
|
currentDocumentMeta.params,
|
|
658
819
|
document,
|
|
659
|
-
documentId,
|
|
660
|
-
formatMessage,
|
|
661
|
-
formatValidationErrors,
|
|
662
|
-
isCloning,
|
|
663
|
-
model,
|
|
664
|
-
modified,
|
|
665
820
|
navigate,
|
|
666
821
|
rawQuery,
|
|
667
|
-
resetForm,
|
|
668
822
|
setErrors,
|
|
669
|
-
|
|
670
|
-
toggleNotification,
|
|
823
|
+
formatValidationErrors,
|
|
671
824
|
update,
|
|
672
|
-
|
|
825
|
+
resetForm,
|
|
826
|
+
create,
|
|
827
|
+
fromRelationModal,
|
|
828
|
+
fieldToConnect,
|
|
829
|
+
documentHistory,
|
|
830
|
+
parentDocumentMetaToUpdate,
|
|
831
|
+
dispatch,
|
|
832
|
+
getInitialFormValues,
|
|
833
|
+
parentDocumentData,
|
|
834
|
+
fieldToConnectUID,
|
|
835
|
+
updateDocumentMutation,
|
|
836
|
+
formatAPIError,
|
|
673
837
|
onPreview
|
|
674
838
|
]);
|
|
675
839
|
// Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux
|