@strapi/content-type-builder 5.50.0 → 5.50.1

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 (227) hide show
  1. package/dist/admin/components/AIChat/Chat.js +2 -4
  2. package/dist/admin/components/AIChat/Chat.js.map +1 -1
  3. package/dist/admin/components/AIChat/Chat.mjs +2 -4
  4. package/dist/admin/components/AIChat/Chat.mjs.map +1 -1
  5. package/dist/admin/components/AIChat/UploadFigmaModal.js +1 -1
  6. package/dist/admin/components/AIChat/UploadFigmaModal.js.map +1 -1
  7. package/dist/admin/components/AIChat/UploadFigmaModal.mjs +1 -1
  8. package/dist/admin/components/AIChat/UploadFigmaModal.mjs.map +1 -1
  9. package/dist/admin/components/AIChat/components/Messages/Message.js +8 -3
  10. package/dist/admin/components/AIChat/components/Messages/Message.js.map +1 -1
  11. package/dist/admin/components/AIChat/components/Messages/Message.mjs +8 -3
  12. package/dist/admin/components/AIChat/components/Messages/Message.mjs.map +1 -1
  13. package/dist/admin/components/AIChat/lib/aiClient.js +8 -2
  14. package/dist/admin/components/AIChat/lib/aiClient.js.map +1 -1
  15. package/dist/admin/components/AIChat/lib/aiClient.mjs +8 -2
  16. package/dist/admin/components/AIChat/lib/aiClient.mjs.map +1 -1
  17. package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.js +0 -3
  18. package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.js.map +1 -1
  19. package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.mjs +0 -3
  20. package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.mjs.map +1 -1
  21. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js +9 -7
  22. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js.map +1 -1
  23. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs +9 -7
  24. package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs.map +1 -1
  25. package/dist/admin/components/AIChat/providers/SchemaProvider.js +1 -1
  26. package/dist/admin/components/AIChat/providers/SchemaProvider.js.map +1 -1
  27. package/dist/admin/components/AIChat/providers/SchemaProvider.mjs +1 -1
  28. package/dist/admin/components/AIChat/providers/SchemaProvider.mjs.map +1 -1
  29. package/dist/admin/components/AllowedTypesSelect.js.map +1 -1
  30. package/dist/admin/components/AllowedTypesSelect.mjs.map +1 -1
  31. package/dist/admin/components/AttributeIcon.js +1 -1
  32. package/dist/admin/components/AttributeIcon.js.map +1 -1
  33. package/dist/admin/components/AttributeIcon.mjs +1 -1
  34. package/dist/admin/components/AttributeIcon.mjs.map +1 -1
  35. package/dist/admin/components/BooleanDefaultValueSelect.js +3 -2
  36. package/dist/admin/components/BooleanDefaultValueSelect.js.map +1 -1
  37. package/dist/admin/components/BooleanDefaultValueSelect.mjs +3 -2
  38. package/dist/admin/components/BooleanDefaultValueSelect.mjs.map +1 -1
  39. package/dist/admin/components/BooleanRadioGroup.js.map +1 -1
  40. package/dist/admin/components/BooleanRadioGroup.mjs.map +1 -1
  41. package/dist/admin/components/CTBSession/useCTBTracking.js +3 -3
  42. package/dist/admin/components/CTBSession/useCTBTracking.js.map +1 -1
  43. package/dist/admin/components/CTBSession/useCTBTracking.mjs +3 -3
  44. package/dist/admin/components/CTBSession/useCTBTracking.mjs.map +1 -1
  45. package/dist/admin/components/CheckboxWithNumberField.js +3 -2
  46. package/dist/admin/components/CheckboxWithNumberField.js.map +1 -1
  47. package/dist/admin/components/CheckboxWithNumberField.mjs +3 -2
  48. package/dist/admin/components/CheckboxWithNumberField.mjs.map +1 -1
  49. package/dist/admin/components/ComponentCard/ComponentCard.js.map +1 -1
  50. package/dist/admin/components/ComponentCard/ComponentCard.mjs.map +1 -1
  51. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.js +160 -162
  52. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.js.map +1 -1
  53. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs +160 -162
  54. package/dist/admin/components/ContentTypeBuilderNav/ContentTypeBuilderNav.mjs.map +1 -1
  55. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js +1 -1
  56. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js.map +1 -1
  57. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs +1 -1
  58. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs.map +1 -1
  59. package/dist/admin/components/ContentTypeRadioGroup.js.map +1 -1
  60. package/dist/admin/components/ContentTypeRadioGroup.mjs.map +1 -1
  61. package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.js +6 -5
  62. package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.js.map +1 -1
  63. package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.mjs +6 -5
  64. package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.mjs.map +1 -1
  65. package/dist/admin/components/CustomRadioGroup/Styles.js.map +1 -1
  66. package/dist/admin/components/CustomRadioGroup/Styles.mjs.map +1 -1
  67. package/dist/admin/components/DataManager/DataManagerContext.js.map +1 -1
  68. package/dist/admin/components/DataManager/DataManagerContext.mjs.map +1 -1
  69. package/dist/admin/components/DataManager/DataManagerProvider.js +16 -4
  70. package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
  71. package/dist/admin/components/DataManager/DataManagerProvider.mjs +16 -4
  72. package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
  73. package/dist/admin/components/DataManager/reducer.js +2 -2
  74. package/dist/admin/components/DataManager/reducer.js.map +1 -1
  75. package/dist/admin/components/DataManager/reducer.mjs +2 -2
  76. package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
  77. package/dist/admin/components/DataManager/useServerRestartWatcher.js.map +1 -1
  78. package/dist/admin/components/DataManager/useServerRestartWatcher.mjs.map +1 -1
  79. package/dist/admin/components/DataManager/utils/retrieveSpecificInfoFromComponents.js.map +1 -1
  80. package/dist/admin/components/DataManager/utils/retrieveSpecificInfoFromComponents.mjs.map +1 -1
  81. package/dist/admin/components/DraftAndPublishToggle.js.map +1 -1
  82. package/dist/admin/components/DraftAndPublishToggle.mjs.map +1 -1
  83. package/dist/admin/components/DynamicZoneList.js.map +1 -1
  84. package/dist/admin/components/DynamicZoneList.mjs.map +1 -1
  85. package/dist/admin/components/FormModal/FormModal.js +91 -71
  86. package/dist/admin/components/FormModal/FormModal.js.map +1 -1
  87. package/dist/admin/components/FormModal/FormModal.mjs +91 -70
  88. package/dist/admin/components/FormModal/FormModal.mjs.map +1 -1
  89. package/dist/admin/components/FormModal/attributes/ConditionForm.js +20 -17
  90. package/dist/admin/components/FormModal/attributes/ConditionForm.js.map +1 -1
  91. package/dist/admin/components/FormModal/attributes/ConditionForm.mjs +20 -17
  92. package/dist/admin/components/FormModal/attributes/ConditionForm.mjs.map +1 -1
  93. package/dist/admin/components/FormModal/attributes/validation/common.js.map +1 -1
  94. package/dist/admin/components/FormModal/attributes/validation/common.mjs.map +1 -1
  95. package/dist/admin/components/FormModal/forms/forms.js +4 -6
  96. package/dist/admin/components/FormModal/forms/forms.js.map +1 -1
  97. package/dist/admin/components/FormModal/forms/forms.mjs +4 -6
  98. package/dist/admin/components/FormModal/forms/forms.mjs.map +1 -1
  99. package/dist/admin/components/FormModal/forms/utils/getUsedAttributeNames.js.map +1 -1
  100. package/dist/admin/components/FormModal/forms/utils/getUsedAttributeNames.mjs.map +1 -1
  101. package/dist/admin/components/FormModal/reducer.js +9 -6
  102. package/dist/admin/components/FormModal/reducer.js.map +1 -1
  103. package/dist/admin/components/FormModal/reducer.mjs +9 -6
  104. package/dist/admin/components/FormModal/reducer.mjs.map +1 -1
  105. package/dist/admin/components/FormModal/utils/customFieldDefaultOptionsReducer.js +3 -3
  106. package/dist/admin/components/FormModal/utils/customFieldDefaultOptionsReducer.js.map +1 -1
  107. package/dist/admin/components/FormModal/utils/customFieldDefaultOptionsReducer.mjs +3 -3
  108. package/dist/admin/components/FormModal/utils/customFieldDefaultOptionsReducer.mjs.map +1 -1
  109. package/dist/admin/components/FormModal/utils/getFormInputNames.js +1 -1
  110. package/dist/admin/components/FormModal/utils/getFormInputNames.js.map +1 -1
  111. package/dist/admin/components/FormModal/utils/getFormInputNames.mjs +1 -1
  112. package/dist/admin/components/FormModal/utils/getFormInputNames.mjs.map +1 -1
  113. package/dist/admin/components/FormModal/utils/relations.js +2 -2
  114. package/dist/admin/components/FormModal/utils/relations.js.map +1 -1
  115. package/dist/admin/components/FormModal/utils/relations.mjs +2 -2
  116. package/dist/admin/components/FormModal/utils/relations.mjs.map +1 -1
  117. package/dist/admin/components/FormModalHeader.js.map +1 -1
  118. package/dist/admin/components/FormModalHeader.mjs.map +1 -1
  119. package/dist/admin/components/FormModalNavigation/FormModalNavigationContext.js.map +1 -1
  120. package/dist/admin/components/FormModalNavigation/FormModalNavigationContext.mjs.map +1 -1
  121. package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.js +13 -13
  122. package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.js.map +1 -1
  123. package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.mjs +13 -13
  124. package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.mjs.map +1 -1
  125. package/dist/admin/components/GenericInputs.js +24 -12
  126. package/dist/admin/components/GenericInputs.js.map +1 -1
  127. package/dist/admin/components/GenericInputs.mjs +24 -12
  128. package/dist/admin/components/GenericInputs.mjs.map +1 -1
  129. package/dist/admin/components/IconPicker/IconPicker.js.map +1 -1
  130. package/dist/admin/components/IconPicker/IconPicker.mjs.map +1 -1
  131. package/dist/admin/components/PluralName.js.map +1 -1
  132. package/dist/admin/components/PluralName.mjs.map +1 -1
  133. package/dist/admin/components/Relation/Relation.js +3 -3
  134. package/dist/admin/components/Relation/Relation.js.map +1 -1
  135. package/dist/admin/components/Relation/Relation.mjs +3 -3
  136. package/dist/admin/components/Relation/Relation.mjs.map +1 -1
  137. package/dist/admin/components/Relation/RelationField/RelationField.js +1 -1
  138. package/dist/admin/components/Relation/RelationField/RelationField.js.map +1 -1
  139. package/dist/admin/components/Relation/RelationField/RelationField.mjs +1 -1
  140. package/dist/admin/components/Relation/RelationField/RelationField.mjs.map +1 -1
  141. package/dist/admin/components/SelectCategory.js +6 -0
  142. package/dist/admin/components/SelectCategory.js.map +1 -1
  143. package/dist/admin/components/SelectCategory.mjs +6 -0
  144. package/dist/admin/components/SelectCategory.mjs.map +1 -1
  145. package/dist/admin/components/SelectComponent.js +1 -1
  146. package/dist/admin/components/SelectComponent.js.map +1 -1
  147. package/dist/admin/components/SelectComponent.mjs +1 -1
  148. package/dist/admin/components/SelectComponent.mjs.map +1 -1
  149. package/dist/admin/components/SingularName.js.map +1 -1
  150. package/dist/admin/components/SingularName.mjs.map +1 -1
  151. package/dist/admin/components/TabForm.js +50 -51
  152. package/dist/admin/components/TabForm.js.map +1 -1
  153. package/dist/admin/components/TabForm.mjs +51 -52
  154. package/dist/admin/components/TabForm.mjs.map +1 -1
  155. package/dist/admin/src/components/AIChat/components/Messages/Message.d.ts +1 -2
  156. package/dist/admin/src/components/AIChat/lib/aiClient.d.ts +1 -1
  157. package/dist/admin/src/components/AIChat/lib/transforms/schemas/fromCTB.d.ts +6 -2
  158. package/dist/admin/src/components/AIChat/lib/transforms/schemas/toCTB.d.ts +1 -1
  159. package/dist/admin/src/components/AIChat/lib/types/schema.d.ts +5 -5
  160. package/dist/admin/src/components/AllowedTypesSelect.d.ts +3 -3
  161. package/dist/admin/src/components/BooleanDefaultValueSelect.d.ts +3 -3
  162. package/dist/admin/src/components/BooleanRadioGroup.d.ts +2 -2
  163. package/dist/admin/src/components/CTBSession/useCTBTracking.d.ts +1 -1
  164. package/dist/admin/src/components/CheckboxWithNumberField.d.ts +6 -4
  165. package/dist/admin/src/components/ContentTypeRadioGroup.d.ts +3 -2
  166. package/dist/admin/src/components/CustomRadioGroup/CustomRadioGroup.d.ts +3 -2
  167. package/dist/admin/src/components/DataManager/DataManagerContext.d.ts +13 -11
  168. package/dist/admin/src/components/DataManager/reducer.d.ts +14 -10
  169. package/dist/admin/src/components/DataManager/utils/cleanData.d.ts +8 -8
  170. package/dist/admin/src/components/DataManager/utils/formatSchemas.d.ts +9 -3
  171. package/dist/admin/src/components/DataManager/utils/retrieveSpecificInfoFromComponents.d.ts +2 -1
  172. package/dist/admin/src/components/DraftAndPublishToggle.d.ts +1 -6
  173. package/dist/admin/src/components/DynamicZoneList.d.ts +2 -2
  174. package/dist/admin/src/components/FormModal/attributes/ConditionForm.d.ts +3 -2
  175. package/dist/admin/src/components/FormModal/attributes/validation/common.d.ts +3 -1
  176. package/dist/admin/src/components/FormModal/forms/forms.d.ts +59 -26
  177. package/dist/admin/src/components/FormModal/forms/utils/getUsedAttributeNames.d.ts +12 -2
  178. package/dist/admin/src/components/FormModal/reducer.d.ts +104 -32
  179. package/dist/admin/src/components/FormModal/utils/customFieldDefaultOptionsReducer.d.ts +11 -1
  180. package/dist/admin/src/components/FormModal/utils/getFormInputNames.d.ts +8 -1
  181. package/dist/admin/src/components/FormModal/utils/relations.d.ts +2 -2
  182. package/dist/admin/src/components/FormModalHeader.d.ts +5 -8
  183. package/dist/admin/src/components/FormModalNavigation/FormModalNavigationContext.d.ts +2 -2
  184. package/dist/admin/src/components/FormModalNavigation/FormModalNavigationProvider.d.ts +17 -1
  185. package/dist/admin/src/components/GenericInputs.d.ts +12 -7
  186. package/dist/admin/src/components/IconPicker/IconPicker.d.ts +2 -7
  187. package/dist/admin/src/components/PluralName.d.ts +6 -14
  188. package/dist/admin/src/components/Relation/Relation.d.ts +12 -3
  189. package/dist/admin/src/components/Relation/RelationField/RelationField.d.ts +3 -2
  190. package/dist/admin/src/components/SelectCategory.d.ts +3 -12
  191. package/dist/admin/src/components/SelectComponent.d.ts +8 -7
  192. package/dist/admin/src/components/SingularName.d.ts +5 -8
  193. package/dist/admin/src/components/TabForm.d.ts +38 -7
  194. package/dist/admin/src/types.d.ts +20 -12
  195. package/dist/admin/src/utils/conditions.d.ts +13 -4
  196. package/dist/admin/src/utils/formAPI.d.ts +38 -33
  197. package/dist/admin/src/utils/getRelationType.d.ts +1 -1
  198. package/dist/admin/src/utils/parseNumberInputValue.d.ts +1 -0
  199. package/dist/admin/utils/conditions.js +38 -28
  200. package/dist/admin/utils/conditions.js.map +1 -1
  201. package/dist/admin/utils/conditions.mjs +37 -28
  202. package/dist/admin/utils/conditions.mjs.map +1 -1
  203. package/dist/admin/utils/formAPI.js +9 -6
  204. package/dist/admin/utils/formAPI.js.map +1 -1
  205. package/dist/admin/utils/formAPI.mjs +9 -6
  206. package/dist/admin/utils/formAPI.mjs.map +1 -1
  207. package/dist/admin/utils/getRelationType.js +3 -0
  208. package/dist/admin/utils/getRelationType.js.map +1 -1
  209. package/dist/admin/utils/getRelationType.mjs +3 -0
  210. package/dist/admin/utils/getRelationType.mjs.map +1 -1
  211. package/dist/admin/utils/getYupInnerErrors.js +6 -4
  212. package/dist/admin/utils/getYupInnerErrors.js.map +1 -1
  213. package/dist/admin/utils/getYupInnerErrors.mjs +6 -4
  214. package/dist/admin/utils/getYupInnerErrors.mjs.map +1 -1
  215. package/dist/admin/utils/parseNumberInputValue.js +15 -0
  216. package/dist/admin/utils/parseNumberInputValue.js.map +1 -0
  217. package/dist/admin/utils/parseNumberInputValue.mjs +13 -0
  218. package/dist/admin/utils/parseNumberInputValue.mjs.map +1 -0
  219. package/dist/server/controllers/validation/relations.js +1 -1
  220. package/dist/server/controllers/validation/relations.js.map +1 -1
  221. package/dist/server/controllers/validation/relations.mjs +1 -1
  222. package/dist/server/controllers/validation/relations.mjs.map +1 -1
  223. package/dist/server/controllers/validation/types.js +4 -3
  224. package/dist/server/controllers/validation/types.js.map +1 -1
  225. package/dist/server/controllers/validation/types.mjs +4 -3
  226. package/dist/server/controllers/validation/types.mjs.map +1 -1
  227. package/package.json +7 -7
