@strapi/content-manager 5.49.0 → 5.50.0
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/layout.js +3 -1
- package/dist/admin/layout.js.map +1 -1
- package/dist/admin/layout.mjs +5 -3
- package/dist/admin/layout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +161 -72
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +161 -73
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +6 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +6 -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 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +6 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +6 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/draftRelationCounts.js +117 -0
- package/dist/admin/pages/EditView/utils/draftRelationCounts.js.map +1 -0
- package/dist/admin/pages/EditView/utils/draftRelationCounts.mjs +109 -0
- package/dist/admin/pages/EditView/utils/draftRelationCounts.mjs.map +1 -0
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js +2 -2
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +2 -2
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.js +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
- package/dist/admin/preview/pages/Preview.js +38 -11
- package/dist/admin/preview/pages/Preview.js.map +1 -1
- package/dist/admin/preview/pages/Preview.mjs +39 -12
- package/dist/admin/preview/pages/Preview.mjs.map +1 -1
- package/dist/admin/preview/utils/constants.js +9 -15
- package/dist/admin/preview/utils/constants.js.map +1 -1
- package/dist/admin/preview/utils/constants.mjs +10 -15
- package/dist/admin/preview/utils/constants.mjs.map +1 -1
- package/dist/admin/src/components/InjectionZone.d.ts +1 -2
- package/dist/admin/src/content-manager.d.ts +15 -15
- package/dist/admin/src/history/services/historyVersion.d.ts +2 -2
- package/dist/admin/src/hooks/useContentTypeSchema.d.ts +1 -1
- package/dist/admin/src/hooks/useDocument.d.ts +8 -9
- package/dist/admin/src/hooks/useDocumentLayout.d.ts +3 -3
- package/dist/admin/src/hooks/useDragAndDrop.d.ts +4 -4
- package/dist/admin/src/hooks/useKeyboardDragAndDrop.d.ts +1 -1
- package/dist/admin/src/hooks/usePersistentQueryParams.d.ts +0 -1
- package/dist/admin/src/modules/app.d.ts +5 -5
- package/dist/admin/src/pages/EditView/EditViewPage.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +12 -1
- package/dist/admin/src/pages/EditView/components/EditorToolbarObserver.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/conversions.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +4 -4
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +19 -20
- package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +12 -12
- package/dist/admin/src/pages/EditView/utils/draftRelationCounts.d.ts +26 -0
- package/dist/admin/src/pages/ListView/components/BulkActions/PublishAction.d.ts +1 -1
- package/dist/admin/src/pages/ListView/components/Filters.d.ts +1 -1
- package/dist/admin/src/pages/formatComponentConfigurationEditLayout.d.ts +1 -1
- package/dist/admin/src/preview/utils/constants.d.ts +1 -7
- package/dist/admin/src/preview/utils/getSendMessage.d.ts +0 -1
- package/dist/admin/src/services/documents.d.ts +30 -70
- package/dist/admin/src/services/relations.d.ts +6 -20
- package/dist/admin/src/services/uid.d.ts +5 -5
- package/dist/admin/src/utils/layouts/normalizeContentManagerLayout.d.ts +4 -4
- package/dist/admin/src/utils/users.d.ts +1 -1
- package/dist/admin/src/utils/validation.d.ts +1 -1
- package/dist/admin/translations/en.json.js +5 -2
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +5 -2
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/ja.json.js +262 -87
- package/dist/admin/translations/ja.json.js.map +1 -1
- package/dist/admin/translations/ja.json.mjs +262 -87
- package/dist/admin/translations/ja.json.mjs.map +1 -1
- package/dist/server/controllers/collection-types.js +2 -2
- package/dist/server/controllers/collection-types.js.map +1 -1
- package/dist/server/controllers/collection-types.mjs +2 -2
- package/dist/server/controllers/collection-types.mjs.map +1 -1
- package/dist/server/controllers/single-types.js +2 -2
- package/dist/server/controllers/single-types.js.map +1 -1
- package/dist/server/controllers/single-types.mjs +2 -2
- package/dist/server/controllers/single-types.mjs.map +1 -1
- package/dist/server/preview/controllers/preview.js +9 -0
- package/dist/server/preview/controllers/preview.js.map +1 -1
- package/dist/server/preview/controllers/preview.mjs +9 -0
- package/dist/server/preview/controllers/preview.mjs.map +1 -1
- package/dist/server/preview/controllers/previewScript.js +1450 -0
- package/dist/server/preview/routes/preview.js +11 -0
- package/dist/server/preview/routes/preview.js.map +1 -1
- package/dist/server/preview/routes/preview.mjs +11 -0
- package/dist/server/preview/routes/preview.mjs.map +1 -1
- package/dist/server/services/document-manager.js +13 -19
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +13 -19
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/utils/draft-relations.js +9 -0
- package/dist/server/services/utils/draft-relations.js.map +1 -0
- package/dist/server/services/utils/draft-relations.mjs +7 -0
- package/dist/server/services/utils/draft-relations.mjs.map +1 -0
- package/dist/server/services/utils/draft.js +118 -25
- package/dist/server/services/utils/draft.js.map +1 -1
- package/dist/server/services/utils/draft.mjs +118 -25
- package/dist/server/services/utils/draft.mjs.map +1 -1
- package/dist/server/services/utils/populate.js +15 -1
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs +15 -1
- package/dist/server/services/utils/populate.mjs.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/clone.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/document-status.d.ts +1 -1
- package/dist/server/src/controllers/utils/document-status.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +5 -5
- package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/dimensions.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/index.d.ts +3 -3
- package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/model-configuration.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/relations.d.ts +2 -2
- package/dist/server/src/history/controllers/history-version.d.ts +1 -7
- package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
- package/dist/server/src/history/controllers/index.d.ts +2 -1
- package/dist/server/src/history/controllers/index.d.ts.map +1 -1
- package/dist/server/src/history/controllers/validation/history-version.d.ts +1 -1
- package/dist/server/src/history/services/history.d.ts +0 -2
- package/dist/server/src/history/services/history.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/history/services/utils.d.ts +3 -3
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/history/utils.d.ts +1 -18
- package/dist/server/src/history/utils.d.ts.map +1 -1
- package/dist/server/src/homepage/controllers/homepage.d.ts +0 -1
- package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -1
- package/dist/server/src/homepage/controllers/index.d.ts +2 -1
- package/dist/server/src/homepage/controllers/index.d.ts.map +1 -1
- package/dist/server/src/homepage/index.d.ts +4 -8
- package/dist/server/src/homepage/index.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage-query-utils.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts +3 -4
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/dist/server/src/homepage/services/index.d.ts +4 -8
- package/dist/server/src/homepage/services/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +79 -85
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/mcp/derive-content-type-mcp-tools.d.ts.map +1 -1
- package/dist/server/src/mcp/handlers/collection-handlers.d.ts.map +1 -1
- package/dist/server/src/mcp/handlers/single-type-handlers.d.ts.map +1 -1
- package/dist/server/src/mcp/permissions.d.ts +1 -1
- package/dist/server/src/mcp/permissions.d.ts.map +1 -1
- package/dist/server/src/mcp/register-content-manager-mcp-tools.d.ts.map +1 -1
- package/dist/server/src/mcp/sanitizers/shape-relations.d.ts.map +1 -1
- package/dist/server/src/mcp/schemas/blocks-schema.d.ts.map +1 -1
- package/dist/server/src/mcp/schemas/data-schema.d.ts.map +1 -1
- package/dist/server/src/mcp/schemas/filters-schema.d.ts.map +1 -1
- package/dist/server/src/mcp/schemas/output-schemas.d.ts.map +1 -1
- package/dist/server/src/mcp/schemas/sort-schema.d.ts.map +1 -1
- package/dist/server/src/mcp/utils.d.ts.map +1 -1
- package/dist/server/src/middlewares/routing.d.ts.map +1 -1
- package/dist/server/src/policies/hasPermissions.d.ts.map +1 -1
- package/dist/server/src/policies/index.d.ts.map +1 -1
- package/dist/server/src/preview/controllers/index.d.ts +2 -1
- package/dist/server/src/preview/controllers/index.d.ts.map +1 -1
- package/dist/server/src/preview/controllers/preview.d.ts +5 -0
- package/dist/server/src/preview/controllers/preview.d.ts.map +1 -1
- package/dist/server/src/preview/controllers/validation/preview.d.ts +1 -2
- package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -1
- package/dist/server/src/preview/routes/preview.d.ts.map +1 -1
- package/dist/server/src/preview/services/index.d.ts +1 -1
- package/dist/server/src/preview/services/index.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview-config.d.ts +1 -1
- package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
- package/dist/server/src/preview/services/preview.d.ts.map +1 -1
- package/dist/server/src/preview/utils.d.ts +1 -16
- package/dist/server/src/preview/utils.d.ts.map +1 -1
- package/dist/server/src/services/components.d.ts +2 -2
- package/dist/server/src/services/components.d.ts.map +1 -1
- package/dist/server/src/services/configuration.d.ts.map +1 -1
- package/dist/server/src/services/content-types.d.ts.map +1 -1
- package/dist/server/src/services/data-mapper.d.ts +5 -5
- package/dist/server/src/services/data-mapper.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts +14 -14
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts +6 -6
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/field-sizes.d.ts +2 -2
- package/dist/server/src/services/field-sizes.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +78 -84
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/metrics.d.ts.map +1 -1
- package/dist/server/src/services/permission-checker.d.ts +12 -31
- package/dist/server/src/services/permission-checker.d.ts.map +1 -1
- package/dist/server/src/services/permission.d.ts.map +1 -1
- package/dist/server/src/services/populate-builder.d.ts +4 -4
- package/dist/server/src/services/populate-builder.d.ts.map +1 -1
- package/dist/server/src/services/uid.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/attributes.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/settings.d.ts.map +1 -1
- package/dist/server/src/services/utils/count.d.ts.map +1 -1
- package/dist/server/src/services/utils/draft-relations.d.ts +19 -0
- package/dist/server/src/services/utils/draft-relations.d.ts.map +1 -0
- package/dist/server/src/services/utils/draft.d.ts +8 -7
- package/dist/server/src/services/utils/draft.d.ts.map +1 -1
- package/dist/server/src/services/utils/populate.d.ts.map +1 -1
- package/dist/server/src/services/utils/store.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/src/validation/policies/hasPermissions.d.ts +1 -1
- package/dist/server/src/validation/zod.d.ts +1 -1
- package/dist/server/src/validation/zod.d.ts.map +1 -1
- package/dist/shared/contracts/collection-types.d.ts +4 -1
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/dist/shared/contracts/single-types.d.ts +4 -1
- package/dist/shared/contracts/single-types.d.ts.map +1 -1
- package/package.json +8 -8
- package/dist/admin/preview/utils/previewScript.js +0 -1068
- package/dist/admin/preview/utils/previewScript.js.map +0 -1
- package/dist/admin/preview/utils/previewScript.mjs +0 -1066
- package/dist/admin/preview/utils/previewScript.mjs.map +0 -1
- package/dist/admin/src/preview/utils/previewScript.d.ts +0 -32
|
@@ -21,9 +21,14 @@ import { useGetDraftRelationCountQuery as useLazyGetDraftRelationCountQuery, use
|
|
|
21
21
|
import { buildValidParams, isBaseQueryError } from '../../../utils/api.mjs';
|
|
22
22
|
import { getTranslation } from '../../../utils/translations.mjs';
|
|
23
23
|
import { handleInvisibleAttributes } from '../utils/data.mjs';
|
|
24
|
+
import { EMPTY_DRAFT_RELATION_COUNTS, countLocalDraftRelations, normalizeDraftRelationCounts, resolveDraftRelationCounts, getDraftRelationsPublishState } from '../utils/draftRelationCounts.mjs';
|
|
24
25
|
import { getEditViewShortcut } from '../utils/keyboardShortcuts.mjs';
|
|
25
26
|
import { useRelationModal } from './FormInputs/Relations/RelationModal.mjs';
|
|
26
27
|
|
|
28
|
+
const publishConfirmDialogOpeners = new Map();
|
|
29
|
+
const openPublishConfirmDialog = (scope)=>{
|
|
30
|
+
publishConfirmDialogOpeners.get(scope)?.();
|
|
31
|
+
};
|
|
27
32
|
const connectRelationToParent = (parentDataToUpdate, fieldToConnect, data, fieldToConnectUID)=>{
|
|
28
33
|
/*
|
|
29
34
|
* Check if the fieldToConnect is already present in the parentDataToUpdate.
|
|
@@ -151,6 +156,24 @@ const DocumentActions = ({ actions })=>{
|
|
|
151
156
|
const DocumentActionButton = ({ buttonType = 'button', ...action })=>{
|
|
152
157
|
const [dialogId, setDialogId] = React.useState(null);
|
|
153
158
|
const { toggleNotification } = useNotification();
|
|
159
|
+
React.useEffect(()=>{
|
|
160
|
+
const scope = action.publishConfirmScope;
|
|
161
|
+
if (action.type !== 'publish' || !action.dialog || !scope) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const open = ()=>setDialogId(action.id);
|
|
165
|
+
publishConfirmDialogOpeners.set(scope, open);
|
|
166
|
+
return ()=>{
|
|
167
|
+
if (publishConfirmDialogOpeners.get(scope) === open) {
|
|
168
|
+
publishConfirmDialogOpeners.delete(scope);
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
}, [
|
|
172
|
+
action.type,
|
|
173
|
+
action.dialog,
|
|
174
|
+
action.id,
|
|
175
|
+
action.publishConfirmScope
|
|
176
|
+
]);
|
|
154
177
|
const handleClick = (action)=>async (e)=>{
|
|
155
178
|
const { onClick = ()=>false, dialog, id } = action;
|
|
156
179
|
const muteDialog = await onClick(e);
|
|
@@ -301,7 +324,7 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
|
|
|
301
324
|
]
|
|
302
325
|
});
|
|
303
326
|
};
|
|
304
|
-
const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, content, isOpen, variant = 'secondary', loading })=>{
|
|
327
|
+
const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, content, bodyIcon, confirmLabel, isOpen, variant = 'secondary', loading })=>{
|
|
305
328
|
const { formatMessage } = useIntl();
|
|
306
329
|
const handleClose = async ()=>{
|
|
307
330
|
if (onCancel) {
|
|
@@ -315,6 +338,28 @@ const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, cont
|
|
|
315
338
|
}
|
|
316
339
|
onClose();
|
|
317
340
|
};
|
|
341
|
+
const dialogBody = bodyIcon ? /*#__PURE__*/ jsxs(Flex, {
|
|
342
|
+
direction: "column",
|
|
343
|
+
alignItems: "stretch",
|
|
344
|
+
gap: 2,
|
|
345
|
+
children: [
|
|
346
|
+
/*#__PURE__*/ jsx(Flex, {
|
|
347
|
+
justifyContent: "center",
|
|
348
|
+
children: /*#__PURE__*/ jsx(WarningCircle, {
|
|
349
|
+
width: "24px",
|
|
350
|
+
height: "24px",
|
|
351
|
+
fill: bodyIcon === 'danger' ? 'danger600' : 'primary600'
|
|
352
|
+
})
|
|
353
|
+
}),
|
|
354
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
355
|
+
id: "confirm-description",
|
|
356
|
+
tag: "p",
|
|
357
|
+
variant: "omega",
|
|
358
|
+
textAlign: "center",
|
|
359
|
+
children: content
|
|
360
|
+
})
|
|
361
|
+
]
|
|
362
|
+
}) : content;
|
|
318
363
|
return /*#__PURE__*/ jsx(Dialog.Root, {
|
|
319
364
|
open: isOpen,
|
|
320
365
|
onOpenChange: handleClose,
|
|
@@ -324,7 +369,7 @@ const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, cont
|
|
|
324
369
|
children: title
|
|
325
370
|
}),
|
|
326
371
|
/*#__PURE__*/ jsx(Dialog.Body, {
|
|
327
|
-
children:
|
|
372
|
+
children: dialogBody
|
|
328
373
|
}),
|
|
329
374
|
/*#__PURE__*/ jsxs(Dialog.Footer, {
|
|
330
375
|
children: [
|
|
@@ -343,7 +388,7 @@ const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, cont
|
|
|
343
388
|
variant: variant,
|
|
344
389
|
fullWidth: true,
|
|
345
390
|
loading: loading,
|
|
346
|
-
children: formatMessage({
|
|
391
|
+
children: confirmLabel ?? formatMessage({
|
|
347
392
|
id: 'app.components.Button.confirm',
|
|
348
393
|
defaultMessage: 'Confirm'
|
|
349
394
|
})
|
|
@@ -411,10 +456,11 @@ const transformData = (data)=>{
|
|
|
411
456
|
canReadFields
|
|
412
457
|
}));
|
|
413
458
|
const { publish, isLoading } = useDocumentActions();
|
|
414
|
-
const onPreview = usePreviewContext('
|
|
415
|
-
const [countDraftRelations, {
|
|
416
|
-
const [
|
|
417
|
-
const [
|
|
459
|
+
const onPreview = usePreviewContext('PublishAction', (state)=>state.onPreview, false);
|
|
460
|
+
const [countDraftRelations, { isError: isErrorDraftRelations }] = useLazyGetDraftRelationCountQuery();
|
|
461
|
+
const [localDraftRelationCounts, setLocalDraftRelationCounts] = React.useState(EMPTY_DRAFT_RELATION_COUNTS);
|
|
462
|
+
const [serverDraftRelationCounts, setServerDraftRelationCounts] = React.useState(EMPTY_DRAFT_RELATION_COUNTS);
|
|
463
|
+
const [isFetchingDraftRelations, setIsFetchingDraftRelations] = React.useState(false);
|
|
418
464
|
const [{ rawQuery }] = useQueryParams();
|
|
419
465
|
const modified = useForm('PublishAction', ({ modified })=>modified);
|
|
420
466
|
const setSubmitting = useForm('PublishAction', ({ setSubmitting })=>setSubmitting);
|
|
@@ -428,6 +474,8 @@ const transformData = (data)=>{
|
|
|
428
474
|
// need to discriminate if the publish is coming from a relation modal or in the edit view
|
|
429
475
|
const relationContext = useRelationModal('PublishAction', ()=>true, false);
|
|
430
476
|
const fromRelationModal = relationContext != undefined;
|
|
477
|
+
const isRelationModalOpen = useRelationModal('PublishAction', (state)=>state.state.isModalOpen, false);
|
|
478
|
+
const publishConfirmScope = fromRelationModal ? 'relation-modal' : onPreview ? 'preview' : 'panel';
|
|
431
479
|
const dispatch = useRelationModal('PublishAction', (state)=>state.dispatch);
|
|
432
480
|
const fieldToConnect = useRelationModal('PublishAction', (state)=>state.state.fieldToConnect, false);
|
|
433
481
|
const fieldToConnectUID = useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
|
|
@@ -454,49 +502,19 @@ const transformData = (data)=>{
|
|
|
454
502
|
formatMessage
|
|
455
503
|
]);
|
|
456
504
|
React.useEffect(()=>{
|
|
457
|
-
|
|
458
|
-
/**
|
|
459
|
-
* Extracts draft relations from the provided data object.
|
|
460
|
-
* It checks for a connect array of relations.
|
|
461
|
-
* If a relation has a status of 'draft', its id is added to the localDraftRelations set.
|
|
462
|
-
*/ const extractDraftRelations = (data)=>{
|
|
463
|
-
const relations = data.connect || [];
|
|
464
|
-
relations.forEach((relation)=>{
|
|
465
|
-
if (relation.status === 'draft') {
|
|
466
|
-
localDraftRelations.add(relation.id);
|
|
467
|
-
}
|
|
468
|
-
});
|
|
469
|
-
};
|
|
470
|
-
/**
|
|
471
|
-
* Recursively traverses the provided data object to extract draft relations from arrays within 'connect' keys.
|
|
472
|
-
* If the data is an object, it looks for 'connect' keys to pass their array values to extractDraftRelations.
|
|
473
|
-
* It recursively calls itself for any non-null objects it contains.
|
|
474
|
-
*/ const traverseAndExtract = (data)=>{
|
|
475
|
-
Object.entries(data).forEach(([key, value])=>{
|
|
476
|
-
if (key === 'connect' && Array.isArray(value)) {
|
|
477
|
-
extractDraftRelations({
|
|
478
|
-
connect: value
|
|
479
|
-
});
|
|
480
|
-
} else if (typeof value === 'object' && value !== null) {
|
|
481
|
-
traverseAndExtract(value);
|
|
482
|
-
}
|
|
483
|
-
});
|
|
484
|
-
};
|
|
485
|
-
if (!documentId || modified) {
|
|
486
|
-
traverseAndExtract(formValues);
|
|
487
|
-
setLocalCountOfDraftRelations(localDraftRelations.size);
|
|
488
|
-
}
|
|
505
|
+
setLocalDraftRelationCounts(countLocalDraftRelations(formValues, schema, components, model));
|
|
489
506
|
}, [
|
|
490
|
-
|
|
491
|
-
modified,
|
|
507
|
+
components,
|
|
492
508
|
formValues,
|
|
493
|
-
|
|
509
|
+
model,
|
|
510
|
+
schema
|
|
494
511
|
]);
|
|
495
|
-
React.
|
|
496
|
-
if (!document
|
|
512
|
+
const fetchDraftRelationsCount = React.useCallback(async ()=>{
|
|
513
|
+
if (!document?.documentId || isListView) {
|
|
497
514
|
return;
|
|
498
515
|
}
|
|
499
|
-
|
|
516
|
+
setIsFetchingDraftRelations(true);
|
|
517
|
+
try {
|
|
500
518
|
const { data, error } = await countDraftRelations({
|
|
501
519
|
collectionType,
|
|
502
520
|
model,
|
|
@@ -507,18 +525,36 @@ const transformData = (data)=>{
|
|
|
507
525
|
throw error;
|
|
508
526
|
}
|
|
509
527
|
if (data) {
|
|
510
|
-
|
|
528
|
+
setServerDraftRelationCounts(normalizeDraftRelationCounts(data));
|
|
511
529
|
}
|
|
512
|
-
}
|
|
513
|
-
|
|
530
|
+
} finally{
|
|
531
|
+
setIsFetchingDraftRelations(false);
|
|
532
|
+
}
|
|
514
533
|
}, [
|
|
515
|
-
isListView,
|
|
516
|
-
document,
|
|
517
|
-
documentId,
|
|
518
|
-
countDraftRelations,
|
|
519
534
|
collectionType,
|
|
520
|
-
|
|
521
|
-
currentDocumentMeta.params
|
|
535
|
+
countDraftRelations,
|
|
536
|
+
currentDocumentMeta.params,
|
|
537
|
+
document?.documentId,
|
|
538
|
+
documentId,
|
|
539
|
+
isListView,
|
|
540
|
+
model
|
|
541
|
+
]);
|
|
542
|
+
React.useEffect(()=>{
|
|
543
|
+
fetchDraftRelationsCount();
|
|
544
|
+
}, [
|
|
545
|
+
fetchDraftRelationsCount,
|
|
546
|
+
document?.updatedAt
|
|
547
|
+
]);
|
|
548
|
+
React.useEffect(()=>{
|
|
549
|
+
const handleWindowFocus = ()=>{
|
|
550
|
+
fetchDraftRelationsCount();
|
|
551
|
+
};
|
|
552
|
+
window.addEventListener('focus', handleWindowFocus);
|
|
553
|
+
return ()=>{
|
|
554
|
+
window.removeEventListener('focus', handleWindowFocus);
|
|
555
|
+
};
|
|
556
|
+
}, [
|
|
557
|
+
fetchDraftRelationsCount
|
|
522
558
|
]);
|
|
523
559
|
const parentDocumentMetaToUpdate = documentHistory?.at(-2) ?? rootDocumentMeta;
|
|
524
560
|
const parentDocumentData = useDocument({
|
|
@@ -660,11 +696,18 @@ const transformData = (data)=>{
|
|
|
660
696
|
}
|
|
661
697
|
}
|
|
662
698
|
};
|
|
663
|
-
const
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
699
|
+
const getFreshDraftRelationCounts = React.useCallback(()=>resolveDraftRelationCounts(documentId, modified, countLocalDraftRelations(getValues(), schema, components, model), serverDraftRelationCounts), [
|
|
700
|
+
components,
|
|
701
|
+
documentId,
|
|
702
|
+
getValues,
|
|
703
|
+
model,
|
|
704
|
+
modified,
|
|
705
|
+
schema,
|
|
706
|
+
serverDraftRelationCounts
|
|
707
|
+
]);
|
|
708
|
+
const draftRelationCounts = resolveDraftRelationCounts(documentId, modified, localDraftRelationCounts, serverDraftRelationCounts);
|
|
709
|
+
const { hasUnpublishedRelations, hasDraftM2mLinks, dialogVariant, bodyIcon, confirmLabel } = getDraftRelationsPublishState(draftRelationCounts);
|
|
710
|
+
const supportsDraftRelationWarning = Boolean(schema?.options?.draftAndPublish);
|
|
668
711
|
/**
|
|
669
712
|
* Disabled when:
|
|
670
713
|
* - currently if you're cloning a document we don't support publish & clone at the same time.
|
|
@@ -673,7 +716,7 @@ const transformData = (data)=>{
|
|
|
673
716
|
* - the document is already published & not modified
|
|
674
717
|
* - the document is being created & not modified
|
|
675
718
|
* - the user doesn't have the permission to publish
|
|
676
|
-
*/ const isDisabled = isCloning || isSubmitting ||
|
|
719
|
+
*/ const isDisabled = isCloning || isSubmitting || isFetchingDraftRelations || activeTab === 'published' || !modified && isDocumentPublished || !modified && !document?.documentId || !canPublish;
|
|
677
720
|
// Publish on CMD+Shift+Enter (macOS) / CTRL+Shift+Enter (Windows/Linux).
|
|
678
721
|
// Saving a draft (CMD/CTRL+Enter) is handled by the UpdateAction.
|
|
679
722
|
React.useEffect(()=>{
|
|
@@ -685,18 +728,29 @@ const transformData = (data)=>{
|
|
|
685
728
|
return;
|
|
686
729
|
}
|
|
687
730
|
e.preventDefault();
|
|
688
|
-
if (!
|
|
689
|
-
|
|
731
|
+
if (!fromRelationModal && isRelationModalOpen) {
|
|
732
|
+
return;
|
|
733
|
+
}
|
|
734
|
+
if (isDisabled) {
|
|
735
|
+
return;
|
|
690
736
|
}
|
|
737
|
+
if (getDraftRelationsPublishState(getFreshDraftRelationCounts()).hasDraftRelations) {
|
|
738
|
+
openPublishConfirmDialog(publishConfirmScope);
|
|
739
|
+
return;
|
|
740
|
+
}
|
|
741
|
+
performPublish();
|
|
691
742
|
};
|
|
692
743
|
window.addEventListener('keydown', handleKeyDown);
|
|
693
744
|
return ()=>{
|
|
694
745
|
window.removeEventListener('keydown', handleKeyDown);
|
|
695
746
|
};
|
|
696
747
|
}, [
|
|
697
|
-
|
|
748
|
+
fromRelationModal,
|
|
749
|
+
getFreshDraftRelationCounts,
|
|
698
750
|
isDisabled,
|
|
751
|
+
isRelationModalOpen,
|
|
699
752
|
performPublish,
|
|
753
|
+
publishConfirmScope,
|
|
700
754
|
schema?.options?.draftAndPublish
|
|
701
755
|
]);
|
|
702
756
|
if (!schema?.options?.draftAndPublish) {
|
|
@@ -711,26 +765,60 @@ const transformData = (data)=>{
|
|
|
711
765
|
'relation-modal'
|
|
712
766
|
],
|
|
713
767
|
disabled: isDisabled,
|
|
768
|
+
publishConfirmScope: supportsDraftRelationWarning ? publishConfirmScope : undefined,
|
|
714
769
|
label: formatMessage({
|
|
715
770
|
id: 'app.utils.publish',
|
|
716
771
|
defaultMessage: 'Publish'
|
|
717
772
|
}),
|
|
718
773
|
onClick: async ()=>{
|
|
774
|
+
if (getDraftRelationsPublishState(getFreshDraftRelationCounts()).hasDraftRelations) {
|
|
775
|
+
// Let DocumentActionButton open the confirmation dialog.
|
|
776
|
+
return;
|
|
777
|
+
}
|
|
719
778
|
await performPublish();
|
|
779
|
+
// Skip the registered dialog when publishing directly.
|
|
780
|
+
return true;
|
|
720
781
|
},
|
|
721
|
-
dialog:
|
|
782
|
+
dialog: supportsDraftRelationWarning ? {
|
|
722
783
|
type: 'dialog',
|
|
723
|
-
variant:
|
|
724
|
-
|
|
784
|
+
variant: dialogVariant,
|
|
785
|
+
bodyIcon,
|
|
725
786
|
title: formatMessage({
|
|
726
|
-
id: getTranslation(
|
|
787
|
+
id: getTranslation('popUpWarning.warning.has-draft-relations.title'),
|
|
727
788
|
defaultMessage: 'Confirmation'
|
|
728
789
|
}),
|
|
729
|
-
content:
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
790
|
+
content: /*#__PURE__*/ jsxs(Fragment, {
|
|
791
|
+
children: [
|
|
792
|
+
hasUnpublishedRelations ? formatMessage({
|
|
793
|
+
id: getTranslation('popUpWarning.warning.has-draft-relations.message'),
|
|
794
|
+
defaultMessage: 'This entry is related to {count, plural, one {# draft entry} other {# draft entries}}. {count, plural, one {That relation will not be included in the published version.} other {Those relations will not be included in the published version.}}'
|
|
795
|
+
}, {
|
|
796
|
+
count: draftRelationCounts.unpublishedRelations
|
|
797
|
+
}) : formatMessage({
|
|
798
|
+
id: getTranslation('popUpWarning.warning.has-draft-m2m-relations.message'),
|
|
799
|
+
defaultMessage: '{count, plural, one {# linked entry is still in draft. It will appear on the live site once that entry is published.} other {# linked entries are still in draft. They will appear on the live site once those entries are published.}}'
|
|
800
|
+
}, {
|
|
801
|
+
count: draftRelationCounts.draftM2mLinks
|
|
802
|
+
}),
|
|
803
|
+
hasUnpublishedRelations && hasDraftM2mLinks ? ` ${formatMessage({
|
|
804
|
+
id: getTranslation('popUpWarning.warning.has-draft-m2m-relations.additional'),
|
|
805
|
+
defaultMessage: '{count, plural, one {# many-to-many link points} other {# many-to-many links point}} to draft entries that will become visible once published.'
|
|
806
|
+
}, {
|
|
807
|
+
count: draftRelationCounts.draftM2mLinks
|
|
808
|
+
})}` : null,
|
|
809
|
+
' ',
|
|
810
|
+
formatMessage({
|
|
811
|
+
id: getTranslation('popUpWarning.warning.publish-question'),
|
|
812
|
+
defaultMessage: 'Do you still want to publish?'
|
|
813
|
+
})
|
|
814
|
+
]
|
|
815
|
+
}),
|
|
816
|
+
confirmLabel: confirmLabel === 'publish' ? formatMessage({
|
|
817
|
+
id: 'app.utils.publish',
|
|
818
|
+
defaultMessage: 'Publish'
|
|
819
|
+
}) : formatMessage({
|
|
820
|
+
id: getTranslation('popUpwarning.warning.has-draft-relations.button-confirm'),
|
|
821
|
+
defaultMessage: 'Publish without relations'
|
|
734
822
|
}),
|
|
735
823
|
onConfirm: async ()=>{
|
|
736
824
|
await performPublish();
|
|
@@ -1204,5 +1292,5 @@ const DEFAULT_ACTIONS = [
|
|
|
1204
1292
|
DiscardAction
|
|
1205
1293
|
];
|
|
1206
1294
|
|
|
1207
|
-
export { DEFAULT_ACTIONS, DocumentActionButton, DocumentActions, DocumentActionsMenu };
|
|
1295
|
+
export { DEFAULT_ACTIONS, DocumentActionButton, DocumentActions, DocumentActionsMenu, openPublishConfirmDialog };
|
|
1208
1296
|
//# sourceMappingURL=DocumentActions.mjs.map
|