@strapi/content-manager 0.0.0-experimental.f37a0ea0333947b6879c4608fae75646d63c07a1 → 0.0.0-experimental.f3ec579d505563eb88e01308248766a76e49d9b3
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/history/components/VersionContent.js +3 -24
- package/dist/admin/history/components/VersionContent.js.map +1 -1
- package/dist/admin/history/components/VersionContent.mjs +4 -25
- package/dist/admin/history/components/VersionContent.mjs.map +1 -1
- package/dist/admin/hooks/useDocumentActions.js +2 -5
- package/dist/admin/hooks/useDocumentActions.js.map +1 -1
- package/dist/admin/hooks/useDocumentActions.mjs +2 -5
- package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
- package/dist/admin/index.js +0 -2
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +0 -1
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.js +6 -18
- package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/pages/EditView/EditViewPage.mjs +7 -19
- package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +63 -59
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +65 -61
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +1 -12
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +2 -13
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +2 -13
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +3 -14
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +5 -18
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +7 -20
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +0 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +0 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +105 -153
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +108 -156
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +118 -86
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +118 -86
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.js +3 -27
- package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormLayout.mjs +3 -27
- package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js +0 -103
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs +1 -103
- package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.js +65 -74
- package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
- package/dist/admin/pages/ListView/ListViewPage.mjs +66 -75
- package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.js +3 -13
- package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableActions.mjs +3 -13
- package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
- package/dist/admin/services/api.js +1 -2
- package/dist/admin/services/api.js.map +1 -1
- package/dist/admin/services/api.mjs +1 -2
- package/dist/admin/services/api.mjs.map +1 -1
- package/dist/admin/services/documents.js +4 -4
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs +4 -4
- package/dist/admin/services/documents.mjs.map +1 -1
- package/dist/admin/src/exports.d.ts +0 -1
- package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
- package/dist/admin/src/hooks/useDocumentActions.d.ts +0 -1
- package/dist/admin/src/pages/EditView/utils/data.d.ts +1 -19
- package/dist/admin/src/preview/services/preview.d.ts +1 -1
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/components.d.ts +2 -2
- package/dist/admin/src/services/contentTypes.d.ts +3 -3
- package/dist/admin/src/services/documents.d.ts +17 -23
- package/dist/admin/src/services/homepage.d.ts +1 -1
- package/dist/admin/src/services/init.d.ts +1 -1
- package/dist/admin/src/services/relations.d.ts +2 -2
- package/dist/admin/src/services/uid.d.ts +3 -3
- package/dist/admin/src/utils/validation.d.ts +0 -1
- package/dist/admin/translations/fr.json.js +1 -6
- package/dist/admin/translations/fr.json.js.map +1 -1
- package/dist/admin/translations/fr.json.mjs +1 -6
- package/dist/admin/translations/fr.json.mjs.map +1 -1
- package/dist/admin/utils/validation.js +5 -16
- package/dist/admin/utils/validation.js.map +1 -1
- package/dist/admin/utils/validation.mjs +5 -16
- package/dist/admin/utils/validation.mjs.map +1 -1
- package/dist/server/controllers/relations.js +2 -2
- package/dist/server/controllers/relations.js.map +1 -1
- package/dist/server/controllers/relations.mjs +2 -2
- package/dist/server/controllers/relations.mjs.map +1 -1
- package/dist/server/homepage/services/homepage.js +49 -58
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs +49 -58
- package/dist/server/homepage/services/homepage.mjs.map +1 -1
- package/dist/server/services/document-manager.js +0 -3
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +0 -3
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/document-metadata.js +1 -1
- package/dist/server/services/document-metadata.js.map +1 -1
- package/dist/server/services/document-metadata.mjs +1 -1
- package/dist/server/services/document-metadata.mjs.map +1 -1
- package/dist/server/services/utils/populate.js +0 -11
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs +0 -11
- package/dist/server/services/utils/populate.mjs.map +1 -1
- package/dist/server/src/homepage/index.d.ts +0 -2
- package/dist/server/src/homepage/index.d.ts.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts +1 -3
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/dist/server/src/homepage/services/index.d.ts +0 -2
- package/dist/server/src/homepage/services/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +0 -2
- package/dist/server/src/index.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 +0 -2
- package/dist/server/src/services/index.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 +1 -0
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/package.json +7 -7
|
@@ -11,6 +11,7 @@ var merge = require('lodash/merge');
|
|
|
11
11
|
var set = require('lodash/set');
|
|
12
12
|
var reactIntl = require('react-intl');
|
|
13
13
|
var reactRouterDom = require('react-router-dom');
|
|
14
|
+
var styledComponents = require('styled-components');
|
|
14
15
|
var attributes = require('../../../constants/attributes.js');
|
|
15
16
|
var collections = require('../../../constants/collections.js');
|
|
16
17
|
var DocumentRBAC = require('../../../features/DocumentRBAC.js');
|
|
@@ -22,7 +23,6 @@ var router = require('../../../router.js');
|
|
|
22
23
|
var documents = require('../../../services/documents.js');
|
|
23
24
|
var api = require('../../../utils/api.js');
|
|
24
25
|
var translations = require('../../../utils/translations.js');
|
|
25
|
-
var data = require('../utils/data.js');
|
|
26
26
|
var RelationModal = require('./FormInputs/Relations/RelationModal.js');
|
|
27
27
|
|
|
28
28
|
function _interopNamespaceDefault(e) {
|
|
@@ -96,33 +96,23 @@ const DocumentActions = ({ actions })=>{
|
|
|
96
96
|
alignItems: "stretch",
|
|
97
97
|
width: "100%",
|
|
98
98
|
children: [
|
|
99
|
-
/*#__PURE__*/ jsxRuntime.
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
primaryAction
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
defaultMessage: 'More document actions'
|
|
115
|
-
})
|
|
116
|
-
}) : null
|
|
117
|
-
]
|
|
118
|
-
})
|
|
99
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
100
|
+
gap: 2,
|
|
101
|
+
children: [
|
|
102
|
+
/*#__PURE__*/ jsxRuntime.jsx(DocumentActionButton, {
|
|
103
|
+
...primaryAction,
|
|
104
|
+
variant: primaryAction.variant || 'default'
|
|
105
|
+
}),
|
|
106
|
+
restActions.length > 0 ? /*#__PURE__*/ jsxRuntime.jsx(DocumentActionsMenu, {
|
|
107
|
+
actions: restActions,
|
|
108
|
+
label: formatMessage({
|
|
109
|
+
id: 'content-manager.containers.edit.panels.default.more-actions',
|
|
110
|
+
defaultMessage: 'More document actions'
|
|
111
|
+
})
|
|
112
|
+
}) : null
|
|
113
|
+
]
|
|
119
114
|
}),
|
|
120
|
-
secondaryAction ?
|
|
121
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(DocumentActionButton, {
|
|
122
|
-
...secondaryAction,
|
|
123
|
-
variant: secondaryAction.variant || 'secondary'
|
|
124
|
-
})
|
|
125
|
-
}) : /*#__PURE__*/ jsxRuntime.jsx(DocumentActionButton, {
|
|
115
|
+
secondaryAction ? /*#__PURE__*/ jsxRuntime.jsx(DocumentActionButton, {
|
|
126
116
|
...secondaryAction,
|
|
127
117
|
variant: secondaryAction.variant || 'secondary'
|
|
128
118
|
}) : null
|
|
@@ -184,6 +174,11 @@ const DocumentActionButton = (action)=>{
|
|
|
184
174
|
]
|
|
185
175
|
});
|
|
186
176
|
};
|
|
177
|
+
const MenuItem = styledComponents.styled(designSystem.Menu.Item)`
|
|
178
|
+
&:hover {
|
|
179
|
+
background: ${({ theme, isVariantDanger, isDisabled })=>isVariantDanger && !isDisabled ? theme.colors.danger100 : 'neutral'};
|
|
180
|
+
}
|
|
181
|
+
`;
|
|
187
182
|
const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })=>{
|
|
188
183
|
const [isOpen, setIsOpen] = React__namespace.useState(false);
|
|
189
184
|
const [dialogId, setDialogId] = React__namespace.useState(null);
|
|
@@ -245,19 +240,27 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
|
|
|
245
240
|
popoverPlacement: "bottom-end",
|
|
246
241
|
children: [
|
|
247
242
|
actions.map((action)=>{
|
|
248
|
-
return /*#__PURE__*/ jsxRuntime.jsx(
|
|
243
|
+
return /*#__PURE__*/ jsxRuntime.jsx(MenuItem, {
|
|
249
244
|
disabled: action.disabled,
|
|
250
245
|
/* @ts-expect-error – TODO: this is an error in the DS where it is most likely a synthetic event, not regular. */ onSelect: handleClick(action),
|
|
251
246
|
display: "block",
|
|
252
|
-
|
|
253
|
-
|
|
247
|
+
isVariantDanger: action.variant === 'danger',
|
|
248
|
+
isDisabled: action.disabled,
|
|
254
249
|
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
255
250
|
justifyContent: "space-between",
|
|
256
251
|
gap: 4,
|
|
257
|
-
children: /*#__PURE__*/ jsxRuntime.
|
|
252
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
253
|
+
color: !action.disabled ? convertActionVariantToColor(action.variant) : 'inherit',
|
|
258
254
|
gap: 2,
|
|
259
255
|
tag: "span",
|
|
260
|
-
children:
|
|
256
|
+
children: [
|
|
257
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
258
|
+
tag: "span",
|
|
259
|
+
color: !action.disabled ? convertActionVariantToIconColor(action.variant) : 'inherit',
|
|
260
|
+
children: action.icon
|
|
261
|
+
}),
|
|
262
|
+
action.label
|
|
263
|
+
]
|
|
261
264
|
})
|
|
262
265
|
})
|
|
263
266
|
}, action.id);
|
|
@@ -285,6 +288,30 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
|
|
|
285
288
|
]
|
|
286
289
|
});
|
|
287
290
|
};
|
|
291
|
+
const convertActionVariantToColor = (variant = 'secondary')=>{
|
|
292
|
+
switch(variant){
|
|
293
|
+
case 'danger':
|
|
294
|
+
return 'danger600';
|
|
295
|
+
case 'secondary':
|
|
296
|
+
return undefined;
|
|
297
|
+
case 'success':
|
|
298
|
+
return 'success600';
|
|
299
|
+
default:
|
|
300
|
+
return 'primary600';
|
|
301
|
+
}
|
|
302
|
+
};
|
|
303
|
+
const convertActionVariantToIconColor = (variant = 'secondary')=>{
|
|
304
|
+
switch(variant){
|
|
305
|
+
case 'danger':
|
|
306
|
+
return 'danger600';
|
|
307
|
+
case 'secondary':
|
|
308
|
+
return 'neutral500';
|
|
309
|
+
case 'success':
|
|
310
|
+
return 'success600';
|
|
311
|
+
default:
|
|
312
|
+
return 'primary600';
|
|
313
|
+
}
|
|
314
|
+
};
|
|
288
315
|
const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, content, isOpen, variant = 'secondary', loading })=>{
|
|
289
316
|
const { formatMessage } = reactIntl.useIntl();
|
|
290
317
|
const handleClose = async ()=>{
|
|
@@ -407,7 +434,6 @@ const transformData = (data)=>{
|
|
|
407
434
|
const setErrors = strapiAdmin.useForm('PublishAction', (state)=>state.setErrors);
|
|
408
435
|
const formValues = strapiAdmin.useForm('PublishAction', ({ values })=>values);
|
|
409
436
|
const resetForm = strapiAdmin.useForm('PublishAction', ({ resetForm })=>resetForm);
|
|
410
|
-
const { currentDocument: { components } } = useDocumentContext.useDocumentContext('PublishAction');
|
|
411
437
|
// need to discriminate if the publish is coming from a relation modal or in the edit view
|
|
412
438
|
const relationContext = RelationModal.useRelationModal('PublishAction', ()=>true, false);
|
|
413
439
|
const fromRelationModal = relationContext != undefined;
|
|
@@ -546,16 +572,12 @@ const transformData = (data)=>{
|
|
|
546
572
|
}
|
|
547
573
|
return;
|
|
548
574
|
}
|
|
549
|
-
const { data: data$1 } = data.handleInvisibleAttributes(transformData(formValues), {
|
|
550
|
-
schema,
|
|
551
|
-
components
|
|
552
|
-
});
|
|
553
575
|
const res = await publish({
|
|
554
576
|
collectionType,
|
|
555
577
|
model,
|
|
556
578
|
documentId,
|
|
557
579
|
params: currentDocumentMeta.params
|
|
558
|
-
},
|
|
580
|
+
}, transformData(formValues));
|
|
559
581
|
// Reset form if successful
|
|
560
582
|
if ('data' in res) {
|
|
561
583
|
resetForm();
|
|
@@ -689,14 +711,12 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
|
|
689
711
|
const isCloning = cloneMatch !== null;
|
|
690
712
|
const { formatMessage } = reactIntl.useIntl();
|
|
691
713
|
const { create, update, clone, isLoading } = useDocumentActions.useDocumentActions();
|
|
692
|
-
const { currentDocument: { components } } = useDocumentContext.useDocumentContext('UpdateAction');
|
|
693
714
|
const [{ rawQuery }] = strapiAdmin.useQueryParams();
|
|
694
715
|
const onPreview = Preview.usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
|
|
695
716
|
const { getInitialFormValues } = useDocument.useDoc();
|
|
696
717
|
const isSubmitting = strapiAdmin.useForm('UpdateAction', ({ isSubmitting })=>isSubmitting);
|
|
697
718
|
const modified = strapiAdmin.useForm('UpdateAction', ({ modified })=>modified);
|
|
698
719
|
const setSubmitting = strapiAdmin.useForm('UpdateAction', ({ setSubmitting })=>setSubmitting);
|
|
699
|
-
const initialValues = strapiAdmin.useForm('UpdateAction', ({ initialValues })=>initialValues);
|
|
700
720
|
const document = strapiAdmin.useForm('UpdateAction', ({ values })=>values);
|
|
701
721
|
const validate = strapiAdmin.useForm('UpdateAction', (state)=>state.validate);
|
|
702
722
|
const setErrors = strapiAdmin.useForm('UpdateAction', (state)=>state.setErrors);
|
|
@@ -704,7 +724,6 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
|
|
704
724
|
const dispatch = RelationModal.useRelationModal('UpdateAction', (state)=>state.dispatch);
|
|
705
725
|
// need to discriminate if the update is coming from a relation modal or in the edit view
|
|
706
726
|
const relationContext = RelationModal.useRelationModal('UpdateAction', ()=>true, false);
|
|
707
|
-
const relationalModalSchema = RelationModal.useRelationModal('UpdateAction', (state)=>state.currentDocument.schema, false);
|
|
708
727
|
const fieldToConnect = RelationModal.useRelationModal('UpdateAction', (state)=>state.state.fieldToConnect, false);
|
|
709
728
|
const fieldToConnectUID = RelationModal.useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
|
|
710
729
|
const documentHistory = RelationModal.useRelationModal('UpdateAction', (state)=>state.state.documentHistory, false);
|
|
@@ -722,7 +741,6 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
|
|
722
741
|
}, {
|
|
723
742
|
skip: !parentDocumentMetaToUpdate
|
|
724
743
|
});
|
|
725
|
-
const { schema } = useDocument.useDoc();
|
|
726
744
|
const handleUpdate = React__namespace.useCallback(async ()=>{
|
|
727
745
|
setSubmitting(true);
|
|
728
746
|
try {
|
|
@@ -759,32 +777,22 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
|
|
759
777
|
setErrors(formatValidationErrors(res.error));
|
|
760
778
|
}
|
|
761
779
|
} else if (documentId || collectionType === collections.SINGLE_TYPES) {
|
|
762
|
-
const { data: data$1 } = data.handleInvisibleAttributes(transformData(document), {
|
|
763
|
-
schema: fromRelationModal ? relationalModalSchema : schema,
|
|
764
|
-
initialValues,
|
|
765
|
-
components
|
|
766
|
-
});
|
|
767
780
|
const res = await update({
|
|
768
781
|
collectionType,
|
|
769
782
|
model,
|
|
770
783
|
documentId,
|
|
771
784
|
params: currentDocumentMeta.params
|
|
772
|
-
},
|
|
785
|
+
}, transformData(document));
|
|
773
786
|
if ('error' in res && api.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
|
|
774
787
|
setErrors(formatValidationErrors(res.error));
|
|
775
788
|
} else {
|
|
776
789
|
resetForm();
|
|
777
790
|
}
|
|
778
791
|
} else {
|
|
779
|
-
const { data: data$1 } = data.handleInvisibleAttributes(transformData(document), {
|
|
780
|
-
schema: fromRelationModal ? relationalModalSchema : schema,
|
|
781
|
-
initialValues,
|
|
782
|
-
components
|
|
783
|
-
});
|
|
784
792
|
const res = await create({
|
|
785
793
|
model,
|
|
786
794
|
params: currentDocumentMeta.params
|
|
787
|
-
},
|
|
795
|
+
}, transformData(document));
|
|
788
796
|
if ('data' in res && collectionType !== collections.SINGLE_TYPES) {
|
|
789
797
|
if (fromRelationModal) {
|
|
790
798
|
const createdRelation = {
|
|
@@ -885,11 +893,7 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
|
|
|
885
893
|
fieldToConnectUID,
|
|
886
894
|
updateDocumentMutation,
|
|
887
895
|
formatAPIError,
|
|
888
|
-
onPreview
|
|
889
|
-
initialValues,
|
|
890
|
-
schema,
|
|
891
|
-
components,
|
|
892
|
-
relationalModalSchema
|
|
896
|
+
onPreview
|
|
893
897
|
]);
|
|
894
898
|
// Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux
|
|
895
899
|
React__namespace.useEffect(()=>{
|