@agilemotion/oui-react-js 1.8.76 → 1.8.78

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 (53) hide show
  1. package/dist/DynamicJS.js +1 -2
  2. package/dist/ViewContext.js +1 -0
  3. package/dist/assets/jss/views/loginBasicStyle.js +4 -4
  4. package/dist/assets/jss/views/loginBasicStyle.jsx +4 -4
  5. package/dist/components/Chart.js +2 -2
  6. package/dist/components/DataGrid.js +6 -11
  7. package/dist/components/DataGridColumn.js +2 -2
  8. package/dist/components/DataGridFilter.js +2 -4
  9. package/dist/components/DataGridHeading.js +2 -3
  10. package/dist/components/Dialog.js +2 -2
  11. package/dist/components/DocumentViewer.js +2 -2
  12. package/dist/components/HtmlPanel.js +2 -2
  13. package/dist/components/PopupView.js +3 -1
  14. package/dist/components/Portlet.js +2 -2
  15. package/dist/components/ProgressTracker.js +2 -2
  16. package/dist/components/SignaturePanel.js +2 -2
  17. package/dist/components/Spinner.js +2 -2
  18. package/dist/components/StepperTitleBar.js +2 -2
  19. package/dist/components/TabPage.js +2 -2
  20. package/dist/components/TabPanel.js +37 -18
  21. package/dist/components/TableCellContent.js +6 -12
  22. package/dist/components/TemplateDesigner.js +2 -2
  23. package/dist/components/TitleBar.js +2 -2
  24. package/dist/components/Tree.js +32 -14
  25. package/dist/components/WordDocumentViewer.css +9 -0
  26. package/dist/components/WordDocumentViewer.js +38 -50
  27. package/dist/components/dashboard/FoldingSideTabDashboard.js +3 -2
  28. package/dist/components/dashboard/components/blackDashboard/sidebar/FoldingTabSidebar.js +27 -22
  29. package/dist/components/form/AddressSearch.js +4 -4
  30. package/dist/components/form/Checkbox.js +4 -4
  31. package/dist/components/form/CurrencyField.js +4 -4
  32. package/dist/components/form/FieldSet.js +6 -6
  33. package/dist/components/form/Form.js +2 -3
  34. package/dist/components/form/GridField.js +29 -47
  35. package/dist/components/form/IconField.js +4 -4
  36. package/dist/components/form/ImageEditor.js +4 -15
  37. package/dist/components/form/LabelField.js +4 -4
  38. package/dist/components/form/LookupField.js +4 -4
  39. package/dist/components/form/RadioGroup.js +4 -4
  40. package/dist/components/form/Section.js +2 -6
  41. package/dist/components/form/SelectItem.js +2 -2
  42. package/dist/components/form/SignatureTemplateDesignerField.js +4 -4
  43. package/dist/components/form/Switch.js +4 -4
  44. package/dist/components/form/TextField.js +23 -9
  45. package/dist/components/form/TransferList.js +13 -11
  46. package/dist/components/form/UploadField.js +4 -5
  47. package/dist/components/layout/Layout.js +1 -2
  48. package/dist/components/layout/View.css +0 -1
  49. package/dist/components/menu/MenuLink.js +11 -5
  50. package/dist/components/observers/useOnFullyVisible.js +29 -0
  51. package/dist/components/observers/useResizeObserver.js +25 -0
  52. package/dist/js/ProcurementMeetings.js +25 -4
  53. package/package.json +1 -1
@@ -14,58 +14,14 @@ var _ej2Base = require("@syncfusion/ej2-base");
14
14
  var _Alert = _interopRequireDefault(require("react-bootstrap/Alert"));
15
15
  var _LottieIcon = _interopRequireDefault(require("./LottieIcon"));
16
16
  require("./WordDocumentViewer.css");
17
+ var _useResizeObserver = require("./observers/useResizeObserver");
18
+ var _useOnFullyVisible = require("./observers/useOnFullyVisible");
17
19
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
18
20
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
19
21
  const KEY = exports.KEY = 'Ngo9BigBOggjHTQxAR8/V1JGaF5cXGpCf1FpRmJGdld5fUVHYVZUTXxaS00DNHVRdkdlWX5ceHVRQ2BYUUdwX0NWYEs=';
20
22
  (0, _ej2Base.registerLicense)(KEY);
21
23
  const DOCSVC = exports.DOCSVC = "https://document.syncfusion.com/web-services/docx-editor/api/documenteditor/";
