@webiny/app-headless-cms 0.0.0-unstable.97a151f74d → 0.0.0-unstable.aad28a72ae

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 (224) hide show
  1. package/admin/components/ContentEntryForm/ContentEntryForm.js +13 -4
  2. package/admin/components/ContentEntryForm/ContentEntryForm.js.map +1 -1
  3. package/admin/components/ContentEntryForm/useBind.js +1 -1
  4. package/admin/components/ContentEntryForm/useBind.js.map +1 -1
  5. package/admin/components/ContentModelEditor/FieldsSidebar.js.map +1 -1
  6. package/admin/components/FieldEditor/EditFieldDialog/ValidationsSection.d.ts +3 -3
  7. package/admin/components/FieldEditor/EditFieldDialog/ValidationsSection.js +4 -9
  8. package/admin/components/FieldEditor/EditFieldDialog/ValidationsSection.js.map +1 -1
  9. package/admin/components/FieldEditor/EditFieldDialog/ValidatorsList.d.ts +2 -6
  10. package/admin/components/FieldEditor/EditFieldDialog/ValidatorsList.js +145 -68
  11. package/admin/components/FieldEditor/EditFieldDialog/ValidatorsList.js.map +1 -1
  12. package/admin/components/FieldEditor/EditFieldDialog/getValidators.d.ts +4 -3
  13. package/admin/components/FieldEditor/EditFieldDialog/getValidators.js +60 -39
  14. package/admin/components/FieldEditor/EditFieldDialog/getValidators.js.map +1 -1
  15. package/admin/components/FieldEditor/EditFieldDialog.js +6 -6
  16. package/admin/components/FieldEditor/EditFieldDialog.js.map +1 -1
  17. package/admin/components/FieldEditor/Field.js +15 -8
  18. package/admin/components/FieldEditor/Field.js.map +1 -1
  19. package/admin/components/FieldEditor/FieldEditor.js.map +1 -1
  20. package/admin/components/FieldEditor/FieldEditorContext.d.ts +5 -1
  21. package/admin/components/FieldEditor/FieldEditorContext.js +7 -0
  22. package/admin/components/FieldEditor/FieldEditorContext.js.map +1 -1
  23. package/admin/components/IconPicker.d.ts +1 -1
  24. package/admin/components/IconPicker.js +32 -28
  25. package/admin/components/IconPicker.js.map +1 -1
  26. package/admin/components/ModelFieldProvider/ModelFieldContext.d.ts +2 -2
  27. package/admin/components/ModelFieldProvider/useModelField.d.ts +4 -4
  28. package/admin/components/ModelFieldProvider/useModelField.js.map +1 -1
  29. package/admin/graphql/contentModels.js +1 -1
  30. package/admin/graphql/contentModels.js.map +1 -1
  31. package/admin/plugins/fieldRenderers/number/numberInputs.js +0 -1
  32. package/admin/plugins/fieldRenderers/number/numberInputs.js.map +1 -1
  33. package/admin/plugins/fieldRenderers/object/index.js +6 -2
  34. package/admin/plugins/fieldRenderers/object/index.js.map +1 -1
  35. package/admin/plugins/fieldRenderers/object/multipleObjects.js +21 -16
  36. package/admin/plugins/fieldRenderers/object/multipleObjects.js.map +1 -1
  37. package/admin/plugins/fieldRenderers/text/textInputs.js +0 -1
  38. package/admin/plugins/fieldRenderers/text/textInputs.js.map +1 -1
  39. package/admin/plugins/fieldValidators/dateGte.d.ts +2 -2
  40. package/admin/plugins/fieldValidators/dateGte.js +49 -2
  41. package/admin/plugins/fieldValidators/dateGte.js.map +1 -1
  42. package/admin/plugins/fieldValidators/dateLte.d.ts +2 -2
  43. package/admin/plugins/fieldValidators/dateLte.js +49 -2
  44. package/admin/plugins/fieldValidators/dateLte.js.map +1 -1
  45. package/admin/plugins/fieldValidators/dynamicZone.d.ts +2 -2
  46. package/admin/plugins/fieldValidators/dynamicZone.js +161 -26
  47. package/admin/plugins/fieldValidators/dynamicZone.js.map +1 -1
  48. package/admin/plugins/fieldValidators/gte.d.ts +2 -2
  49. package/admin/plugins/fieldValidators/gte.js +40 -2
  50. package/admin/plugins/fieldValidators/gte.js.map +1 -1
  51. package/admin/plugins/fieldValidators/in.d.ts +2 -2
  52. package/admin/plugins/fieldValidators/in.js +40 -2
  53. package/admin/plugins/fieldValidators/in.js.map +1 -1
  54. package/admin/plugins/fieldValidators/lte.d.ts +2 -2
  55. package/admin/plugins/fieldValidators/lte.js +40 -2
  56. package/admin/plugins/fieldValidators/lte.js.map +1 -1
  57. package/admin/plugins/fieldValidators/maxLength.d.ts +2 -2
  58. package/admin/plugins/fieldValidators/maxLength.js +52 -4
  59. package/admin/plugins/fieldValidators/maxLength.js.map +1 -1
  60. package/admin/plugins/fieldValidators/minLength.d.ts +2 -2
  61. package/admin/plugins/fieldValidators/minLength.js +52 -4
  62. package/admin/plugins/fieldValidators/minLength.js.map +1 -1
  63. package/admin/plugins/fieldValidators/pattern.d.ts +2 -2
  64. package/admin/plugins/fieldValidators/pattern.js +62 -3
  65. package/admin/plugins/fieldValidators/pattern.js.map +1 -1
  66. package/admin/plugins/fieldValidators/patternPlugins/email.d.ts +2 -2
  67. package/admin/plugins/fieldValidators/patternPlugins/email.js +6 -4
  68. package/admin/plugins/fieldValidators/patternPlugins/email.js.map +1 -1
  69. package/admin/plugins/fieldValidators/patternPlugins/lowerCase.d.ts +2 -2
  70. package/admin/plugins/fieldValidators/patternPlugins/lowerCase.js +5 -3
  71. package/admin/plugins/fieldValidators/patternPlugins/lowerCase.js.map +1 -1
  72. package/admin/plugins/fieldValidators/patternPlugins/lowerCaseSpace.d.ts +2 -2
  73. package/admin/plugins/fieldValidators/patternPlugins/lowerCaseSpace.js +5 -3
  74. package/admin/plugins/fieldValidators/patternPlugins/lowerCaseSpace.js.map +1 -1
  75. package/admin/plugins/fieldValidators/patternPlugins/upperCase.d.ts +2 -2
  76. package/admin/plugins/fieldValidators/patternPlugins/upperCase.js +5 -3
  77. package/admin/plugins/fieldValidators/patternPlugins/upperCase.js.map +1 -1
  78. package/admin/plugins/fieldValidators/patternPlugins/upperCaseSpace.d.ts +2 -2
  79. package/admin/plugins/fieldValidators/patternPlugins/upperCaseSpace.js +5 -3
  80. package/admin/plugins/fieldValidators/patternPlugins/upperCaseSpace.js.map +1 -1
  81. package/admin/plugins/fieldValidators/patternPlugins/url.d.ts +2 -2
  82. package/admin/plugins/fieldValidators/patternPlugins/url.js +5 -3
  83. package/admin/plugins/fieldValidators/patternPlugins/url.js.map +1 -1
  84. package/admin/plugins/fieldValidators/required.d.ts +2 -2
  85. package/admin/plugins/fieldValidators/required.js +8 -2
  86. package/admin/plugins/fieldValidators/required.js.map +1 -1
  87. package/admin/plugins/fieldValidators/unique.d.ts +2 -2
  88. package/admin/plugins/fieldValidators/unique.js +30 -2
  89. package/admin/plugins/fieldValidators/unique.js.map +1 -1
  90. package/admin/plugins/fields/boolean.d.ts +2 -2
  91. package/admin/plugins/fields/boolean.js.map +1 -1
  92. package/admin/plugins/fields/dateTime.d.ts +2 -2
  93. package/admin/plugins/fields/dateTime.js.map +1 -1
  94. package/admin/plugins/fields/dynamicZone/TemplateDialog.js +10 -1
  95. package/admin/plugins/fields/dynamicZone/TemplateDialog.js.map +1 -1
  96. package/admin/plugins/fields/dynamicZone/commonValidators.d.ts +2 -0
  97. package/admin/plugins/fields/dynamicZone/commonValidators.js +26 -0
  98. package/admin/plugins/fields/dynamicZone/commonValidators.js.map +1 -0
  99. package/admin/plugins/fields/dynamicZone.js +8 -5
  100. package/admin/plugins/fields/dynamicZone.js.map +1 -1
  101. package/admin/plugins/fields/file.d.ts +2 -2
  102. package/admin/plugins/fields/file.js.map +1 -1
  103. package/admin/plugins/fields/longText.d.ts +2 -2
  104. package/admin/plugins/fields/longText.js.map +1 -1
  105. package/admin/plugins/fields/number.d.ts +2 -2
  106. package/admin/plugins/fields/number.js.map +1 -1
  107. package/admin/plugins/fields/object.d.ts +2 -2
  108. package/admin/plugins/fields/object.js.map +1 -1
  109. package/admin/plugins/fields/ref.d.ts +2 -2
  110. package/admin/plugins/fields/ref.js.map +1 -1
  111. package/admin/plugins/fields/richText.d.ts +2 -2
  112. package/admin/plugins/fields/richText.js.map +1 -1
  113. package/admin/plugins/fields/text.d.ts +2 -2
  114. package/admin/plugins/fields/text.js.map +1 -1
  115. package/admin/plugins/index.d.ts +2 -2
  116. package/admin/views/contentEntries/ContentEntriesList.js +22 -7
  117. package/admin/views/contentEntries/ContentEntriesList.js.map +1 -1
  118. package/admin/views/contentModels/ContentModelsDataList.js +2 -2
  119. package/admin/views/contentModels/ContentModelsDataList.js.map +1 -1
  120. package/allPlugins.d.ts +3 -3
  121. package/allPlugins.js +17 -55
  122. package/allPlugins.js.map +1 -1
  123. package/package.json +18 -18
  124. package/{types.d.ts → types/index.d.ts} +13 -166
  125. package/types/index.js +44 -0
  126. package/types/index.js.map +1 -0
  127. package/types/model.d.ts +83 -0
  128. package/{types.js → types/model.js} +0 -0
  129. package/types/model.js.map +1 -0
  130. package/types/shared.d.ts +5 -0
  131. package/types/shared.js +5 -0
  132. package/types/shared.js.map +1 -0
  133. package/types/validation.d.ts +70 -0
  134. package/types/validation.js +5 -0
  135. package/types/validation.js.map +1 -0
  136. package/utils/CmsModelFieldValidatorConfigAdapter.d.ts +15 -0
  137. package/utils/CmsModelFieldValidatorConfigAdapter.js +91 -0
  138. package/utils/CmsModelFieldValidatorConfigAdapter.js.map +1 -0
  139. package/utils/createValidators.d.ts +3 -0
  140. package/{admin/components/ContentEntryForm/functions → utils}/createValidators.js +21 -5
  141. package/utils/createValidators.js.map +1 -0
  142. package/admin/components/ContentEntryForm/functions/createValidators.d.ts +0 -3
  143. package/admin/components/ContentEntryForm/functions/createValidators.js.map +0 -1
  144. package/admin/components/ContentModelEditor/Context.d.ts +0 -34
  145. package/admin/components/ContentModelEditor/Context.js +0 -379
  146. package/admin/components/ContentModelEditor/Context.js.map +0 -1
  147. package/admin/components/ContentModelEditor/useContentModelEditor.d.ts +0 -1
  148. package/admin/components/ContentModelEditor/useContentModelEditor.js +0 -22
  149. package/admin/components/ContentModelEditor/useContentModelEditor.js.map +0 -1
  150. package/admin/components/FieldEditor/EditFieldDialog/ValidatorsTab.d.ts +0 -15
  151. package/admin/components/FieldEditor/EditFieldDialog/ValidatorsTab.js +0 -148
  152. package/admin/components/FieldEditor/EditFieldDialog/ValidatorsTab.js.map +0 -1
  153. package/admin/components/FieldEditor/useFieldEditor.d.ts +0 -1
  154. package/admin/components/FieldEditor/useFieldEditor.js +0 -14
  155. package/admin/components/FieldEditor/useFieldEditor.js.map +0 -1
  156. package/admin/plugins/fieldRenderers/object/singleObject.d.ts +0 -3
  157. package/admin/plugins/fieldRenderers/object/singleObject.js +0 -64
  158. package/admin/plugins/fieldRenderers/object/singleObject.js.map +0 -1
  159. package/admin/plugins/validators/dateGte.d.ts +0 -3
  160. package/admin/plugins/validators/dateGte.js +0 -68
  161. package/admin/plugins/validators/dateGte.js.map +0 -1
  162. package/admin/plugins/validators/dateLte.d.ts +0 -3
  163. package/admin/plugins/validators/dateLte.js +0 -68
  164. package/admin/plugins/validators/dateLte.js.map +0 -1
  165. package/admin/plugins/validators/dynamicZone.d.ts +0 -2
  166. package/admin/plugins/validators/dynamicZone.js +0 -141
  167. package/admin/plugins/validators/dynamicZone.js.map +0 -1
  168. package/admin/plugins/validators/gte.d.ts +0 -3
  169. package/admin/plugins/validators/gte.js +0 -57
  170. package/admin/plugins/validators/gte.js.map +0 -1
  171. package/admin/plugins/validators/in.d.ts +0 -3
  172. package/admin/plugins/validators/in.js +0 -57
  173. package/admin/plugins/validators/in.js.map +0 -1
  174. package/admin/plugins/validators/lte.d.ts +0 -3
  175. package/admin/plugins/validators/lte.js +0 -57
  176. package/admin/plugins/validators/lte.js.map +0 -1
  177. package/admin/plugins/validators/maxLength.d.ts +0 -3
  178. package/admin/plugins/validators/maxLength.js +0 -57
  179. package/admin/plugins/validators/maxLength.js.map +0 -1
  180. package/admin/plugins/validators/minLength.d.ts +0 -3
  181. package/admin/plugins/validators/minLength.js +0 -57
  182. package/admin/plugins/validators/minLength.js.map +0 -1
  183. package/admin/plugins/validators/pattern.d.ts +0 -3
  184. package/admin/plugins/validators/pattern.js +0 -77
  185. package/admin/plugins/validators/pattern.js.map +0 -1
  186. package/admin/plugins/validators/patternPlugins/email.d.ts +0 -3
  187. package/admin/plugins/validators/patternPlugins/email.js +0 -17
  188. package/admin/plugins/validators/patternPlugins/email.js.map +0 -1
  189. package/admin/plugins/validators/patternPlugins/lowerCase.d.ts +0 -3
  190. package/admin/plugins/validators/patternPlugins/lowerCase.js +0 -17
  191. package/admin/plugins/validators/patternPlugins/lowerCase.js.map +0 -1
  192. package/admin/plugins/validators/patternPlugins/lowerCaseSpace.d.ts +0 -3
  193. package/admin/plugins/validators/patternPlugins/lowerCaseSpace.js +0 -17
  194. package/admin/plugins/validators/patternPlugins/lowerCaseSpace.js.map +0 -1
  195. package/admin/plugins/validators/patternPlugins/upperCase.d.ts +0 -3
  196. package/admin/plugins/validators/patternPlugins/upperCase.js +0 -17
  197. package/admin/plugins/validators/patternPlugins/upperCase.js.map +0 -1
  198. package/admin/plugins/validators/patternPlugins/upperCaseSpace.d.ts +0 -3
  199. package/admin/plugins/validators/patternPlugins/upperCaseSpace.js +0 -17
  200. package/admin/plugins/validators/patternPlugins/upperCaseSpace.js.map +0 -1
  201. package/admin/plugins/validators/patternPlugins/url.d.ts +0 -3
  202. package/admin/plugins/validators/patternPlugins/url.js +0 -17
  203. package/admin/plugins/validators/patternPlugins/url.js.map +0 -1
  204. package/admin/plugins/validators/required.d.ts +0 -3
  205. package/admin/plugins/validators/required.js +0 -21
  206. package/admin/plugins/validators/required.js.map +0 -1
  207. package/admin/plugins/validators/timeGte.d.ts +0 -3
  208. package/admin/plugins/validators/timeGte.js +0 -59
  209. package/admin/plugins/validators/timeGte.js.map +0 -1
  210. package/admin/plugins/validators/timeLte.d.ts +0 -3
  211. package/admin/plugins/validators/timeLte.js +0 -59
  212. package/admin/plugins/validators/timeLte.js.map +0 -1
  213. package/admin/plugins/validators/unique.d.ts +0 -7
  214. package/admin/plugins/validators/unique.js +0 -50
  215. package/admin/plugins/validators/unique.js.map +0 -1
  216. package/admin/views/contentEntries/ContentEntry/header/requestChanges/rule-24px.svg +0 -1
  217. package/admin/views/contentEntries/ContentEntry/header/requestReview/emoji_people-24px.svg +0 -1
  218. package/admin/views/contentModelGroups/DelayedOnChange.d.ts +0 -42
  219. package/admin/views/contentModelGroups/DelayedOnChange.js +0 -135
  220. package/admin/views/contentModelGroups/DelayedOnChange.js.map +0 -1
  221. package/admin/views/contentModelGroups/IconPicker.d.ts +0 -8
  222. package/admin/views/contentModelGroups/IconPicker.js +0 -235
  223. package/admin/views/contentModelGroups/IconPicker.js.map +0 -1
  224. package/types.js.map +0 -1