@@ -6,7 +6,6 @@ import { Modal, Dialog, Box, Typography, Tabs, Flex, Divider, Button } from '@st
6
6
  import get from 'lodash/get';
7
7
  import has from 'lodash/has';
8
8
  import isEqual from 'lodash/isEqual';
9
- import pick from 'lodash/pick';
10
9
  import set from 'lodash/set';
11
10
  import { useIntl } from 'react-intl';
12
11
  import { useDispatch, useSelector, shallowEqual } from 'react-redux';
@@ -16,6 +15,7 @@ import * as yup from 'yup';
16
15
  import { pluginId } from '../../pluginId.mjs';
17
16
  import { getTrad } from '../../utils/getTrad.mjs';
18
17
  import { isAllowedContentTypesForRelations } from '../../utils/isAllowedContentTypesForRelations.mjs';
18
+ import { getFirstVisibleConditionEntry } from '../../utils/conditions.mjs';
19
19
  import { findAttribute } from '../../utils/findAttribute.mjs';
20
20
  import { getYupInnerErrors } from '../../utils/getYupInnerErrors.mjs';
21
21
  import { AllowedTypesSelect } from '../AllowedTypesSelect.mjs';
@@ -56,6 +56,21 @@ const FormComponent = styled.form`
56
56
  overflow: auto;
57
57
  `;
