@shopgate/pwa-ui-shared 7.30.0-alpha.6 → 7.30.0-alpha.8

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 (266) hide show
  1. package/AccordionContainer/index.js +39 -5
  2. package/AccordionContainer/spec.js +25 -2
  3. package/ActionButton/index.js +63 -7
  4. package/ActionButton/spec.js +59 -2
  5. package/ActionButton/style.js +22 -1
  6. package/AddToCartButton/index.js +184 -27
  7. package/AddToCartButton/mock.js +18 -4
  8. package/AddToCartButton/spec.js +51 -2
  9. package/AddToCartButton/style.js +127 -11
  10. package/Availability/index.js +34 -2
  11. package/Availability/spec.js +41 -1
  12. package/Availability/style.js +19 -1
  13. package/Button/index.js +76 -5
  14. package/Button/spec.js +33 -1
  15. package/Button/style.js +130 -21
  16. package/ButtonLink/connector.js +11 -2
  17. package/ButtonLink/index.js +44 -6
  18. package/ButtonLink/spec.js +23 -1
  19. package/Card/index.js +19 -2
  20. package/Card/style.js +11 -1
  21. package/CardList/components/Item/index.js +26 -2
  22. package/CardList/components/Item/style.js +7 -1
  23. package/CardList/index.js +34 -3
  24. package/CartTotalLine/components/Amount/index.js +28 -2
  25. package/CartTotalLine/components/Amount/style.js +8 -1
  26. package/CartTotalLine/components/Hint/index.js +23 -2
  27. package/CartTotalLine/components/Hint/style.js +12 -1
  28. package/CartTotalLine/components/Label/index.js +36 -2
  29. package/CartTotalLine/components/Label/style.js +17 -1
  30. package/CartTotalLine/components/Spacer/index.js +16 -2
  31. package/CartTotalLine/index.js +39 -2
  32. package/CartTotalLine/style.js +31 -1
  33. package/Checkbox/index.js +31 -2
  34. package/Checkbox/style.js +18 -1
  35. package/Chip/index.js +61 -2
  36. package/Chip/spec.js +24 -1
  37. package/Chip/style.js +71 -3
  38. package/ContextMenu/ContextMenu.hooks.js +6 -2
  39. package/ContextMenu/ContextMenuProvider.context.js +9 -3
  40. package/ContextMenu/ContextMenuProvider.js +21 -2
  41. package/ContextMenu/components/Item/index.js +67 -5
  42. package/ContextMenu/components/Item/style.js +32 -3
  43. package/ContextMenu/components/Position/index.js +61 -10
  44. package/ContextMenu/components/Position/style.js +11 -1
  45. package/ContextMenu/index.js +124 -3
  46. package/ContextMenu/spec.js +101 -2
  47. package/ContextMenu/style.js +45 -1
  48. package/Dialog/components/BasicDialog/index.js +5 -1
  49. package/Dialog/components/HtmlContentDialog/index.js +22 -2
  50. package/Dialog/components/HtmlContentDialog/spec.js +59 -1
  51. package/Dialog/components/PipelineErrorDialog/index.js +114 -25
  52. package/Dialog/components/PipelineErrorDialog/spec.js +92 -12
  53. package/Dialog/components/TextMessageDialog/index.js +28 -2
  54. package/Dialog/components/TextMessageDialog/spec.js +59 -1
  55. package/Dialog/components/VariantSelectModal/connector.js +11 -2
  56. package/Dialog/components/VariantSelectModal/index.js +65 -6
  57. package/Dialog/components/VariantSelectModal/spec.js +51 -2
  58. package/Dialog/constants.js +6 -1
  59. package/Dialog/index.js +114 -7
  60. package/Dialog/spec.js +81 -3
  61. package/DiscountBadge/index.js +30 -2
  62. package/DiscountBadge/spec.js +19 -1
  63. package/DiscountBadge/style.js +34 -2
  64. package/FavoritesButton/connector.js +18 -3
  65. package/FavoritesButton/index.js +118 -15
  66. package/FavoritesButton/mock.js +50 -4
  67. package/FavoritesButton/spec.js +120 -2
  68. package/FavoritesButton/style.js +26 -1
  69. package/Form/Builder/builders/buildCountryList.js +40 -6
  70. package/Form/Builder/builders/buildFormDefaults.js +35 -6
  71. package/Form/Builder/builders/buildFormElements.js +68 -10
  72. package/Form/Builder/builders/buildProvinceList.js +19 -2
  73. package/Form/Builder/builders/buildValidationErrorList.js +7 -2
  74. package/Form/Builder/classes/ActionListener/constants.js +22 -2
  75. package/Form/Builder/classes/ActionListener/index.js +441 -93
  76. package/Form/Builder/classes/ActionListener/spec.js +321 -19
  77. package/Form/Builder/components/CheckboxElement.js +35 -3
  78. package/Form/Builder/components/CountryElement.js +40 -3
  79. package/Form/Builder/components/ProvinceElement.js +40 -3
  80. package/Form/Builder/components/RadioElement.js +41 -3
  81. package/Form/Builder/components/SelectElement.js +39 -3
  82. package/Form/Builder/components/TextElement.js +49 -4
  83. package/Form/Builder/elementTypes.js +11 -1
  84. package/Form/Builder/index.js +298 -52
  85. package/Form/Builder/iso-3166-2.js +4943 -1
  86. package/Form/Builder/spec.js +300 -16
  87. package/Form/Checkbox/index.js +66 -4
  88. package/Form/Checkbox/style.js +25 -2
  89. package/Form/InfoField/index.js +50 -2
  90. package/Form/InfoField/spec.js +9 -1
  91. package/Form/InfoField/style.js +11 -1
  92. package/Form/Password/index.js +51 -6
  93. package/Form/Password/spec.js +34 -1
  94. package/Form/Password/style.js +11 -1
  95. package/Form/RadioGroup/components/Item/index.js +59 -3
  96. package/Form/RadioGroup/components/Item/style.js +32 -2
  97. package/Form/RadioGroup/index.js +101 -9
  98. package/Form/RadioGroup/spec.js +83 -3
  99. package/Form/RadioGroup/style.js +18 -2
  100. package/Form/Select/index.js +158 -10
  101. package/Form/Select/spec.js +36 -5
  102. package/Form/Select/style.js +27 -1
  103. package/Form/SelectContextChoices/index.js +77 -3
  104. package/Form/SelectContextChoices/spec.js +33 -4
  105. package/Form/SelectContextChoices/style.js +23 -1
  106. package/Form/TextField/index.js +92 -8
  107. package/Form/TextField/spec.js +110 -1
  108. package/Form/TextField/style.js +66 -8
  109. package/Form/index.js +54 -13
  110. package/FormElement/components/ErrorText/index.js +31 -2
  111. package/FormElement/components/ErrorText/style.js +13 -1
  112. package/FormElement/components/Label/index.js +35 -2
  113. package/FormElement/components/Label/style.js +76 -8
  114. package/FormElement/components/Placeholder/index.js +26 -2
  115. package/FormElement/components/Placeholder/style.js +48 -6
  116. package/FormElement/components/Underline/index.js +18 -2
  117. package/FormElement/components/Underline/style.js +51 -4
  118. package/FormElement/index.js +91 -6
  119. package/FormElement/spec.js +67 -2
  120. package/FormElement/style.js +13 -2
  121. package/Glow/index.js +90 -7
  122. package/Glow/spec.js +9 -1
  123. package/Glow/style.js +18 -1
  124. package/IndicatorCircle/index.js +33 -3
  125. package/IndicatorCircle/spec.js +28 -1
  126. package/IndicatorCircle/style.js +57 -3
  127. package/LoadingIndicator/index.js +29 -2
  128. package/LoadingIndicator/style.js +20 -1
  129. package/Manufacturer/index.js +20 -2
  130. package/Manufacturer/style.js +5 -1
  131. package/MessageBar/index.js +36 -2
  132. package/MessageBar/spec.js +79 -1
  133. package/MessageBar/style.js +38 -1
  134. package/NoResults/components/Icon/index.js +130 -2
  135. package/NoResults/components/Icon/style.js +17 -1
  136. package/NoResults/index.js +46 -2
  137. package/NoResults/style.js +31 -1
  138. package/Placeholder/index.js +25 -3
  139. package/Placeholder/style.js +11 -1
  140. package/PlaceholderLabel/index.js +27 -2
  141. package/PlaceholderLabel/spec.js +19 -1
  142. package/PlaceholderLabel/style.js +12 -1
  143. package/PlaceholderParagraph/index.js +36 -2
  144. package/PlaceholderParagraph/spec.js +19 -1
  145. package/Price/index.js +88 -7
  146. package/Price/style.js +22 -1
  147. package/PriceInfo/index.js +20 -2
  148. package/PriceInfo/style.js +5 -1
  149. package/PriceStriked/index.js +83 -12
  150. package/PriceStriked/style.js +33 -3
  151. package/ProductProperties/index.js +32 -2
  152. package/ProgressBar/index.js +101 -13
  153. package/ProgressBar/spec.js +13 -1
  154. package/ProgressBar/style.js +83 -2
  155. package/RadioButton/index.js +18 -2
  156. package/RadioButton/spec.js +21 -1
  157. package/RadioButton/style.js +21 -1
  158. package/RatingNumber/index.js +29 -2
  159. package/RatingStars/constants.js +2 -1
  160. package/RatingStars/index.js +130 -12
  161. package/RatingStars/spec.js +90 -3
  162. package/RatingStars/style.js +51 -2
  163. package/Ripple/components/RippleAnimation/index.js +88 -6
  164. package/Ripple/index.js +218 -40
  165. package/Ripple/style.js +18 -1
  166. package/RippleButton/index.js +52 -5
  167. package/RippleButton/spec.js +45 -1
  168. package/ScannerOverlay/components/CameraOverlay/index.js +13 -2
  169. package/ScannerOverlay/components/CameraOverlay/style.js +41 -1
  170. package/ScannerOverlay/components/ScannerBar/components/FlashlightButton/index.js +34 -2
  171. package/ScannerOverlay/components/ScannerBar/components/FlashlightButton/style.js +28 -1
  172. package/ScannerOverlay/components/ScannerBar/components/ScannerInstructions/index.js +11 -2
  173. package/ScannerOverlay/components/ScannerBar/index.js +31 -2
  174. package/ScannerOverlay/components/ScannerBar/style.js +20 -1
  175. package/ScannerOverlay/index.js +47 -7
  176. package/Sheet/components/Header/components/SearchBar/index.js +46 -2
  177. package/Sheet/components/Header/components/SearchBar/spec.js +21 -3
  178. package/Sheet/components/Header/components/SearchBar/style.js +47 -1
  179. package/Sheet/components/Header/index.js +75 -7
  180. package/Sheet/components/Header/spec.js +14 -1
  181. package/Sheet/components/Header/style.js +50 -1
  182. package/Sheet/index.js +170 -17
  183. package/Sheet/spec.js +85 -5
  184. package/Sheet/style.js +143 -2
  185. package/TaxDisclaimer/index.js +34 -4
  186. package/TaxDisclaimer/spec.js +31 -3
  187. package/TaxDisclaimer/style.js +9 -1
  188. package/TextField/components/ErrorText/index.js +33 -2
  189. package/TextField/components/ErrorText/style.js +25 -3
  190. package/TextField/components/FormElement/index.js +19 -2
  191. package/TextField/components/FormElement/style.js +32 -4
  192. package/TextField/components/Hint/index.js +21 -2
  193. package/TextField/components/Hint/style.js +40 -5
  194. package/TextField/components/Label/index.js +32 -3
  195. package/TextField/components/Label/style.js +68 -8
  196. package/TextField/components/Underline/index.js +19 -2
  197. package/TextField/components/Underline/style.js +51 -4
  198. package/TextField/index.js +189 -27
  199. package/TextField/spec.js +128 -3
  200. package/TextField/style.js +34 -4
  201. package/ToggleIcon/index.js +58 -8
  202. package/ToggleIcon/spec.js +35 -1
  203. package/icons/AccountBoxIcon.js +11 -2
  204. package/icons/AddMoreIcon.js +11 -2
  205. package/icons/ArrowDropIcon.js +11 -2
  206. package/icons/ArrowIcon.js +21 -2
  207. package/icons/BarcodeScannerIcon.js +11 -2
  208. package/icons/BoxIcon.js +11 -2
  209. package/icons/BrowseIcon.js +11 -2
  210. package/icons/BurgerIcon.js +11 -2
  211. package/icons/CalendarIcon.js +15 -3
  212. package/icons/CartCouponIcon.js +72 -2
  213. package/icons/CartIcon.js +11 -2
  214. package/icons/CartPlusIcon.js +11 -2
  215. package/icons/CheckIcon.js +11 -2
  216. package/icons/CheckedIcon.js +11 -2
  217. package/icons/ChevronIcon.js +11 -2
  218. package/icons/CreditCardIcon.js +11 -2
  219. package/icons/CrossIcon.js +11 -2
  220. package/icons/DescriptionIcon.js +11 -2
  221. package/icons/FilterIcon.js +11 -2
  222. package/icons/FlashDisabledIcon.js +11 -2
  223. package/icons/FlashEnabledIcon.js +11 -2
  224. package/icons/GridIcon.js +11 -2
  225. package/icons/HeartIcon.js +11 -2
  226. package/icons/HeartOutlineIcon.js +11 -2
  227. package/icons/HeartPlusIcon.js +12 -2
  228. package/icons/HeartPlusOutlineIcon.js +12 -2
  229. package/icons/HomeIcon.js +11 -2
  230. package/icons/InfoIcon.js +11 -2
  231. package/icons/InfoOutlineIcon.js +11 -2
  232. package/icons/ListIcon.js +11 -2
  233. package/icons/LocalShippingIcon.js +11 -2
  234. package/icons/LocationIcon.js +13 -3
  235. package/icons/LocatorIcon.js +11 -2
  236. package/icons/LockIcon.js +11 -2
  237. package/icons/LogoutIcon.js +11 -2
  238. package/icons/MagnifierIcon.js +11 -2
  239. package/icons/MapMarkerIcon.js +24 -3
  240. package/icons/MoreIcon.js +11 -2
  241. package/icons/MoreVertIcon.js +11 -2
  242. package/icons/NotificationIcon.js +14 -3
  243. package/icons/PersonIcon.js +12 -2
  244. package/icons/PhoneIcon.js +13 -3
  245. package/icons/PlaceholderIcon.js +11 -2
  246. package/icons/RadioCheckedIcon.js +11 -2
  247. package/icons/RadioUncheckedIcon.js +11 -2
  248. package/icons/SecurityIcon.js +11 -2
  249. package/icons/ShippingMethodIcon.js +18 -3
  250. package/icons/ShoppingCartIcon.js +11 -2
  251. package/icons/SortIcon.js +11 -2
  252. package/icons/StarHalfIcon.js +18 -2
  253. package/icons/StarIcon.js +18 -2
  254. package/icons/StarOutlineIcon.js +11 -2
  255. package/icons/StopIcon.js +11 -2
  256. package/icons/TickIcon.js +11 -2
  257. package/icons/TimeIcon.js +14 -3
  258. package/icons/TrashIcon.js +11 -2
  259. package/icons/TrashOutlineIcon.js +12 -2
  260. package/icons/UncheckedIcon.js +11 -2
  261. package/icons/ViewListIcon.js +11 -2
  262. package/icons/VisibilityIcon.js +11 -2
  263. package/icons/VisibilityOffIcon.js +11 -2
  264. package/icons/WarningIcon.js +11 -2
  265. package/index.js +13 -1
  266. package/package.json +5 -5