@@ -65,6 +65,10 @@ var isDifferent = function isDifferent(value, compare) {
65
65
  var ContentEntryForm = function ContentEntryForm(_ref) {
66
66
  var onForm = _ref.onForm,
67
67
  props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
68
+ var formElementRef = (0, _react.useRef)(null);
69
+
70
+ var _useModel = (0, _ModelProvider.useModel)(),
71
+ model = _useModel.model;
68
72
 
69
73
  var _useContentEntryForm = (0, _useContentEntryForm2.useContentEntryForm)(props),
70
74
  loading = _useContentEntryForm.loading,
@@ -73,9 +77,6 @@ var ContentEntryForm = function ContentEntryForm(_ref) {
73
77
  _onSubmit = _useContentEntryForm.onSubmit,
74
78
  invalidFields = _useContentEntryForm.invalidFields;
75
79
 
76
- var _useModel = (0, _ModelProvider.useModel)(),
77
- model = _useModel.model;
78
-
79
80
  var _React$useState = _react.default.useState(false),
80
81
  _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
81
82
  isDirty = _React$useState2[0],
@@ -104,6 +105,13 @@ var ContentEntryForm = function ContentEntryForm(_ref) {
104
105
 
105
106
  onForm(ref.current);
106
107
  }, []);
108
+ (0, _react.useEffect)(function () {
109
+ if (!formElementRef.current) {
110
+ return;
111
+ }
112
+
113
+ formElementRef.current.scrollTo(0, 0);
114
+ }, [initialData.id, formElementRef.current]);
107
115
 
108
116
  var formRenderer = _plugins.plugins.byType("cms-content-form-renderer").find(function (pl) {
109
117
  return pl.modelId === model.modelId;
@@ -166,7 +174,8 @@ var ContentEntryForm = function ContentEntryForm(_ref) {
166
174
  when: isDirty,
167
175
  message: "There are some unsaved changes! Are you sure you want to navigate away and discard all changes?"
168
176
  }), /*#__PURE__*/_react.default.createElement(FormWrapper, {
169
- "data-testid": "cms-content-form"
177
+ "data-testid": "cms-content-form",
178
+ ref: formElementRef
170
179
  }, loading && /*#__PURE__*/_react.default.createElement(_Progress.CircularProgress, null), formRenderer ? renderCustomLayout(formProps) : /*#__PURE__*/_react.default.createElement(_Fields.Fields, Object.assign({
171
180
  contentModel: model,
172
181
  fields: model.fields || [],
@@ -1 +1 @@
1
- {"version":3,"names":["FormWrapper","styled","height","overflow","omitTypename","key","value","undefined","stringify","JSON","isDifferent","compare","ContentEntryForm","onForm","props","useContentEntryForm","loading","initialData","data","onChange","onSubmit","invalidFields","useModel","model","React","useState","isDirty","setIsDirty","useEffect","useSnackbar","showSnackbar","ref","useRef","current","formRenderer","plugins","byType","find","pl","modelId","renderCustomLayout","useCallback","formRenderProps","fields","reduce","acc","field","fieldId","Bind","render","contentModel","form","different","formProps","layout"],"sources":["ContentEntryForm.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef } from \"react\";\nimport RenderFieldElement from \"./RenderFieldElement\";\nimport styled from \"@emotion/styled\";\nimport { Form } from \"@webiny/form\";\nimport { FormAPI, FormRenderPropParams } from \"@webiny/form/types\";\nimport { plugins } from \"@webiny/plugins\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { CmsContentFormRendererPlugin } from \"~/types\";\nimport { useContentEntryForm, UseContentEntryFormParams } from \"./useContentEntryForm\";\nimport { Fields } from \"./Fields\";\nimport { Prompt } from \"@webiny/react-router\";\nimport { useSnackbar } from \"@webiny/app-admin\";\nimport { ModelProvider, useModel } from \"~/admin/components/ModelProvider\";\n\nconst FormWrapper = styled(\"div\")({\n height: \"calc(100vh - 260px)\",\n overflow: \"auto\"\n});\n\ninterface ContentEntryFormProps extends UseContentEntryFormParams {\n onForm?: (form: FormAPI) => void;\n}\n\nfunction omitTypename(key: string, value: string): string | undefined {\n return key === \"__typename\" ? undefined : value;\n}\n\nconst stringify = (value: any): string => {\n return JSON.stringify(value || {}, omitTypename);\n};\n\nconst isDifferent = (value: any, compare: any): boolean => {\n if (!value && !compare) {\n return false;\n }\n return stringify(value) !== stringify(compare);\n};\n\nexport const ContentEntryForm: React.FC<ContentEntryFormProps> = ({ onForm, ...props }) => {\n const {\n loading,\n data: initialData,\n onChange,\n onSubmit,\n invalidFields\n } = useContentEntryForm(props);\n const { model } = useModel();\n\n const [isDirty, setIsDirty] = React.useState<boolean>(false);\n /**\n * Reset isDirty when the loaded data changes.\n */\n useEffect(() => {\n if (!isDirty) {\n return;\n }\n setIsDirty(false);\n }, [initialData]);\n\n const { showSnackbar } = useSnackbar();\n\n const ref = useRef<FormAPI | null>(null);\n\n useEffect(() => {\n if (typeof onForm !== \"function\" || !ref.current) {\n return;\n }\n onForm(ref.current);\n }, []);\n\n const formRenderer = plugins\n .byType<CmsContentFormRendererPlugin>(\"cms-content-form-renderer\")\n .find(pl => pl.modelId === model.modelId);\n\n const renderCustomLayout = useCallback(\n (formRenderProps: FormRenderPropParams) => {\n const fields = model.fields.reduce((acc, field) => {\n /**\n * TODO @ts-refactor\n * Figure out type for Bind.\n */\n acc[field.fieldId] = (\n <RenderFieldElement\n field={field}\n Bind={formRenderProps.Bind as any}\n contentModel={model}\n />\n );\n\n return acc;\n }, {} as Record<string, React.ReactElement>);\n if (!formRenderer) {\n return <>{`Missing form renderer for modelId \"${model.modelId}\".`}</>;\n }\n return formRenderer.render({\n ...formRenderProps,\n contentModel: model,\n fields,\n /**\n * TODO @ts-refactor\n * Figure out type for Bind.\n */\n Bind: formRenderProps.Bind as any\n });\n },\n [formRenderer]\n );\n\n return (\n <Form\n onChange={(data, form) => {\n const different = isDifferent(data, initialData);\n if (isDirty !== different) {\n setIsDirty(different);\n }\n return onChange(data, form);\n }}\n onSubmit={(data, form) => {\n setIsDirty(false);\n return onSubmit(data, form);\n }}\n data={initialData}\n ref={ref}\n invalidFields={invalidFields}\n onInvalid={() => {\n setIsDirty(true);\n showSnackbar(\"Some fields did not pass the validation. Please check the form.\");\n }}\n >\n {formProps => {\n return (\n <ModelProvider model={model}>\n <Prompt\n when={isDirty}\n message={\n \"There are some unsaved changes! Are you sure you want to navigate away and discard all changes?\"\n }\n />\n <FormWrapper data-testid={\"cms-content-form\"}>\n {loading && <CircularProgress />}\n {formRenderer ? (\n renderCustomLayout(formProps)\n ) : (\n <Fields\n contentModel={model}\n fields={model.fields || []}\n layout={model.layout || []}\n {...formProps}\n Bind={formProps.Bind as any}\n />\n )}\n </FormWrapper>\n </ModelProvider>\n );\n }}\n </Form>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["FormWrapper","styled","height","overflow","omitTypename","key","value","undefined","stringify","JSON","isDifferent","compare","ContentEntryForm","onForm","props","formElementRef","useRef","useModel","model","useContentEntryForm","loading","initialData","data","onChange","onSubmit","invalidFields","React","useState","isDirty","setIsDirty","useEffect","useSnackbar","showSnackbar","ref","current","scrollTo","id","formRenderer","plugins","byType","find","pl","modelId","renderCustomLayout","useCallback","formRenderProps","fields","reduce","acc","field","fieldId","Bind","render","contentModel","form","different","formProps","layout"],"sources":["ContentEntryForm.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef } from \"react\";\nimport RenderFieldElement from \"./RenderFieldElement\";\nimport styled from \"@emotion/styled\";\nimport { Form } from \"@webiny/form\";\nimport { FormAPI, FormRenderPropParams } from \"@webiny/form/types\";\nimport { plugins } from \"@webiny/plugins\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { CmsContentFormRendererPlugin } from \"~/types\";\nimport { useContentEntryForm, UseContentEntryFormParams } from \"./useContentEntryForm\";\nimport { Fields } from \"./Fields\";\nimport { Prompt } from \"@webiny/react-router\";\nimport { useSnackbar } from \"@webiny/app-admin\";\nimport { ModelProvider, useModel } from \"~/admin/components/ModelProvider\";\n\nconst FormWrapper = styled(\"div\")({\n height: \"calc(100vh - 260px)\",\n overflow: \"auto\"\n});\n\ninterface ContentEntryFormProps extends UseContentEntryFormParams {\n onForm?: (form: FormAPI) => void;\n}\n\nfunction omitTypename(key: string, value: string): string | undefined {\n return key === \"__typename\" ? undefined : value;\n}\n\nconst stringify = (value: any): string => {\n return JSON.stringify(value || {}, omitTypename);\n};\n\nconst isDifferent = (value: any, compare: any): boolean => {\n if (!value && !compare) {\n return false;\n }\n return stringify(value) !== stringify(compare);\n};\n\nexport const ContentEntryForm: React.FC<ContentEntryFormProps> = ({ onForm, ...props }) => {\n const formElementRef = useRef<HTMLDivElement>(null);\n const { model } = useModel();\n const {\n loading,\n data: initialData,\n onChange,\n onSubmit,\n invalidFields\n } = useContentEntryForm(props);\n\n const [isDirty, setIsDirty] = React.useState<boolean>(false);\n /**\n * Reset isDirty when the loaded data changes.\n */\n useEffect(() => {\n if (!isDirty) {\n return;\n }\n setIsDirty(false);\n }, [initialData]);\n\n const { showSnackbar } = useSnackbar();\n\n const ref = useRef<FormAPI | null>(null);\n\n useEffect(() => {\n if (typeof onForm !== \"function\" || !ref.current) {\n return;\n }\n onForm(ref.current);\n }, []);\n\n useEffect(() => {\n if (!formElementRef.current) {\n return;\n }\n\n formElementRef.current.scrollTo(0, 0);\n }, [initialData.id, formElementRef.current]);\n\n const formRenderer = plugins\n .byType<CmsContentFormRendererPlugin>(\"cms-content-form-renderer\")\n .find(pl => pl.modelId === model.modelId);\n\n const renderCustomLayout = useCallback(\n (formRenderProps: FormRenderPropParams) => {\n const fields = model.fields.reduce((acc, field) => {\n /**\n * TODO @ts-refactor\n * Figure out type for Bind.\n */\n acc[field.fieldId] = (\n <RenderFieldElement\n field={field}\n Bind={formRenderProps.Bind as any}\n contentModel={model}\n />\n );\n\n return acc;\n }, {} as Record<string, React.ReactElement>);\n if (!formRenderer) {\n return <>{`Missing form renderer for modelId \"${model.modelId}\".`}</>;\n }\n return formRenderer.render({\n ...formRenderProps,\n contentModel: model,\n fields,\n /**\n * TODO @ts-refactor\n * Figure out type for Bind.\n */\n Bind: formRenderProps.Bind as any\n });\n },\n [formRenderer]\n );\n\n return (\n <Form\n onChange={(data, form) => {\n const different = isDifferent(data, initialData);\n if (isDirty !== different) {\n setIsDirty(different);\n }\n return onChange(data, form);\n }}\n onSubmit={(data, form) => {\n setIsDirty(false);\n return onSubmit(data, form);\n }}\n data={initialData}\n ref={ref}\n invalidFields={invalidFields}\n onInvalid={() => {\n setIsDirty(true);\n showSnackbar(\"Some fields did not pass the validation. Please check the form.\");\n }}\n >\n {formProps => {\n return (\n <ModelProvider model={model}>\n <Prompt\n when={isDirty}\n message={\n \"There are some unsaved changes! Are you sure you want to navigate away and discard all changes?\"\n }\n />\n <FormWrapper data-testid={\"cms-content-form\"} ref={formElementRef}>\n {loading && <CircularProgress />}\n {formRenderer ? (\n renderCustomLayout(formProps)\n ) : (\n <Fields\n contentModel={model}\n fields={model.fields || []}\n layout={model.layout || []}\n {...formProps}\n Bind={formProps.Bind as any}\n />\n )}\n </FormWrapper>\n </ModelProvider>\n );\n }}\n </Form>\n );\n};\n"],"mappings":"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"}
@@ -15,7 +15,7 @@ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/obje
15
15
 
16
16
  var _react = _interopRequireWildcard(require("react"));
17
17
 
18
- var _createValidators = require("./functions/createValidators");
18
+ var _createValidators = require("../../../utils/createValidators");
19
19
 
20
20
  function useBind(_ref) {
21
21
  var ParentBind = _ref.Bind,
@@ -1 +1 @@
1
- {"version":3,"names":["useBind","ParentBind","Bind","field","memoizedBindComponents","useRef","useCallback","index","parentName","name","fieldId","undefined","filter","v","join","current","validators","createValidators","validation","listValidators","listValidation","defaultValue","multipleValues","isMultipleValues","inputValidators","UseBind","params","childName","childValidators","children","bind","props","appendValue","newValue","currentValue","value","newIndex","length","onChange","slice","prependValue","appendValues","newValues","removeValue","form","validateInput","moveValueUp","splice","moveValueDown","cloneElement","displayName"],"sources":["useBind.tsx"],"sourcesContent":["import React, { useRef, useCallback, cloneElement } from \"react\";\nimport { createValidators } from \"./functions/createValidators\";\nimport { BindComponent, CmsModelField } from \"~/types\";\nimport { Validator } from \"@webiny/validation/types\";\n\ninterface UseBindProps {\n field: CmsModelField;\n Bind: BindComponent;\n}\n\ninterface UseBindParams {\n name?: string;\n validators?: Validator | Validator[];\n children?: any;\n}\n\nexport interface GetBindCallable {\n (index?: number): BindComponent;\n}\n\nexport function useBind({ Bind: ParentBind, field }: UseBindProps) {\n const memoizedBindComponents = useRef<Record<string, BindComponent>>({});\n\n return useCallback(\n (index = -1) => {\n const { parentName } = ParentBind;\n // If there's a parent name assigned to the given Bind component, we need to include it in the new field \"name\".\n // This allows us to have nested fields (like \"object\" field with nested properties)\n const name = [parentName, field.fieldId, index >= 0 ? index : undefined]\n .filter(v => v !== undefined)\n .join(\".\");\n\n if (memoizedBindComponents.current[name]) {\n return memoizedBindComponents.current[name];\n }\n\n const validators = createValidators(field, field.validation || []);\n const listValidators = createValidators(field, field.listValidation || []);\n const defaultValue: string[] | undefined = field.multipleValues ? [] : undefined;\n const isMultipleValues = index === -1 && field.multipleValues;\n const inputValidators = isMultipleValues ? listValidators : validators;\n\n memoizedBindComponents.current[name] = function UseBind(params: UseBindParams) {\n const { name: childName, validators: childValidators, children } = params;\n\n return (\n <ParentBind\n name={childName || name}\n validators={childValidators || inputValidators}\n defaultValue={index === -1 ? defaultValue : null}\n >\n {bind => {\n // Multiple-values functions below.\n const props = { ...bind };\n if (field.multipleValues && index === -1) {\n props.appendValue = (newValue: any, index?: number) => {\n const currentValue = bind.value || [];\n const newIndex = index ?? currentValue.length;\n\n bind.onChange([\n ...currentValue.slice(0, newIndex),\n newValue,\n ...currentValue.slice(newIndex)\n ]);\n };\n props.prependValue = (newValue: any) => {\n bind.onChange([newValue, ...(bind.value || [])]);\n };\n props.appendValues = (newValues: any[]) => {\n bind.onChange([...(bind.value || []), ...newValues]);\n };\n\n props.removeValue = (index: number) => {\n if (index < 0) {\n return;\n }\n let value = bind.value;\n value = [...value.slice(0, index), ...value.slice(index + 1)];\n\n bind.onChange(value);\n\n // To make sure the field is still valid, we must trigger validation.\n bind.form.validateInput(field.fieldId);\n };\n\n props.moveValueUp = (index: number) => {\n if (index <= 0) {\n return;\n }\n\n const value = [...bind.value];\n value.splice(index, 1);\n value.splice(index - 1, 0, bind.value[index]);\n\n bind.onChange(value);\n };\n\n props.moveValueDown = (index: number) => {\n if (index >= bind.value.length) {\n return;\n }\n\n const value = [...bind.value];\n value.splice(index, 1);\n value.splice(index + 1, 0, bind.value[index]);\n\n bind.onChange(value);\n };\n }\n\n if (typeof children === \"function\") {\n return children(props);\n }\n\n return cloneElement(children, props);\n }}\n </ParentBind>\n );\n };\n\n // We need to keep track of current field name, to support nested fields.\n memoizedBindComponents.current[name].parentName = name;\n memoizedBindComponents.current[name].displayName = `ParentBind<${name}>`;\n\n return memoizedBindComponents.current[name];\n },\n [field.fieldId]\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["useBind","ParentBind","Bind","field","memoizedBindComponents","useRef","useCallback","index","parentName","name","fieldId","undefined","filter","v","join","current","validators","createValidators","validation","listValidators","listValidation","defaultValue","multipleValues","isMultipleValues","inputValidators","UseBind","params","childName","childValidators","children","bind","props","appendValue","newValue","currentValue","value","newIndex","length","onChange","slice","prependValue","appendValues","newValues","removeValue","form","validateInput","moveValueUp","splice","moveValueDown","cloneElement","displayName"],"sources":["useBind.tsx"],"sourcesContent":["import React, { useRef, useCallback, cloneElement } from \"react\";\nimport { createValidators } from \"~/utils/createValidators\";\nimport { BindComponent, CmsModelField } from \"~/types\";\nimport { Validator } from \"@webiny/validation/types\";\n\ninterface UseBindProps {\n field: CmsModelField;\n Bind: BindComponent;\n}\n\ninterface UseBindParams {\n name?: string;\n validators?: Validator | Validator[];\n children?: any;\n}\n\nexport interface GetBindCallable {\n (index?: number): BindComponent;\n}\n\nexport function useBind({ Bind: ParentBind, field }: UseBindProps) {\n const memoizedBindComponents = useRef<Record<string, BindComponent>>({});\n\n return useCallback(\n (index = -1) => {\n const { parentName } = ParentBind;\n // If there's a parent name assigned to the given Bind component, we need to include it in the new field \"name\".\n // This allows us to have nested fields (like \"object\" field with nested properties)\n const name = [parentName, field.fieldId, index >= 0 ? index : undefined]\n .filter(v => v !== undefined)\n .join(\".\");\n\n if (memoizedBindComponents.current[name]) {\n return memoizedBindComponents.current[name];\n }\n\n const validators = createValidators(field, field.validation || []);\n const listValidators = createValidators(field, field.listValidation || []);\n const defaultValue: string[] | undefined = field.multipleValues ? [] : undefined;\n const isMultipleValues = index === -1 && field.multipleValues;\n const inputValidators = isMultipleValues ? listValidators : validators;\n\n memoizedBindComponents.current[name] = function UseBind(params: UseBindParams) {\n const { name: childName, validators: childValidators, children } = params;\n\n return (\n <ParentBind\n name={childName || name}\n validators={childValidators || inputValidators}\n defaultValue={index === -1 ? defaultValue : null}\n >\n {bind => {\n // Multiple-values functions below.\n const props = { ...bind };\n if (field.multipleValues && index === -1) {\n props.appendValue = (newValue: any, index?: number) => {\n const currentValue = bind.value || [];\n const newIndex = index ?? currentValue.length;\n\n bind.onChange([\n ...currentValue.slice(0, newIndex),\n newValue,\n ...currentValue.slice(newIndex)\n ]);\n };\n props.prependValue = (newValue: any) => {\n bind.onChange([newValue, ...(bind.value || [])]);\n };\n props.appendValues = (newValues: any[]) => {\n bind.onChange([...(bind.value || []), ...newValues]);\n };\n\n props.removeValue = (index: number) => {\n if (index < 0) {\n return;\n }\n let value = bind.value;\n value = [...value.slice(0, index), ...value.slice(index + 1)];\n\n bind.onChange(value);\n\n // To make sure the field is still valid, we must trigger validation.\n bind.form.validateInput(field.fieldId);\n };\n\n props.moveValueUp = (index: number) => {\n if (index <= 0) {\n return;\n }\n\n const value = [...bind.value];\n value.splice(index, 1);\n value.splice(index - 1, 0, bind.value[index]);\n\n bind.onChange(value);\n };\n\n props.moveValueDown = (index: number) => {\n if (index >= bind.value.length) {\n return;\n }\n\n const value = [...bind.value];\n value.splice(index, 1);\n value.splice(index + 1, 0, bind.value[index]);\n\n bind.onChange(value);\n };\n }\n\n if (typeof children === \"function\") {\n return children(props);\n }\n\n return cloneElement(children, props);\n }}\n </ParentBind>\n );\n };\n\n // We need to keep track of current field name, to support nested fields.\n memoizedBindComponents.current[name].parentName = name;\n memoizedBindComponents.current[name].displayName = `ParentBind<${name}>`;\n\n return memoizedBindComponents.current[name];\n },\n [field.fieldId]\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["FieldContainer","styled","padding","marginBottom","display","width","backgroundColor","borderRadius","boxSizing","cursor","opacity","transition","FileInfo","FieldLabel","textTransform","lineHeight","color","FieldDescription","fontSize","FieldHandle","marginRight","Field","props","onFieldDragStart","fieldType","type","label","icon","description","drag","FieldsSidebar","fieldTypePlugin","plugins","byType","map","fieldPlugin","field"],"sources":["FieldsSidebar.tsx"],"sourcesContent":["import React, { DragEventHandler } from \"react\";\nimport { plugins } from \"@webiny/plugins\";\nimport styled from \"@emotion/styled\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport Draggable from \"../Draggable\";\nimport { CmsEditorFieldTypePlugin } from \"~/types\";\n\nconst FieldContainer = styled(\"div\")({\n padding: \"10px 15px\",\n marginBottom: 20,\n display: \"flex\",\n width: \"100%\",\n backgroundColor: \"var(--mdc-theme-on-background)\",\n borderRadius: 15,\n boxSizing: \"border-box\",\n cursor: \"grab\",\n opacity: 1,\n transition: \"opacity 225ms\",\n \"&:hover\": {\n opacity: 0.8\n },\n \"&:last-child\": {\n marginBottom: 0\n }\n});\n\nconst FileInfo = styled(\"div\")({});\n\nconst FieldLabel = styled(\"div\")({\n textTransform: \"uppercase\",\n lineHeight: \"145%\",\n color: \"var(--mdc-theme-on-surface)\"\n});\n\nconst FieldDescription = styled(\"div\")({\n fontSize: 14,\n color: \"var(--mdc-theme-text-secondary-on-background)\"\n});\n\nconst FieldHandle = styled(\"div\")({\n marginRight: 15,\n color: \"var(--mdc-theme-on-surface)\"\n});\n\ninterface FieldProps {\n onFieldDragStart: DragEventHandler;\n fieldType: CmsEditorFieldTypePlugin[\"field\"];\n}\nconst Field: React.FC<FieldProps> = props => {\n const {\n onFieldDragStart,\n fieldType: { type, label, icon, description }\n } = props;\n return (\n <Draggable beginDrag={{ type: \"newField\", fieldType: type }}>\n {({ drag }) => (\n <div\n ref={drag}\n style={{ marginBottom: 10 }}\n data-testid={`cms-editor-fields-field-${type}`}\n onDragStart={onFieldDragStart}\n >\n <FieldContainer>\n <FieldHandle>\n <Icon icon={icon as React.ReactElement} />\n </FieldHandle>\n <FileInfo>\n <FieldLabel>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FileInfo>\n </FieldContainer>\n </div>\n )}\n </Draggable>\n );\n};\n\ninterface FieldsSidebarProps {\n onFieldDragStart: DragEventHandler;\n}\nexport const FieldsSidebar: React.FC<FieldsSidebarProps> = ({ onFieldDragStart }) => {\n const fieldTypePlugin = plugins.byType<CmsEditorFieldTypePlugin>(\"cms-editor-field-type\");\n\n return (\n <React.Fragment>\n {fieldTypePlugin.map(fieldPlugin => (\n <Field\n key={fieldPlugin.field.type}\n fieldType={fieldPlugin.field}\n onFieldDragStart={onFieldDragStart}\n />\n ))}\n </React.Fragment>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAGA,IAAMA,cAAc,oBAAGC,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACjCC,OAAO,EAAE,WADwB;EAEjCC,YAAY,EAAE,EAFmB;EAGjCC,OAAO,EAAE,MAHwB;EAIjCC,KAAK,EAAE,MAJ0B;EAKjCC,eAAe,EAAE,gCALgB;EAMjCC,YAAY,EAAE,EANmB;EAOjCC,SAAS,EAAE,YAPsB;EAQjCC,MAAM,EAAE,MARyB;EASjCC,OAAO,EAAE,CATwB;EAUjCC,UAAU,EAAE,eAVqB;EAWjC,WAAW;IACPD,OAAO,EAAE;EADF,CAXsB;EAcjC,gBAAgB;IACZP,YAAY,EAAE;EADF;AAdiB,CAAjB,CAApB;AAmBA,IAAMS,QAAQ,oBAAGX,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB,EAAjB,CAAd;AAEA,IAAMY,UAAU,oBAAGZ,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EAC7Ba,aAAa,EAAE,WADc;EAE7BC,UAAU,EAAE,MAFiB;EAG7BC,KAAK,EAAE;AAHsB,CAAjB,CAAhB;AAMA,IAAMC,gBAAgB,oBAAGhB,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACnCiB,QAAQ,EAAE,EADyB;EAEnCF,KAAK,EAAE;AAF4B,CAAjB,CAAtB;AAKA,IAAMG,WAAW,oBAAGlB,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EAC9BmB,WAAW,EAAE,EADiB;EAE9BJ,KAAK,EAAE;AAFuB,CAAjB,CAAjB;;AASA,IAAMK,KAA2B,GAAG,SAA9BA,KAA8B,CAAAC,KAAK,EAAI;EACzC,IACIC,gBADJ,GAGID,KAHJ,CACIC,gBADJ;EAAA,uBAGID,KAHJ,CAEIE,SAFJ;EAAA,IAEiBC,IAFjB,oBAEiBA,IAFjB;EAAA,IAEuBC,KAFvB,oBAEuBA,KAFvB;EAAA,IAE8BC,IAF9B,oBAE8BA,IAF9B;EAAA,IAEoCC,WAFpC,oBAEoCA,WAFpC;EAIA,oBACI,6BAAC,kBAAD;IAAW,SAAS,EAAE;MAAEH,IAAI,EAAE,UAAR;MAAoBD,SAAS,EAAEC;IAA/B;EAAtB,GACK;IAAA,IAAGI,IAAH,QAAGA,IAAH;IAAA,oBACG;MACI,GAAG,EAAEA,IADT;MAEI,KAAK,EAAE;QAAE1B,YAAY,EAAE;MAAhB,CAFX;MAGI,iDAAwCsB,IAAxC,CAHJ;MAII,WAAW,EAAEF;IAJjB,gBAMI,6BAAC,cAAD,qBACI,6BAAC,WAAD,qBACI,6BAAC,UAAD;MAAM,IAAI,EAAEI;IAAZ,EADJ,CADJ,eAII,6BAAC,QAAD,qBACI,6BAAC,UAAD,QAAaD,KAAb,CADJ,eAEI,6BAAC,gBAAD,QAAmBE,WAAnB,CAFJ,CAJJ,CANJ,CADH;EAAA,CADL,CADJ;AAsBH,CA3BD;;AAgCO,IAAME,aAA2C,GAAG,SAA9CA,aAA8C,QAA0B;EAAA,IAAvBP,gBAAuB,SAAvBA,gBAAuB;;EACjF,IAAMQ,eAAe,GAAGC,gBAAA,CAAQC,MAAR,CAAyC,uBAAzC,CAAxB;;EAEA,oBACI,6BAAC,cAAD,CAAO,QAAP,QACKF,eAAe,CAACG,GAAhB,CAAoB,UAAAC,WAAW;IAAA,oBAC5B,6BAAC,KAAD;MACI,GAAG,EAAEA,WAAW,CAACC,KAAZ,CAAkBX,IAD3B;MAEI,SAAS,EAAEU,WAAW,CAACC,KAF3B;MAGI,gBAAgB,EAAEb;IAHtB,EAD4B;EAAA,CAA/B,CADL,CADJ;AAWH,CAdM"}
1
+ {"version":3,"names":["FieldContainer","styled","padding","marginBottom","display","width","backgroundColor","borderRadius","boxSizing","cursor","opacity","transition","FileInfo","FieldLabel","textTransform","lineHeight","color","FieldDescription","fontSize","FieldHandle","marginRight","Field","props","onFieldDragStart","fieldType","type","label","icon","description","drag","FieldsSidebar","fieldTypePlugin","plugins","byType","map","fieldPlugin","field"],"sources":["FieldsSidebar.tsx"],"sourcesContent":["import React, { DragEventHandler } from \"react\";\nimport { plugins } from \"@webiny/plugins\";\nimport styled from \"@emotion/styled\";\nimport { Icon } from \"@webiny/ui/Icon\";\nimport Draggable from \"../Draggable\";\nimport { CmsModelFieldTypePlugin } from \"~/types\";\n\nconst FieldContainer = styled(\"div\")({\n padding: \"10px 15px\",\n marginBottom: 20,\n display: \"flex\",\n width: \"100%\",\n backgroundColor: \"var(--mdc-theme-on-background)\",\n borderRadius: 15,\n boxSizing: \"border-box\",\n cursor: \"grab\",\n opacity: 1,\n transition: \"opacity 225ms\",\n \"&:hover\": {\n opacity: 0.8\n },\n \"&:last-child\": {\n marginBottom: 0\n }\n});\n\nconst FileInfo = styled(\"div\")({});\n\nconst FieldLabel = styled(\"div\")({\n textTransform: \"uppercase\",\n lineHeight: \"145%\",\n color: \"var(--mdc-theme-on-surface)\"\n});\n\nconst FieldDescription = styled(\"div\")({\n fontSize: 14,\n color: \"var(--mdc-theme-text-secondary-on-background)\"\n});\n\nconst FieldHandle = styled(\"div\")({\n marginRight: 15,\n color: \"var(--mdc-theme-on-surface)\"\n});\n\ninterface FieldProps {\n onFieldDragStart: DragEventHandler;\n fieldType: CmsModelFieldTypePlugin[\"field\"];\n}\nconst Field: React.FC<FieldProps> = props => {\n const {\n onFieldDragStart,\n fieldType: { type, label, icon, description }\n } = props;\n return (\n <Draggable beginDrag={{ type: \"newField\", fieldType: type }}>\n {({ drag }) => (\n <div\n ref={drag}\n style={{ marginBottom: 10 }}\n data-testid={`cms-editor-fields-field-${type}`}\n onDragStart={onFieldDragStart}\n >\n <FieldContainer>\n <FieldHandle>\n <Icon icon={icon as React.ReactElement} />\n </FieldHandle>\n <FileInfo>\n <FieldLabel>{label}</FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n </FileInfo>\n </FieldContainer>\n </div>\n )}\n </Draggable>\n );\n};\n\ninterface FieldsSidebarProps {\n onFieldDragStart: DragEventHandler;\n}\nexport const FieldsSidebar: React.FC<FieldsSidebarProps> = ({ onFieldDragStart }) => {\n const fieldTypePlugin = plugins.byType<CmsModelFieldTypePlugin>(\"cms-editor-field-type\");\n\n return (\n <React.Fragment>\n {fieldTypePlugin.map(fieldPlugin => (\n <Field\n key={fieldPlugin.field.type}\n fieldType={fieldPlugin.field}\n onFieldDragStart={onFieldDragStart}\n />\n ))}\n </React.Fragment>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAGA,IAAMA,cAAc,oBAAGC,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACjCC,OAAO,EAAE,WADwB;EAEjCC,YAAY,EAAE,EAFmB;EAGjCC,OAAO,EAAE,MAHwB;EAIjCC,KAAK,EAAE,MAJ0B;EAKjCC,eAAe,EAAE,gCALgB;EAMjCC,YAAY,EAAE,EANmB;EAOjCC,SAAS,EAAE,YAPsB;EAQjCC,MAAM,EAAE,MARyB;EASjCC,OAAO,EAAE,CATwB;EAUjCC,UAAU,EAAE,eAVqB;EAWjC,WAAW;IACPD,OAAO,EAAE;EADF,CAXsB;EAcjC,gBAAgB;IACZP,YAAY,EAAE;EADF;AAdiB,CAAjB,CAApB;AAmBA,IAAMS,QAAQ,oBAAGX,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB,EAAjB,CAAd;AAEA,IAAMY,UAAU,oBAAGZ,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EAC7Ba,aAAa,EAAE,WADc;EAE7BC,UAAU,EAAE,MAFiB;EAG7BC,KAAK,EAAE;AAHsB,CAAjB,CAAhB;AAMA,IAAMC,gBAAgB,oBAAGhB,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EACnCiB,QAAQ,EAAE,EADyB;EAEnCF,KAAK,EAAE;AAF4B,CAAjB,CAAtB;AAKA,IAAMG,WAAW,oBAAGlB,eAAH,EAAU,KAAV;EAAA;EAAA;AAAA,GAAiB;EAC9BmB,WAAW,EAAE,EADiB;EAE9BJ,KAAK,EAAE;AAFuB,CAAjB,CAAjB;;AASA,IAAMK,KAA2B,GAAG,SAA9BA,KAA8B,CAAAC,KAAK,EAAI;EACzC,IACIC,gBADJ,GAGID,KAHJ,CACIC,gBADJ;EAAA,uBAGID,KAHJ,CAEIE,SAFJ;EAAA,IAEiBC,IAFjB,oBAEiBA,IAFjB;EAAA,IAEuBC,KAFvB,oBAEuBA,KAFvB;EAAA,IAE8BC,IAF9B,oBAE8BA,IAF9B;EAAA,IAEoCC,WAFpC,oBAEoCA,WAFpC;EAIA,oBACI,6BAAC,kBAAD;IAAW,SAAS,EAAE;MAAEH,IAAI,EAAE,UAAR;MAAoBD,SAAS,EAAEC;IAA/B;EAAtB,GACK;IAAA,IAAGI,IAAH,QAAGA,IAAH;IAAA,oBACG;MACI,GAAG,EAAEA,IADT;MAEI,KAAK,EAAE;QAAE1B,YAAY,EAAE;MAAhB,CAFX;MAGI,iDAAwCsB,IAAxC,CAHJ;MAII,WAAW,EAAEF;IAJjB,gBAMI,6BAAC,cAAD,qBACI,6BAAC,WAAD,qBACI,6BAAC,UAAD;MAAM,IAAI,EAAEI;IAAZ,EADJ,CADJ,eAII,6BAAC,QAAD,qBACI,6BAAC,UAAD,QAAaD,KAAb,CADJ,eAEI,6BAAC,gBAAD,QAAmBE,WAAnB,CAFJ,CAJJ,CANJ,CADH;EAAA,CADL,CADJ;AAsBH,CA3BD;;AAgCO,IAAME,aAA2C,GAAG,SAA9CA,aAA8C,QAA0B;EAAA,IAAvBP,gBAAuB,SAAvBA,gBAAuB;;EACjF,IAAMQ,eAAe,GAAGC,gBAAA,CAAQC,MAAR,CAAwC,uBAAxC,CAAxB;;EAEA,oBACI,6BAAC,cAAD,CAAO,QAAP,QACKF,eAAe,CAACG,GAAhB,CAAoB,UAAAC,WAAW;IAAA,oBAC5B,6BAAC,KAAD;MACI,GAAG,EAAEA,WAAW,CAACC,KAAZ,CAAkBX,IAD3B;MAEI,SAAS,EAAEU,WAAW,CAACC,KAF3B;MAGI,gBAAgB,EAAEb;IAHtB,EAD4B;EAAA,CAA/B,CADL,CADJ;AAWH,CAdM"}
@@ -1,10 +1,10 @@
1
1
  /// <reference types="react" />
2
- import { ValidationSection } from "./getValidators";
2
+ import { CmsModelFieldValidatorConfigAdapter } from "../../../../utils/CmsModelFieldValidatorConfigAdapter";
3
3
  interface ValidatorsSectionProps {
4
4
  title: string;
5
5
  fieldKey: "validators" | "listValidators";
6
6
  description: string;
7
- validation: ValidationSection;
7
+ validators: CmsModelFieldValidatorConfigAdapter[];
8
8
  }
9
- export declare const ValidationsSection: ({ fieldKey, validation, ...props }: ValidatorsSectionProps) => JSX.Element;
9
+ export declare const ValidationsSection: ({ title, description, fieldKey, validators }: ValidatorsSectionProps) => JSX.Element;
10
10
  export {};
@@ -7,8 +7,6 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.ValidationsSection = void 0;
9
9
 
10
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
-
12
10
  var _react = _interopRequireDefault(require("react"));
13
11
 
14
12
  var _Grid = require("@webiny/ui/Grid");
@@ -17,19 +15,16 @@ var _Typography = require("@webiny/ui/Typography");
17
15
 
18
16
  var _ValidatorsList = require("./ValidatorsList");
19
17
 
20
- var _excluded = ["fieldKey", "validation"];
21
18
  var bindTo = {
22
19
  validators: "validation",
23
20
  listValidators: "listValidation"
24
21
  };
25
22
 
26
23
  var ValidationsSection = function ValidationsSection(_ref) {
27
- var fieldKey = _ref.fieldKey,
28
- validation = _ref.validation,
29
- props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
30
- var validators = validation.validators;
31
- var title = validation.title || props.title;
32
- var description = validation.description || props.description;
24
+ var title = _ref.title,
25
+ description = _ref.description,
26
+ fieldKey = _ref.fieldKey,
27
+ validators = _ref.validators;
33
28
  return /*#__PURE__*/_react.default.createElement(_Grid.Grid, null, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
34
29
  span: 12
35
30
  }, /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
@@ -1 +1 @@
1
- {"version":3,"names":["bindTo","validators","listValidators","ValidationsSection","fieldKey","validation","props","title","description"],"sources":["ValidationsSection.tsx"],"sourcesContent":["import React from \"react\";\nimport { Cell, Grid } from \"@webiny/ui/Grid\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { ValidatorsList } from \"./ValidatorsList\";\nimport { ValidationSection } from \"./getValidators\";\n\ninterface ValidatorsSectionProps {\n title: string;\n fieldKey: \"validators\" | \"listValidators\";\n description: string;\n validation: ValidationSection;\n}\n\nconst bindTo = {\n validators: \"validation\",\n listValidators: \"listValidation\"\n};\n\nexport const ValidationsSection = ({ fieldKey, validation, ...props }: ValidatorsSectionProps) => {\n const { validators } = validation;\n const title = validation.title || props.title;\n const description = validation.description || props.description;\n\n return (\n <Grid>\n <Cell span={12}>\n <Typography use={\"headline5\"}>{title}</Typography>\n <br />\n <Typography use={\"body2\"}>{description}</Typography>\n </Cell>\n <Cell span={12}>\n <ValidatorsList name={bindTo[fieldKey]} validators={validators} />\n </Cell>\n </Grid>\n );\n};\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;AAUA,IAAMA,MAAM,GAAG;EACXC,UAAU,EAAE,YADD;EAEXC,cAAc,EAAE;AAFL,CAAf;;AAKO,IAAMC,kBAAkB,GAAG,SAArBA,kBAAqB,OAAgE;EAAA,IAA7DC,QAA6D,QAA7DA,QAA6D;EAAA,IAAnDC,UAAmD,QAAnDA,UAAmD;EAAA,IAApCC,KAAoC;EAC9F,IAAQL,UAAR,GAAuBI,UAAvB,CAAQJ,UAAR;EACA,IAAMM,KAAK,GAAGF,UAAU,CAACE,KAAX,IAAoBD,KAAK,CAACC,KAAxC;EACA,IAAMC,WAAW,GAAGH,UAAU,CAACG,WAAX,IAA0BF,KAAK,CAACE,WAApD;EAEA,oBACI,6BAAC,UAAD,qBACI,6BAAC,UAAD;IAAM,IAAI,EAAE;EAAZ,gBACI,6BAAC,sBAAD;IAAY,GAAG,EAAE;EAAjB,GAA+BD,KAA/B,CADJ,eAEI,wCAFJ,eAGI,6BAAC,sBAAD;IAAY,GAAG,EAAE;EAAjB,GAA2BC,WAA3B,CAHJ,CADJ,eAMI,6BAAC,UAAD;IAAM,IAAI,EAAE;EAAZ,gBACI,6BAAC,8BAAD;IAAgB,IAAI,EAAER,MAAM,CAACI,QAAD,CAA5B;IAAwC,UAAU,EAAEH;EAApD,EADJ,CANJ,CADJ;AAYH,CAjBM"}
1
+ {"version":3,"names":["bindTo","validators","listValidators","ValidationsSection","title","description","fieldKey"],"sources":["ValidationsSection.tsx"],"sourcesContent":["import React from \"react\";\nimport { Cell, Grid } from \"@webiny/ui/Grid\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { ValidatorsList } from \"./ValidatorsList\";\nimport { CmsModelFieldValidatorConfigAdapter } from \"~/utils/CmsModelFieldValidatorConfigAdapter\";\n\ninterface ValidatorsSectionProps {\n title: string;\n fieldKey: \"validators\" | \"listValidators\";\n description: string;\n validators: CmsModelFieldValidatorConfigAdapter[];\n}\n\nconst bindTo = {\n validators: \"validation\",\n listValidators: \"listValidation\"\n};\n\nexport const ValidationsSection = ({\n title,\n description,\n fieldKey,\n validators\n}: ValidatorsSectionProps) => {\n return (\n <Grid>\n <Cell span={12}>\n <Typography use={\"headline5\"}>{title}</Typography>\n <br />\n <Typography use={\"body2\"}>{description}</Typography>\n </Cell>\n <Cell span={12}>\n <ValidatorsList name={bindTo[fieldKey]} validators={validators} />\n </Cell>\n </Grid>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAUA,IAAMA,MAAM,GAAG;EACXC,UAAU,EAAE,YADD;EAEXC,cAAc,EAAE;AAFL,CAAf;;AAKO,IAAMC,kBAAkB,GAAG,SAArBA,kBAAqB,OAKJ;EAAA,IAJ1BC,KAI0B,QAJ1BA,KAI0B;EAAA,IAH1BC,WAG0B,QAH1BA,WAG0B;EAAA,IAF1BC,QAE0B,QAF1BA,QAE0B;EAAA,IAD1BL,UAC0B,QAD1BA,UAC0B;EAC1B,oBACI,6BAAC,UAAD,qBACI,6BAAC,UAAD;IAAM,IAAI,EAAE;EAAZ,gBACI,6BAAC,sBAAD;IAAY,GAAG,EAAE;EAAjB,GAA+BG,KAA/B,CADJ,eAEI,wCAFJ,eAGI,6BAAC,sBAAD;IAAY,GAAG,EAAE;EAAjB,GAA2BC,WAA3B,CAHJ,CADJ,eAMI,6BAAC,UAAD;IAAM,IAAI,EAAE;EAAZ,gBACI,6BAAC,8BAAD;IAAgB,IAAI,EAAEL,MAAM,CAACM,QAAD,CAA5B;IAAwC,UAAU,EAAEL;EAApD,EADJ,CANJ,CADJ;AAYH,CAlBM"}
@@ -1,12 +1,8 @@
1
1
  import React from "react";
2
- import { CmsEditorFieldValidatorPlugin } from "../../../../types";
3
- interface ValidatorsTabPropsValidator {
4
- optional: boolean;
5
- validator: CmsEditorFieldValidatorPlugin["validator"];
6
- }
2
+ import { CmsModelFieldValidatorConfigAdapter } from "../../../../utils/CmsModelFieldValidatorConfigAdapter";
7
3
  interface ValidatorsTabProps {
8
4
  name: string;
9
- validators: ValidatorsTabPropsValidator[];
5
+ validators: CmsModelFieldValidatorConfigAdapter[];
10
6
  }
11
7
  export declare const ValidatorsList: React.FC<ValidatorsTabProps>;
12
8
  export {};
@@ -21,6 +21,8 @@ var _react = _interopRequireWildcard(require("react"));
21
21
 
22
22
  var _emotion = require("emotion");
23
23
 
24
+ var _plugins = require("@webiny/plugins");
25
+
24
26
  var _Switch = require("@webiny/ui/Switch");
25
27
 
26
28
  var _form = require("@webiny/form");
@@ -33,6 +35,18 @@ var _Input = require("@webiny/ui/Input");
33
35
 
34
36
  var _Accordion = require("@webiny/ui/Accordion");
35
37
 
38
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
39
+
40
+ var _Tooltip = require("@webiny/ui/Tooltip");
41
+
42
+ var Variable = /*#__PURE__*/(0, _styled.default)("span", {
43
+ label: "Variable",
44
+ target: "e19f04zm0"
45
+ })("font-weight:bold;cursor:pointer;");
46
+ var Comma = /*#__PURE__*/(0, _styled.default)("span", {
47
+ label: "Comma",
48
+ target: "e19f04zm1"
49
+ })("padding-right:5px;");
36
50
  var noPadding = /*#__PURE__*/(0, _emotion.css)(".webiny-ui-accordion-item__content{padding:0 !important;}label:noPadding;");
37
51
  var gridBottomPadding = /*#__PURE__*/(0, _emotion.css)(":not(:last-child){padding-bottom:0;}label:gridBottomPadding;");
38
52
 
@@ -44,16 +58,16 @@ var onEnabledChange = function onEnabledChange(params) {
44
58
 
45
59
  if (data) {
46
60
  var index = validationValue.findIndex(function (item) {
47
- return item.name === validator.name;
61
+ return item.name === validator.getName();
48
62
  });
49
63
  onChangeValidation([].concat((0, _toConsumableArray2.default)(validationValue.slice(0, index)), (0, _toConsumableArray2.default)(validationValue.slice(index + 1))));
50
64
  return;
51
65
  }
52
66
 
53
67
  onChangeValidation([].concat((0, _toConsumableArray2.default)(validationValue), [{
54
- name: validator.name,
55
- settings: validator.defaultSettings,
56
- message: validator.defaultMessage
68
+ name: validator.getName(),
69
+ settings: validator.getDefaultSettings(),
70
+ message: validator.getDefaultMessage()
57
71
  }]));
58
72
  };
59
73
 
@@ -71,6 +85,125 @@ var renderEmpty = function renderEmpty() {
71
85
  return null;
72
86
  };
73
87
 
88
+ var getValidatorPlugin = function getValidatorPlugin(name) {
89
+ var plugin = _plugins.plugins.byType("cms-model-field-validator").find(function (plugin) {
90
+ return plugin.validator.name === name;
91
+ });
92
+
93
+ if (!plugin) {
94
+ return null;
95
+ }
96
+
97
+ return plugin.validator;
98
+ };
99
+
100
+ var ValidatorItem = function ValidatorItem(_ref2) {
101
+ var validator = _ref2.validator,
102
+ value = _ref2.value,
103
+ _onChange = _ref2.onChange;
104
+ var validatorName = validator.getName();
105
+ var plugin = getValidatorPlugin(validatorName);
106
+
107
+ if (!plugin) {
108
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);
109
+ }
110
+
111
+ var validatorIndex = (value || []).findIndex(function (item) {
112
+ return item.name === validatorName;
113
+ });
114
+ var data = (value || [])[validatorIndex];
115
+
116
+ if (typeof plugin.renderCustomUi === "function") {
117
+ return /*#__PURE__*/_react.default.createElement(_react.Fragment, {
118
+ key: validatorName
119
+ }, plugin.renderCustomUi());
120
+ }
121
+
122
+ var renderSettings = plugin.renderSettings || renderEmpty;
123
+ var actions = !validator.isRequired() ? /*#__PURE__*/_react.default.createElement(_Accordion.AccordionItem.Actions, null, /*#__PURE__*/_react.default.createElement(_Switch.Switch, {
124
+ label: "Enabled",
125
+ value: validatorIndex >= 0,
126
+ onChange: function onChange() {
127
+ return onEnabledChange({
128
+ data: data,
129
+ validationValue: value,
130
+ onChangeValidation: _onChange,
131
+ validator: validator
132
+ });
133
+ }
134
+ })) : null;
135
+ var description = [/*#__PURE__*/_react.default.createElement("span", {
136
+ key: "msg"
137
+ }, "This message will be displayed to the user.")];
138
+ var variables = validator.getVariables();
139
+
140
+ if (variables.length) {
141
+ description.push( /*#__PURE__*/_react.default.createElement("span", {
142
+ key: "vars"
143
+ }, "\xA0Available variables:\xA0"));
144
+
145
+ for (var i = 0; i < variables.length; i++) {
146
+ var variable = variables[i];
147
+ description.push( /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
148
+ key: variable.name,
149
+ content: variable.description,
150
+ placement: "bottom"
151
+ }, /*#__PURE__*/_react.default.createElement(Variable, {
152
+ dangerouslySetInnerHTML: {
153
+ __html: "{".concat(variable.name, "}")
154
+ }
155
+ })));
156
+
157
+ if (i < variables.length - 1) {
158
+ description.push( /*#__PURE__*/_react.default.createElement(Comma, {
159
+ key: "comma-".concat(i)
160
+ }, ","));
161
+ }
162
+ }
163
+
164
+ description.push( /*#__PURE__*/_react.default.createElement(Comma, {
165
+ key: "dot"
166
+ }, "."));
167
+ }
168
+
169
+ return /*#__PURE__*/_react.default.createElement(_Accordion.AccordionItem, {
170
+ key: validator.getName(),
171
+ "data-testid": "cms.editor.field-validator.".concat(validator.getName()),
172
+ interactive: false,
173
+ open: !!data,
174
+ title: validator.getLabel(),
175
+ description: validator.getDescription(),
176
+ actions: actions,
177
+ className: noPadding
178
+ }, data && /*#__PURE__*/_react.default.createElement(_form.Form, {
179
+ data: data,
180
+ onChange: function onChange(data) {
181
+ return onFormChange({
182
+ data: data,
183
+ validationValue: value,
184
+ onChangeValidation: _onChange,
185
+ validatorIndex: validatorIndex
186
+ });
187
+ }
188
+ }, function (_ref3) {
189
+ var Bind = _ref3.Bind;
190
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Grid.Grid, {
191
+ className: gridBottomPadding
192
+ }, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
193
+ span: 12
194
+ }, /*#__PURE__*/_react.default.createElement(Bind, {
195
+ name: "message",
196
+ validators: _validation.validation.create("required")
197
+ }, function (bind) {
198
+ return /*#__PURE__*/_react.default.createElement(_Input.Input, Object.assign({}, bind, {
199
+ label: "Message",
200
+ "data-testid": "cms.editfield.validators.required",
201
+ description: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, description)
202
+ }));
203
+ }))), renderSettings(validator));
204
+ }));
205
+ };
206
+
74
207
  var ValidatorsList = function ValidatorsList(props) {
75
208
  var name = props.name,
76
209
  validators = props.validators;
@@ -78,71 +211,15 @@ var ValidatorsList = function ValidatorsList(props) {
78
211
  name: name,
79
212
  defaultValue: []
80
213
  }, function (bind) {
81
- var validationValue = bind.value,
82
- onChangeValidation = bind.onChange;
83
- return /*#__PURE__*/_react.default.createElement(_Accordion.Accordion, null, validators.map(function (_ref2) {
84
- var optional = _ref2.optional,
85
- validator = _ref2.validator;
86
- var validatorIndex = (validationValue || []).findIndex(function (item) {
87
- return item.name === validator.name;
214
+ var value = bind.value,
215
+ onChange = bind.onChange;
216
+ return /*#__PURE__*/_react.default.createElement(_Accordion.Accordion, null, validators.map(function (validator) {
217
+ return /*#__PURE__*/_react.default.createElement(ValidatorItem, {
218
+ key: validator.getName(),
219
+ value: value,
220
+ onChange: onChange,
221
+ validator: validator
88
222
  });
89
- var data = (validationValue || [])[validatorIndex];
90
-
91
- if (typeof validator.renderCustomUi === "function") {
92
- return /*#__PURE__*/_react.default.createElement(_react.Fragment, {
93
- key: validator.name
94
- }, validator.renderCustomUi());
95
- }
96
-
97
- var renderSettings = validator.renderSettings || renderEmpty;
98
- var actions = optional ? /*#__PURE__*/_react.default.createElement(_Accordion.AccordionItem.Actions, null, /*#__PURE__*/_react.default.createElement(_Switch.Switch, {
99
- label: "Enabled",
100
- value: validatorIndex >= 0,
101
- onChange: function onChange() {
102
- return onEnabledChange({
103
- data: data,
104
- validationValue: validationValue,
105
- onChangeValidation: onChangeValidation,
106
- validator: validator
107
- });
108
- }
109
- })) : null;
110
- return /*#__PURE__*/_react.default.createElement(_Accordion.AccordionItem, {
111
- key: validator.name,
112
- "data-testid": "cms.editor.field-validator.".concat(validator.name),
113
- interactive: false,
114
- open: !!data,
115
- title: validator.label,
116
- description: validator.description,
117
- actions: actions,
118
- className: noPadding
119
- }, data && /*#__PURE__*/_react.default.createElement(_form.Form, {
120
- data: data,
121
- onChange: function onChange(data) {
122
- return onFormChange({
123
- data: data,
124
- validationValue: validationValue,
125
- onChangeValidation: onChangeValidation,
126
- validatorIndex: validatorIndex
127
- });
128
- }
129
- }, function (_ref3) {
130
- var Bind = _ref3.Bind;
131
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Grid.Grid, {
132
- className: gridBottomPadding
133
- }, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
134
- span: 12
135
- }, /*#__PURE__*/_react.default.createElement(Bind, {
136
- name: "message",
137
- validators: _validation.validation.create("required")
138
- }, function (bind) {
139
- return /*#__PURE__*/_react.default.createElement(_Input.Input, Object.assign({}, bind, {
140
- label: "Message",
141
- "data-testid": "cms.editfield.validators.required",
142
- description: "This message will be displayed to the user"
143
- }));
144
- }))), renderSettings());
145
- }));
146
223
  }));
147
224
  });
148
225
  };
@@ -1 +1 @@
1
- {"version":3,"names":["noPadding","css","gridBottomPadding","onEnabledChange","params","data","validationValue","onChangeValidation","validator","index","findIndex","item","name","slice","settings","defaultSettings","message","defaultMessage","onFormChange","validatorIndex","newValidationValue","renderEmpty","ValidatorsList","props","validators","bind","value","onChange","map","optional","renderCustomUi","renderSettings","actions","label","description","Bind","validation","create"],"sources":["ValidatorsList.tsx"],"sourcesContent":["import React, { Fragment } from \"react\";\nimport { css } from \"emotion\";\nimport { cloneDeep, debounce } from \"lodash\";\nimport { Switch } from \"@webiny/ui/Switch\";\nimport { Form, Bind } from \"@webiny/form\";\nimport { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { validation } from \"@webiny/validation\";\nimport { Input } from \"@webiny/ui/Input\";\nimport {\n CmsEditorFieldValidator,\n CmsEditorFieldValidatorPlugin,\n CmsEditorFieldValidatorPluginValidator\n} from \"~/types\";\nimport { Validator } from \"@webiny/validation/types\";\nimport { Accordion, AccordionItem } from \"@webiny/ui/Accordion\";\n\nconst noPadding = css`\n .webiny-ui-accordion-item__content {\n padding: 0 !important;\n }\n`;\n\nconst gridBottomPadding = css`\n :not(:last-child) {\n padding-bottom: 0;\n }\n`;\n\ninterface OnChangeValidationCallable {\n (validators: CmsEditorFieldValidator[]): void;\n}\ninterface OnEnabledChangeParams {\n data: CmsEditorFieldValidator;\n validationValue: CmsEditorFieldValidator[];\n onChangeValidation: OnChangeValidationCallable;\n validator: CmsEditorFieldValidatorPluginValidator;\n}\nconst onEnabledChange = (params: OnEnabledChangeParams): void => {\n const { data, validationValue, onChangeValidation, validator } = params;\n if (data) {\n const index = validationValue.findIndex(item => item.name === validator.name);\n onChangeValidation([\n ...validationValue.slice(0, index),\n ...validationValue.slice(index + 1)\n ]);\n return;\n }\n onChangeValidation([\n ...validationValue,\n {\n name: validator.name,\n settings: validator.defaultSettings,\n message: validator.defaultMessage\n }\n ]);\n};\n\nconst onFormChange = debounce(({ data, validationValue, onChangeValidation, validatorIndex }) => {\n const newValidationValue = cloneDeep(validationValue);\n newValidationValue[validatorIndex] = {\n ...newValidationValue[validatorIndex],\n ...cloneDeep(data)\n };\n onChangeValidation(newValidationValue);\n}, 200);\n\ninterface ValidatorsTabPropsValidator {\n optional: boolean;\n validator: CmsEditorFieldValidatorPlugin[\"validator\"];\n}\ninterface ValidatorsTabProps {\n name: string;\n validators: ValidatorsTabPropsValidator[];\n}\n\nconst renderEmpty = () => null;\n\nexport const ValidatorsList: React.FC<ValidatorsTabProps> = props => {\n const { name, validators } = props;\n\n return (\n <Bind name={name} defaultValue={[]}>\n {bind => {\n const { value: validationValue, onChange: onChangeValidation } = bind;\n return (\n <Accordion>\n {validators.map(({ optional, validator }) => {\n const validatorIndex = (\n (validationValue || []) as Validator[]\n ).findIndex(item => item.name === validator.name);\n const data = (validationValue || [])[validatorIndex];\n\n if (typeof validator.renderCustomUi === \"function\") {\n return (\n <Fragment key={validator.name}>\n {validator.renderCustomUi()}\n </Fragment>\n );\n }\n\n const renderSettings = validator.renderSettings || renderEmpty;\n\n const actions = optional ? (\n <AccordionItem.Actions>\n <Switch\n label=\"Enabled\"\n value={validatorIndex >= 0}\n onChange={() =>\n onEnabledChange({\n data,\n validationValue,\n onChangeValidation,\n validator\n })\n }\n />\n </AccordionItem.Actions>\n ) : null;\n\n return (\n <AccordionItem\n key={validator.name}\n data-testid={`cms.editor.field-validator.${validator.name}`}\n interactive={false}\n open={!!data}\n title={validator.label}\n description={validator.description}\n actions={actions}\n className={noPadding}\n >\n {data && (\n <Form\n data={data}\n onChange={data =>\n onFormChange({\n data,\n validationValue,\n onChangeValidation,\n validatorIndex\n })\n }\n >\n {({ Bind }) => (\n <>\n <Grid className={gridBottomPadding}>\n <Cell span={12}>\n <Bind\n name={\"message\"}\n validators={validation.create(\n \"required\"\n )}\n >\n {bind => {\n return (\n <Input\n {...bind}\n label={\"Message\"}\n data-testid=\"cms.editfield.validators.required\"\n description={\n \"This message will be displayed to the user\"\n }\n />\n );\n }}\n </Bind>\n </Cell>\n </Grid>\n\n {renderSettings()}\n </>\n )}\n </Form>\n )}\n </AccordionItem>\n );\n })}\n </Accordion>\n );\n }}\n </Bind>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["Variable","styled","Comma","noPadding","css","gridBottomPadding","onEnabledChange","params","data","validationValue","onChangeValidation","validator","index","findIndex","item","name","getName","slice","settings","getDefaultSettings","message","getDefaultMessage","onFormChange","validatorIndex","newValidationValue","renderEmpty","getValidatorPlugin","plugin","plugins","byType","find","ValidatorItem","value","onChange","validatorName","renderCustomUi","renderSettings","actions","isRequired","description","variables","getVariables","length","push","i","variable","__html","getLabel","getDescription","Bind","validation","create","bind","ValidatorsList","props","validators","map"],"sources":["ValidatorsList.tsx"],"sourcesContent":["import React, { Fragment } from \"react\";\nimport { css } from \"emotion\";\nimport { cloneDeep, debounce } from \"lodash\";\nimport { plugins } from \"@webiny/plugins\";\nimport { Switch } from \"@webiny/ui/Switch\";\nimport { Form, Bind } from \"@webiny/form\";\nimport { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { validation } from \"@webiny/validation\";\nimport { Input } from \"@webiny/ui/Input\";\nimport { CmsModelFieldValidator, CmsModelFieldValidatorPlugin } from \"~/types\";\nimport { Validator } from \"@webiny/validation/types\";\nimport { Accordion, AccordionItem } from \"@webiny/ui/Accordion\";\nimport { CmsModelFieldValidatorConfigAdapter } from \"~/utils/CmsModelFieldValidatorConfigAdapter\";\nimport styled from \"@emotion/styled\";\nimport { Tooltip } from \"@webiny/ui/Tooltip\";\n\nconst Variable = styled.span`\n font-weight: bold;\n cursor: pointer;\n`;\n\nconst Comma = styled.span`\n padding-right: 5px;\n`;\n\nconst noPadding = css`\n .webiny-ui-accordion-item__content {\n padding: 0 !important;\n }\n`;\n\nconst gridBottomPadding = css`\n :not(:last-child) {\n padding-bottom: 0;\n }\n`;\n\ninterface OnChangeValidationCallable {\n (validators: CmsModelFieldValidator[]): void;\n}\n\ninterface OnEnabledChangeParams {\n data: CmsModelFieldValidator;\n validationValue: CmsModelFieldValidator[];\n onChangeValidation: OnChangeValidationCallable;\n validator: CmsModelFieldValidatorConfigAdapter;\n}\n\nconst onEnabledChange = (params: OnEnabledChangeParams): void => {\n const { data, validationValue, onChangeValidation, validator } = params;\n if (data) {\n const index = validationValue.findIndex(item => item.name === validator.getName());\n onChangeValidation([\n ...validationValue.slice(0, index),\n ...validationValue.slice(index + 1)\n ]);\n return;\n }\n onChangeValidation([\n ...validationValue,\n {\n name: validator.getName(),\n settings: validator.getDefaultSettings(),\n message: validator.getDefaultMessage()\n }\n ]);\n};\n\nconst onFormChange = debounce(({ data, validationValue, onChangeValidation, validatorIndex }) => {\n const newValidationValue = cloneDeep(validationValue);\n newValidationValue[validatorIndex] = {\n ...newValidationValue[validatorIndex],\n ...cloneDeep(data)\n };\n onChangeValidation(newValidationValue);\n}, 200);\n\ninterface ValidatorsTabProps {\n name: string;\n validators: CmsModelFieldValidatorConfigAdapter[];\n}\n\nconst renderEmpty = () => null;\n\nconst getValidatorPlugin = (name: string): CmsModelFieldValidatorPlugin[\"validator\"] | null => {\n const plugin = plugins\n .byType<CmsModelFieldValidatorPlugin>(\"cms-model-field-validator\")\n .find(plugin => plugin.validator.name === name);\n\n if (!plugin) {\n return null;\n }\n\n return plugin.validator;\n};\n\ninterface ValidatorItemProps {\n validator: CmsModelFieldValidatorConfigAdapter;\n value: any;\n onChange: OnChangeValidationCallable;\n}\n\nconst ValidatorItem = ({ validator, value, onChange }: ValidatorItemProps) => {\n const validatorName = validator.getName();\n\n const plugin = getValidatorPlugin(validatorName);\n if (!plugin) {\n return <></>;\n }\n\n const validatorIndex = ((value || []) as Validator[]).findIndex(\n item => item.name === validatorName\n );\n\n const data = (value || [])[validatorIndex];\n\n if (typeof plugin.renderCustomUi === \"function\") {\n return <Fragment key={validatorName}>{plugin.renderCustomUi()}</Fragment>;\n }\n\n const renderSettings = plugin.renderSettings || renderEmpty;\n\n const actions = !validator.isRequired() ? (\n <AccordionItem.Actions>\n <Switch\n label=\"Enabled\"\n value={validatorIndex >= 0}\n onChange={() =>\n onEnabledChange({\n data,\n validationValue: value,\n onChangeValidation: onChange,\n validator: validator\n })\n }\n />\n </AccordionItem.Actions>\n ) : null;\n\n const description = [<span key={\"msg\"}>This message will be displayed to the user.</span>];\n const variables = validator.getVariables();\n\n if (variables.length) {\n description.push(<span key={\"vars\"}>&nbsp;Available variables:&nbsp;</span>);\n for (let i = 0; i < variables.length; i++) {\n const variable = variables[i];\n\n description.push(\n <Tooltip key={variable.name} content={variable.description} placement={\"bottom\"}>\n <Variable dangerouslySetInnerHTML={{ __html: `{${variable.name}}` }} />\n </Tooltip>\n );\n\n if (i < variables.length - 1) {\n description.push(<Comma key={`comma-${i}`}>,</Comma>);\n }\n }\n description.push(<Comma key={\"dot\"}>.</Comma>);\n }\n\n return (\n <AccordionItem\n key={validator.getName()}\n data-testid={`cms.editor.field-validator.${validator.getName()}`}\n interactive={false}\n open={!!data}\n title={validator.getLabel()}\n description={validator.getDescription()}\n actions={actions}\n className={noPadding}\n >\n {data && (\n <Form\n data={data}\n onChange={data =>\n onFormChange({\n data,\n validationValue: value,\n onChangeValidation: onChange,\n validatorIndex\n })\n }\n >\n {({ Bind }) => (\n <>\n <Grid className={gridBottomPadding}>\n <Cell span={12}>\n <Bind\n name={\"message\"}\n validators={validation.create(\"required\")}\n >\n {bind => {\n return (\n <Input\n {...bind}\n label={\"Message\"}\n data-testid=\"cms.editfield.validators.required\"\n description={<>{description}</>}\n />\n );\n }}\n </Bind>\n </Cell>\n </Grid>\n\n {renderSettings(validator)}\n </>\n )}\n </Form>\n )}\n </AccordionItem>\n );\n};\n\nexport const ValidatorsList: React.FC<ValidatorsTabProps> = props => {\n const { name, validators } = props;\n\n return (\n <Bind name={name} defaultValue={[]}>\n {bind => {\n const { value, onChange } = bind;\n return (\n <Accordion>\n {validators.map(validator => {\n return (\n <ValidatorItem\n key={validator.getName()}\n value={value}\n onChange={onChange}\n validator={validator}\n />\n );\n })}\n </Accordion>\n );\n }}\n </Bind>\n );\n};\n"],"mappings":"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"}
@@ -1,12 +1,13 @@
1
- import { CmsModelField, CmsEditorFieldTypePlugin, CmsEditorFieldValidatorPlugin } from "../../../../types";
1
+ import { CmsModelField, CmsEditorFieldTypePlugin, CmsModelFieldValidatorPlugin } from "../../../../types";
2
+ import { CmsModelFieldValidatorConfigAdapter } from "../../../../utils/CmsModelFieldValidatorConfigAdapter";
2
3
  export interface Validator {
3
4
  optional: boolean;
4
- validator: CmsEditorFieldValidatorPlugin["validator"];
5
+ validator: CmsModelFieldValidatorPlugin["validator"];
5
6
  }
6
7
  export interface ValidationSection {
7
8
  title?: string;
8
9
  description?: string;
9
- validators: Validator[];
10
+ validators: CmsModelFieldValidatorConfigAdapter[];
10
11
  }
11
12
  export declare const getListValidators: (field: CmsModelField, fieldPlugin: CmsEditorFieldTypePlugin) => ValidationSection;
12
13
  export declare const getFieldValidators: (field: CmsModelField, fieldPlugin: CmsEditorFieldTypePlugin) => ValidationSection;