58
58
  const selectState = (state)=>state['content-type-builder_formModal'] || initialState;
59
+ const toStringValue = (value)=>typeof value === 'string' ? value : '';
60
+ const toOptionalStringValue = (value)=>{
61
+ if (typeof value !== 'string' || value === '') {
62
+ return undefined;
63
+ }
64
+ return value;
65
+ };
66
+ const toBooleanValue = (value)=>typeof value === 'boolean' ? value : false;
67
+ const toContentTypeKind = (value)=>value === 'singleType' ? 'singleType' : 'collectionType';
68
+ const toRecordValue = (value)=>typeof value === 'object' && value !== null ? value : {};
69
+ const toComponentDraft = (value)=>({
70
+ category: toStringValue(value?.category),
71
+ displayName: toStringValue(value?.displayName),
72
+ icon: toOptionalStringValue(value?.icon)
73
+ });
59
74
  const FormModal = ()=>{
60
75
  const { onCloseModal, onNavigateToChooseAttributeModal, onNavigateToAddCompoToDZModal, onNavigateToCreateComponentStep2, actionType, attributeName, attributeType, customFieldUid, dynamicZoneTarget, forTarget, modalType, isOpen, kind, step, targetUid, showBackLink, activeTab, setActiveTab } = useFormModalNavigation();
61
76
  const getPlugin = useStrapiApp('FormModal', (state)=>state.getPlugin);
@@ -85,20 +100,22 @@ const FormModal = ()=>{
85
100
  const oldEnum = initialData.enum;
86
101
  const newEnum = modifiedData.enum;
87
102
  // Get all attributes from the content type schema
88
- const contentTypeAttributes = type?.attributes || [];
103
+ const contentTypeAttributes = type?.attributes ?? [];
89
104
  // Find all fields that reference this field in their conditions
90
105
  const referencedFields = contentTypeAttributes.filter((attr)=>{
91
- if (!attr.conditions) return false;
92
- const condition = attr.conditions.visible;
93
- if (!condition) return false;
94
- const [[, conditions]] = Object.entries(condition);
95
- const [fieldVar, value] = conditions;
106
+ const conditionEntry = getFirstVisibleConditionEntry(attr.conditions);
107
+ if (conditionEntry === null) {
108
+ return false;
109
+ }
110
+ const { fieldVar, value } = conditionEntry;
96
111
  // Check if this condition references our field
97
- if (fieldVar.var !== oldName) return false;
112
+ if (fieldVar.var !== oldName) {
113
+ return false;
114
+ }
98
115
  // If it's an enum field, also check if the value is being deleted/changed
99
- if (oldEnum && newEnum) {
116
+ if (oldEnum !== undefined && newEnum !== undefined) {
100
117
  const deletedOrChangedValues = oldEnum.filter((oldValue)=>!newEnum.includes(oldValue));
101
- return deletedOrChangedValues.includes(value);
118
+ return typeof value === 'string' && deletedOrChangedValues.includes(value);
102
119
  }
103
120
  return true;
104
121
  });
@@ -134,10 +151,10 @@ const FormModal = ()=>{
134
151
  data: {
135
152
  displayName: type.info.displayName,
136
153
  draftAndPublish: type.options?.draftAndPublish,
137
- kind: 'kind' in type && type.kind,
154
+ kind: type.modelType === 'contentType' ? type.kind : 'collectionType',
138
155
  pluginOptions: type.pluginOptions,
139
- pluralName: 'pluralName' in type.info && type.info.pluralName,
140
- singularName: 'singularName' in type.info && type.info.singularName
156
+ pluralName: type.modelType === 'contentType' ? type.info.pluralName : '',
157
+ singularName: type.modelType === 'contentType' ? type.info.singularName : ''
141
158
  }
142
159
  }));
143
160
  }
