@strapi/content-manager 0.0.0-experimental.8bf99b7c43ed372264c198d347a2ada9dfed174d → 0.0.0-experimental.8c28a74d1219c09f4ee67402fd3a26f182c4990a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/LeftMenu.js +30 -34
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/LeftMenu.mjs +32 -36
- package/dist/admin/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/components/Widgets.js +161 -0
- package/dist/admin/components/Widgets.js.map +1 -0
- package/dist/admin/components/Widgets.mjs +158 -0
- package/dist/admin/components/Widgets.mjs.map +1 -0
- package/dist/admin/content-manager.js.map +1 -1
- package/dist/admin/content-manager.mjs.map +1 -1
- package/dist/admin/history/pages/History.js +1 -9
- package/dist/admin/history/pages/History.js.map +1 -1
- package/dist/admin/history/pages/History.mjs +1 -9
- package/dist/admin/history/pages/History.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentActions.js +13 -2
- package/dist/admin/hooks/useDocumentActions.js.map +1 -1
- package/dist/admin/hooks/useDocumentActions.mjs +13 -2
- package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentContext.js +57 -0
- package/dist/admin/hooks/useDocumentContext.js.map +1 -0
- package/dist/admin/hooks/useDocumentContext.mjs +36 -0
- package/dist/admin/hooks/useDocumentContext.mjs.map +1 -0
- package/dist/admin/index.js +42 -5
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +42 -3
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +85 -93
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +86 -94
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +232 -51
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +238 -57
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +7 -12
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +8 -13
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +46 -95
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +48 -78
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +4 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +4 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +5 -16
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +5 -16
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +2 -3
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +2 -3
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +495 -345
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +495 -347
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +143 -86
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +146 -89
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.js +7 -7
- package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +7 -7
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +50 -97
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +51 -79
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +3 -10
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +3 -10
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +0 -77
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +1 -78
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/preview/components/PreviewHeader.js +3 -6
- package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
- package/dist/admin/preview/components/PreviewHeader.mjs +3 -6
- package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
- package/dist/admin/preview/pages/Preview.js +94 -102
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +94 -102
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/services/homepage.js +30 -0
- package/dist/admin/services/homepage.js.map +1 -0
- package/dist/admin/services/homepage.mjs +28 -0
- package/dist/admin/services/homepage.mjs.map +1 -0
- package/dist/admin/src/components/Widgets.d.ts +3 -0
- package/dist/admin/src/content-manager.d.ts +0 -3
- package/dist/admin/src/features/DocumentRBAC.d.ts +1 -1
- package/dist/admin/src/history/pages/History.d.ts +1 -1
- package/dist/admin/src/hooks/useDocumentContext.d.ts +30 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +73 -7
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +1 -0
- package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
- package/dist/admin/src/preview/pages/Preview.d.ts +2 -1
- package/dist/admin/src/services/homepage.d.ts +5 -0
- package/dist/admin/translations/en.json.js +2 -1
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +2 -1
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/ru.json.js +235 -226
- package/dist/admin/translations/ru.json.js.map +1 -1
- package/dist/admin/translations/ru.json.mjs +230 -226
- package/dist/admin/translations/ru.json.mjs.map +1 -1
- package/dist/server/controllers/index.js +3 -1
- package/dist/server/controllers/index.js.map +1 -1
- package/dist/server/controllers/index.mjs +3 -1
- package/dist/server/controllers/index.mjs.map +1 -1
- package/dist/server/homepage/controllers/homepage.js +57 -0
- package/dist/server/homepage/controllers/homepage.js.map +1 -0
- package/dist/server/homepage/controllers/homepage.mjs +36 -0
- package/dist/server/homepage/controllers/homepage.mjs.map +1 -0
- package/dist/server/homepage/controllers/index.js +10 -0
- package/dist/server/homepage/controllers/index.js.map +1 -0
- package/dist/server/homepage/controllers/index.mjs +8 -0
- package/dist/server/homepage/controllers/index.mjs.map +1 -0
- package/dist/server/homepage/index.js +14 -0
- package/dist/server/homepage/index.js.map +1 -0
- package/dist/server/homepage/index.mjs +12 -0
- package/dist/server/homepage/index.mjs.map +1 -0
- package/dist/server/homepage/routes/homepage.js +25 -0
- package/dist/server/homepage/routes/homepage.js.map +1 -0
- package/dist/server/homepage/routes/homepage.mjs +23 -0
- package/dist/server/homepage/routes/homepage.mjs.map +1 -0
- package/dist/server/homepage/routes/index.js +13 -0
- package/dist/server/homepage/routes/index.js.map +1 -0
- package/dist/server/homepage/routes/index.mjs +11 -0
- package/dist/server/homepage/routes/index.mjs.map +1 -0
- package/dist/server/homepage/services/homepage.js +157 -0
- package/dist/server/homepage/services/homepage.js.map +1 -0
- package/dist/server/homepage/services/homepage.mjs +155 -0
- package/dist/server/homepage/services/homepage.mjs.map +1 -0
- package/dist/server/homepage/services/index.js +10 -0
- package/dist/server/homepage/services/index.js.map +1 -0
- package/dist/server/homepage/services/index.mjs +8 -0
- package/dist/server/homepage/services/index.mjs.map +1 -0
- package/dist/server/preview/services/preview.js +0 -1
- package/dist/server/preview/services/preview.js.map +1 -1
- package/dist/server/preview/services/preview.mjs +0 -1
- package/dist/server/preview/services/preview.mjs.map +1 -1
- package/dist/server/routes/index.js +3 -1
- package/dist/server/routes/index.js.map +1 -1
- package/dist/server/routes/index.mjs +3 -1
- package/dist/server/routes/index.mjs.map +1 -1
- package/dist/server/services/index.js +3 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +3 -1
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/homepage/controllers/homepage.d.ts +7 -0
- package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -0
- package/dist/server/src/homepage/controllers/index.d.ts +2 -0
- package/dist/server/src/homepage/controllers/index.d.ts.map +1 -0
- package/dist/server/src/homepage/index.d.ts +16 -0
- package/dist/server/src/homepage/index.d.ts.map +1 -0
- package/dist/server/src/homepage/routes/homepage.d.ts +4 -0
- package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -0
- package/dist/server/src/homepage/routes/index.d.ts +8 -0
- package/dist/server/src/homepage/routes/index.d.ts.map +1 -0
- package/dist/server/src/homepage/services/homepage.d.ts +11 -0
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -0
- package/dist/server/src/homepage/services/index.d.ts +9 -0
- package/dist/server/src/homepage/services/index.d.ts.map +1 -0
- package/dist/server/src/index.d.ts +7 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview.d.ts.map +1 -1
- package/dist/server/src/routes/index.d.ts +1 -0
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/services/data-mapper.d.ts +0 -1
- package/dist/server/src/services/data-mapper.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +6 -1
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/shared/contracts/homepage.d.ts +25 -0
- package/dist/shared/contracts/homepage.d.ts.map +1 -0
- package/package.json +8 -8
- package/dist/admin/features/DocumentContext.js +0 -71
- package/dist/admin/features/DocumentContext.js.map +0 -1
- package/dist/admin/features/DocumentContext.mjs +0 -49
- package/dist/admin/features/DocumentContext.mjs.map +0 -1
- package/dist/admin/src/features/DocumentContext.d.ts +0 -53
@@ -1,23 +1,60 @@
|
|
1
|
-
import {
|
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 { Menu, Flex,
|
5
|
-
import { Cross, WarningCircle
|
4
|
+
import { Menu, Flex, Button, VisuallyHidden, Dialog, Modal, Typography, Radio } from '@strapi/design-system';
|
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
12
|
import { styled } from 'styled-components';
|
10
13
|
import { PUBLISHED_AT_ATTRIBUTE_NAME } from '../../../constants/attributes.mjs';
|
11
14
|
import { SINGLE_TYPES } from '../../../constants/collections.mjs';
|
12
|
-
import { useDocumentContext } from '../../../features/DocumentContext.mjs';
|
13
15
|
import { useDocumentRBAC } from '../../../features/DocumentRBAC.mjs';
|
14
|
-
import { useDoc } from '../../../hooks/useDocument.mjs';
|
16
|
+
import { useDocument, useDoc } from '../../../hooks/useDocument.mjs';
|
15
17
|
import { useDocumentActions } from '../../../hooks/useDocumentActions.mjs';
|
18
|
+
import { useDocumentContext } from '../../../hooks/useDocumentContext.mjs';
|
19
|
+
import { usePreviewContext } from '../../../preview/pages/Preview.mjs';
|
16
20
|
import { LIST_PATH, CLONE_PATH } from '../../../router.mjs';
|
17
|
-
import { useGetDraftRelationCountQuery as useLazyGetDraftRelationCountQuery } from '../../../services/documents.mjs';
|
18
|
-
import {
|
21
|
+
import { useGetDraftRelationCountQuery as useLazyGetDraftRelationCountQuery, useUpdateDocumentMutation } from '../../../services/documents.mjs';
|
22
|
+
import { isBaseQueryError, buildValidParams } from '../../../utils/api.mjs';
|
19
23
|
import { getTranslation } from '../../../utils/translations.mjs';
|
24
|
+
import { useRelationModal } from './FormInputs/Relations/RelationModal.mjs';
|
20
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
|
+
};
|
21
58
|
const DocumentActions = ({ actions })=>{
|
22
59
|
const { formatMessage } = useIntl();
|
23
60
|
const [primaryAction, secondaryAction, ...restActions] = actions.filter((action)=>{
|
@@ -350,8 +387,8 @@ const transformData = (data)=>{
|
|
350
387
|
};
|
351
388
|
/* -------------------------------------------------------------------------------------------------
|
352
389
|
* DocumentActionComponents
|
353
|
-
* -----------------------------------------------------------------------------------------------*/ const PublishAction = ({ activeTab, documentId, model, collectionType, meta, document
|
354
|
-
const schema = useDocumentContext('PublishAction'
|
390
|
+
* -----------------------------------------------------------------------------------------------*/ const PublishAction = ({ activeTab, documentId, model, collectionType, meta, document })=>{
|
391
|
+
const { currentDocument: { schema } } = useDocumentContext('PublishAction');
|
355
392
|
const navigate = useNavigate();
|
356
393
|
const { toggleNotification } = useNotification();
|
357
394
|
const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();
|
@@ -360,22 +397,31 @@ const transformData = (data)=>{
|
|
360
397
|
const { id } = useParams();
|
361
398
|
const { formatMessage } = useIntl();
|
362
399
|
const canPublish = useDocumentRBAC('PublishAction', ({ canPublish })=>canPublish);
|
363
|
-
const { publish, isLoading } = useDocumentActions(
|
400
|
+
const { publish, isLoading } = useDocumentActions();
|
401
|
+
const onPreview = usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
|
364
402
|
const [countDraftRelations, { isLoading: isLoadingDraftRelations, isError: isErrorDraftRelations }] = useLazyGetDraftRelationCountQuery();
|
365
403
|
const [localCountOfDraftRelations, setLocalCountOfDraftRelations] = React.useState(0);
|
366
404
|
const [serverCountOfDraftRelations, setServerCountOfDraftRelations] = React.useState(0);
|
367
|
-
const [{
|
368
|
-
const params = React.useMemo(()=>buildValidParams(query), [
|
369
|
-
query
|
370
|
-
]);
|
405
|
+
const [{ rawQuery }] = useQueryParams();
|
371
406
|
const modified = useForm('PublishAction', ({ modified })=>modified);
|
372
407
|
const setSubmitting = useForm('PublishAction', ({ setSubmitting })=>setSubmitting);
|
373
408
|
const isSubmitting = useForm('PublishAction', ({ isSubmitting })=>isSubmitting);
|
374
409
|
const validate = useForm('PublishAction', (state)=>state.validate);
|
375
410
|
const setErrors = useForm('PublishAction', (state)=>state.setErrors);
|
376
411
|
const formValues = useForm('PublishAction', ({ values })=>values);
|
377
|
-
const
|
378
|
-
|
412
|
+
const resetForm = useForm('PublishAction', ({ resetForm })=>resetForm);
|
413
|
+
// need to discriminate if the publish is coming from a relation modal or in the edit view
|
414
|
+
const relationContext = useRelationModal('PublishAction', ()=>true, false);
|
415
|
+
const fromRelationModal = relationContext != undefined;
|
416
|
+
const dispatch = useRelationModal('PublishAction', (state)=>state.dispatch);
|
417
|
+
const fieldToConnect = useRelationModal('PublishAction', (state)=>state.state.fieldToConnect, false);
|
418
|
+
const fieldToConnectUID = useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
|
419
|
+
const documentHistory = useRelationModal('PublishAction', (state)=>state.state.documentHistory, false);
|
420
|
+
const rootDocumentMeta = useRelationModal('PublishAction', (state)=>state.rootDocumentMeta);
|
421
|
+
const { currentDocumentMeta } = useDocumentContext('PublishAction');
|
422
|
+
const [updateDocumentMutation] = useUpdateDocumentMutation();
|
423
|
+
const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
|
424
|
+
const idToPublish = currentDocumentMeta.documentId || id;
|
379
425
|
React.useEffect(()=>{
|
380
426
|
if (isErrorDraftRelations) {
|
381
427
|
toggleNotification({
|
@@ -439,7 +485,7 @@ const transformData = (data)=>{
|
|
439
485
|
collectionType,
|
440
486
|
model,
|
441
487
|
documentId,
|
442
|
-
params
|
488
|
+
params: currentDocumentMeta.params
|
443
489
|
});
|
444
490
|
if (error) {
|
445
491
|
throw error;
|
@@ -456,8 +502,18 @@ const transformData = (data)=>{
|
|
456
502
|
countDraftRelations,
|
457
503
|
collectionType,
|
458
504
|
model,
|
459
|
-
params
|
505
|
+
currentDocumentMeta.params
|
460
506
|
]);
|
507
|
+
const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
|
508
|
+
const parentDocumentData = useDocument({
|
509
|
+
documentId: parentDocumentMetaToUpdate?.documentId,
|
510
|
+
model: parentDocumentMetaToUpdate?.model,
|
511
|
+
collectionType: parentDocumentMetaToUpdate?.collectionType,
|
512
|
+
params: parentDocumentMetaToUpdate?.params
|
513
|
+
}, {
|
514
|
+
skip: !parentDocumentMetaToUpdate
|
515
|
+
});
|
516
|
+
const { getInitialFormValues } = useDoc();
|
461
517
|
const isDocumentPublished = (document?.[PUBLISHED_AT_ATTRIBUTE_NAME] || meta?.availableStatus.some((doc)=>doc[PUBLISHED_AT_ATTRIBUTE_NAME] !== null)) && document?.status !== 'modified';
|
462
518
|
if (!schema?.options?.draftAndPublish) {
|
463
519
|
return null;
|
@@ -478,21 +534,72 @@ const transformData = (data)=>{
|
|
478
534
|
});
|
479
535
|
return;
|
480
536
|
}
|
481
|
-
const isPublishingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
|
482
537
|
const res = await publish({
|
483
538
|
collectionType,
|
484
539
|
model,
|
485
540
|
documentId,
|
486
|
-
params:
|
541
|
+
params: currentDocumentMeta.params
|
487
542
|
}, transformData(formValues));
|
543
|
+
// Reset form if successful
|
544
|
+
if ('data' in res) {
|
545
|
+
resetForm();
|
546
|
+
}
|
488
547
|
if ('data' in res && collectionType !== SINGLE_TYPES) {
|
489
548
|
/**
|
490
549
|
* TODO: refactor the router so we can just do `../${res.data.documentId}` instead of this.
|
491
|
-
*/ if (
|
550
|
+
*/ if (idToPublish === 'create' && !fromRelationModal) {
|
492
551
|
navigate({
|
493
552
|
pathname: `../${collectionType}/${model}/${res.data.documentId}`,
|
494
553
|
search: rawQuery
|
495
554
|
});
|
555
|
+
} else if (fromRelationModal) {
|
556
|
+
const newRelation = {
|
557
|
+
documentId: res.data.documentId,
|
558
|
+
collectionType,
|
559
|
+
model,
|
560
|
+
params: currentDocumentMeta.params
|
561
|
+
};
|
562
|
+
/*
|
563
|
+
* Update, if needed, the parent relation with the newly published document.
|
564
|
+
* Check if in history we have the parent relation otherwise use the
|
565
|
+
* rootDocument
|
566
|
+
*/ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES)) {
|
567
|
+
const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
|
568
|
+
const metaDocumentToUpdate = documentHistory.at(-2) ?? rootDocumentMeta;
|
569
|
+
const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
|
570
|
+
try {
|
571
|
+
const updateRes = await updateDocumentMutation({
|
572
|
+
collectionType: metaDocumentToUpdate.collectionType,
|
573
|
+
model: metaDocumentToUpdate.model,
|
574
|
+
documentId: metaDocumentToUpdate.collectionType !== SINGLE_TYPES ? metaDocumentToUpdate.documentId : undefined,
|
575
|
+
params: metaDocumentToUpdate.params,
|
576
|
+
data: dataToUpdate
|
577
|
+
});
|
578
|
+
if ('error' in updateRes) {
|
579
|
+
toggleNotification({
|
580
|
+
type: 'danger',
|
581
|
+
message: formatAPIError(updateRes.error)
|
582
|
+
});
|
583
|
+
return;
|
584
|
+
}
|
585
|
+
} catch (err) {
|
586
|
+
toggleNotification({
|
587
|
+
type: 'danger',
|
588
|
+
message: formatMessage({
|
589
|
+
id: 'notification.error',
|
590
|
+
defaultMessage: 'An error occurred'
|
591
|
+
})
|
592
|
+
});
|
593
|
+
throw err;
|
594
|
+
}
|
595
|
+
}
|
596
|
+
dispatch({
|
597
|
+
type: 'GO_TO_CREATED_RELATION',
|
598
|
+
payload: {
|
599
|
+
document: newRelation,
|
600
|
+
shouldBypassConfirmation: true
|
601
|
+
}
|
602
|
+
});
|
496
603
|
}
|
497
604
|
} else if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
498
605
|
setErrors(formatValidationErrors(res.error));
|
@@ -558,27 +665,44 @@ PublishAction.position = [
|
|
558
665
|
'preview',
|
559
666
|
'relation-modal'
|
560
667
|
];
|
561
|
-
const UpdateAction = ({ activeTab, documentId, model, collectionType
|
668
|
+
const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
562
669
|
const navigate = useNavigate();
|
563
670
|
const { toggleNotification } = useNotification();
|
564
671
|
const { _unstableFormatValidationErrors: formatValidationErrors } = useAPIErrorHandler();
|
565
672
|
const cloneMatch = useMatch(CLONE_PATH);
|
566
673
|
const isCloning = cloneMatch !== null;
|
567
674
|
const { formatMessage } = useIntl();
|
568
|
-
const { create, update, clone, isLoading } = useDocumentActions(
|
569
|
-
const [{
|
570
|
-
const
|
571
|
-
|
572
|
-
]);
|
675
|
+
const { create, update, clone, isLoading } = useDocumentActions();
|
676
|
+
const [{ rawQuery }] = useQueryParams();
|
677
|
+
const onPreview = usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
|
678
|
+
const { getInitialFormValues } = useDoc();
|
573
679
|
const isSubmitting = useForm('UpdateAction', ({ isSubmitting })=>isSubmitting);
|
574
680
|
const modified = useForm('UpdateAction', ({ modified })=>modified);
|
575
681
|
const setSubmitting = useForm('UpdateAction', ({ setSubmitting })=>setSubmitting);
|
576
682
|
const document = useForm('UpdateAction', ({ values })=>values);
|
577
683
|
const validate = useForm('UpdateAction', (state)=>state.validate);
|
578
684
|
const setErrors = useForm('UpdateAction', (state)=>state.setErrors);
|
579
|
-
const resetForm = useForm('
|
580
|
-
const
|
581
|
-
|
685
|
+
const resetForm = useForm('UpdateAction', ({ resetForm })=>resetForm);
|
686
|
+
const dispatch = useRelationModal('UpdateAction', (state)=>state.dispatch);
|
687
|
+
// need to discriminate if the update is coming from a relation modal or in the edit view
|
688
|
+
const relationContext = useRelationModal('UpdateAction', ()=>true, false);
|
689
|
+
const fieldToConnect = useRelationModal('UpdateAction', (state)=>state.state.fieldToConnect, false);
|
690
|
+
const fieldToConnectUID = useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
|
691
|
+
const documentHistory = useRelationModal('UpdateAction', (state)=>state.state.documentHistory, false);
|
692
|
+
const rootDocumentMeta = useRelationModal('UpdateAction', (state)=>state.rootDocumentMeta);
|
693
|
+
const fromRelationModal = relationContext != undefined;
|
694
|
+
const { currentDocumentMeta } = useDocumentContext('UpdateAction');
|
695
|
+
const [updateDocumentMutation] = useUpdateDocumentMutation();
|
696
|
+
const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
|
697
|
+
const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
|
698
|
+
const parentDocumentData = useDocument({
|
699
|
+
documentId: parentDocumentMetaToUpdate?.documentId,
|
700
|
+
model: parentDocumentMetaToUpdate?.model,
|
701
|
+
collectionType: parentDocumentMetaToUpdate?.collectionType,
|
702
|
+
params: parentDocumentMetaToUpdate?.params
|
703
|
+
}, {
|
704
|
+
skip: !parentDocumentMetaToUpdate
|
705
|
+
});
|
582
706
|
const handleUpdate = React.useCallback(async ()=>{
|
583
707
|
setSubmitting(true);
|
584
708
|
try {
|
@@ -602,7 +726,7 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
|
|
602
726
|
const res = await clone({
|
603
727
|
model,
|
604
728
|
documentId: cloneMatch.params.origin,
|
605
|
-
params
|
729
|
+
params: currentDocumentMeta.params
|
606
730
|
}, transformData(document));
|
607
731
|
if ('data' in res) {
|
608
732
|
navigate({
|
@@ -615,12 +739,11 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
|
|
615
739
|
setErrors(formatValidationErrors(res.error));
|
616
740
|
}
|
617
741
|
} else if (documentId || collectionType === SINGLE_TYPES) {
|
618
|
-
const isEditingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
|
619
742
|
const res = await update({
|
620
743
|
collectionType,
|
621
744
|
model,
|
622
745
|
documentId,
|
623
|
-
params:
|
746
|
+
params: currentDocumentMeta.params
|
624
747
|
}, transformData(document));
|
625
748
|
if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
626
749
|
setErrors(formatValidationErrors(res.error));
|
@@ -630,16 +753,67 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
|
|
630
753
|
} else {
|
631
754
|
const res = await create({
|
632
755
|
model,
|
633
|
-
params
|
756
|
+
params: currentDocumentMeta.params
|
634
757
|
}, transformData(document));
|
635
758
|
if ('data' in res && collectionType !== SINGLE_TYPES) {
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
759
|
+
if (fromRelationModal) {
|
760
|
+
const createdRelation = {
|
761
|
+
documentId: res.data.documentId,
|
762
|
+
collectionType,
|
763
|
+
model,
|
764
|
+
params: currentDocumentMeta.params
|
765
|
+
};
|
766
|
+
/*
|
767
|
+
* Update, if needed, the parent relation with the newly published document.
|
768
|
+
* Check if in history we have the parent relation otherwise use the
|
769
|
+
* rootDocument
|
770
|
+
*/ if (fieldToConnect && documentHistory && (parentDocumentMetaToUpdate.documentId || parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES)) {
|
771
|
+
const parentDataToUpdate = parentDocumentMetaToUpdate.collectionType === SINGLE_TYPES ? getInitialFormValues() : parentDocumentData.getInitialFormValues();
|
772
|
+
const dataToUpdate = connectRelationToParent(parentDataToUpdate, fieldToConnect, res.data, fieldToConnectUID);
|
773
|
+
try {
|
774
|
+
const updateRes = await updateDocumentMutation({
|
775
|
+
collectionType: parentDocumentMetaToUpdate.collectionType,
|
776
|
+
model: parentDocumentMetaToUpdate.model,
|
777
|
+
documentId: parentDocumentMetaToUpdate.collectionType !== SINGLE_TYPES ? parentDocumentMetaToUpdate.documentId : undefined,
|
778
|
+
params: parentDocumentMetaToUpdate.params,
|
779
|
+
data: {
|
780
|
+
...dataToUpdate
|
781
|
+
}
|
782
|
+
});
|
783
|
+
if ('error' in updateRes) {
|
784
|
+
toggleNotification({
|
785
|
+
type: 'danger',
|
786
|
+
message: formatAPIError(updateRes.error)
|
787
|
+
});
|
788
|
+
return;
|
789
|
+
}
|
790
|
+
} catch (err) {
|
791
|
+
toggleNotification({
|
792
|
+
type: 'danger',
|
793
|
+
message: formatMessage({
|
794
|
+
id: 'notification.error',
|
795
|
+
defaultMessage: 'An error occurred'
|
796
|
+
})
|
797
|
+
});
|
798
|
+
throw err;
|
799
|
+
}
|
800
|
+
}
|
801
|
+
dispatch({
|
802
|
+
type: 'GO_TO_CREATED_RELATION',
|
803
|
+
payload: {
|
804
|
+
document: createdRelation,
|
805
|
+
shouldBypassConfirmation: true
|
806
|
+
}
|
807
|
+
});
|
808
|
+
} else {
|
809
|
+
navigate({
|
810
|
+
pathname: `../${res.data.documentId}`,
|
811
|
+
search: rawQuery
|
812
|
+
}, {
|
813
|
+
replace: true,
|
814
|
+
relative: 'path'
|
815
|
+
});
|
816
|
+
}
|
643
817
|
} else if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
644
818
|
setErrors(formatValidationErrors(res.error));
|
645
819
|
}
|
@@ -651,30 +825,37 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview,
|
|
651
825
|
}
|
652
826
|
}
|
653
827
|
}, [
|
828
|
+
setSubmitting,
|
829
|
+
modified,
|
830
|
+
validate,
|
831
|
+
isCloning,
|
832
|
+
documentId,
|
833
|
+
collectionType,
|
834
|
+
toggleNotification,
|
835
|
+
formatMessage,
|
654
836
|
clone,
|
837
|
+
model,
|
655
838
|
cloneMatch?.params.origin,
|
656
|
-
collectionType,
|
657
|
-
create,
|
658
|
-
currentDocumentMeta.documentId,
|
659
839
|
currentDocumentMeta.params,
|
660
840
|
document,
|
661
|
-
documentId,
|
662
|
-
formatMessage,
|
663
|
-
formatValidationErrors,
|
664
|
-
isCloning,
|
665
|
-
model,
|
666
|
-
modified,
|
667
841
|
navigate,
|
668
|
-
onPreview,
|
669
|
-
params,
|
670
842
|
rawQuery,
|
671
|
-
resetForm,
|
672
|
-
rootDocumentMeta.documentId,
|
673
843
|
setErrors,
|
674
|
-
|
675
|
-
toggleNotification,
|
844
|
+
formatValidationErrors,
|
676
845
|
update,
|
677
|
-
|
846
|
+
resetForm,
|
847
|
+
create,
|
848
|
+
fromRelationModal,
|
849
|
+
fieldToConnect,
|
850
|
+
documentHistory,
|
851
|
+
parentDocumentMetaToUpdate,
|
852
|
+
dispatch,
|
853
|
+
getInitialFormValues,
|
854
|
+
parentDocumentData,
|
855
|
+
fieldToConnectUID,
|
856
|
+
updateDocumentMutation,
|
857
|
+
formatAPIError,
|
858
|
+
onPreview
|
678
859
|
]);
|
679
860
|
// Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux
|
680
861
|
React.useEffect(()=>{
|