22
24
  _ej2ReactDocumenteditor.DocumentEditorContainerComponent.Inject(_ej2ReactDocumenteditor.Toolbar);
23
- function useOnFullyVisible(callback) {
24
- let {
25
- threshold = 0.1
26
- } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
27
- const ref = (0, _react.useRef)(null);
28
- (0, _react.useEffect)(() => {
29
- const el = ref.current;
30
- if (!el) return;
31
- const nextPaint = () => new Promise(res => requestAnimationFrame(() => requestAnimationFrame(res)));
32
- const waitImages = () => {
33
- const imgs = Array.from(el.querySelectorAll('img'));
34
- const pending = imgs.filter(img => !(img.complete && img.naturalWidth > 0));
35
- if (!pending.length) return Promise.resolve();
36
- return Promise.all(pending.map(img => new Promise(r => {
37
- const done = () => {
38
- img.removeEventListener('load', done);
39
- img.removeEventListener('error', done);
40
- r();
41
- };
42
- img.addEventListener('load', done, {
43
- once: true
44
- });
45
- img.addEventListener('error', done, {
46
- once: true
47
- });
48
- })));
49
- };
50
- const waitFonts = () => 'fonts' in document && document.fonts && document.fonts.ready ? document.fonts.ready : Promise.resolve();
51
- const io = new IntersectionObserver(async entries => {
52
- const entry = entries[0];
53
- const fullyVisible = entry.intersectionRatio >= threshold || entry.intersectionRatio >= 0.99;
54
- if (fullyVisible) {
55
- io.disconnect();
56
- await waitImages();
57
- await waitFonts();
58
- await nextPaint();
59
- callback(el);
60
- }
61
- }, {
62
- threshold: [threshold, 0.99]
63
- });
64
- io.observe(el);
65
- return () => io.disconnect();
66
- }, [callback, threshold]);
67
- return ref;
68
- }
69
25
  const LEVEL_FMT = ['%1.', '%1.%2.', '%1.%2.%3.'];
