@strapi/content-type-builder 5.56.0 → 5.58.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/components/AIChat/lib/transforms/schemas/toCTB.js +117 -13
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js.map +1 -1
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs +118 -13
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs.map +1 -1
- package/dist/admin/components/AIChat/providers/SchemaProvider.js +31 -19
- package/dist/admin/components/AIChat/providers/SchemaProvider.js.map +1 -1
- package/dist/admin/components/AIChat/providers/SchemaProvider.mjs +31 -19
- package/dist/admin/components/AIChat/providers/SchemaProvider.mjs.map +1 -1
- package/dist/admin/components/DataManager/DataManagerContext.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerContext.mjs.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.js +166 -6
- package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.mjs +165 -7
- package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
- package/dist/admin/components/DataManager/RenameMigrationModal.js +285 -0
- package/dist/admin/components/DataManager/RenameMigrationModal.js.map +1 -0
- package/dist/admin/components/DataManager/RenameMigrationModal.mjs +257 -0
- package/dist/admin/components/DataManager/RenameMigrationModal.mjs.map +1 -0
- package/dist/admin/components/DataManager/reducer.js +129 -2
- package/dist/admin/components/DataManager/reducer.js.map +1 -1
- package/dist/admin/components/DataManager/reducer.mjs +128 -2
- package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/cleanData.js +8 -1
- package/dist/admin/components/DataManager/utils/cleanData.js.map +1 -1
- package/dist/admin/components/DataManager/utils/cleanData.mjs +8 -1
- package/dist/admin/components/DataManager/utils/cleanData.mjs.map +1 -1
- package/dist/admin/components/DataManager/utils/groupRenameChains.js +86 -0
- package/dist/admin/components/DataManager/utils/groupRenameChains.js.map +1 -0
- package/dist/admin/components/DataManager/utils/groupRenameChains.mjs +84 -0
- package/dist/admin/components/DataManager/utils/groupRenameChains.mjs.map +1 -0
- package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.js +29 -0
- package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.js.map +1 -0
- package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.mjs +27 -0
- package/dist/admin/components/DataManager/utils/isStorageCompatibleRename.mjs.map +1 -0
- package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.js +35 -0
- package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.js.map +1 -0
- package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.mjs +33 -0
- package/dist/admin/components/DataManager/utils/resolveAfterEditRenameConsent.mjs.map +1 -0
- package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.js +48 -0
- package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.js.map +1 -0
- package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.mjs +45 -0
- package/dist/admin/components/DataManager/utils/splitChainsByInheritedConsent.mjs.map +1 -0
- package/dist/admin/components/FormModal/FormModal.js +178 -70
- package/dist/admin/components/FormModal/FormModal.js.map +1 -1
- package/dist/admin/components/FormModal/FormModal.mjs +179 -71
- package/dist/admin/components/FormModal/FormModal.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/validation/common.js +6 -5
- package/dist/admin/components/FormModal/attributes/validation/common.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/validation/common.mjs +1 -1
- package/dist/admin/components/FormModal/attributes/validation/common.mjs.map +1 -1
- package/dist/admin/components/FormModal/component/createComponentSchema.js +10 -7
- package/dist/admin/components/FormModal/component/createComponentSchema.js.map +1 -1
- package/dist/admin/components/FormModal/component/createComponentSchema.mjs +1 -1
- package/dist/admin/components/FormModal/component/createComponentSchema.mjs.map +1 -1
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.js +24 -21
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.js.map +1 -1
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.mjs +1 -1
- package/dist/admin/components/FormModal/contentType/createContentTypeSchema.mjs.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.js +3 -2
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.js.map +1 -1
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.mjs +1 -1
- package/dist/admin/components/FormModal/forms/utils/createCollectionName.mjs.map +1 -1
- package/dist/admin/components/FormModal/utils/getRenameStorageChange.js +73 -0
- package/dist/admin/components/FormModal/utils/getRenameStorageChange.js.map +1 -0
- package/dist/admin/components/FormModal/utils/getRenameStorageChange.mjs +70 -0
- package/dist/admin/components/FormModal/utils/getRenameStorageChange.mjs.map +1 -0
- package/dist/admin/src/components/AIChat/lib/transforms/schemas/toCTB.d.ts +4 -3
- package/dist/admin/src/components/AIChat/lib/types/schema.d.ts +6 -1
- package/dist/admin/src/components/DataManager/DataManagerContext.d.ts +28 -2
- package/dist/admin/src/components/DataManager/RenameMigrationModal.d.ts +73 -0
- package/dist/admin/src/components/DataManager/reducer.d.ts +17 -2
- package/dist/admin/src/components/DataManager/utils/cleanData.d.ts +24 -8
- package/dist/admin/src/components/DataManager/utils/groupRenameChains.d.ts +31 -0
- package/dist/admin/src/components/DataManager/utils/isStorageCompatibleRename.d.ts +10 -0
- package/dist/admin/src/components/DataManager/utils/resolveAfterEditRenameConsent.d.ts +24 -0
- package/dist/admin/src/components/DataManager/utils/splitChainsByInheritedConsent.d.ts +26 -0
- package/dist/admin/src/components/FormModal/utils/getRenameStorageChange.d.ts +40 -0
- package/dist/admin/src/types.d.ts +23 -0
- package/dist/admin/translations/cs.json.js +0 -2
- package/dist/admin/translations/cs.json.js.map +1 -1
- package/dist/admin/translations/cs.json.mjs +0 -2
- package/dist/admin/translations/cs.json.mjs.map +1 -1
- package/dist/admin/translations/de.json.js +0 -2
- package/dist/admin/translations/de.json.js.map +1 -1
- package/dist/admin/translations/de.json.mjs +0 -2
- package/dist/admin/translations/de.json.mjs.map +1 -1
- package/dist/admin/translations/en.json.js +12 -2
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +12 -2
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/ja.json.js +0 -2
- package/dist/admin/translations/ja.json.js.map +1 -1
- package/dist/admin/translations/ja.json.mjs +0 -2
- package/dist/admin/translations/ja.json.mjs.map +1 -1
- package/dist/admin/translations/ko.json.js +0 -2
- package/dist/admin/translations/ko.json.js.map +1 -1
- package/dist/admin/translations/ko.json.mjs +0 -2
- package/dist/admin/translations/ko.json.mjs.map +1 -1
- package/dist/admin/translations/nl.json.js +0 -2
- package/dist/admin/translations/nl.json.js.map +1 -1
- package/dist/admin/translations/nl.json.mjs +0 -2
- package/dist/admin/translations/nl.json.mjs.map +1 -1
- package/dist/admin/translations/pl.json.js +0 -2
- package/dist/admin/translations/pl.json.js.map +1 -1
- package/dist/admin/translations/pl.json.mjs +0 -2
- package/dist/admin/translations/pl.json.mjs.map +1 -1
- package/dist/admin/translations/ru.json.js +0 -2
- package/dist/admin/translations/ru.json.js.map +1 -1
- package/dist/admin/translations/ru.json.mjs +0 -2
- package/dist/admin/translations/ru.json.mjs.map +1 -1
- package/dist/admin/translations/sk.json.js +0 -2
- package/dist/admin/translations/sk.json.js.map +1 -1
- package/dist/admin/translations/sk.json.mjs +0 -2
- package/dist/admin/translations/sk.json.mjs.map +1 -1
- package/dist/server/config.js +24 -3
- package/dist/server/config.js.map +1 -1
- package/dist/server/config.mjs +21 -3
- package/dist/server/config.mjs.map +1 -1
- package/dist/server/controllers/schema.js +2 -2
- package/dist/server/controllers/schema.js.map +1 -1
- package/dist/server/controllers/schema.mjs +1 -1
- package/dist/server/controllers/schema.mjs.map +1 -1
- package/dist/server/controllers/validation/content-type.js +9 -11
- package/dist/server/controllers/validation/content-type.js.map +1 -1
- package/dist/server/controllers/validation/content-type.mjs +7 -9
- package/dist/server/controllers/validation/content-type.mjs.map +1 -1
- package/dist/server/controllers/validation/model-schema.js +2 -3
- package/dist/server/controllers/validation/model-schema.js.map +1 -1
- package/dist/server/controllers/validation/model-schema.mjs +1 -2
- package/dist/server/controllers/validation/model-schema.mjs.map +1 -1
- package/dist/server/controllers/validation/relations.js +1 -2
- package/dist/server/controllers/validation/relations.js.map +1 -1
- package/dist/server/controllers/validation/relations.mjs +1 -2
- package/dist/server/controllers/validation/relations.mjs.map +1 -1
- package/dist/server/controllers/validation/schema.js +42 -23
- package/dist/server/controllers/validation/schema.js.map +1 -1
- package/dist/server/controllers/validation/schema.mjs +43 -24
- package/dist/server/controllers/validation/schema.mjs.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/services/content-types.js +1 -2
- package/dist/server/services/content-types.js.map +1 -1
- package/dist/server/services/content-types.mjs +2 -3
- package/dist/server/services/content-types.mjs.map +1 -1
- package/dist/server/services/migration-builder/index.js +580 -0
- package/dist/server/services/migration-builder/index.js.map +1 -0
- package/dist/server/services/migration-builder/index.mjs +573 -0
- package/dist/server/services/migration-builder/index.mjs.map +1 -0
- package/dist/server/services/schema-builder/content-type-builder.js +31 -1
- package/dist/server/services/schema-builder/content-type-builder.js.map +1 -1
- package/dist/server/services/schema-builder/content-type-builder.mjs +31 -1
- package/dist/server/services/schema-builder/content-type-builder.mjs.map +1 -1
- package/dist/server/services/schema-mutation.js +30 -2
- package/dist/server/services/schema-mutation.js.map +1 -1
- package/dist/server/services/schema-mutation.mjs +10 -2
- package/dist/server/services/schema-mutation.mjs.map +1 -1
- package/dist/server/services/schema.js +312 -15
- package/dist/server/services/schema.js.map +1 -1
- package/dist/server/services/schema.mjs +305 -9
- package/dist/server/services/schema.mjs.map +1 -1
- package/dist/server/src/config.d.ts +23 -2
- package/dist/server/src/config.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/content-type.d.ts +0 -1
- package/dist/server/src/controllers/validation/content-type.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/schema.d.ts +28 -0
- package/dist/server/src/controllers/validation/schema.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +10 -2
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/content-types.d.ts.map +1 -1
- package/dist/server/src/services/migration-builder/index.d.ts +83 -0
- package/dist/server/src/services/migration-builder/index.d.ts.map +1 -0
- package/dist/server/src/services/schema-builder/content-type-builder.d.ts.map +1 -1
- package/dist/server/src/services/schema-mutation.d.ts +4 -2
- package/dist/server/src/services/schema-mutation.d.ts.map +1 -1
- package/dist/server/src/services/schema.d.ts +19 -0
- package/dist/server/src/services/schema.d.ts.map +1 -1
- package/package.json +7 -6
|
@@ -54,6 +54,7 @@ var canEditContentType = require('./utils/canEditContentType.js');
|
|
|
54
54
|
var createUid = require('./utils/createUid.js');
|
|
55
55
|
var getAttributesToDisplay = require('./utils/getAttributesToDisplay.js');
|
|
56
56
|
var getFormInputNames = require('./utils/getFormInputNames.js');
|
|
57
|
+
var getRenameStorageChange = require('./utils/getRenameStorageChange.js');
|
|
57
58
|
|
|
58
59
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
59
60
|
|
|
@@ -116,44 +117,48 @@ const FormModal = ()=>{
|
|
|
116
117
|
const ctbFormsAPI = ctbPlugin?.apis.forms;
|
|
117
118
|
const inputsFromPlugins = ctbFormsAPI.components.inputs;
|
|
118
119
|
const dispatchGuidedTour = strapiAdmin.useGuidedTour('FormModal', (s)=>s.dispatch);
|
|
119
|
-
const { addAttribute, editAttribute, addCustomFieldAttribute, addCreatedComponentToDynamicZone, changeDynamicZoneComponents, contentTypes, components, createSchema, createComponentSchema, deleteComponent, deleteContentType, editCustomFieldAttribute, updateSchema, nestedComponents, sortedContentTypesList, updateComponentSchema, updateComponentUid, reservedNames } = useDataManager.useDataManager();
|
|
120
|
+
const { addAttribute, editAttribute, addCustomFieldAttribute, addCreatedComponentToDynamicZone, changeDynamicZoneComponents, contentTypes, components, createSchema, createComponentSchema, deleteComponent, deleteContentType, editCustomFieldAttribute, updateSchema, nestedComponents, sortedContentTypesList, updateComponentSchema, updateComponentUid, reservedNames, confirmAttributeRenameMigration, attributeRenameMigrationMode } = useDataManager.useDataManager();
|
|
120
121
|
const { componentToCreate, formErrors, initialData, isCreatingComponentWhileAddingAField, modifiedData } = reducerState;
|
|
121
122
|
const type = forTarget === 'component' ? components[targetUid] : contentTypes[targetUid];
|
|
122
123
|
const [showWarningDialog, setShowWarningDialog] = React.useState(false);
|
|
123
124
|
const [pendingSubmit, setPendingSubmit] = React.useState(null);
|
|
124
|
-
|
|
125
|
-
|
|
125
|
+
// Set when the edit renames an existing field *and* changes its storage: the
|
|
126
|
+
// data cannot be preserved, so the user confirms before the field is recreated.
|
|
127
|
+
const [storageChangeWarning, setStorageChangeWarning] = React.useState(null);
|
|
128
|
+
const checkRenameStorageChange = ()=>{
|
|
129
|
+
if (actionType !== 'edit' || modalType !== 'attribute' && modalType !== 'customField') {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
return getRenameStorageChange.getRenameStorageChange(initialData, modifiedData, attributeRenameMigrationMode);
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* Fields whose visibility condition depends on this field and references an
|
|
136
|
+
* enum value that this edit removes or changes. Renames are followed
|
|
137
|
+
* automatically, so only an enum value change can break a condition.
|
|
138
|
+
*/ const getConditionsBrokenByEnumChange = ()=>{
|
|
126
139
|
if (actionType !== 'edit' || modalType !== 'attribute') {
|
|
127
140
|
return false;
|
|
128
141
|
}
|
|
129
|
-
const oldName = initialData.name;
|
|
130
142
|
const oldEnum = initialData.enum;
|
|
131
143
|
const newEnum = modifiedData.enum;
|
|
132
|
-
|
|
144
|
+
if (!Array.isArray(oldEnum) || !Array.isArray(newEnum)) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
const removedValues = oldEnum.filter((value)=>!newEnum.includes(value));
|
|
148
|
+
if (removedValues.length === 0) {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
const fieldName = initialData.name;
|
|
133
152
|
const contentTypeAttributes = type?.attributes ?? [];
|
|
134
|
-
|
|
135
|
-
const referencedFields = contentTypeAttributes.filter((attr)=>{
|
|
153
|
+
const brokenFields = contentTypeAttributes.filter((attr)=>{
|
|
136
154
|
const conditionEntry = conditions.getFirstVisibleConditionEntry(attr.conditions);
|
|
137
155
|
if (conditionEntry === null) {
|
|
138
156
|
return false;
|
|
139
157
|
}
|
|
140
158
|
const { fieldVar, value } = conditionEntry;
|
|
141
|
-
|
|
142
|
-
if (fieldVar.var !== oldName) {
|
|
143
|
-
return false;
|
|
144
|
-
}
|
|
145
|
-
// If it's an enum field, also check if the value is being deleted/changed
|
|
146
|
-
if (oldEnum !== undefined && newEnum !== undefined) {
|
|
147
|
-
const deletedOrChangedValues = oldEnum.filter((oldValue)=>!newEnum.includes(oldValue));
|
|
148
|
-
return typeof value === 'string' && deletedOrChangedValues.includes(value);
|
|
149
|
-
}
|
|
150
|
-
return true;
|
|
159
|
+
return fieldVar.var === fieldName && typeof value === 'string' && removedValues.includes(value);
|
|
151
160
|
});
|
|
152
|
-
|
|
153
|
-
if (referencedFields.length > 0) {
|
|
154
|
-
return referencedFields;
|
|
155
|
-
}
|
|
156
|
-
return false;
|
|
161
|
+
return brokenFields.length > 0 ? brokenFields : false;
|
|
157
162
|
};
|
|
158
163
|
React__namespace.useEffect(()=>{
|
|
159
164
|
if (isOpen && modalType) {
|
|
@@ -412,9 +417,48 @@ const FormModal = ()=>{
|
|
|
412
417
|
dispatch,
|
|
413
418
|
formErrors
|
|
414
419
|
]);
|
|
415
|
-
const submitForm = async (e, shouldContinue = isCreating
|
|
420
|
+
const submitForm = async (e, shouldContinue = isCreating, // The user already confirmed the field will be recreated empty (rename +
|
|
421
|
+
// storage change): there is no data to preserve, so don't ask about it.
|
|
422
|
+
{ skipRenameMigration = false } = {})=>{
|
|
416
423
|
try {
|
|
417
424
|
await checkFormValidity();
|
|
425
|
+
let recordRename = !skipRenameMigration;
|
|
426
|
+
let declineRename = false;
|
|
427
|
+
if (!skipRenameMigration && actionType === 'edit' && (isCreatingAttribute || isCreatingCustomFieldAttribute) && // A field that was never saved has no data to preserve (and
|
|
428
|
+
// `recordRename` skips it), so there is nothing to ask about.
|
|
429
|
+
initialData.status !== 'NEW' && toStringValue(initialData.name) !== toStringValue(modifiedData.name)) {
|
|
430
|
+
const decision = await confirmAttributeRenameMigration({
|
|
431
|
+
forTarget,
|
|
432
|
+
uid: targetUid,
|
|
433
|
+
oldName: toStringValue(initialData.name),
|
|
434
|
+
newName: toStringValue(modifiedData.name)
|
|
435
|
+
});
|
|
436
|
+
if (decision === null) {
|
|
437
|
+
return;
|
|
438
|
+
}
|
|
439
|
+
recordRename = decision;
|
|
440
|
+
declineRename = !decision;
|
|
441
|
+
}
|
|
442
|
+
// Renaming the other side of a relation from this form renames a field
|
|
443
|
+
// of the target type, which may own the join table: ask for that one
|
|
444
|
+
// too, after the field's own prompt.
|
|
445
|
+
const oldTargetAttribute = toStringValue(initialData.targetAttribute);
|
|
446
|
+
const newTargetAttribute = toStringValue(modifiedData.targetAttribute);
|
|
447
|
+
let recordTargetRename = !skipRenameMigration;
|
|
448
|
+
let declineTargetRename = false;
|
|
449
|
+
if (!skipRenameMigration && actionType === 'edit' && isCreatingAttribute && attributeType === 'relation' && oldTargetAttribute !== '' && newTargetAttribute !== '' && oldTargetAttribute !== newTargetAttribute && toStringValue(initialData.target) === toStringValue(modifiedData.target)) {
|
|
450
|
+
const decision = await confirmAttributeRenameMigration({
|
|
451
|
+
forTarget: 'contentType',
|
|
452
|
+
uid: toStringValue(modifiedData.target),
|
|
453
|
+
oldName: oldTargetAttribute,
|
|
454
|
+
newName: newTargetAttribute
|
|
455
|
+
});
|
|
456
|
+
if (decision === null) {
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
recordTargetRename = decision;
|
|
460
|
+
declineTargetRename = !decision;
|
|
461
|
+
}
|
|
418
462
|
dispatch(reducer.actions.setErrors({
|
|
419
463
|
errors: {}
|
|
420
464
|
}));
|
|
@@ -533,7 +577,9 @@ const FormModal = ()=>{
|
|
|
533
577
|
},
|
|
534
578
|
forTarget,
|
|
535
579
|
targetUid,
|
|
536
|
-
name: toStringValue(initialData.name)
|
|
580
|
+
name: toStringValue(initialData.name),
|
|
581
|
+
recordRename,
|
|
582
|
+
declineRename
|
|
537
583
|
};
|
|
538
584
|
if (actionType === 'edit') {
|
|
539
585
|
editCustomFieldAttribute(customFieldAttributeUpdate);
|
|
@@ -564,7 +610,9 @@ const FormModal = ()=>{
|
|
|
564
610
|
attributeToSet: modifiedData,
|
|
565
611
|
forTarget,
|
|
566
612
|
targetUid,
|
|
567
|
-
name: toStringValue(initialData.name)
|
|
613
|
+
name: toStringValue(initialData.name),
|
|
614
|
+
recordRename,
|
|
615
|
+
declineRename
|
|
568
616
|
});
|
|
569
617
|
}
|
|
570
618
|
// Adding a component to a dynamiczone is not the same logic as creating a simple field
|
|
@@ -594,7 +642,11 @@ const FormModal = ()=>{
|
|
|
594
642
|
attributeToSet: modifiedData,
|
|
595
643
|
forTarget,
|
|
596
644
|
targetUid,
|
|
597
|
-
name: toStringValue(initialData.name)
|
|
645
|
+
name: toStringValue(initialData.name),
|
|
646
|
+
recordRename,
|
|
647
|
+
declineRename,
|
|
648
|
+
recordTargetRename,
|
|
649
|
+
declineTargetRename
|
|
598
650
|
});
|
|
599
651
|
}
|
|
600
652
|
if (shouldContinue) {
|
|
@@ -650,7 +702,9 @@ const FormModal = ()=>{
|
|
|
650
702
|
attributeToSet: attributeData,
|
|
651
703
|
forTarget,
|
|
652
704
|
targetUid,
|
|
653
|
-
name: toStringValue(initialData.name)
|
|
705
|
+
name: toStringValue(initialData.name),
|
|
706
|
+
recordRename,
|
|
707
|
+
declineRename
|
|
654
708
|
});
|
|
655
709
|
}
|
|
656
710
|
if (shouldContinue) {
|
|
@@ -771,11 +825,39 @@ const FormModal = ()=>{
|
|
|
771
825
|
}
|
|
772
826
|
}
|
|
773
827
|
};
|
|
828
|
+
// Runs after the condition warning (if any): warn when the rename also
|
|
829
|
+
// changes the field's storage, otherwise submit.
|
|
830
|
+
const continueSubmit = async (e, shouldContinue)=>{
|
|
831
|
+
const storageChange = checkRenameStorageChange();
|
|
832
|
+
if (storageChange) {
|
|
833
|
+
setPendingSubmit({
|
|
834
|
+
e,
|
|
835
|
+
shouldContinue
|
|
836
|
+
});
|
|
837
|
+
setStorageChangeWarning(storageChange);
|
|
838
|
+
return;
|
|
839
|
+
}
|
|
840
|
+
await submitForm(e, shouldContinue);
|
|
841
|
+
};
|
|
842
|
+
const cancelStorageChange = ()=>{
|
|
843
|
+
setStorageChangeWarning(null);
|
|
844
|
+
setPendingSubmit(null);
|
|
845
|
+
};
|
|
846
|
+
const confirmStorageChange = ()=>{
|
|
847
|
+
if (pendingSubmit === null) {
|
|
848
|
+
return;
|
|
849
|
+
}
|
|
850
|
+
const { e, shouldContinue } = pendingSubmit;
|
|
851
|
+
cancelStorageChange();
|
|
852
|
+
submitForm(e, shouldContinue, {
|
|
853
|
+
skipRenameMigration: true
|
|
854
|
+
});
|
|
855
|
+
};
|
|
774
856
|
const handleSubmit = async (e, shouldContinue = isCreating)=>{
|
|
775
857
|
e.preventDefault();
|
|
776
|
-
// Check for
|
|
777
|
-
const
|
|
778
|
-
if (
|
|
858
|
+
// Check for conditions broken by an enum value change when clicking Finish
|
|
859
|
+
const brokenFields = getConditionsBrokenByEnumChange();
|
|
860
|
+
if (brokenFields) {
|
|
779
861
|
setPendingSubmit({
|
|
780
862
|
e,
|
|
781
863
|
shouldContinue
|
|
@@ -783,7 +865,7 @@ const FormModal = ()=>{
|
|
|
783
865
|
setShowWarningDialog(true);
|
|
784
866
|
return;
|
|
785
867
|
}
|
|
786
|
-
await
|
|
868
|
+
await continueSubmit(e, shouldContinue);
|
|
787
869
|
};
|
|
788
870
|
const handleConfirmClose = ()=>{
|
|
789
871
|
// eslint-disable-next-line no-alert
|
|
@@ -947,7 +1029,7 @@ const FormModal = ()=>{
|
|
|
947
1029
|
const { e, shouldContinue } = pendingSubmit;
|
|
948
1030
|
setShowWarningDialog(false);
|
|
949
1031
|
setPendingSubmit(null);
|
|
950
|
-
|
|
1032
|
+
continueSubmit(e, shouldContinue);
|
|
951
1033
|
}
|
|
952
1034
|
},
|
|
953
1035
|
onCancel: ()=>{
|
|
@@ -955,46 +1037,17 @@ const FormModal = ()=>{
|
|
|
955
1037
|
setPendingSubmit(null);
|
|
956
1038
|
},
|
|
957
1039
|
children: (()=>{
|
|
958
|
-
const
|
|
959
|
-
if (
|
|
960
|
-
const fieldNames =
|
|
961
|
-
const oldEnum = initialData.enum;
|
|
962
|
-
const newEnum = modifiedData.enum;
|
|
963
|
-
const
|
|
964
|
-
if (isEnum === true) {
|
|
965
|
-
const deletedOrChangedValues = oldEnum.filter((value)=>!newEnum.includes(value));
|
|
966
|
-
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
967
|
-
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Typography, {
|
|
968
|
-
children: [
|
|
969
|
-
formatMessage({
|
|
970
|
-
id: 'form.attribute.condition.enum-change-warning',
|
|
971
|
-
defaultMessage: 'The following fields have conditions that depend on this field: '
|
|
972
|
-
}),
|
|
973
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
974
|
-
fontWeight: "bold",
|
|
975
|
-
children: fieldNames
|
|
976
|
-
}),
|
|
977
|
-
formatMessage({
|
|
978
|
-
id: 'form.attribute.condition.enum-change-warning-values',
|
|
979
|
-
defaultMessage: '. Changing or removing the enum values '
|
|
980
|
-
}),
|
|
981
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
982
|
-
fontWeight: "bold",
|
|
983
|
-
children: deletedOrChangedValues.join(', ')
|
|
984
|
-
}),
|
|
985
|
-
formatMessage({
|
|
986
|
-
id: 'form.attribute.condition.enum-change-warning-end',
|
|
987
|
-
defaultMessage: ' will break these conditions. Do you want to proceed?'
|
|
988
|
-
})
|
|
989
|
-
]
|
|
990
|
-
})
|
|
991
|
-
});
|
|
992
|
-
}
|
|
1040
|
+
const brokenFields = getConditionsBrokenByEnumChange();
|
|
1041
|
+
if (brokenFields === false) return null;
|
|
1042
|
+
const fieldNames = brokenFields.map((field)=>field.name).join(', ');
|
|
1043
|
+
const oldEnum = initialData.enum ?? [];
|
|
1044
|
+
const newEnum = modifiedData.enum ?? [];
|
|
1045
|
+
const deletedOrChangedValues = oldEnum.filter((value)=>!newEnum.includes(value));
|
|
993
1046
|
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
994
1047
|
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Typography, {
|
|
995
1048
|
children: [
|
|
996
1049
|
formatMessage({
|
|
997
|
-
id: 'form.attribute.condition.
|
|
1050
|
+
id: 'form.attribute.condition.enum-change-warning',
|
|
998
1051
|
defaultMessage: 'The following fields have conditions that depend on this field: '
|
|
999
1052
|
}),
|
|
1000
1053
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
@@ -1002,8 +1055,16 @@ const FormModal = ()=>{
|
|
|
1002
1055
|
children: fieldNames
|
|
1003
1056
|
}),
|
|
1004
1057
|
formatMessage({
|
|
1005
|
-
id: 'form.attribute.condition.
|
|
1006
|
-
defaultMessage: '.
|
|
1058
|
+
id: 'form.attribute.condition.enum-change-warning-values',
|
|
1059
|
+
defaultMessage: '. Changing or removing the enum values '
|
|
1060
|
+
}),
|
|
1061
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
1062
|
+
fontWeight: "bold",
|
|
1063
|
+
children: deletedOrChangedValues.join(', ')
|
|
1064
|
+
}),
|
|
1065
|
+
formatMessage({
|
|
1066
|
+
id: 'form.attribute.condition.enum-change-warning-end',
|
|
1067
|
+
defaultMessage: ' will break these conditions. Do you want to proceed?'
|
|
1007
1068
|
})
|
|
1008
1069
|
]
|
|
1009
1070
|
})
|
|
@@ -1012,6 +1073,53 @@ const FormModal = ()=>{
|
|
|
1012
1073
|
})
|
|
1013
1074
|
]
|
|
1014
1075
|
}),
|
|
1076
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Root, {
|
|
1077
|
+
open: storageChangeWarning !== null,
|
|
1078
|
+
onOpenChange: (open)=>!open && cancelStorageChange(),
|
|
1079
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.ConfirmDialog, {
|
|
1080
|
+
title: formatMessage({
|
|
1081
|
+
id: getTrad.getTrad('form.attribute.rename-type-change-warning.title'),
|
|
1082
|
+
defaultMessage: 'Existing data will be lost'
|
|
1083
|
+
}),
|
|
1084
|
+
onCancel: cancelStorageChange,
|
|
1085
|
+
endAction: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Dialog.Action, {
|
|
1086
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
1087
|
+
fullWidth: true,
|
|
1088
|
+
variant: "danger",
|
|
1089
|
+
onClick: confirmStorageChange,
|
|
1090
|
+
children: formatMessage({
|
|
1091
|
+
id: getTrad.getTrad('form.attribute.rename-type-change-warning.confirm'),
|
|
1092
|
+
defaultMessage: 'Continue'
|
|
1093
|
+
})
|
|
1094
|
+
})
|
|
1095
|
+
}),
|
|
1096
|
+
children: storageChangeWarning && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
1097
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
1098
|
+
children: formatMessage({
|
|
1099
|
+
id: getTrad.getTrad('form.attribute.rename-type-change-warning.body'),
|
|
1100
|
+
defaultMessage: 'You are renaming {oldName} to {newName} and changing it from {oldType} to {newType}. Strapi cannot preserve the existing data of this field when both change at once. The field will be recreated empty when you save.'
|
|
1101
|
+
}, {
|
|
1102
|
+
oldName: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
1103
|
+
fontWeight: "bold",
|
|
1104
|
+
children: storageChangeWarning.oldName
|
|
1105
|
+
}),
|
|
1106
|
+
newName: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
1107
|
+
fontWeight: "bold",
|
|
1108
|
+
children: storageChangeWarning.newName
|
|
1109
|
+
}),
|
|
1110
|
+
oldType: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
1111
|
+
fontWeight: "bold",
|
|
1112
|
+
children: storageChangeWarning.oldType
|
|
1113
|
+
}),
|
|
1114
|
+
newType: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
1115
|
+
fontWeight: "bold",
|
|
1116
|
+
children: storageChangeWarning.newType
|
|
1117
|
+
})
|
|
1118
|
+
})
|
|
1119
|
+
})
|
|
1120
|
+
})
|
|
1121
|
+
})
|
|
1122
|
+
}),
|
|
1015
1123
|
/*#__PURE__*/ jsxRuntime.jsx(FormModalHeader.FormModalHeader, {
|
|
1016
1124
|
actionType: actionType,
|
|
1017
1125
|
attributeName: attributeName,
|