@@ -1,6 +1,51 @@
1
- function _typeof(obj){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _callSuper(_this,derived,args){function isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{return!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(e){return false;}}derived=_getPrototypeOf(derived);return _possibleConstructorReturn(_this,isNativeReflectConstruct()?Reflect.construct(derived,args||[],_getPrototypeOf(_this).constructor):derived.apply(_this,args));}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import React,{PureComponent}from'react';import PropTypes from'prop-types';import TextField from"../../../TextField";import{ELEMENT_TYPE_TEXT,ELEMENT_TYPE_NUMBER,ELEMENT_TYPE_EMAIL,ELEMENT_TYPE_PASSWORD,ELEMENT_TYPE_DATE,ELEMENT_TYPE_PHONE}from"../elementTypes";// Map element type to input type
2
- var mapping=_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({},ELEMENT_TYPE_TEXT,'text'),ELEMENT_TYPE_NUMBER,'number'),ELEMENT_TYPE_EMAIL,'email'),ELEMENT_TYPE_PASSWORD,'password'),ELEMENT_TYPE_DATE,'date'),ELEMENT_TYPE_PHONE,'tel');/**
1
+ import React, { PureComponent } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import TextField from "../../../TextField";
4
+ import { ELEMENT_TYPE_TEXT, ELEMENT_TYPE_NUMBER, ELEMENT_TYPE_EMAIL, ELEMENT_TYPE_PASSWORD, ELEMENT_TYPE_DATE, ELEMENT_TYPE_PHONE } from "../elementTypes";
5
+
6
+ // Map element type to input type
7
+ const mapping = {
8
+ [ELEMENT_TYPE_TEXT]: 'text',
9
+ [ELEMENT_TYPE_NUMBER]: 'number',
10
+ [ELEMENT_TYPE_EMAIL]: 'email',
11
+ [ELEMENT_TYPE_PASSWORD]: 'password',
12
+ [ELEMENT_TYPE_DATE]: 'date',
13
+ [ELEMENT_TYPE_PHONE]: 'tel'
14
+ };
15
+
16
+ /**
3
17
  * React component that takes the element and additional data and renders a configured text input.
4
- */var TextElement=/*#__PURE__*/function(_PureComponent){function TextElement(){_classCallCheck(this,TextElement);return _callSuper(this,TextElement,arguments);}_inherits(TextElement,_PureComponent);return _createClass(TextElement,[{key:"render",value:/**
18
+ */
19
+ class TextElement extends PureComponent {
20
+ /**
5
21
  * @returns {JSX}
6
- */function render(){var _this$props=this.props,element=_this$props.element,errorText=_this$props.errorText,name=_this$props.name,style=_this$props.style,value=_this$props.value;var type=mapping[element.type];return React.createElement(TextField,{type:type,name:name,className:style.fields,label:element.label,value:value,onChange:element.handleChange,errorText:errorText,isControlled:true,translateErrorText:false});}}]);}(PureComponent);_defineProperty(TextElement,"defaultProps",{value:'',style:{field:''}});export default TextElement;
22
+ */
23
+ render() {
24
+ const {
25
+ element,
26
+ errorText,
27
+ name,
28
+ style,
29
+ value
30
+ } = this.props;
31
+ const type = mapping[element.type];
32
+ return /*#__PURE__*/React.createElement(TextField, {
33
+ type: type,
34
+ name: name,
35
+ className: style.fields,
36
+ label: element.label,
37
+ value: value,
38
+ onChange: element.handleChange,
39
+ errorText: errorText,
40
+ isControlled: true,
41
+ translateErrorText: false
42
+ });
43
+ }
44
+ }
45
+ TextElement.defaultProps = {
46
+ value: '',
47
+ style: {
48
+ field: ''
49
+ }
50
+ };
51
+ export default TextElement;
@@ -1 +1,11 @@
1
- export var ELEMENT_TYPE_EMAIL='email';export var ELEMENT_TYPE_PASSWORD='password';export var ELEMENT_TYPE_TEXT='text';export var ELEMENT_TYPE_NUMBER='number';export var ELEMENT_TYPE_SELECT='select';export var ELEMENT_TYPE_COUNTRY='country';export var ELEMENT_TYPE_PROVINCE='province';export var ELEMENT_TYPE_CHECKBOX='checkbox';export var ELEMENT_TYPE_RADIO='radio';export var ELEMENT_TYPE_DATE='date';export var ELEMENT_TYPE_PHONE='phone';
1
+ export const ELEMENT_TYPE_EMAIL = 'email';
2
+ export const ELEMENT_TYPE_PASSWORD = 'password';
3
+ export const ELEMENT_TYPE_TEXT = 'text';
4
+ export const ELEMENT_TYPE_NUMBER = 'number';
5
+ export const ELEMENT_TYPE_SELECT = 'select';
6
+ export const ELEMENT_TYPE_COUNTRY = 'country';
7
+ export const ELEMENT_TYPE_PROVINCE = 'province';
8
+ export const ELEMENT_TYPE_CHECKBOX = 'checkbox';
9
+ export const ELEMENT_TYPE_RADIO = 'radio';
10
+ export const ELEMENT_TYPE_DATE = 'date';
11
+ export const ELEMENT_TYPE_PHONE = 'phone';
@@ -1,64 +1,310 @@
1
- import _isEqual from"lodash/isEqual";function _typeof(obj){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance");}function _iterableToArrayLimit(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"]!=null)_i["return"]();}finally{if(_d)throw _e;}}return _arr;}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr;}function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _callSuper(_this,derived,args){function isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{return!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(e){return false;}}derived=_getPrototypeOf(derived);return _possibleConstructorReturn(_this,isNativeReflectConstruct()?Reflect.construct(derived,args||[],_getPrototypeOf(_this).constructor):derived.apply(_this,args));}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import React,{Component,Fragment}from'react';import PropTypes from'prop-types';import{logger}from'@shopgate/pwa-core/helpers';import Portal from'@shopgate/pwa-common/components/Portal';import Form from'@shopgate/pwa-ui-shared/Form';import{BEFORE,AFTER}from'@shopgate/pwa-common/constants/Portals';import ActionListener from"./classes/ActionListener";import{ELEMENT_TYPE_EMAIL,ELEMENT_TYPE_PASSWORD,ELEMENT_TYPE_TEXT,ELEMENT_TYPE_NUMBER,ELEMENT_TYPE_SELECT,ELEMENT_TYPE_COUNTRY,ELEMENT_TYPE_PROVINCE,ELEMENT_TYPE_CHECKBOX,ELEMENT_TYPE_RADIO,ELEMENT_TYPE_DATE,ELEMENT_TYPE_PHONE}from"./elementTypes";import TextElement from"./components/TextElement";import SelectElement from"./components/SelectElement";import CountryElement from"./components/CountryElement";import ProvinceElement from"./components/ProvinceElement";import RadioElement from"./components/RadioElement";import CheckboxElement from"./components/CheckboxElement";import buildFormElements from"./builders/buildFormElements";import buildFormDefaults from"./builders/buildFormDefaults";import buildCountryList from"./builders/buildCountryList";import buildProvinceList from"./builders/buildProvinceList";import buildValidationErrorList from"./builders/buildValidationErrorList";/**
1
+ import _isEqual from "lodash/isEqual";
2
+ import "core-js/modules/es.string.replace.js";
3
+ import React, { Component, Fragment } from 'react';
4
+ import PropTypes from 'prop-types';
5
+ import { logger } from '@shopgate/pwa-core/helpers';
6
+ import Portal from '@shopgate/pwa-common/components/Portal';
7
+ import Form from '@shopgate/pwa-ui-shared/Form';
8
+ import { BEFORE, AFTER } from '@shopgate/pwa-common/constants/Portals';
9
+ import ActionListener from "./classes/ActionListener";
10
+ import { ELEMENT_TYPE_EMAIL, ELEMENT_TYPE_PASSWORD, ELEMENT_TYPE_TEXT, ELEMENT_TYPE_NUMBER, ELEMENT_TYPE_SELECT, ELEMENT_TYPE_COUNTRY, ELEMENT_TYPE_PROVINCE, ELEMENT_TYPE_CHECKBOX, ELEMENT_TYPE_RADIO, ELEMENT_TYPE_DATE, ELEMENT_TYPE_PHONE } from "./elementTypes";
11
+ import TextElement from "./components/TextElement";
12
+ import SelectElement from "./components/SelectElement";
13
+ import CountryElement from "./components/CountryElement";
14
+ import ProvinceElement from "./components/ProvinceElement";
15
+ import RadioElement from "./components/RadioElement";
16
+ import CheckboxElement from "./components/CheckboxElement";
17
+ import buildFormElements from "./builders/buildFormElements";
18
+ import buildFormDefaults from "./builders/buildFormDefaults";
19
+ import buildCountryList from "./builders/buildCountryList";
20
+ import buildProvinceList from "./builders/buildProvinceList";
21
+ import buildValidationErrorList from "./builders/buildValidationErrorList";
22
+
23
+ /**
2
24
  * Takes a string and converts it to a part to be used in a portal name
3
25
  * @package FormBuilder
4
26
  * @param {string} s The string to be sanitized
5
27
  * @return {string}
6
- */var sanitize=function sanitize(s){return s.replace(/[\\._]/,'-');};/**
28
+ */
29
+ const sanitize = s => s.replace(/[\\._]/, '-');
30
+ /**
7
31
  * Optional select element
8
32
  * @type {Object}
9
- */var emptySelectOption={'':''};/**
33
+ */
34
+ const emptySelectOption = {
35
+ '': ''
36
+ };
37
+
38
+ /**
10
39
  * Takes a form configuration and handles rendering and updates of the form fields.
11
40
  * Note: Only one country and one province element is supported per FormBuilder instance.
12
- */var Builder=/*#__PURE__*/function(_Component){function Builder(props){var _this2;_classCallCheck(this,Builder);_this2=_callSuper(this,Builder,[props]);// Prepare internal state
13
- /**
14
- * Sorts the elements by "sortOrder" property
15
- *
16
- * @typedef {Object} FormElement
17
- * @property {number} sortOrder
18
- *
19
- * @param {FormElement} element1 First element
20
- * @param {FormElement} element2 Second element
21
- * @returns {number}
22
- */_defineProperty(_this2,"elementSortFunc",function(element1,element2){// Keep current sort order when no specific sort order was set for both
23
- if(element1.sortOrder===undefined||element2.sortOrder===undefined){return 0;}// Sort in ascending order of sortOrder otherwise
24
- return element1.sortOrder-element2.sortOrder;});/**
25
- * Element change handler based on it's type,
26
- * @param {string} elementId Element to create the handler for
27
- * @param {string} value Element value
28
- */_defineProperty(_this2,"elementChangeHandler",function(elementId,value){// Apply value change to new state
29
- var newState=_extends({},_this2.state,{formData:_extends({},_this2.state.formData,_defineProperty({},elementId,value))});// Remove validation error message on first change of the element
30
- Object.keys(newState.errors).forEach(function(key){// Action listeners might add some again
31
- if(_this2.state.formData[key]!==newState.formData[key]){delete newState.errors[key];}});var hasBackendValidationErrors=Object.keys(newState.errors).length>0;// Handle context sensitive functionality by via "action" listener and use the "new" state
32
- var updatedState=_this2.actionListener.notify(elementId,_this2.state,newState);// TODO: handle frontend validation errors and set "hasErrors" accordingly
33
- var hasErrors=false;// Check "required" fields for all visible elements and enable rendering on changes
34
- _this2.formElements.forEach(function(formElement){if(!updatedState.elementVisibility[formElement.id]||!formElement.required){return;}var tmpVal=updatedState.formData[formElement.id];var tmpResult=tmpVal===null||tmpVal===undefined||tmpVal===''||tmpVal===false;hasErrors=hasErrors||tmpResult;});var hasFrontendValidationErrors=Object.keys(updatedState.errors).length<=0;var hasValidationErrors=hasBackendValidationErrors&&hasFrontendValidationErrors;// Handle state internally and send an "onChange" event to parent if this finished
35
- _this2.setState(updatedState);// Transform to external structure (unavailable ones will be set undefined)
36
- var updateData={};_this2.formElements.forEach(function(el){if(el.custom){if(updateData.customAttributes===undefined){updateData.customAttributes={};}updateData.customAttributes[el.id]=updatedState.formData[el.id];}else{updateData[el.id]=updatedState.formData[el.id];}});// Trigger the given update action
37
- _this2.props.handleUpdate(updateData,hasErrors||hasValidationErrors);});/**
38
- * Takes an element of any type and renders it depending on type.
39
- * Also puts portals around the element.
40
- * @param {Object} element The data of the element to be rendered
41
- * @returns {JSX}
42
- */_defineProperty(_this2,"renderElement",function(element){var elementName="".concat(_this2.props.name,".").concat(element.id);var elementErrorText=_this2.state.errors[element.id]||'';var elementValue=_this2.state.formData[element.id];var elementVisible=_this2.state.elementVisibility[element.id]||false;if(!elementVisible){return null;}/*
43
- * Elements do check the type before they render themselves, but not even trying to render
44
- * creates a better React DOM
45
- */switch(element.type){case ELEMENT_TYPE_TEXT:case ELEMENT_TYPE_NUMBER:case ELEMENT_TYPE_EMAIL:case ELEMENT_TYPE_PASSWORD:case ELEMENT_TYPE_DATE:case ELEMENT_TYPE_PHONE:{return React.createElement(TextElement,{name:elementName,element:element,errorText:elementErrorText,value:elementValue||'',visible:elementVisible});}case ELEMENT_TYPE_SELECT:return React.createElement(SelectElement,{name:elementName,element:element,errorText:elementErrorText,value:elementValue,visible:elementVisible});case ELEMENT_TYPE_COUNTRY:return React.createElement(CountryElement,{name:elementName,element:element,errorText:elementErrorText,value:elementValue,visible:elementVisible,countryList:_this2.countryList});case ELEMENT_TYPE_PROVINCE:{var countryElement=_this2.formElements.find(function(el){return el.type===ELEMENT_TYPE_COUNTRY;});var provincesList=countryElement&&_this2.state.formData[countryElement.id]?buildProvinceList(_this2.state.formData[countryElement.id],element.required?null:emptySelectOption):{};return React.createElement(ProvinceElement,{name:elementName,element:element,errorText:elementErrorText,value:elementValue,visible:elementVisible,provincesList:provincesList});}case ELEMENT_TYPE_RADIO:{return React.createElement(RadioElement,{name:elementName,element:element,errorText:elementErrorText,value:elementValue,visible:elementVisible});}case ELEMENT_TYPE_CHECKBOX:{return React.createElement(CheckboxElement,{name:elementName,element:element,errorText:elementErrorText,value:elementValue,visible:elementVisible});}default:{logger.error("Unknown form element type: ".concat(element.type));break;}}return null;});_this2.state={elementVisibility:{},formData:{},// Convert errors structure to direct access errors
46
- errors:buildValidationErrorList(props.validationErrors)};// Reorganize form elements into a structure that can be easily rendered
47
- var formElements=buildFormElements(props.config,_this2.elementChangeHandler);// Compute defaults
48
- var formDefaults=buildFormDefaults(formElements,props.defaults);// Assign defaults to state
49
- _this2.state.formData=formDefaults;// Handle fixed visibilities
50
- formElements.forEach(function(element){// Assume as visible except it's explicitly set to "false"
51
- _this2.state.elementVisibility[element.id]=element.visible!==false;});_this2.actionListener=new ActionListener(buildProvinceList,formDefaults);_this2.actionListener.attachAll(formElements);// Sort the elements after attaching action listeners to keep action hierarchy same as creation
52
- _this2.formElements=formElements.sort(_this2.elementSortFunc);// Assemble combined country/province list based on the config element
53
- var _countryElement=_this2.formElements.find(function(el){return el.type===ELEMENT_TYPE_COUNTRY;});if(_countryElement){_this2.countryList=buildCountryList(_countryElement,emptySelectOption);var provinceElement=_this2.formElements.find(function(el){return el.type===ELEMENT_TYPE_PROVINCE;});if(provinceElement&&provinceElement.required&&!!formDefaults[_countryElement.id]&&!formDefaults[provinceElement.id]){// Set default for province field for given country
54
- var _Object$values3=Object.values(buildProvinceList(formDefaults[_countryElement.id])),_Object$values4=_slicedToArray(_Object$values3,1),first=_Object$values4[0];if(first){_this2.state.formData[provinceElement.id]=first;}}}// Final form initialization, by triggering actionListeners and enable rendering for elements
55
- var _newState=_this2.state;_this2.formElements.forEach(function(element){_newState=_this2.actionListener.notify(element.id,_this2.state,_newState);});_this2.state=_newState;return _this2;}/**
41
+ */
42
+ class Builder extends Component {
43
+ /**
44
+ * Initializes the component.
45
+ * @param {Object} props The components props.
46
+ */
47
+ constructor(props) {
48
+ super(props);
49
+
50
+ // Prepare internal state
51
+ /**
52
+ * Sorts the elements by "sortOrder" property
53
+ *
54
+ * @typedef {Object} FormElement
55
+ * @property {number} sortOrder
56
+ *
57
+ * @param {FormElement} element1 First element
58
+ * @param {FormElement} element2 Second element
59
+ * @returns {number}
60
+ */
61
+ this.elementSortFunc = (element1, element2) => {
62
+ // Keep current sort order when no specific sort order was set for both
63
+ if (element1.sortOrder === undefined || element2.sortOrder === undefined) {
64
+ return 0;
65
+ }
66
+
67
+ // Sort in ascending order of sortOrder otherwise
68
+ return element1.sortOrder - element2.sortOrder;
69
+ };
70
+ /**
71
+ * Element change handler based on it's type,
72
+ * @param {string} elementId Element to create the handler for
73
+ * @param {string} value Element value
74
+ */
75
+ this.elementChangeHandler = (elementId, value) => {
76
+ // Apply value change to new state
77
+ const newState = {
78
+ ...this.state,
79
+ formData: {
80
+ ...this.state.formData,
81
+ [elementId]: value
82
+ }
83
+ };
84
+
85
+ // Remove validation error message on first change of the element
86
+ Object.keys(newState.errors).forEach(key => {
87
+ // Action listeners might add some again
88
+ if (this.state.formData[key] !== newState.formData[key]) {
89
+ delete newState.errors[key];
90
+ }
91
+ });
92
+ const hasBackendValidationErrors = Object.keys(newState.errors).length > 0;
93
+
94
+ // Handle context sensitive functionality by via "action" listener and use the "new" state
95
+ const updatedState = this.actionListener.notify(elementId, this.state, newState);
96
+
97
+ // TODO: handle frontend validation errors and set "hasErrors" accordingly
98
+ let hasErrors = false;
99
+
100
+ // Check "required" fields for all visible elements and enable rendering on changes
101
+ this.formElements.forEach(formElement => {
102
+ if (!updatedState.elementVisibility[formElement.id] || !formElement.required) {
103
+ return;
104
+ }
105
+ const tmpVal = updatedState.formData[formElement.id];
106
+ const tmpResult = tmpVal === null || tmpVal === undefined || tmpVal === '' || tmpVal === false;
107
+ hasErrors = hasErrors || tmpResult;
108
+ });
109
+ const hasFrontendValidationErrors = Object.keys(updatedState.errors).length <= 0;
110
+ const hasValidationErrors = hasBackendValidationErrors && hasFrontendValidationErrors;
111
+
112
+ // Handle state internally and send an "onChange" event to parent if this finished
113
+ this.setState(updatedState);
114
+
115
+ // Transform to external structure (unavailable ones will be set undefined)
116
+ const updateData = {};
117
+ this.formElements.forEach(el => {
118
+ if (el.custom) {
119
+ if (updateData.customAttributes === undefined) {
120
+ updateData.customAttributes = {};
121
+ }
122
+ updateData.customAttributes[el.id] = updatedState.formData[el.id];
123
+ } else {
124
+ updateData[el.id] = updatedState.formData[el.id];
125
+ }
126
+ });
127
+
128
+ // Trigger the given update action
129
+ this.props.handleUpdate(updateData, hasErrors || hasValidationErrors);
130
+ };
131
+ /**
132
+ * Takes an element of any type and renders it depending on type.
133
+ * Also puts portals around the element.
134
+ * @param {Object} element The data of the element to be rendered
135
+ * @returns {JSX}
136
+ */
137
+ this.renderElement = element => {
138
+ const elementName = `${this.props.name}.${element.id}`;
139
+ const elementErrorText = this.state.errors[element.id] || '';
140
+ const elementValue = this.state.formData[element.id];
141
+ const elementVisible = this.state.elementVisibility[element.id] || false;
142
+ if (!elementVisible) {
143
+ return null;
144
+ }
145
+
146
+ /*
147
+ * Elements do check the type before they render themselves, but not even trying to render
148
+ * creates a better React DOM
149
+ */
150
+ switch (element.type) {
151
+ case ELEMENT_TYPE_TEXT:
152
+ case ELEMENT_TYPE_NUMBER:
153
+ case ELEMENT_TYPE_EMAIL:
154
+ case ELEMENT_TYPE_PASSWORD:
155
+ case ELEMENT_TYPE_DATE:
156
+ case ELEMENT_TYPE_PHONE:
157
+ {
158
+ return /*#__PURE__*/React.createElement(TextElement, {
159
+ name: elementName,
160
+ element: element,
161
+ errorText: elementErrorText,
162
+ value: elementValue || '',
163
+ visible: elementVisible
164
+ });
165
+ }
166
+ case ELEMENT_TYPE_SELECT:
167
+ return /*#__PURE__*/React.createElement(SelectElement, {
168
+ name: elementName,
169
+ element: element,
170
+ errorText: elementErrorText,
171
+ value: elementValue,
172
+ visible: elementVisible
173
+ });
174
+ case ELEMENT_TYPE_COUNTRY:
175
+ return /*#__PURE__*/React.createElement(CountryElement, {
176
+ name: elementName,
177
+ element: element,
178
+ errorText: elementErrorText,
179
+ value: elementValue,
180
+ visible: elementVisible,
181
+ countryList: this.countryList
182
+ });
183
+ case ELEMENT_TYPE_PROVINCE:
184
+ {
185
+ const countryElement = this.formElements.find(el => el.type === ELEMENT_TYPE_COUNTRY);
186
+ const provincesList = countryElement && this.state.formData[countryElement.id] ? buildProvinceList(this.state.formData[countryElement.id], element.required ? null : emptySelectOption) : {};
187
+ return /*#__PURE__*/React.createElement(ProvinceElement, {
188
+ name: elementName,
189
+ element: element,
190
+ errorText: elementErrorText,
191
+ value: elementValue,
192
+ visible: elementVisible,
193
+ provincesList: provincesList
194
+ });
195
+ }
196
+ case ELEMENT_TYPE_RADIO:
197
+ {
198
+ return /*#__PURE__*/React.createElement(RadioElement, {
199
+ name: elementName,
200
+ element: element,
201
+ errorText: elementErrorText,
202
+ value: elementValue,
203
+ visible: elementVisible
204
+ });
205
+ }
206
+ case ELEMENT_TYPE_CHECKBOX:
207
+ {
208
+ return /*#__PURE__*/React.createElement(CheckboxElement, {
209
+ name: elementName,
210
+ element: element,
211
+ errorText: elementErrorText,
212
+ value: elementValue,
213
+ visible: elementVisible
214
+ });
215
+ }
216
+ default:
217
+ {
218
+ logger.error(`Unknown form element type: ${element.type}`);
219
+ break;
220
+ }
221
+ }
222
+ return null;
223
+ };
224
+ this.state = {
225
+ elementVisibility: {},
226
+ formData: {},
227
+ // Convert errors structure to direct access errors
228
+ errors: buildValidationErrorList(props.validationErrors)
229
+ };
230
+
231
+ // Reorganize form elements into a structure that can be easily rendered
232
+ const formElements = buildFormElements(props.config, this.elementChangeHandler);
233
+ // Compute defaults
234
+ const formDefaults = buildFormDefaults(formElements, props.defaults);
235
+ // Assign defaults to state
236
+ this.state.formData = formDefaults;
237
+
238
+ // Handle fixed visibilities
239
+ formElements.forEach(element => {
240
+ // Assume as visible except it's explicitly set to "false"
241
+ this.state.elementVisibility[element.id] = element.visible !== false;
242
+ });
243
+ this.actionListener = new ActionListener(buildProvinceList, formDefaults);
244
+ this.actionListener.attachAll(formElements);
245
+
246
+ // Sort the elements after attaching action listeners to keep action hierarchy same as creation
247
+ this.formElements = formElements.sort(this.elementSortFunc);
248
+
249
+ // Assemble combined country/province list based on the config element
250
+ const _countryElement = this.formElements.find(el => el.type === ELEMENT_TYPE_COUNTRY);
251
+ if (_countryElement) {
252
+ this.countryList = buildCountryList(_countryElement, emptySelectOption);
253
+ const provinceElement = this.formElements.find(el => el.type === ELEMENT_TYPE_PROVINCE);
254
+ if (provinceElement && provinceElement.required && !!formDefaults[_countryElement.id] && !formDefaults[provinceElement.id]) {
255
+ // Set default for province field for given country
256
+ const [first] = Object.values(buildProvinceList(formDefaults[_countryElement.id]));
257
+ if (first) {
258
+ this.state.formData[provinceElement.id] = first;
259
+ }
260
+ }
261
+ }
262
+
263
+ // Final form initialization, by triggering actionListeners and enable rendering for elements
264
+ let _newState = this.state;
265
+ this.formElements.forEach(element => {
266
+ _newState = this.actionListener.notify(element.id, this.state, _newState);
267
+ });
268
+ this.state = _newState;
269
+ }
270
+
271
+ /**
56
272
  * Handles response of validation errors
57
273
  * @param {Object} nextProps The new props object with changed data
58
- */_inherits(Builder,_Component);return _createClass(Builder,[{key:"UNSAFE_componentWillReceiveProps",value:function UNSAFE_componentWillReceiveProps(nextProps){var oldValidationErrors=buildValidationErrorList(this.props.validationErrors);var newValidationErrors=buildValidationErrorList(nextProps.validationErrors);if(!_isEqual(oldValidationErrors,newValidationErrors)){this.setState({errors:newValidationErrors});}}},{key:"render",value:/**
274
+ */
275
+ UNSAFE_componentWillReceiveProps(nextProps) {
276
+ const oldValidationErrors = buildValidationErrorList(this.props.validationErrors);
277
+ const newValidationErrors = buildValidationErrorList(nextProps.validationErrors);
278
+ if (!_isEqual(oldValidationErrors, newValidationErrors)) {
279
+ this.setState({
280
+ errors: newValidationErrors
281
+ });
282
+ }
283
+ }
284
+ /**
59
285
  * Renders the component based on the given config
60
286
  * @return {JSX}
61
- */function render(){var _this3=this;return React.createElement(Fragment,null,React.createElement(Form,{onSubmit:this.props.onSubmit},React.createElement("div",{className:this.props.className},this.formElements.map(function(element){return React.createElement(Fragment,{key:"".concat(_this3.props.name,".").concat(element.id)},React.createElement(Portal,{name:"".concat(sanitize(_this3.props.name),".").concat(sanitize(element.id),".").concat(BEFORE)}),React.createElement(Portal,{name:"".concat(sanitize(_this3.props.name),".").concat(sanitize(element.id))},_this3.renderElement(element)),React.createElement(Portal,{name:"".concat(sanitize(_this3.props.name),".").concat(sanitize(element.id),".").concat(AFTER)}));}))));}}]);}(Component);_defineProperty(Builder,"defaultProps",{className:'',defaults:{},onSubmit:function onSubmit(){},validationErrors:[]/**
62
- * Initializes the component.
63
- * @param {Object} props The components props.
64
- */});export default Builder;
287
+ */
288
+ render() {
289
+ return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(Form, {
290
+ onSubmit: this.props.onSubmit
291
+ }, /*#__PURE__*/React.createElement("div", {
292
+ className: this.props.className
293
+ }, this.formElements.map(element => /*#__PURE__*/React.createElement(Fragment, {
294
+ key: `${this.props.name}.${element.id}`
295
+ }, /*#__PURE__*/React.createElement(Portal, {
296
+ name: `${sanitize(this.props.name)}.${sanitize(element.id)}.${BEFORE}`
297
+ }), /*#__PURE__*/React.createElement(Portal, {
298
+ name: `${sanitize(this.props.name)}.${sanitize(element.id)}`
299
+ }, this.renderElement(element)), /*#__PURE__*/React.createElement(Portal, {
300
+ name: `${sanitize(this.props.name)}.${sanitize(element.id)}.${AFTER}`
301
+ }))))));
302
+ }
303
+ }
304
+ Builder.defaultProps = {
305
+ className: '',
306
+ defaults: {},
307
+ onSubmit: () => {},
308
+ validationErrors: []
309
+ };
310
+ export default Builder;