70
26
  function applyLevel(ed) {
71
27
  let level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
@@ -73,6 +29,34 @@ function applyLevel(ed) {
73
29
  ed.selection.paragraphFormat.listLevelNumber = depth;
74
30
  ed.applyNumbering(LEVEL_FMT[depth], 'Arabic');
75
31
  }
32
+ function useDynamicSyncfusionHeight(parentRef, containerRef) {
33
+ const [height, setHeight] = (0, _react.useState)(0);
34
+ const measure = (0, _react.useCallback)(() => {
35
+ if (!parentRef.current) return;
36
+ const rect = parentRef.current.getBoundingClientRect();
37
+ const newHeight = Math.floor(rect.height);
38
+ if (newHeight > 0 && newHeight !== height) {
39
+ console.log("MEASURE : ", newHeight);
40
+ setHeight(newHeight);
41
+ }
42
+ }, [parentRef, height]);
43
+
44
+ // 🔁 Resize observer
45
+ (0, _useResizeObserver.useResizeObserver)(parentRef, measure);
46
+
47
+ // ⚡ Syncfusion resize trigger
48
+ (0, _react.useEffect)(() => {
49
+ if (containerRef.current && height > 0) {
50
+ try {
51
+ containerRef.current.resize();
52
+ containerRef.current.documentEditor.resize();
53
+ } catch (e) {
54
+ // silent
55
+ }
56
+ }
57
+ }, [height, containerRef]);
58
+ return height;
59
+ }
76
60
  const WordDocumentViewer = props => {
77
61
  const [container, setContainer] = _react.default.useState(null);
78
62
  const [items, setItems] = _react.default.useState(null);
@@ -85,12 +69,14 @@ const WordDocumentViewer = props => {
85
69
  const anchorEnd = (0, _react.useRef)(false);
86
70
  const deleteLockRef = (0, _react.useRef)(false);
87
71
  const loading = (0, _react.useRef)(true);
88
- const ref = useOnFullyVisible(el => {
72
+ const parentRef = (0, _useOnFullyVisible.useOnFullyVisible)(el => {
89
73
  if (!reRendering) {
90
74
  setVisible(false);
91
75
  setReRendering(true);
92
76
  }
93
77
  });
78
+ const containerRef = (0, _react.useRef)(null);
79
+ const editorHeight = useDynamicSyncfusionHeight(parentRef, containerRef);
94
80
  function isPointInsideElement(x, y, el) {
95
81
  if (!el) return false;
96
82
  const rect = el.getBoundingClientRect();
@@ -557,7 +543,7 @@ const WordDocumentViewer = props => {
557
543
  height: '100%'
558
544
  },
559
545
  id: "parent-container",
560
- ref: ref
546
+ ref: parentRef
561
547
  }, !visible && /*#__PURE__*/_react.default.createElement("div", {
562
548
  style: {
563
549
  height: '100%',
@@ -588,9 +574,10 @@ const WordDocumentViewer = props => {
588
574
  }
589
575
  }, errorMessage))), visible && items && (_Utils.default.isNull(props.trackChanges) || props.trackChanges === true) && /*#__PURE__*/_react.default.createElement(_ej2ReactDocumenteditor.DocumentEditorContainerComponent, {
590
576
  id: "".concat(props.id, "-container"),
591
- height: props.height || '1200px',
577
+ height: editorHeight > 0 ? "".concat(editorHeight, "px") : '1200px',
592
578
  ref: scope => {
593
579
  setContainer(scope);
580
+ containerRef.current = scope;
594
581
  },
595
582
  created: () => {
596
583
  if (container) {
@@ -609,9 +596,10 @@ const WordDocumentViewer = props => {
609
596
  enableToolbar: !props.readOnly || props.commentsOnly
610
597
  }), visible && items && props.trackChanges === false && /*#__PURE__*/_react.default.createElement(_ej2ReactDocumenteditor.DocumentEditorContainerComponent, {
611
598
  id: "".concat(props.id, "-container"),
612
- height: props.height || '1200px',
599
+ height: editorHeight > 0 ? "".concat(editorHeight, "px") : '1200px',
613
600
  ref: scope => {
614
601
  setContainer(scope);
602
+ containerRef.current = scope;
615
603
  },
616
604
  created: () => {
617
605
  if (container) {
@@ -82,6 +82,7 @@ function normalizeLogo(src) {
82
82
  return DATA_URL_PREFIX + s;
83
83
  }
84
84
  function FoldingSideTabDashboard(props) {
85
+ var _props$appLogoPath;
85
86
  const [open, setOpen] = React.useState(true);
86
87
  const [navDrawerOpen, setNavDrawerOpen] = React.useState(true);
87
88
  const [loading, setLoading] = React.useState(true);
@@ -407,7 +408,7 @@ function FoldingSideTabDashboard(props) {
407
408
  dashboardLauncher: () => {
408
409
  launchDashboard();
409
410
  },
410
- appLogoPath: props.appLogoPath,
411
+ appLogoPath: (_props$appLogoPath = props.appLogoPath) !== null && _props$appLogoPath !== void 0 ? _props$appLogoPath : '',
411
412
  logo: {
412
413
  outterLink: '',
413
414
  text: '',
@@ -455,7 +456,7 @@ FoldingSideTabDashboard.propTypes = {
455
456
  showDashboardMenu: _propTypes.default.bool,
456
457
  logo: _propTypes.default.string,
457
458
  logoStyle: _propTypes.default.object,
458
- appLogoPath: _propTypes.default.string,
459
+ appLogoPath: _propTypes.default.object,
459
460
  avatar: _propTypes.default.string,
460
461
  logoutCallBack: _propTypes.default.func
461
462
  };
@@ -130,8 +130,8 @@ function FoldingTabSidebar(props) {
130
130
  });
131
131
  const activeRoute = routeName => activeRouteMenu.id === routeName;
132
132
  const getLiClassName = prop => 'li-' + prop.level;
133
- const fallbackIcon = prop => {
134
- var _prop$name;
133
+ const fallbackIcon = (prop, iconNode) => {
134
+ var _prop$name, _prop$name$charAt, _prop$name2, _prop$name$charAt2, _prop$name3;
135
135
  if (prop.icon) return iconNode;
136
136
  if (prop.level === 0) {
137
137
  return /*#__PURE__*/_react.default.createElement(_MoreHoriz.default, {
@@ -139,8 +139,11 @@ function FoldingTabSidebar(props) {
139
139
  });
140
140
  }
141
141
  return /*#__PURE__*/_react.default.createElement("div", {
142
- className: "mini-avatar"
143
- }, ((_prop$name = prop.name) === null || _prop$name === void 0 ? void 0 : _prop$name.charAt(0)) + '...');
142
+ className: "mini-avatar",
143
+ style: {
144
+ fontSize: '10px'
145
+ }
146
+ }, ((_prop$name = prop.name) === null || _prop$name === void 0 ? void 0 : _prop$name.charAt(0)) + ((_prop$name$charAt = (_prop$name2 = prop.name) === null || _prop$name2 === void 0 ? void 0 : _prop$name2.charAt(1)) !== null && _prop$name$charAt !== void 0 ? _prop$name$charAt : '') + ((_prop$name$charAt2 = (_prop$name3 = prop.name) === null || _prop$name3 === void 0 ? void 0 : _prop$name3.charAt(2)) !== null && _prop$name$charAt2 !== void 0 ? _prop$name$charAt2 : '') + '...');
144
147
  };
145
148
 
146
149
  /* ----------------- createLinks with dynamic classes + theme colors ----------------- */
@@ -226,7 +229,7 @@ function FoldingTabSidebar(props) {
226
229
  marginTop: 0
227
230
  }
228
231
  }))
229
- }) : !iconNode ? fallbackIcon(prop) : null);
232
+ }) : !iconNode ? fallbackIcon(prop, iconNode) : null);
230
233
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
231
234
  key: key
232
235
  }, shouldShowTooltip ? /*#__PURE__*/_react.default.createElement(_material.Tooltip, {
@@ -246,6 +249,22 @@ function FoldingTabSidebar(props) {
246
249
  className: "nav"
247
250
  }, createLinks(prop.views))));
248
251
  }
252
+ let menuLink = /*#__PURE__*/_react.default.createElement(_MenuLink.default, {
253
+ config: prop.item,
254
+ clickCallback: prop.name === 'Dashboard' ? item => {
255
+ props.dashboardLauncher && props.dashboardLauncher();
256
+ setActiveRouteMenu(item);
257
+ } : item => setActiveRouteMenu(item),
258
+ autoClick: prop.name === 'My Work Items' || prop.item && prop.item.defaultItem,
259
+ viewId: "menuBar",
260
+ icon: prop.icon,
261
+ content: open ? null : fallbackIcon(prop, iconNode),
262
+ iconColor: (prop.name === 'Dashboard' || prop.name === 'My Work Items') && isActive ? props.secondaryThemeColor : null,
263
+ name: prop.name,
264
+ id: prop.id,
265
+ level: prop.level,
266
+ tab: TAB
267
+ });
249
268
  const content = /*#__PURE__*/_react.default.createElement(_material.ListItemButton, {
250
269
  key: key,
251
270
  className: prop.name === 'Dashboard' || prop.name === 'My Work Items' ? isActive ? 'dashboard-link-active' : 'dashboard-link' : leafClassName,
@@ -267,22 +286,8 @@ function FoldingTabSidebar(props) {
267
286
  color: (prop.name === 'Dashboard' || prop.name === 'My Work Items') && isActive ? secondaryThemeColor : 'inherit'
268
287
  }
269
288
  }, iconNode), open ? /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
270
- primary: /*#__PURE__*/_react.default.createElement("span", null, /*#__PURE__*/_react.default.createElement(_MenuLink.default, {
271
- config: prop.item,
272
- clickCallback: prop.name === 'Dashboard' ? item => {
273
- props.dashboardLauncher && props.dashboardLauncher();
274
- setActiveRouteMenu(item);
275
- } : item => setActiveRouteMenu(item),
276
- autoClick: prop.name === 'My Work Items' || prop.item && prop.item.defaultItem,
277
- viewId: "menuBar",
278
- icon: prop.icon,
279
- iconColor: (prop.name === 'Dashboard' || prop.name === 'My Work Items') && isActive ? props.secondaryThemeColor : null,
280
- name: prop.name,
281
- id: prop.id,
282
- level: prop.level,
283
- tab: TAB
284
- }))
285
- }) : !iconNode ? fallbackIcon(prop) : null);
289
+ primary: /*#__PURE__*/_react.default.createElement("span", null, menuLink)
290
+ }) : !iconNode ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, menuLink) : null);
286
291
 
