@strapi/content-type-builder 5.57.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.
Files changed (51) hide show
  1. package/dist/admin/components/DataManager/reducer.js +22 -0
  2. package/dist/admin/components/DataManager/reducer.js.map +1 -1
  3. package/dist/admin/components/DataManager/reducer.mjs +22 -0
  4. package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
  5. package/dist/admin/components/FormModal/FormModal.js +36 -62
  6. package/dist/admin/components/FormModal/FormModal.js.map +1 -1
  7. package/dist/admin/components/FormModal/FormModal.mjs +36 -62
  8. package/dist/admin/components/FormModal/FormModal.mjs.map +1 -1
  9. package/dist/admin/src/components/DataManager/utils/cleanData.d.ts +8 -8
  10. package/dist/admin/translations/cs.json.js +0 -2
  11. package/dist/admin/translations/cs.json.js.map +1 -1
  12. package/dist/admin/translations/cs.json.mjs +0 -2
  13. package/dist/admin/translations/cs.json.mjs.map +1 -1
  14. package/dist/admin/translations/de.json.js +0 -2
  15. package/dist/admin/translations/de.json.js.map +1 -1
  16. package/dist/admin/translations/de.json.mjs +0 -2
  17. package/dist/admin/translations/de.json.mjs.map +1 -1
  18. package/dist/admin/translations/en.json.js +0 -2
  19. package/dist/admin/translations/en.json.js.map +1 -1
  20. package/dist/admin/translations/en.json.mjs +0 -2
  21. package/dist/admin/translations/en.json.mjs.map +1 -1
  22. package/dist/admin/translations/ja.json.js +0 -2
  23. package/dist/admin/translations/ja.json.js.map +1 -1
  24. package/dist/admin/translations/ja.json.mjs +0 -2
  25. package/dist/admin/translations/ja.json.mjs.map +1 -1
  26. package/dist/admin/translations/ko.json.js +0 -2
  27. package/dist/admin/translations/ko.json.js.map +1 -1
  28. package/dist/admin/translations/ko.json.mjs +0 -2
  29. package/dist/admin/translations/ko.json.mjs.map +1 -1
  30. package/dist/admin/translations/nl.json.js +0 -2
  31. package/dist/admin/translations/nl.json.js.map +1 -1
  32. package/dist/admin/translations/nl.json.mjs +0 -2
  33. package/dist/admin/translations/nl.json.mjs.map +1 -1
  34. package/dist/admin/translations/pl.json.js +0 -2
  35. package/dist/admin/translations/pl.json.js.map +1 -1
  36. package/dist/admin/translations/pl.json.mjs +0 -2
  37. package/dist/admin/translations/pl.json.mjs.map +1 -1
  38. package/dist/admin/translations/ru.json.js +0 -2
  39. package/dist/admin/translations/ru.json.js.map +1 -1
  40. package/dist/admin/translations/ru.json.mjs +0 -2
  41. package/dist/admin/translations/ru.json.mjs.map +1 -1
  42. package/dist/admin/translations/sk.json.js +0 -2
  43. package/dist/admin/translations/sk.json.js.map +1 -1
  44. package/dist/admin/translations/sk.json.mjs +0 -2
  45. package/dist/admin/translations/sk.json.mjs.map +1 -1
  46. package/dist/server/services/schema.js +53 -0
  47. package/dist/server/services/schema.js.map +1 -1
  48. package/dist/server/services/schema.mjs +53 -0
  49. package/dist/server/services/schema.mjs.map +1 -1
  50. package/dist/server/src/services/schema.d.ts.map +1 -1
  51. package/package.json +6 -6
@@ -103,39 +103,34 @@ const FormModal = ()=>{
103
103
  }
104
104
  return getRenameStorageChange(initialData, modifiedData, attributeRenameMigrationMode);
105
105
  };
