linear-react-components-ui 0.4.76-beta.1 → 0.4.76-beta.13

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 (58) hide show
  1. package/.husky/pre-commit +2 -2
  2. package/README.md +12 -2
  3. package/lib/assets/styles/button.scss +17 -10
  4. package/lib/assets/styles/checkbox.scss +92 -70
  5. package/lib/assets/styles/commons.scss +26 -0
  6. package/lib/assets/styles/drawers.scss +22 -6
  7. package/lib/assets/styles/dropdown.scss +3 -0
  8. package/lib/assets/styles/gridlayout.scss +2 -1
  9. package/lib/assets/styles/input.scss +21 -0
  10. package/lib/assets/styles/label.scss +9 -1
  11. package/lib/assets/styles/panel.scss +5 -1
  12. package/lib/assets/styles/radio.scss +19 -0
  13. package/lib/assets/styles/skeleton.scss +48 -0
  14. package/lib/assets/styles/table.scss +6 -5
  15. package/lib/assets/styles/tabs.scss +2 -0
  16. package/lib/buttons/DefaultButton.js +7 -4
  17. package/lib/buttons/split_button/index.js +8 -4
  18. package/lib/checkbox/Label.js +1 -1
  19. package/lib/checkbox/checkbox.spec.js +16 -16
  20. package/lib/checkbox/index.js +16 -9
  21. package/lib/dialog/base/index.js +1 -1
  22. package/lib/dialog/form/index.js +10 -3
  23. package/lib/drawer/Drawer.js +9 -5
  24. package/lib/drawer/Header.js +15 -5
  25. package/lib/form/helpers.js +12 -1
  26. package/lib/form/index.js +195 -278
  27. package/lib/form/withFieldHOC.js +3 -1
  28. package/lib/form/withFormSecurity.js +8 -8
  29. package/lib/inputs/base/InputTextBase.js +20 -6
  30. package/lib/inputs/base/helpers.js +15 -3
  31. package/lib/inputs/date/Dropdown.js +3 -3
  32. package/lib/inputs/date/date.spec.js +46 -36
  33. package/lib/inputs/date/helpers.js +36 -0
  34. package/lib/inputs/date/index.js +12 -10
  35. package/lib/inputs/mask/imaskHOC.js +2 -1
  36. package/lib/internals/withTooltip.js +13 -10
  37. package/lib/labels/DefaultLabel.js +7 -4
  38. package/lib/menus/sidenav/NavMenuItem.js +2 -2
  39. package/lib/panel/Content.js +11 -4
  40. package/lib/radio/index.js +9 -6
  41. package/lib/skeleton/SkeletonContainer.js +42 -0
  42. package/lib/skeleton/index.js +84 -0
  43. package/lib/table/HeaderColumn.js +24 -3
  44. package/lib/table/Row.js +6 -2
  45. package/lib/table/RowColumn.js +22 -3
  46. package/lib/table/index.js +11 -4
  47. package/lib/tabs/MenuItems.js +9 -3
  48. package/lib/tabs/index.js +78 -53
  49. package/lib/tabs/tabs.spec.js +8 -5
  50. package/lib/toolbar/ButtonBar.js +30 -24
  51. package/lib/toolbar/LabelBar.js +22 -27
  52. package/lib/toolbar/helpers.js +12 -0
  53. package/lib/toolbar/index.js +23 -12
  54. package/lib/tooltip/index.js +8 -7
  55. package/lib/treeview/Node.js +231 -202
  56. package/lib/treeview/index.js +31 -13
  57. package/package.json +1 -1
  58. package/.DS_Store +0 -0
@@ -54,31 +54,31 @@ describe('CheckBox', function () {
54
54
  var _render2 = (0, _react.render)(CheckBoxTest()),
55
55
  container = _render2.container;
56
56
 
57
- expect(container.firstChild).toContainElement(container.querySelector('.checkbox-hint'));
57
+ expect(container.firstChild).toContainElement(container.querySelector('.hint'));
58
58
  });
59
59
  it('should label text match with prop label', function () {
60
60
  var _render3 = (0, _react.render)(CheckBoxTest()),
61
61
  container = _render3.container;
62
62
 
63
- expect(container.querySelector('.checkbox-description')).toHaveTextContent('testLabel');
63
+ expect(container.querySelector('.description')).toHaveTextContent('testLabel');
64
64
  });