287
292
  // leaf
288
293
  return !open ? /*#__PURE__*/_react.default.createElement(_material.Tooltip, {
@@ -403,7 +408,7 @@ FoldingTabSidebar.propTypes = {
403
408
  text: _propTypes.default.string.isRequired
404
409
  })]),
405
410
  heading: _propTypes.default.string,
406
- appLogoPath: _propTypes.default.string,
411
+ appLogoPath: _propTypes.default.object,
407
412
  closeSidebar: _propTypes.default.func,
408
413
  dashboardLauncher: _propTypes.default.func,
409
414
  logoStyle: _propTypes.default.object,
@@ -16,7 +16,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
16
16
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
17
17
  function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
18
18
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
19
- const AddressSearchWrapper = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.forwardRef((props, ref) => {
19
+ const AddressSearchWrapper = /*#__PURE__*/_react.default.memo(props => {
20
20
  const base = props.base;
21
21
  const getAddressProp = (components, id) => {
22
22
  for (const component of components) {
@@ -75,8 +75,8 @@ const AddressSearchWrapper = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_reac
75
75
  }));
76
76
  }
77
77
  });
78
- }));
79
- const AddressSearch = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.forwardRef((props, ref) => {
78
+ });
79
+ const AddressSearch = /*#__PURE__*/_react.default.memo(props => {
80
80
  return /*#__PURE__*/_react.default.createElement(_BaseField.BaseField, _extends({}, props, {
81
81
  handle: props.handle,
82
82
  valueParser: (value, inbound) => {
@@ -90,5 +90,5 @@ const AddressSearch = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defau
90
90
  }), base => /*#__PURE__*/_react.default.createElement(AddressSearchWrapper, _extends({
91
91
  base: base
92
92
  }, props)));
93
- }));
93
+ });
94
94
  var _default = exports.default = AddressSearch;