106
- const checkFieldNameChanges = ()=>{
107
- // Only check when editing an attribute
106
+ /**
107
+ * Fields whose visibility condition depends on this field and references an
108
+ * enum value that this edit removes or changes. Renames are followed
109
+ * automatically, so only an enum value change can break a condition.
110
+ */ const getConditionsBrokenByEnumChange = ()=>{
108
111
  if (actionType !== 'edit' || modalType !== 'attribute') {
109
112
  return false;
110
113
  }
111
- const oldName = initialData.name;
112
114
  const oldEnum = initialData.enum;
113
115
  const newEnum = modifiedData.enum;
114
- // Get all attributes from the content type schema
116
+ if (!Array.isArray(oldEnum) || !Array.isArray(newEnum)) {
117
+ return false;
118
+ }
119
+ const removedValues = oldEnum.filter((value)=>!newEnum.includes(value));
120
+ if (removedValues.length === 0) {
121
+ return false;
122
+ }
123
+ const fieldName = initialData.name;
115
124
  const contentTypeAttributes = type?.attributes ?? [];
116
- // Find all fields that reference this field in their conditions
117
- const referencedFields = contentTypeAttributes.filter((attr)=>{
125
+ const brokenFields = contentTypeAttributes.filter((attr)=>{
118
126
  const conditionEntry = getFirstVisibleConditionEntry(attr.conditions);
119
127
  if (conditionEntry === null) {
120
128
  return false;
121
129
  }
122
130
  const { fieldVar, value } = conditionEntry;
123
- // Check if this condition references our field
124
- if (fieldVar.var !== oldName) {
125
- return false;
126
- }
127
- // If it's an enum field, also check if the value is being deleted/changed
128
- if (oldEnum !== undefined && newEnum !== undefined) {
129
- const deletedOrChangedValues = oldEnum.filter((oldValue)=>!newEnum.includes(oldValue));
130
- return typeof value === 'string' && deletedOrChangedValues.includes(value);
131
- }
132
- return true;
131
+ return fieldVar.var === fieldName && typeof value === 'string' && removedValues.includes(value);
133
132
  });
134
- // If any fields reference this field, return them
135
- if (referencedFields.length > 0) {
136
- return referencedFields;
137
- }
138
- return false;
133
+ return brokenFields.length > 0 ? brokenFields : false;
139
134
  };
140
135
  React.useEffect(()=>{
141
136
  if (isOpen && modalType) {
@@ -832,9 +827,9 @@ const FormModal = ()=>{
832
827
  };
833
828
  const handleSubmit = async (e, shouldContinue = isCreating)=>{
834
829
  e.preventDefault();
835
- // Check for field name changes when clicking Finish
836
- const referencedFields = checkFieldNameChanges();
837
- if (referencedFields) {
830
+ // Check for conditions broken by an enum value change when clicking Finish
831
+ const brokenFields = getConditionsBrokenByEnumChange();
832
+ if (brokenFields) {
838
833
  setPendingSubmit({
839
834
  e,
840
835
  shouldContinue
@@ -1014,46 +1009,17 @@ const FormModal = ()=>{
1014
1009
  setPendingSubmit(null);
1015
1010
  },
1016
1011
  children: (()=>{
1017
- const referencedFields = checkFieldNameChanges();
1018
- if (referencedFields === false) return null;
1019
- const fieldNames = referencedFields.map((field)=>field.name).join(', ');
1020
- const oldEnum = initialData.enum;
1021
- const newEnum = modifiedData.enum;
1022
- const isEnum = Array.isArray(oldEnum) && Array.isArray(newEnum);
1023
- if (isEnum === true) {
1024
- const deletedOrChangedValues = oldEnum.filter((value)=>!newEnum.includes(value));
1025
- return /*#__PURE__*/ jsx(Box, {
1026
- children: /*#__PURE__*/ jsxs(Typography, {
1027
- children: [
1028
- formatMessage({
1029
- id: 'form.attribute.condition.enum-change-warning',
1030
- defaultMessage: 'The following fields have conditions that depend on this field: '
1031
- }),
1032
- /*#__PURE__*/ jsx(Typography, {
1033
- fontWeight: "bold",
1034
- children: fieldNames
1035
- }),
1036
- formatMessage({
1037
- id: 'form.attribute.condition.enum-change-warning-values',
1038
- defaultMessage: '. Changing or removing the enum values '
1039
- }),
1040
- /*#__PURE__*/ jsx(Typography, {
1041
- fontWeight: "bold",
1042
- children: deletedOrChangedValues.join(', ')
1043
- }),
1044
- formatMessage({
1045
- id: 'form.attribute.condition.enum-change-warning-end',
1046
- defaultMessage: ' will break these conditions. Do you want to proceed?'
1047
- })
1048
- ]
1049
- })
1050
- });
1051
- }
1012
+ const brokenFields = getConditionsBrokenByEnumChange();
1013
+ if (brokenFields === false) return null;
1014
+ const fieldNames = brokenFields.map((field)=>field.name).join(', ');
1015
+ const oldEnum = initialData.enum ?? [];
1016
+ const newEnum = modifiedData.enum ?? [];
1017
+ const deletedOrChangedValues = oldEnum.filter((value)=>!newEnum.includes(value));
1052
1018
  return /*#__PURE__*/ jsx(Box, {
1053
1019
  children: /*#__PURE__*/ jsxs(Typography, {
1054
1020
  children: [
1055
1021
  formatMessage({
1056
- id: 'form.attribute.condition.field-change-warning',
1022
+ id: 'form.attribute.condition.enum-change-warning',
1057
1023
  defaultMessage: 'The following fields have conditions that depend on this field: '
1058
1024
  }),
1059
1025
  /*#__PURE__*/ jsx(Typography, {
@@ -1061,8 +1027,16 @@ const FormModal = ()=>{
1061
1027
  children: fieldNames
1062
1028
  }),
1063
1029
  formatMessage({
1064
- id: 'form.attribute.condition.field-change-warning-end',
1065
- defaultMessage: '. Renaming it will break these conditions. Do you want to proceed?'
1030
+ id: 'form.attribute.condition.enum-change-warning-values',
1031
+ defaultMessage: '. Changing or removing the enum values '
1032
+ }),
1033
+ /*#__PURE__*/ jsx(Typography, {
1034
+ fontWeight: "bold",
1035
+ children: deletedOrChangedValues.join(', ')
1036
+ }),
1037
+ formatMessage({
1038
+ id: 'form.attribute.condition.enum-change-warning-end',
1039
+ defaultMessage: ' will break these conditions. Do you want to proceed?'
1066
1040
  })
1067
1041
  ]
1068
1042
  })