@@ -146,7 +163,7 @@ const FormModal = ()=>{
146
163
  dispatch(actions.setDataToEdit({
147
164
  data: {
148
165
  displayName: type.info.displayName,
149
- category: 'category' in type && type.category,
166
+ category: type.modelType === 'component' ? type.category : '',
150
167
  icon: type.info.icon
151
168
  }
152
169
  }));
@@ -193,10 +210,10 @@ const FormModal = ()=>{
193
210
  }));
194
211
  } else {
195
212
  dispatch(actions.setCustomFieldDataSchema({
196
- customField: pick(customField, [
197
- 'type',
198
- 'options'
199
- ]),
213
+ customField: {
214
+ type: customField?.type ?? '',
215
+ options: customField?.options
216
+ },
200
217
  isEditing: false,
201
218
  modifiedDataToSetForEditing: attributeToEdit,
202
219
  uid: type.uid
@@ -256,7 +273,7 @@ const FormModal = ()=>{
256
273
  // Check form validity for component
257
274
  // This is happening when the user click on the link from the left menu
258
275
  } else if (isCreatingComponent) {
259
- schema = forms.component.schema(Object.keys(components), modifiedData.category || '', reservedNames, actionType === 'edit', components, modifiedData.displayName || '', type?.uid ?? null);
276
+ schema = forms.component.schema(Object.keys(components), toStringValue(modifiedData.category), reservedNames, actionType === 'edit', components, toStringValue(modifiedData.displayName), type?.uid ?? null);
260
277
  } else if (isCreatingCustomFieldAttribute) {
261
278
  schema = forms.customField.schema({
262
279
  schemaAttributes: get(type, [
@@ -276,16 +293,16 @@ const FormModal = ()=>{
276
293
  // Since we temporarily store the component info in another object
277
294
  // The data is set in the componentToCreate key
278
295
  } else if (isComponentAttribute && isCreatingComponentFromAView && isInFirstComponentStep) {
279
- schema = forms.component.schema(Object.keys(components), get(modifiedData, 'componentToCreate.category', ''), reservedNames, actionType === 'edit', components, modifiedData.componentToCreate.displayName || '');
296
+ schema = forms.component.schema(Object.keys(components), toStringValue(get(modifiedData, 'componentToCreate.category', '')), reservedNames, actionType === 'edit', components, toStringValue(modifiedData.componentToCreate?.displayName));
280
297
  // Check form validity for creating a 'common attribute'
281
298
  // We need to make sure that it is independent from the step
282
299
  } else if (isCreatingAttribute && !isInFirstComponentStep) {
283
- const computedAttrbiuteType = attributeType === 'relation' ? 'relation' : modifiedData.type;
300
+ const computedAttributeType = attributeType === 'relation' ? 'relation' : modifiedData.type;
284
301
  let alreadyTakenTargetContentTypeAttributes = [];
285
- if (computedAttrbiuteType === 'relation') {
286
- const targetContentTypeUID = get(modifiedData, [
302
+ if (computedAttributeType === 'relation') {
303
+ const targetContentTypeUID = toStringValue(get(modifiedData, [
287
304
  'target'
288
- ], null);
305
+ ], ''));
289
306
  const targetContentTypeAttributes = get(contentTypes, [
290
307
  targetContentTypeUID,
291
308
  'attributes'
@@ -302,7 +319,7 @@ const FormModal = ()=>{
302
319
  return attrName !== initialData.targetAttribute;
303
320
  });
304
321
  }
305
- schema = forms.attribute.schema(type, computedAttrbiuteType, reservedNames, alreadyTakenTargetContentTypeAttributes, {
322
+ schema = forms.attribute.schema(type, computedAttributeType ?? 'string', reservedNames, alreadyTakenTargetContentTypeAttributes, {
306
323
  modifiedData,
307
324
  initialData
308
325
  }, ctbFormsAPI);
@@ -311,7 +328,7 @@ const FormModal = ()=>{
311
328
  // in step 1 of the add component (modalType=attribute&attributeType=component) but not creating a component
312
329
  // eslint-disable-next-line no-lonely-if
313
330
  if (isInFirstComponentStep && isCreatingComponentFromAView) {
314
- schema = forms.component.schema(Object.keys(components), get(modifiedData, 'componentToCreate.category', ''), reservedNames, actionType === 'edit', components, modifiedData.componentToCreate.displayName || '');
331
+ schema = forms.component.schema(Object.keys(components), toStringValue(get(modifiedData, 'componentToCreate.category', '')), reservedNames, actionType === 'edit', components, toStringValue(modifiedData.componentToCreate?.displayName));
315
332
  } else {
316
333
  // The form is valid
317
334
  // The case here is being in the addComponentToDynamicZone modal and not creating a component
@@ -322,7 +339,7 @@ const FormModal = ()=>{
322
339
  abortEarly: false
323
340
  });
324
341
  };
325
- const handleChange = React.useCallback(({ target: { name, value, type, ...rest } })=>{
342
+ const handleChange = React.useCallback(({ target: { name, value } })=>{
326
343
  const namesThatCanResetToNullValue = [
327
344
  'enumName',
328
345
  'max',
@@ -337,9 +354,9 @@ const FormModal = ()=>{
337
354
  val = null;
338
355
  } else if (name === 'enum') {
339
356
  // For enum values, ensure we're working with an array
340
- val = Array.isArray(value) ? value : [
357
+ val = Array.isArray(value) ? value : typeof value === 'string' ? [
341
358
  value
342
- ];
359
+ ] : [];
343
360
  } else {
344
361
  val = value;
345
362
  }
@@ -379,11 +396,11 @@ const FormModal = ()=>{
379
396
  createSchema({
380
397
  data: {
381
398
  kind,
382
- displayName: modifiedData.displayName,
383
- draftAndPublish: modifiedData.draftAndPublish,
384
- pluginOptions: modifiedData.pluginOptions,
385
- singularName: modifiedData.singularName,
386
- pluralName: modifiedData.pluralName
399
+ displayName: toStringValue(modifiedData.displayName),
400
+ draftAndPublish: toBooleanValue(modifiedData.draftAndPublish),
401
+ pluginOptions: toRecordValue(modifiedData.pluginOptions),
402
+ singularName: toStringValue(modifiedData.singularName),
403
+ pluralName: toStringValue(modifiedData.pluralName)
387
404
  },
388
405
  uid
389
406
  });
@@ -401,10 +418,10 @@ const FormModal = ()=>{
401
418
  await updateSchema({
402
419
  uid: contentType.uid,
403
420
  data: {
404
- displayName: modifiedData.displayName,
405
- kind: modifiedData.kind,
406
- draftAndPublish: modifiedData.draftAndPublish,
407
- pluginOptions: modifiedData.pluginOptions
421
+ displayName: toStringValue(modifiedData.displayName),
422
+ kind: toContentTypeKind(modifiedData.kind),
423
+ draftAndPublish: toBooleanValue(modifiedData.draftAndPublish),
424
+ pluginOptions: toRecordValue(modifiedData.pluginOptions)
408
425
  }
409
426
  });
410
427
  } else {
@@ -421,38 +438,39 @@ const FormModal = ()=>{
421
438
  } else if (modalType === 'component') {
422
439
  if (isCreating) {
423
440
  // Create the component schema
424
- const componentUid = createComponentUid(modifiedData.displayName, modifiedData.category);
425
- const { category, ...rest } = modifiedData;
441
+ const componentCategory = toStringValue(modifiedData.category);
442
+ const componentDisplayName = toStringValue(modifiedData.displayName);
443
+ const componentUid = createComponentUid(componentDisplayName, componentCategory);
426
444
  createComponentSchema({
427
445
  data: {
428
- displayName: rest.displayName,
429
- icon: rest.icon
446
+ displayName: componentDisplayName,
447
+ icon: toOptionalStringValue(modifiedData.icon)
430
448
  },
431
449
  uid: componentUid,
432
- componentCategory: category
450
+ componentCategory
433
451
  });
434
452
  // Redirect the user to the created component
435
453
  navigate({
436
- pathname: `/plugins/${pluginId}/component-categories/${category}/${componentUid}`
454
+ pathname: `/plugins/${pluginId}/component-categories/${componentCategory}/${componentUid}`
437
455
  });
438
456
  onCloseModal();
439
457
  return;
440
458
  } else {
441
459
  updateComponentSchema({
442
460
  data: {
443
- icon: modifiedData.icon,
444
- displayName: modifiedData.displayName
461
+ icon: toOptionalStringValue(modifiedData.icon),
462
+ displayName: toStringValue(modifiedData.displayName)
445
463
  },
446
464
  componentUID: targetUid
447
465
  });
448
466
  if (type.status === 'NEW') {
449
- const componentUid = createComponentUid(modifiedData.displayName, modifiedData.category);
467
+ const componentUid = createComponentUid(toStringValue(modifiedData.displayName), toStringValue(modifiedData.category));
450
468
  updateComponentUid({
451
469
  componentUID: targetUid,
452
470
  newComponentUID: componentUid
453
471
  });
454
472
  navigate({
455
- pathname: `/plugins/${pluginId}/component-categories/${modifiedData.category}/${componentUid}`
473
+ pathname: `/plugins/${pluginId}/component-categories/${toStringValue(modifiedData.category)}/${componentUid}`
456
474
  });
457
475
  }
458
476
  // Close the modal
@@ -467,7 +485,7 @@ const FormModal = ()=>{
467
485
  },
468
486
  forTarget,
469
487
  targetUid,
470
- name: initialData.name
488
+ name: toStringValue(initialData.name)
471
489
  };
472
490
  if (actionType === 'edit') {
473
491
  editCustomFieldAttribute(customFieldAttributeUpdate);
@@ -498,7 +516,7 @@ const FormModal = ()=>{
498
516
  attributeToSet: modifiedData,
499
517
  forTarget,
500
518
  targetUid,
501
- name: initialData.name
519
+ name: toStringValue(initialData.name)
502
520
  });
503
521
  }
504
522
  // Adding a component to a dynamiczone is not the same logic as creating a simple field
@@ -508,7 +526,7 @@ const FormModal = ()=>{
508
526
  dispatch(actions.resetPropsAndSetTheFormForAddingACompoToADz());
509
527
  setActiveTab('basic');
510
528
  onNavigateToAddCompoToDZModal({
511
- dynamicZoneTarget: modifiedData.name
529
+ dynamicZoneTarget: toStringValue(modifiedData.name)
512
530
  });
513
531
  } else {
514
532
  onCloseModal();
@@ -528,7 +546,7 @@ const FormModal = ()=>{
528
546
  attributeToSet: modifiedData,
529
547
  forTarget,
530
548
  targetUid,
531
- name: initialData.name
549
+ name: toStringValue(initialData.name)
532
550
  });
533
551
  }
534
552
  if (shouldContinue) {
@@ -584,7 +602,7 @@ const FormModal = ()=>{
584
602
  attributeToSet: attributeData,
585
603
  forTarget,
586
604
  targetUid,
587
- name: initialData.name
605
+ name: toStringValue(initialData.name)
588
606
  });
589
607
  }
590
608
  if (shouldContinue) {
@@ -618,19 +636,19 @@ const FormModal = ()=>{
618
636
  // Step 2 of creating a component (which is setting the attribute name in the parent's schema)
619
637
  }
620
638
  // We are destructuring because the modifiedData object doesn't have the appropriate format to create a field
621
- const { category, ...rest } = componentToCreate;
639
+ const draftComponent = toComponentDraft(componentToCreate);
622
640
  // Create a the component temp UID
623
641
  // This could be refactored but I think it's more understandable to separate the logic
624
- const componentUid = createComponentUid(componentToCreate.displayName, category);
642
+ const componentUid = createComponentUid(draftComponent.displayName, draftComponent.category);
625
643
  // Create the component first and add it to the components data
626
644
  createComponentSchema({
627
645
  // Component data
628
646
  data: {
629
- icon: rest.icon,
630
- displayName: rest.displayName
647
+ icon: draftComponent.icon,
648
+ displayName: draftComponent.displayName
631
649
  },
632
650
  uid: componentUid,
633
- componentCategory: category
651
+ componentCategory: draftComponent.category
634
652
  });
635
653
  // Add the field to the schema
636
654
  addAttribute({
@@ -653,13 +671,16 @@ const FormModal = ()=>{
653
671
  // The modal is addComponentToDynamicZone
654
672
  if (isInFirstComponentStep) {
655
673
  if (isCreatingComponentFromAView) {
656
- const { category, type, ...rest } = modifiedData.componentToCreate;
657
- const componentUid = createComponentUid(modifiedData.componentToCreate.displayName, category);
674
+ const draftComponent = toComponentDraft(modifiedData.componentToCreate);
675
+ const componentUid = createComponentUid(draftComponent.displayName, draftComponent.category);
658
676
  // Create the component first and add it to the components data
659
677
  createComponentSchema({
660
- data: rest,
678
+ data: {
679
+ displayName: draftComponent.displayName,
680
+ icon: draftComponent.icon
681
+ },
661
682
  uid: componentUid,
662
- componentCategory: category
683
+ componentCategory: draftComponent.category
663
684
  });
664
685
  // Add the created component to the DZ
665
686
  // We don't want to remove the old ones
@@ -683,7 +704,7 @@ const FormModal = ()=>{
683
704
  forTarget,
684
705
  targetUid,
685
706
  dynamicZoneTarget,
686
- newComponents: modifiedData.components
707
+ newComponents: modifiedData.components ?? []
687
708
  });
688
709
  onCloseModal();
689
710
  }
@@ -873,7 +894,7 @@ const FormModal = ()=>{
873
894
  /*#__PURE__*/ jsx(Dialog.Trigger, {}),
874
895
  /*#__PURE__*/ jsx(ConfirmDialog, {
875
896
  onConfirm: ()=>{
876
- if (pendingSubmit) {
897
+ if (pendingSubmit !== null) {
877
898
  const { e, shouldContinue } = pendingSubmit;
878
899
  setShowWarningDialog(false);
879
900
  setPendingSubmit(null);
@@ -886,12 +907,12 @@ const FormModal = ()=>{
886
907
  },
887
908
  children: (()=>{
888
909
  const referencedFields = checkFieldNameChanges();
889
- if (!referencedFields) return null;
910
+ if (referencedFields === false) return null;
890
911
  const fieldNames = referencedFields.map((field)=>field.name).join(', ');
891
- const isEnum = initialData.enum && modifiedData.enum;
892
- if (isEnum) {
893
- const oldEnum = initialData.enum;
894
- const newEnum = modifiedData.enum;
912
+ const oldEnum = initialData.enum;
913
+ const newEnum = modifiedData.enum;
914
+ const isEnum = Array.isArray(oldEnum) && Array.isArray(newEnum);
915
+ if (isEnum === true) {
895
916
  const deletedOrChangedValues = oldEnum.filter((value)=>!newEnum.includes(value));
896
917
  return /*#__PURE__*/ jsx(Box, {
897
918
  children: /*#__PURE__*/ jsxs(Typography, {
@@ -979,7 +1000,7 @@ const FormModal = ()=>{
979
1000
  actionType: actionType,
980
1001
  forTarget: forTarget,
981
1002
  kind: kind,
982
- step: step,
1003
+ step: step ?? undefined,
983
1004
  modalType: modalType,
984
1005
  attributeType: attributeType,
985
1006
  attributeName: attributeName,