@@ -11,7 +11,7 @@ var _BaseField = require("./BaseField");
11
11
  var _Utils = _interopRequireDefault(require("../../Utils"));
12
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
13
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
14
- const CheckboxWrapper = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.forwardRef((props, ref) => {
14
+ const CheckboxWrapper = /*#__PURE__*/_react.default.memo(props => {
15
15
  const base = props.base;
16
16
  return /*#__PURE__*/_react.default.createElement(_FormControlLabel.default, {
17
17
  style: {
@@ -32,12 +32,12 @@ const CheckboxWrapper = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.def
32
32
  }),
33
33
  label: props.config.attributes['label']
34
34
  });
35
- }));
36
- const Checkbox = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.forwardRef((props, ref) => {
35
+ });
36
+ const Checkbox = /*#__PURE__*/_react.default.memo(props => {
37
37
  return /*#__PURE__*/_react.default.createElement(_BaseField.BaseField, _extends({}, props, {
38
38
  handle: props.handle
39
39
  }), base => /*#__PURE__*/_react.default.createElement(CheckboxWrapper, _extends({
40
40
  base: base
41
41
  }, props)));
42
- }));
42
+ });
43
43
  var _default = exports.default = Checkbox;
@@ -13,7 +13,7 @@ var _reactRedux = require("react-redux");
13
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
14
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
15
15
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
16
- const CurrencyFieldWrapper = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.forwardRef((props, ref) => {
16
+ const CurrencyFieldWrapper = /*#__PURE__*/_react.default.memo(props => {
17
17
  var _props$config$attribu, _props$config$attribu2, _props$config$attribu3, _props$config$attribu4, _props$config$attribu5, _props$config$attribu6;
18
18
  const base = props.base;
19
19
  const width = !_Utils.default.isNull((_props$config$attribu = props.config.attributes) === null || _props$config$attribu === void 0 || (_props$config$attribu = _props$config$attribu.style) === null || _props$config$attribu === void 0 ? void 0 : _props$config$attribu.width) ? props.config.attributes.style.width : "100%";
@@ -86,8 +86,8 @@ const CurrencyFieldWrapper = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_reac
86
86
  onChange: handleInputChange,
87
87
  onBlur: handleBlur
88
88
  });
89
- }));
90
- const CurrencyField = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.forwardRef((props, ref) => {
89
+ });
90
+ const CurrencyField = /*#__PURE__*/_react.default.memo(props => {
91
91
  return /*#__PURE__*/_react.default.createElement(_BaseField.BaseField, _extends({}, props, {
92
92
  handle: props.handle,
93
93
  valueParser: (value, inbound) => {
@@ -104,5 +104,5 @@ const CurrencyField = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defau
104
104
  }), base => /*#__PURE__*/_react.default.createElement(CurrencyFieldWrapper, _extends({
105
105
  base: base
106
106
  }, props)));
107
- }));
107
+ });
108
108
  var _default = exports.default = CurrencyField;
@@ -37,7 +37,7 @@ var _IconField = _interopRequireDefault(require("./IconField"));
37
37
  var _DocumentTemplateDesigner = _interopRequireDefault(require("../DocumentTemplateDesigner"));
38
38
  var _DynamicJS = _interopRequireDefault(require("../../DynamicJS"));