65
65
  it('should checkbox have id ', function () {
66
66
  var _render4 = (0, _react.render)(CheckBoxTest()),
67
67
  container = _render4.container;
68
68
 
69
- expect(container.querySelector('.checkbox-component').id).toBe('1');
69
+ expect(container.querySelector('.input').id).toBe('1');
70
70
  });
71
71
  it('should checkbox have name test', function () {
72
72
  var _render5 = (0, _react.render)(CheckBoxTest()),
73
73
  container = _render5.container;
74
74
 
75
- expect(container.querySelector('.checkbox-component').name).toBe('test');
75
+ expect(container.querySelector('.input').name).toBe('test');
76
76
  });
77
77
  it('should checkbox have value', function () {
78
78
  var _render6 = (0, _react.render)(CheckBoxTest()),
79
79
  container = _render6.container;
80
80
 
81
- expect(container.querySelector('.checkbox-component').value).toBe('1');
81
+ expect(container.querySelector('.input').value).toBe('1');
82
82
  });
83
83
  it('should change checked', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
84
84
  var _render7, container;
@@ -88,11 +88,11 @@ describe('CheckBox', function () {
88
88
  switch (_context.prev = _context.next) {
89
89
  case 0:
90
90
  _render7 = (0, _react.render)(CheckBoxTest()), container = _render7.container;
91
- expect(container.querySelector('.checkbox-component').checked).toEqual(false);
91
+ expect(container.querySelector('.input').checked).toEqual(false);
92
92
 
93
- _react.fireEvent.click(container.querySelector('.checkbox-component'));
93
+ _react.fireEvent.click(container.querySelector('.input'));
94
94
 
95
- expect(container.querySelector('.checkbox-component').checked).toEqual(true);
95
+ expect(container.querySelector('.input').checked).toEqual(true);
96
96
 
97
97
  case 4:
98
98
  case "end":
@@ -111,11 +111,11 @@ describe('CheckBox', function () {
111
111
  _render8 = (0, _react.render)(CheckBoxTest({
112
112
  disabled: true
113
113
  })), container = _render8.container;
114
- expect(container.querySelector('.checkbox-component').checked).toEqual(false);
114
+ expect(container.querySelector('.input').checked).toEqual(false);
115
115
 
116
- _react.fireEvent.click(container.querySelector('.checkbox-component'));
116
+ _react.fireEvent.click(container.querySelector('.input'));
117
117
 
118
- expect(container.querySelector('.checkbox-component').checked).toEqual(false);
118
+ expect(container.querySelector('.input').checked).toEqual(false);
119
119
 
120
120
  case 4:
121
121
  case "end":
@@ -134,7 +134,7 @@ describe('CheckBox', function () {
134
134
  _render9 = (0, _react.render)(CheckBoxTest({
135
135
  required: true
136
136
  })), container = _render9.container;
137
- expect(container.querySelector('.checkbox-component').required).toEqual(true);
137
+ expect(container.querySelector('.input').required).toEqual(true);
138
138
 
139
139
  case 2:
140
140
  case "end":
@@ -153,8 +153,8 @@ describe('CheckBox', function () {
153
153
  _render10 = (0, _react.render)(CheckBoxTest({
154
154
  autoFocus: true
155
155
  })), container = _render10.container;
156
- container.querySelector('.checkbox-component').focus();
157
- expect(container.querySelector('.checkbox-component')).toHaveFocus();
156
+ container.querySelector('.input').focus();
157
+ expect(container.querySelector('.input')).toHaveFocus();
158
158
 
159
159
  case 3:
160
160
  case "end":
@@ -197,8 +197,8 @@ describe('CheckBox', function () {
197
197
 
198
198
  _react.fireEvent.click(container.firstChild);
199
199
 
200
- expect(getByTestId('checkbox-container')).toHaveClass('disabled');
201
- expect(container.querySelector('.checkbox-component')).toBeDisabled();
200
+ expect(getByTestId('checkbox-container')).toBeVisible();
201
+ expect(container.querySelector('.input')).toBeDisabled();
202
202
  expect(mockOnClick).toBeCalledTimes(0);
203
203
  });
204
204
  it('should check permission, be unavaible and onDenied is unvisible', function () {
@@ -25,6 +25,8 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
25
25
 
26
26
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
27
 
28
+ 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); }
29
+
28
30
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
29
31
 
30
32
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -57,7 +59,8 @@ var CheckBox = function CheckBox(props) {
57
59
  permissionAttr = props.permissionAttr,
58
60
  tooltip = props.tooltip,
59
61
  tooltipPosition = props.tooltipPosition,
60
- tooltipWidth = props.tooltipWidth;
62
+ tooltipWidth = props.tooltipWidth,
63
+ skeletonize = props.skeletonize;
61
64
 
62
65
  var _useState = (0, _react.useState)(checked),
63
66
  _useState2 = _slicedToArray(_useState, 2),
@@ -105,10 +108,12 @@ var CheckBox = function CheckBox(props) {
105
108
  };
106
109
 
107
110
  var renderInput = function renderInput() {
108
- return /*#__PURE__*/_react["default"].createElement("div", getProps(), /*#__PURE__*/_react["default"].createElement("span", {
111
+ return /*#__PURE__*/_react["default"].createElement("div", _extends({}, getProps(), {
112
+ className: "checkbox-component ".concat(skeletonize ? '-skeletonized' : '')
113
+ }), /*#__PURE__*/_react["default"].createElement("span", {
109
114
  "data-testid": "checkbox-container",
110
- className: shouldDisable() ? 'disabled' : '',
111
- onClick: !shouldDisable() ? function () {
115
+ className: "inputcontent",
116
+ onClick: !shouldDisable() && !skeletonize ? function () {
112
117
  return setIsChecked(!isChecked);
113
118
  } : null,
114
119
  tabIndex: "-1",
@@ -117,7 +122,7 @@ var CheckBox = function CheckBox(props) {
117
122
  onKeyPress: null
118
123
  }, /*#__PURE__*/_react["default"].createElement("input", {
119
124
  ref: inputRef,
120
- className: "checkbox-component",
125
+ className: "input",
121
126
  type: "checkbox",
122
127
  autoFocus: autofocus,
123
128
  checked: isChecked,
@@ -133,8 +138,8 @@ var CheckBox = function CheckBox(props) {
133
138
  tooltipWidth: tooltipWidth,
134
139
  tooltipPosition: tooltipPosition
135
140
  })), hint && /*#__PURE__*/_react["default"].createElement("div", {
136
- className: "checkbox-hint"
137
- }, hint));
141
+ className: "hint"
142
+ }, /*#__PURE__*/_react["default"].createElement("span", null, hint)));
138
143
  };
139
144
 
140
145
  if (onDenied.unvisible) return null;
@@ -160,7 +165,8 @@ CheckBox.propTypes = {
160
165
  permissionAttr: _propTypes["default"].oneOfType([_propTypes["default"].object, _propTypes["default"].arrayOf(_propTypes["default"].object)]),
161
166
  tooltip: _propTypes["default"].string,
162
167
  tooltipPosition: _propTypes["default"].string,
163
- tooltipWidth: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number])
168
+ tooltipWidth: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
169
+ skeletonize: _propTypes["default"].bool
164
170
  };
165
171
  CheckBox.defaultProps = {
166
172
  label: '',
@@ -178,7 +184,8 @@ CheckBox.defaultProps = {
178
184
  permissionAttr: undefined,
179
185
  tooltip: '',
180
186
  tooltipPosition: 'top',
181
- tooltipWidth: 'auto'
187
+ tooltipWidth: 'auto',
188
+ skeletonize: false
182
189
  };
183
190
  var _default = CheckBox;
184
191
  exports["default"] = _default;
@@ -52,7 +52,7 @@ var BaseDialog = function BaseDialog(props) {
52
52
  var dialogAlert = document.getElementsByClassName('dialog-alert-wrapper');
53
53
 
54
54
  if (wrapperEl !== null && wrapperEl.current !== null && target !== wrapperEl.current && !wrapperEl.current.contains(target)) {
55
- if (dialogAlert.length > 0 && dialogAlert[dialogAlert.length - 1].contains(target) || target.className !== 'button-component') return;
55
+ if (dialogAlert.length > 0 && dialogAlert[dialogAlert.length - 1].contains(target) || target.classList.contains('button-component')) return;
56
56
  handlerClose();
57
57
  }
58
58
  };
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
 
3
+ function _typeof(obj) { "@babel/helpers - typeof"; 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); }
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
6
8
  exports["default"] = void 0;
7
9
 
8
- var _react = _interopRequireDefault(require("react"));
10
+ var _react = _interopRequireWildcard(require("react"));
9
11
 
10
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
13
 
@@ -23,10 +25,14 @@ var _Footer = _interopRequireDefault(require("../base/Footer"));
23
25
 
24
26
  var _spinner = _interopRequireDefault(require("../../spinner"));
25
27
 
26
- var _withFormSecurity = _interopRequireDefault(require("../../form/withFormSecurity"));
28
+ var _withFormSecurity = _interopRequireWildcard(require("../../form/withFormSecurity"));
27
29
 
28
30
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
29
31
 
32
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
33
+
34
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
35
+
30
36
  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); }
31
37
 
32
38
  var ModalForm = function ModalForm(props) {
@@ -36,6 +42,7 @@ var ModalForm = function ModalForm(props) {
36
42
  opacity: 0.4,
37
43
  pointerEvent: 'none'
38
44
  } : {};
45
+ var context = (0, _react.useContext)(_withFormSecurity.FormSecurityContext);
39
46
 
40
47
  var getSpinner = function getSpinner() {
41
48
  if (!isWaiting) return null;
@@ -56,7 +63,7 @@ var ModalForm = function ModalForm(props) {
56
63
  }, props.children), getSpinner(), props.showFooter && /*#__PURE__*/_react["default"].createElement(_Footer["default"], null, /*#__PURE__*/_react["default"].createElement(_index.ButtonContainer, _extends({}, props, {
57
64
  style: _extends({}, overlayStyle)
58
65
  }), props.buttons.map(function (button) {
59
- if (button.type.name === 'CancelButton') {
66
+ if (context && context.securityBeforeUnload && button && button.type && button.type.name === 'CancelButton') {
60
67
  return /*#__PURE__*/_react["default"].cloneElement(button, {
61
68
  key: "button-".concat(_uuid["default"].v1()),
62
69
  onClick: props.handlerClose
@@ -45,7 +45,8 @@ var BaseDrawer = function BaseDrawer(props) {
45
45
  closeOnEsc = props.closeOnEsc,
46
46
  overlay = props.overlay,
47
47
  handlerClose = props.handlerClose,
48
- permissionAttr = props.permissionAttr;
48
+ permissionAttr = props.permissionAttr,
49
+ skeletonize = props.skeletonize;
49
50
  var drawerContainerEl = (0, _react.useRef)(document.createElement('div'));
50
51
  drawerContainerEl.current.className = 'drawercontainer';
51
52
  var drawerComponentEl = (0, _react.useRef)();
@@ -110,7 +111,8 @@ var BaseDrawer = function BaseDrawer(props) {
110
111
  }, [closeOnEsc]);
111
112
  var contextValues = {
112
113
  handlerClose: handlerClose,
113
- hideContent: onDenied.hideContent
114
+ hideContent: onDenied.hideContent,
115
+ skeletonize: skeletonize
114
116
  };
115
117
 
116
118
  var drawerContent = function drawerContent() {
@@ -122,7 +124,7 @@ var BaseDrawer = function BaseDrawer(props) {
122
124
  style: style
123
125
  }, /*#__PURE__*/_react["default"].createElement("div", {
124
126
  "data-testid": "drawercontent",
125
- className: "drawercontent ".concat(customClassForContent)
127
+ className: "drawercontent ".concat(skeletonize ? '-skeletonized' : '', " ").concat(customClassForContent)
126
128
  }, children)));
127
129
  };
128
130
 
@@ -139,7 +141,8 @@ BaseDrawer.propTypes = {
139
141
  handlerClose: _propTypes["default"].func,
140
142
  closeOnEsc: _propTypes["default"].bool,
141
143
  targetId: _propTypes["default"].string,
142
- permissionAttr: _propTypes["default"].oneOfType([_propTypes["default"].object, _propTypes["default"].arrayOf(_propTypes["default"].object)])
144
+ permissionAttr: _propTypes["default"].oneOfType([_propTypes["default"].object, _propTypes["default"].arrayOf(_propTypes["default"].object)]),
145
+ skeletonize: _propTypes["default"].bool
143
146
  };
144
147
  BaseDrawer.defaultProps = {
145
148
  overlay: false,
@@ -150,7 +153,8 @@ BaseDrawer.defaultProps = {
150
153
  handlerClose: undefined,
151
154
  closeOnEsc: false,
152
155
  targetId: undefined,
153
- permissionAttr: undefined
156
+ permissionAttr: undefined,
157
+ skeletonize: false
154
158
  };
155
159
  var _default = BaseDrawer;
156
160
  exports["default"] = _default;
@@ -61,6 +61,20 @@ var Header = function Header(_ref) {
61
61
  var _useContext = (0, _react.useContext)(_helpers["default"]),
62
62
  handlerClose = _useContext.handlerClose;
63
63
 
64
+ var renderTitle = function renderTitle() {
65
+ if (titleContent) return /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, titleContent);
66
+ return /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, getIcon(titleIcon, icon), /*#__PURE__*/_react["default"].createElement("h2", {
67
+ className: "drawer-title"
68
+ }, title), titleRightContent);
69
+ };
70
+
71
+ var renderSubtitle = function renderSubtitle() {
72
+ if (subTitleContent) return /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, subTitleContent);
73
+ return subTitle && /*#__PURE__*/_react["default"].createElement("h3", {
74
+ className: "drawer-subtitle"
75
+ }, subTitle);
76
+ };
77
+
64
78
  return /*#__PURE__*/_react["default"].createElement("div", {
65
79
  className: "drawerheader ".concat(customClass),
66
80
  "data-testid": "drawerheader"
@@ -68,11 +82,7 @@ var Header = function Header(_ref) {
68
82
  className: "left"
69
83
  }, /*#__PURE__*/_react["default"].createElement("div", {
70
84
  className: "title-subtitle"
71
- }, titleContent ? /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, titleContent) : /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, getIcon(titleIcon, icon), /*#__PURE__*/_react["default"].createElement("h2", {
72
- className: "drawer-title"
73
- }, title), titleRightContent)), subTitleContent ? /*#__PURE__*/_react["default"].createElement(_react.Fragment, null, subTitleContent) : subTitle && /*#__PURE__*/_react["default"].createElement("h3", {
74
- className: "drawer-subtitle"
75
- }, subTitle)), /*#__PURE__*/_react["default"].createElement("div", {
85
+ }, renderTitle()), renderSubtitle()), /*#__PURE__*/_react["default"].createElement("div", {
76
86
  className: "right"
77
87
  }, showCloseButton && getCloseButton(function () {
78
88
  handlerClose();
@@ -3,7 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getValidatorsArray = exports.getErrorMessages = exports.withFieldContext = exports.FormContext = exports.FieldContext = exports.securityBeforeUnload = void 0;
6
+ exports.getValidatorsArray = exports.getErrorMessages = exports.changeValue = exports.withFieldContext = exports.FormContext = exports.FieldContext = exports.securityBeforeUnload = void 0;
7
+
8
+ var _lodash = _interopRequireDefault(require("lodash"));
7
9
 
8
10
  var _react = _interopRequireDefault(require("react"));
9
11
 
@@ -36,6 +38,15 @@ var withFieldContext = /*#__PURE__*/_react["default"].createContext();
36
38
 
37
39
  exports.withFieldContext = withFieldContext;
38
40
 
41
+ var changeValue = function changeValue(newData, target) {
42
+ var name = target.name,
43
+ value = target.value;
44
+
45
+ _lodash["default"].set(newData, name, value);
46
+ };
47
+
48
+ exports.changeValue = changeValue;
49
+
39
50
  var getErrorMessages = function getErrorMessages(_ref) {
40
51
  var name = _ref.name,
41
52
  fieldErrors = _ref.fieldErrors,