39
39
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
40
- const FieldSet = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.forwardRef((props, ref) => {
40
+ const FieldSet = /*#__PURE__*/_react.default.memo(props => {
41
41
  const [fieldGrid] = _react.default.useState(_Utils.default.getFieldGrid(props.config.attributes, props.config.fields));
42
42
  const [componentHandles] = _react.default.useState({});
43
43
  const [visible, setVisible] = _react.default.useState(false);
@@ -64,14 +64,14 @@ const FieldSet = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.fo
64
64
  }, []);
65
65
  _react.default.useEffect(() => {
66
66
  if (!_Utils.default.isNull(props.disabled)) {
67
- setDisabled(props.disabled);
67
+ updateComponentDisabledState(props.disabled);
68
68
  }
69
69
  }, [props.disabled]);
70
70
  function fireChangeEvent() {
71
71
  let event = new _Event.default(props.handle, props.viewId);
72
72
  _Observable.default.fireEvent(_EventType.default.VALUE_CHANGE, event);
73
73
  }
74
- function setDisabled(disabled) {
74
+ function updateComponentDisabledState(disabled) {
75
75
  let properties = Object.getOwnPropertyNames(componentHandles);
76
76
  for (const property of properties) {
77
77
  let componentHandle = componentHandles[property];
@@ -389,7 +389,7 @@ const FieldSet = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.fo
389
389
  return fieldNames;
390
390
  },
391
391
  set disabled(disabled) {
392
- setDisabled(disabled);
392
+ updateComponentDisabledState(disabled);
393
393
  },
394
394
  clear() {
395
395
  let properties = Object.getOwnPropertyNames(componentHandles);
@@ -463,7 +463,7 @@ const FieldSet = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.fo
463
463
  setVisible(true);
464
464
  }
465
465
  if (!_Utils.default.isNull(props.config) && !_Utils.default.isNull(props.config.disabled)) {
466
- setDisabled(_Utils.default.evaluateBooleanExpression(props.config.disabled, props.config.id));
466
+ updateComponentDisabledState(_Utils.default.evaluateBooleanExpression(props.config.disabled, props.config.id));
467
467
  }
468
468
  refreshComponents();
469
469
  }
@@ -520,5 +520,5 @@ const FieldSet = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.fo
520
520
  }, !_Utils.default.isNull(props.config.attributes) && !_Utils.default.isNull(props.config.attributes['label']) ? /*#__PURE__*/_react.default.createElement("div", {
521
521
  className: 'fieldSetTitle'
522
522
  }, props.config.attributes['label']) : null, !_Utils.default.isNull(fieldGrid) ? render(props.config) : null);
523
- }));
523
+ });
524
524
  var _default = exports.default = FieldSet;
@@ -43,7 +43,7 @@ const useStyles = (0, _styles.makeStyles)(theme => ({
43
43
  },
44
44
  root: {}
45
45
  }));
46
- const Form = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.forwardRef((props, ref) => {
46
+ const Form = /*#__PURE__*/_react.default.memo(props => {
47
47
  const values = _react.default.useRef(!_Utils.default.isNull(props.values) ? props.values : {});
48
48
  const [masterValues, setMasterValues] = _react.default.useState(null);
49
49
  const [config, setConfig] = _react.default.useState(_Utils.default.parseConfig(props.config, props.viewId));
@@ -635,7 +635,6 @@ const Form = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.forwar
635
635
  config: section,
636
636
  disabled: props.disabled,
637
637
  handle: createSectionHandle(section),
638
- ref: /*#__PURE__*/_react.default.createRef(),
639
638
  form: () => {
640
639
  return !_Utils.default.isNull(props.handle.api) ? props.handle.api : api();
641
640
  },
@@ -654,5 +653,5 @@ const Form = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.forwar
654
653
  maxHeight: '70vh'
655
654
  }, props.config) : null
656
655
  }, !_Utils.default.isNull(props.config.id) ? render(props.config) : /*#__PURE__*/_react.default.createElement("div", null, "ERROR: A form must have an ID"));
657
- }));
656
+ });
658
657
  var _default = exports.default = Form;
@@ -12,41 +12,35 @@ var _Icon = _interopRequireDefault(require("../Icon"));
12
12
  var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
13
13
  var _InputLabel = _interopRequireDefault(require("@mui/material/InputLabel"));
14
14
  var _Toolbar = _interopRequireDefault(require("../Toolbar"));
15
- var _Observable = _interopRequireDefault(require("../../event/Observable"));
16
15
  var _DynamicJS = _interopRequireDefault(require("../../DynamicJS"));
17
16
  var _FormHelperText = _interopRequireDefault(require("@mui/material/FormHelperText"));
18
17
  var _ApplicationManager = _interopRequireDefault(require("../../ApplicationManager"));
19
18
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
19
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
21
- function getEditorType(columnName, gridConfig) {
22
- for (const column of gridConfig.columns) {
23
- if ((column.id === columnName || column.dataBinding === columnName) && !_Utils.default.isNull(column.editor)) {
24
- return column.editor.fieldType;
25
- }
26
- }
27
- return null;
28
- }
29
20
  function createRecord(row, gridConfig, inbound) {
30
21
  let record = {};
31
22
  for (const column of gridConfig.columns) {
32
23
  let property = !_Utils.default.isNull(column.dataBinding) ? column.dataBinding : column.id;
33
24
  let val = _Utils.default.readNestedProperty(row, property);
34
- _Utils.default.updateNestedProperty(record, property, val);
25
+ _Utils.default.updateNestedProperty(record, property, val !== null && val !== void 0 ? val : null);
35
26
  }
36
27
 
37
28
  //record.id = row.id >= 0 ? row.id : null;
38
29
  record.id = row.id;
39
30
  return record;
40
31
  }
41
- const GridFieldWrapper = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.forwardRef((props, ref) => {
32
+ const GridFieldWrapper = /*#__PURE__*/_react.default.memo(props => {
42
33
  const base = props.base;
43
34
  const newRowIdCounter = _react.default.useRef(-1);
44
35
  const [selection, setSelection] = _react.default.useState([]);
45
36
  const [label, setLabel] = _react.default.useState();
46
- const [rows, setRows] = _react.default.useState([]);
37
+ const loaded = _react.default.useRef(false);
38
+ const [rowModel, setRowModel] = _react.default.useState([]);
39
+ const [latestAddedRow, setLatestAddedRow] = _react.default.useState([]);
40
+ const hasErrors = _react.default.useRef(false);
47
41
  const [crudToolstripWidth, setCrudToolstripWidth] = _react.default.useState(null);
42
+ const editing = _react.default.useRef(false);
48
43
  const [hasButtons] = _react.default.useState(_Utils.default.isNull(props.config.attributes) || _Utils.default.isNull(props.config.attributes.addDisabled) || _Utils.default.evaluateBooleanExpression(props.config.attributes.addDisabled, props.config.id) === false || _Utils.default.isNull(props.config.attributes.removeDisabled) || _Utils.default.evaluateBooleanExpression(props.config.attributes.removeDisabled, props.config.id) === false);
49
- const initialValueSet = _react.default.useRef(false);
50
44
  _react.default.useEffect(() => {
51
45
  var _props$config$attribu, _props$config$attribu2;
52
46
  let numCrudButtons = 0;
@@ -67,26 +61,16 @@ const GridFieldWrapper = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.de
67
61
  setLabel(_Utils.default.getComponentAttribute(props.config, 'label', ''));
68
62
  }
69
63
  }, []);
70
- function setNewRows(values) {
71
- if (Array.isArray(values)) {
72
- let newRows = [];
73
- for (const value of values) {
74
- if (value) {
75
- newRows.push(value);
76
- }
77
- }
78
- setRows(newRows);
79
- }
80
- }
81
64
  _react.default.useEffect(() => {
82
- if (!_Utils.default.isNull(base.value) && !initialValueSet.current) {
83
- setNewRows(!_Utils.default.isNull(base.value) ? base.value : []);
65
+ if (editing.current) {
66
+ editing.current = false;
67
+ return;
84
68
  }
69
+ setRowModel(base.value);
85
70
  }, [base.value]);
86
71
  _react.default.useEffect(() => {
87
- initialValueSet.current = false;
88
- setNewRows(!_Utils.default.isNull(base.valueObject[base.valueProperty]) ? base.valueObject[base.valueProperty] : []);
89
- }, [base.valueObject[base.valueProperty]]);
72
+ props.gridHandle.api.select([latestAddedRow.id]);
73
+ }, [latestAddedRow]);
90
74
  return /*#__PURE__*/_react.default.createElement("div", {
91
75
  className: "MuiFormControl-root MuiTextField-root MuiFormControl-marginDense",
92
76
  style: _Utils.default.mergeStyles({}, props.config)
@@ -124,9 +108,11 @@ const GridFieldWrapper = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.de
124
108
  "aria-controls": "menu-list-grow",
125
109
  "aria-haspopup": "true",
126
110
  onClick: () => {
127
- props.gridHandle.api.addRows([{
111
+ let row = {
128
112
  id: newRowIdCounter.current--
129
- }]);
113
+ };
114
+ setRowModel(props.gridHandle.api.addRows([row]));
115
+ setLatestAddedRow(row);
130
116
  }
131
117
  }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
132
118
  id: 'ADD'
@@ -146,31 +132,27 @@ const GridFieldWrapper = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.de
146
132
  }, /*#__PURE__*/_react.default.createElement(_Toolbar.default, {
147
133
  config: props.config.toolstrip,
148
134
  handle: props.toolstripHandle,
149
- ref: /*#__PURE__*/_react.default.createRef(),
150
135
  viewId: props.viewId
151
136
  })) : null)) : null, /*#__PURE__*/_react.default.createElement(_DataGrid.DataGrid, {
152
137
  config: props.config.grid,
153
138
  handle: props.gridHandle,
154
- ref: /*#__PURE__*/_react.default.createRef(),
155
139
  viewId: props.viewId,
140
+ loaded: loaded,
156
141
  disabled: base.disabled,
157
- rows: rows,
142
+ rows: rowModel,
158
143
  formValues: props.values,
159
- valueChangeHandler: newRows => {
160
- let value = null;
161
- if (!_Utils.default.isNull(newRows)) {
162
- value = [];
163
- for (const row of newRows) {
164
- let record = createRecord(row, props.config.grid, false);
165
- value.push(record);
166
- }
144
+ valueChangeHandler: (newRows, hasRowErrors) => {
145
+ if (!_Utils.default.isNull(newRows) && !hasRowErrors) {
146
+ editing.current = true;
147
+ let value = newRows.map(row => createRecord(row, props.config.grid, false));
148
+ base.handleValueChange(value);
149
+ } else {
150
+ base.handleValueChange(null);
167
151
  }
168
- base.handleValueChange(value);
169
152
  },
170
153
  pagination: false,
171
154
  onSelectionChange: selection => {
172
155
  setSelection(selection);
173
- initialValueSet.current = true;
174
156
  },
175
157
  filterWrapperClass: 'transferListFilterWrapper',
176
158
  hasBorder: false
@@ -180,8 +162,8 @@ const GridFieldWrapper = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.de
180
162
  color: "rgb(244, 67, 54)"
181
163
  }
182
164
  }, base.errorMessage)));
183
- }));
184
- const GridField = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.forwardRef((props, ref) => {
165
+ });
166
+ const GridField = /*#__PURE__*/_react.default.memo(props => {
185
167
  const [gridHandle] = _react.default.useState({});
186
168
  const [toolHandle] = _react.default.useState(!_Utils.default.isNull(props.config.toolstrip) ? {} : null);
187
169
  return /*#__PURE__*/_react.default.createElement(_BaseField.BaseField, _extends({}, props, {
@@ -231,5 +213,5 @@ const GridField = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.f
231
213
  toolstripHandle: toolHandle,
232
214
  base: base
233
215
  }, props)));
234
- }));
216
+ });
235
217
  var _default = exports.default = GridField;
@@ -10,7 +10,7 @@ var _Icon = _interopRequireDefault(require("../Icon"));
10
10
  var _Utils = _interopRequireDefault(require("../../Utils"));
11
11
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
12
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
13
- const IconWrapper = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.forwardRef((props, ref) => {
13
+ const IconWrapper = /*#__PURE__*/_react.default.memo(props => {
14
14
  var _props$config$attribu;
15
15
  const base = props.base;
16
16
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, ((_props$config$attribu = props.config.attributes) === null || _props$config$attribu === void 0 ? void 0 : _props$config$attribu.label) && /*#__PURE__*/_react.default.createElement("div", {
@@ -19,12 +19,12 @@ const IconWrapper = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default
19
19
  id: props.config.iconId,
20
20
  color: props.config.iconColor
21
21
  })));
22
- }));
23
- const IconField = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.forwardRef((props, ref) => {
22
+ });
23
+ const IconField = /*#__PURE__*/_react.default.memo(props => {
24
24
  return /*#__PURE__*/_react.default.createElement(_BaseField.BaseField, _extends({}, props, {
25
25
  handle: props.handle
26
26
  }), base => /*#__PURE__*/_react.default.createElement(IconWrapper, _extends({
27
27
  base: base
28
28
  }, props)));
29
- }));
29
+ });
30
30
  var _default = exports.default = IconField;