@agilemotion/oui-react-js 1.3.9 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/{ApplicationContext.js → ApplicationManager.js} +196 -74
  2. package/dist/BasicApp.js +66 -63
  3. package/dist/BasicAppHome.js +85 -118
  4. package/dist/BusinessPortalAppHome.js +9 -15
  5. package/dist/DynamicJS.js +7 -3
  6. package/dist/RestUtils.js +13 -14
  7. package/dist/Utils.js +15 -9
  8. package/dist/WithRouter.js +34 -0
  9. package/dist/assets/scss/black-dashboard-react/custom/_sidebar-and-main-panel.scss +1 -1
  10. package/dist/components/AlertBar.js +1 -1
  11. package/dist/components/Button.js +34 -25
  12. package/dist/components/Calendar.js +9 -45
  13. package/dist/components/DataGrid.js +49 -18
  14. package/dist/components/DataGridColumn.js +1 -1
  15. package/dist/components/DataGridFilter.js +2 -2
  16. package/dist/components/Dialog.js +1 -1
  17. package/dist/components/DocumentViewer.js +5 -5
  18. package/dist/components/FileThumb.js +30 -19
  19. package/dist/components/Graph.js +10 -2
  20. package/dist/components/GraphNode.js +1 -1
  21. package/dist/components/HtmlPanel.js +10 -5
  22. package/dist/components/Icon.js +8 -0
  23. package/dist/components/PopupView.js +1 -1
  24. package/dist/components/Portlet.js +100 -0
  25. package/dist/components/SignaturePanel.js +1 -1
  26. package/dist/components/SocketManager.js +2 -2
  27. package/dist/components/StepperTitleBar.js +4 -4
  28. package/dist/components/TabPanel.js +11 -3
  29. package/dist/components/TableCellContent.js +1 -1
  30. package/dist/components/TemplateDesigner.js +11 -11
  31. package/dist/components/TitleBar.js +4 -3
  32. package/dist/components/Toolbar.js +42 -11
  33. package/dist/components/Tree.js +3 -3
  34. package/dist/components/dashboard/BasicBusinessAppDashboard.js +9 -7
  35. package/dist/components/dashboard/components/Header.js +1 -1
  36. package/dist/components/dashboard/components/blackDashboard/sidebar/Sidebar.css +7 -0
  37. package/dist/components/dashboard/components/blackDashboard/sidebar/Sidebar.js +74 -72
  38. package/dist/components/form/AutoComplete.js +31 -30
  39. package/dist/components/form/BaseField.js +38 -26
  40. package/dist/components/form/DatePicker.js +5 -2
  41. package/dist/components/form/FieldSet.js +11 -19
  42. package/dist/components/form/Form.js +24 -16
  43. package/dist/components/form/ImageEditor.js +4 -4
  44. package/dist/components/form/MultiFileUploadField.js +15 -14
  45. package/dist/components/form/RadioGroup.js +10 -11
  46. package/dist/components/form/Section.js +10 -0
  47. package/dist/components/form/TimePicker.js +1 -0
  48. package/dist/components/form/UploadField.js +115 -108
  49. package/dist/components/layout/Layout.js +65 -12
  50. package/dist/components/layout/View.css +1 -0
  51. package/dist/components/layout/View.js +20 -23
  52. package/dist/components/layout/ViewContainer.css +3 -0
  53. package/dist/components/layout/ViewContainer.js +59 -0
  54. package/dist/components/layout/ViewPort.js +50 -80
  55. package/dist/components/layout/Window.css +18 -0
  56. package/dist/components/layout/Window.js +287 -0
  57. package/dist/components/layout/WindowViewPort.js +71 -0
  58. package/dist/components/media/MediaSoupHelper.js +1 -1
  59. package/dist/components/media/Toolbar.css +18 -3
  60. package/dist/components/media/Toolbar.js +80 -56
  61. package/dist/components/media/TrainingRoom.js +97 -20
  62. package/dist/components/media/VCRoom.js +1 -1
  63. package/dist/components/media/VCRoomParticipant.js +17 -15
  64. package/dist/components/media/VCRoomRecorder.js +223 -0
  65. package/dist/components/media/VCRoomWorkspace.js +169 -156
  66. package/dist/components/media/VideoPlayer.css +10 -0
  67. package/dist/components/media/VideoPlayer.js +86 -0
  68. package/dist/components/menu/MenuButton.js +22 -6
  69. package/dist/components/menu/MenuLink.js +13 -10
  70. package/dist/components/navbars/HomeNavbar.js +2 -2
  71. package/dist/components/navbars/PortalNavbar.js +3 -3
  72. package/dist/components/signatures/AgilitySignaturePanel.js +4 -4
  73. package/dist/components/signatures/ImageSignatureInput.js +4 -4
  74. package/dist/components/signatures/SignatureInput.js +4 -4
  75. package/dist/components/signatures/SignatureTemplateDesigner.js +6 -6
  76. package/dist/event/ActionHandlers.js +3 -3
  77. package/dist/event/Observable.js +33 -15
  78. package/dist/event/RouteActionHandler.js +38 -29
  79. package/dist/event/ServiceCallActionHandler.js +4 -2
  80. package/dist/event/SignalGraphActionHandler.js +2 -2
  81. package/dist/js/Calendar.js +220 -0
  82. package/dist/js/Media.js +2 -2
  83. package/dist/view/Dashboard.js +34 -28
  84. package/dist/view/Views.js +30 -0
  85. package/dist/view/security/ChangePasswordBasic.js +6 -4
  86. package/dist/view/security/ForgotPassword.js +4 -4
  87. package/dist/view/security/ForgotPasswordBasic.js +4 -4
  88. package/dist/view/security/Login.js +4 -4
  89. package/dist/view/security/LoginBasic.js +5 -5
  90. package/dist/view/security/LoginBusinessPortal.js +4 -4
  91. package/dist/view/security/ResetPassword.js +4 -4
  92. package/dist/view/security/ResetPasswordBasic.js +6 -4
  93. package/package.json +8 -14
@@ -7,30 +7,22 @@ exports.default = void 0;
7
7
 
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
 
10
- var _reactRouterDom = require("react-router-dom");
11
-
12
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
11
 
14
- var _perfectScrollbar = _interopRequireDefault(require("perfect-scrollbar"));
15
-
16
12
  var _Utils = _interopRequireDefault(require("../../../../../Utils"));
17
13
 
18
14
  var _reactstrap = require("reactstrap");
19
15
 
20
16
  var _MenuLink = _interopRequireDefault(require("../../../../menu/MenuLink"));
21
17
 
22
- var _reactRedux = require("react-redux");
23
-
24
- var _redux = require("redux");
25
-
26
- var _DashboardStore = require("../../../../../redux/store/DashboardStore");
27
-
28
18
  var _CardAvatar = _interopRequireDefault(require("../../../../card/CardAvatar"));
29
19
 
30
20
  var _core = require("@material-ui/core");
31
21
 
32
22
  var _RestUtils = require("../../../../../RestUtils");
33
23
 
24
+ require("./Sidebar.css");
25
+
34
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
35
27
 
36
28
  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; }
@@ -38,13 +30,6 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
38
30
  let ps;
39
31
  const TAB = 16;
40
32
 
41
- const propHandler = state => {
42
- let activeRouteMenu = state.dashboard.activeRouteMenu;
43
- return {
44
- activeRouteMenu: activeRouteMenu
45
- };
46
- };
47
-
48
33
  class Sidebar extends _react.default.Component {
49
34
  constructor(props) {
50
35
  super(props);
@@ -56,14 +41,14 @@ class Sidebar extends _react.default.Component {
56
41
  let createView = {};
57
42
  createView.name = menus[i].attributes.label;
58
43
  createView.id = menus[i].id;
59
- createView.mini = "SS";
60
- createView.layout = "/admin";
44
+ createView.mini = 'SS';
45
+ createView.layout = '/admin';
61
46
  createView.level = level;
62
47
 
63
- if (menus[i].items && menus[i].items.length > 0) {
48
+ if (menus[i].subMenu) {
64
49
  createView.collapse = true;
65
- createView.state = menus[i].id + "Collapse";
66
- createView.views = this.getItems(menus[i].items, level + 1);
50
+ createView.state = menus[i].id + 'Collapse';
51
+ createView.views = this.getItems(menus[i].subMenu.items, level + 1);
67
52
  } else {
68
53
  createView.item = menus[i];
69
54
  }
@@ -71,7 +56,7 @@ class Sidebar extends _react.default.Component {
71
56
  newViews.push(createView);
72
57
  }
73
58
 
74
- console.log("VIEWS : ", newViews, menus);
59
+ console.log('VIEWS : ', newViews, menus);
75
60
  return newViews;
76
61
  });
77
62
 
@@ -82,15 +67,15 @@ class Sidebar extends _react.default.Component {
82
67
  let createItem = {};
83
68
  createItem.name = items[i].attributes.label;
84
69
  createItem.id = items[i].id;
85
- createItem.mini = "SS";
86
- createItem.layout = "/admin";
70
+ createItem.mini = 'SS';
71
+ createItem.layout = '/admin';
87
72
  createItem.item = items[i];
88
73
  createItem.level = level;
89
74
 
90
75
  if (!_Utils.default.isNull(items[i].subMenu)) {
91
76
  createItem.collapse = true;
92
- createItem.state = items[i].id + "SubMenuCollapse";
93
- createItem.views = getItems(items[i].subMenu.items, level + 1);
77
+ createItem.state = items[i].id + 'SubMenuCollapse';
78
+ createItem.views = this.getItems(items[i].subMenu.items, level + 1);
94
79
  }
95
80
 
96
81
  newItems.push(createItem);
@@ -124,24 +109,24 @@ class Sidebar extends _react.default.Component {
124
109
  let service = {
125
110
  url: '/ui/api/v1/menu/get',
126
111
  parameters: [{
127
- name: "id",
112
+ name: 'id',
128
113
  value: route.menu,
129
- httpParameterType: "QUERY_PARAMETER"
114
+ httpParameterType: 'QUERY_PARAMETER'
130
115
  }, {
131
- name: "version",
116
+ name: 'version',
132
117
  value: 1.0,
133
- httpParameterType: "QUERY_PARAMETER"
118
+ httpParameterType: 'QUERY_PARAMETER'
134
119
  }],
135
- contentType: "application/json"
120
+ contentType: 'application/json'
136
121
  };
137
122
  (0, _RestUtils.invokeRest)(service, {
138
123
  api: {
139
124
  get id() {
140
- return "dashboard-sidebar";
125
+ return 'dashboard-sidebar';
141
126
  }
142
127
 
143
128
  }
144
- }, "dashboard-sidebar", result => {
129
+ }, 'dashboard-sidebar', result => {
145
130
  resolve(this.getViews(result.menus, route.level + 1));
146
131
  }, e => {
147
132
  console.error(e);
@@ -150,6 +135,10 @@ class Sidebar extends _react.default.Component {
150
135
  });
151
136
  });
152
137
 
138
+ _defineProperty(this, "getLiClassName", prop => {
139
+ return "li-" + prop.level;
140
+ });
141
+
153
142
  _defineProperty(this, "createLinks", routes => {
154
143
  const {
155
144
  rtlActive,
@@ -162,12 +151,13 @@ class Sidebar extends _react.default.Component {
162
151
 
163
152
  if ((prop.collapse || prop.isParent) && prop.name !== 'Dashboard' && prop.name !== 'My Work Items') {
164
153
  var st = {};
165
- st[prop["state"]] = !this.state[prop.state];
154
+ st[prop['state']] = !this.state[prop.state];
166
155
  return /*#__PURE__*/_react.default.createElement("li", {
167
- className: prop.collapse ? this.getCollapseInitialState(prop.views) ? "active" : null : null,
156
+ className: prop.collapse ? this.getCollapseInitialState(prop.views) + '-' + prop.level ? 'active ' + this.getLiClassName(prop) : this.getLiClassName(prop) : this.getLiClassName(prop),
168
157
  key: key
169
158
  }, /*#__PURE__*/_react.default.createElement("a", {
170
159
  href: "#pablo",
160
+ className: 'li-link-' + prop.level,
171
161
  "data-toggle": "collapse",
172
162
  style: {
173
163
  marginLeft: (prop.level + 1) * TAB + 'px'
@@ -193,57 +183,71 @@ class Sidebar extends _react.default.Component {
193
183
  style: {
194
184
  width: '28px'
195
185
  }
196
- }), " ", /*#__PURE__*/_react.default.createElement("span", null, " ", prop.name, " ", prop.collapse ? /*#__PURE__*/_react.default.createElement("span", {
186
+ }), ' ', /*#__PURE__*/_react.default.createElement("span", null, ' ', prop.name, ' ', prop.collapse ? /*#__PURE__*/_react.default.createElement("span", {
197
187
  className: "caret",
198
188
  style: {
199
189
  marginTop: '0'
200
190
  }
201
- }) : null), " ", " ") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
191
+ }) : null), ' ', ' ') : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
202
192
  className: "sidebar-normal",
203
193
  style: {
204
- paddingLeft: "4px"
194
+ paddingLeft: '4px'
205
195
  }
206
- }, " ", prop.name, " ", /*#__PURE__*/_react.default.createElement("b", {
196
+ }, ' ', prop.name, ' ', /*#__PURE__*/_react.default.createElement("b", {
207
197
  className: "caret"
208
- })), " "), " "), " ", prop.collapse && prop.views ? /*#__PURE__*/_react.default.createElement(_reactstrap.Collapse, {
198
+ })), ' '), ' '), ' ', prop.collapse && prop.views ? /*#__PURE__*/_react.default.createElement(_reactstrap.Collapse, {
209
199
  isOpen: this.state[prop.state]
210
200
  }, /*#__PURE__*/_react.default.createElement("ul", {
211
201
  className: "nav"
212
- }, " ", this.createLinks(prop.views), " "), " ") : null);
202
+ }, " ", this.createLinks(prop.views), " "), ' ') : null);
213
203
  }
214
204
 
215
205
  return /*#__PURE__*/_react.default.createElement("li", {
216
- className: "",
206
+ className: "".concat('menu-link-li' + (this.activeRoute(prop.id) ? '-active' : '') + (prop.name === 'Dashboard' ? ' dashboard-link' : '')),
217
207
  key: key,
218
208
  style: this.activeRoute(prop.id) ? {
219
209
  backgroundColor: (0, _core.lighten)(secondaryThemeColor, .9),
220
210
  borderRadius: '16px',
221
211
  color: secondaryThemeColor,
222
- fontWeight: 500,
223
- marginRight: '8px'
212
+ fontWeight: 500
224
213
  } : {}
225
214
  }, /*#__PURE__*/_react.default.createElement(_MenuLink.default, {
226
215
  config: prop.item,
227
- clickCallback: prop.name === 'Dashboard' ? this.props.dashboardLauncher : null,
216
+ clickCallback: prop.name === 'Dashboard' ? item => {
217
+ this.props.dashboardLauncher();
218
+ this.setState({ ...this.state,
219
+ activeRouteMenu: item
220
+ });
221
+ } : item => this.setState({ ...this.state,
222
+ activeRouteMenu: item
223
+ }),
228
224
  autoClick: prop.name === 'My Work Items' || prop.item && prop.item.defaultItem,
229
225
  viewId: "menuBar",
230
226
  icon: prop.icon,
231
227
  iconColor: (prop.name === 'Dashboard' || prop.name === 'My Work Items') && this.activeRoute(prop.id) ? secondaryThemeColor : null,
228
+ backgroundColor: this.activeRoute(prop.id) ? (0, _core.lighten)(secondaryThemeColor, .9) : null,
232
229
  name: prop.name,
233
230
  id: prop.id,
234
231
  level: prop.level,
235
232
  tab: TAB,
236
233
  color: this.activeRoute(prop.id) ? secondaryThemeColor : null
237
- }), " ");
234
+ }), ' ');
238
235
  });
239
236
  });
240
237
 
241
238
  _defineProperty(this, "activeRoute", routeName => {
242
239
  // return this.props.location.pathname.indexOf(routeName) > -1 ? "active" : "";
243
- return this.props.activeRouteMenu.id === routeName;
240
+ return this.state.activeRouteMenu.id === routeName;
244
241
  });
245
242
 
246
- this.state = this.getCollapseStates(props.routes); //actionCreators.setActiveRoute(Utils.isNull(props.activeRouteMenu) ? 'Dashboard' : props.activeRouteMenu);
243
+ this.state = { ...this.getCollapseStates(props.routes),
244
+ isLoading: false,
245
+ error: false,
246
+ activeRouteMenu: {
247
+ id: 'dashboard',
248
+ name: 'Dashboard'
249
+ }
250
+ };
247
251
  }
248
252
 
249
253
  // this verifies if any of the collapses should be default opened on a rerender of this component
@@ -271,7 +275,7 @@ class Sidebar extends _react.default.Component {
271
275
 
272
276
  componentDidMount() {
273
277
  // if you are using a Windows Machine, the scrollbars will have a Mac look
274
- if (navigator.platform.indexOf("Win") > -1) {
278
+ if (navigator.platform.indexOf('Win') > -1) {
275
279
  /*ps = new PerfectScrollbar(this.refs.sidebar, {
276
280
  suppressScrollX: true,
277
281
  suppressScrollY: false,
@@ -282,7 +286,7 @@ class Sidebar extends _react.default.Component {
282
286
  componentWillUnmount() {
283
287
  // we need to destroy the false scrollbar when we navigate
284
288
  // to a page that doesn't have this component rendered
285
- if (navigator.platform.indexOf("Win") > -1) {//ps.destroy();
289
+ if (navigator.platform.indexOf('Win') > -1) {//ps.destroy();
286
290
  }
287
291
  }
288
292
 
@@ -307,16 +311,13 @@ class Sidebar extends _react.default.Component {
307
311
  }
308
312
  }, /*#__PURE__*/_react.default.createElement("img", {
309
313
  src: logo.imgSrc,
310
- style: {
311
- width: '150px'
312
- },
313
314
  alt: "react-logo"
314
- })), " ");
315
+ })), ' ');
315
316
  logoText = /*#__PURE__*/_react.default.createElement("a", {
316
317
  href: logo.outterLink,
317
318
  className: "simple-text ",
318
319
  onClick: this.props.closeSidebar
319
- }, logo.text, " ");
320
+ }, logo.text, ' ');
320
321
  }
321
322
 
322
323
  return /*#__PURE__*/_react.default.createElement("div", {
@@ -328,15 +329,15 @@ class Sidebar extends _react.default.Component {
328
329
  }
329
330
  }, /*#__PURE__*/_react.default.createElement("table", {
330
331
  style: {
331
- height: "96%",
332
- maxHeight: "100%",
333
- width: "100%"
332
+ height: '96%',
333
+ maxHeight: '100%',
334
+ width: '100%'
334
335
  }
335
336
  }, /*#__PURE__*/_react.default.createElement("tbody", null, /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("td", {
336
337
  style: {
337
338
  height: '10%'
338
339
  }
339
- }, " ", logoImg !== null ? /*#__PURE__*/_react.default.createElement("div", {
340
+ }, ' ', logoImg !== null ? /*#__PURE__*/_react.default.createElement("div", {
340
341
  className: "logo",
341
342
  style: {
342
343
  display: 'flex',
@@ -344,7 +345,7 @@ class Sidebar extends _react.default.Component {
344
345
  alignItems: 'center',
345
346
  height: '100%'
346
347
  }
347
- }, " ", logoImg, " ") : null, " ", !_Utils.default.isNull(this.props.heading) ? /*#__PURE__*/_react.default.createElement("div", {
348
+ }, ' ', logoImg, ' ') : null, ' ', !_Utils.default.isNull(this.props.heading) ? /*#__PURE__*/_react.default.createElement("div", {
348
349
  className: "logo",
349
350
  style: {
350
351
  display: 'flex',
@@ -358,24 +359,27 @@ class Sidebar extends _react.default.Component {
358
359
  style: {
359
360
  height: '70%'
360
361
  },
361
- valign: "top"
362
+ valign: 'top'
362
363
  }, /*#__PURE__*/_react.default.createElement(_reactstrap.Nav, {
363
364
  style: {
364
- margin: "8px",
365
- padding: "16px"
366
- }
365
+ margin: '8px',
366
+ padding: '16px'
367
+ },
368
+ className: 'nav-wrapper'
367
369
  }, this.createLinks(this.props.routes)))), /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("td", {
370
+ className: 'sidebar-app-logo-wrapper',
368
371
  style: {
369
372
  height: '10%'
370
373
  },
371
- valign: "top"
374
+ valign: 'top'
372
375
  }, /*#__PURE__*/_react.default.createElement("div", {
373
- className: "sidebar-app-logo",
376
+ className: 'sidebar-app-logo',
374
377
  style: {
375
378
  justifyContent: 'center',
376
379
  height: '92px'
377
380
  }
378
381
  }, !_Utils.default.isNull(this.props.appLogoPath) ? /*#__PURE__*/_react.default.createElement("div", {
382
+ className: 'product-logo',
379
383
  style: {
380
384
  display: 'flex',
381
385
  justifyContent: 'center',
@@ -393,13 +397,13 @@ class Sidebar extends _react.default.Component {
393
397
  alignItems: 'center',
394
398
  marginTop: '8px'
395
399
  }
396
- }, "Copyrights \xA9 ", 1900 + new Date().getYear(), " ", " ")))))));
400
+ }, "Copyrights \xA9 ", 1900 + new Date().getYear(), " ", ' ')))))));
397
401
  }
398
402
 
399
403
  }
400
404
 
401
405
  Sidebar.propTypes = {
402
- activeColor: _propTypes.default.oneOf(["primary", "blue", "green", "orange", "red", "agility"]),
406
+ activeColor: _propTypes.default.oneOf(['primary', 'blue', 'green', 'orange', 'red', 'agility']),
403
407
  secondaryThemeColor: _propTypes.default.string.isRequired,
404
408
  rtlActive: _propTypes.default.bool,
405
409
  routes: _propTypes.default.array.isRequired,
@@ -415,7 +419,5 @@ Sidebar.propTypes = {
415
419
  // this is used on responsive to close the sidebar on route navigation
416
420
  closeSidebar: _propTypes.default.func
417
421
  };
418
-
419
- var _default = (0, _reactRouterDom.withRouter)((0, _reactRedux.connect)(propHandler, dispatch => (0, _redux.bindActionCreators)(_DashboardStore.actionCreators, dispatch))(Sidebar));
420
-
422
+ var _default = Sidebar;
421
423
  exports.default = _default;
@@ -17,7 +17,7 @@ var _Autocomplete = _interopRequireDefault(require("@material-ui/lab/Autocomplet
17
17
 
18
18
  require("./Form.css");
19
19
 
20
- var _ApplicationContext = _interopRequireDefault(require("../../ApplicationContext"));
20
+ var _ApplicationManager = _interopRequireDefault(require("../../ApplicationManager"));
21
21
 
22
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
23
 
@@ -49,6 +49,7 @@ const AutoCompleteWrapper = /*#__PURE__*/_react.default.memo( /*#__PURE__*/_reac
49
49
  const [inputValue, setInputValue] = (0, _react.useState)('');
50
50
  const baseValue = (0, _react.useRef)(null);
51
51
  const [options, setOptions] = (0, _react.useState)([]);
52
+ const [entityStore] = (0, _react.useState)([]);
52
53
 
53
54
  _react.default.useEffect(() => {
54
55
  let minLen = _Utils.default.getComponentAttribute(props.config, 'minSearchAttributeLength', 1);
@@ -66,13 +67,18 @@ const AutoCompleteWrapper = /*#__PURE__*/_react.default.memo( /*#__PURE__*/_reac
66
67
  keys.push(currValue[props.config.attributes.searchAttribute]);
67
68
  return keys;
68
69
  }, []);
70
+
71
+ for (const valueElement of base.value) {
72
+ entityStore.push(valueElement);
73
+ }
74
+
69
75
  baseValue.current = base.value;
70
76
  setOptions(value.current);
71
77
  }
72
78
  }, [base.value]);
73
79
 
74
80
  const fetchOptions = () => {
75
- fetch(encodeURI(location + _ApplicationContext.default.getContextRoot() + props.config.attributes.optionsUrlPath), {
81
+ fetch(encodeURI(location + _ApplicationManager.default.getContextRoot() + props.config.attributes.optionsUrlPath), {
76
82
  method: 'POST',
77
83
  headers: {
78
84
  'Accept': 'application/json',
@@ -89,7 +95,22 @@ const AutoCompleteWrapper = /*#__PURE__*/_react.default.memo( /*#__PURE__*/_reac
89
95
  "currentPage": 0
90
96
  })
91
97
  }).then(status).then(json).then(data => {
92
- setOptions(JSON.parse(data).records);
98
+ let records = JSON.parse(data).records;
99
+ let newOptions = [];
100
+
101
+ for (const record of records) {
102
+ var _baseValue$current;
103
+
104
+ if (!((_baseValue$current = baseValue.current) !== null && _baseValue$current !== void 0 && _baseValue$current.find(o => o[props.config.attributes.searchAttribute] === record[props.config.attributes.searchAttribute]))) {
105
+ newOptions.push(record[props.config.attributes.searchAttribute]);
106
+ }
107
+
108
+ if (!entityStore.find(o => o.username === record.username)) {
109
+ entityStore.push(record);
110
+ }
111
+ }
112
+
113
+ setOptions(newOptions);
93
114
  }).catch(ignored => {});
94
115
  };
95
116
 
@@ -100,46 +121,26 @@ const AutoCompleteWrapper = /*#__PURE__*/_react.default.memo( /*#__PURE__*/_reac
100
121
  return /*#__PURE__*/_react.default.createElement(_Autocomplete.default, {
101
122
  inputValue: inputValue,
102
123
  multiple: true,
124
+ disabled: base.disabled,
103
125
  value: value.current,
104
- getOptionLabel: option => option ? option[props.config.attributes.searchAttribute] ? option[props.config.attributes.searchAttribute] : option : '',
126
+ getOptionLabel: option => option ? option : '',
105
127
  onInputChange: (event, newValue) => handleInputChange(event, newValue),
106
128
  onChange: (e, newValue, reason) => {
107
129
  let val = [];
108
130
 
109
- if (baseValue.current && Array.isArray(baseValue.current)) {
110
- for (const baseValueElement of baseValue.current) {
111
- if (baseValueElement) {
112
- val.push(baseValueElement);
113
- }
114
- }
115
-
116
- baseValue.current = null;
117
- }
118
-
119
131
  for (const newValueElement of newValue) {
120
- let find = options.find(o => o[props.config.attributes.searchAttribute] === newValueElement);
121
-
122
- if (!find) {
123
- var _value$current;
124
-
125
- find = (_value$current = value.current) === null || _value$current === void 0 ? void 0 : _value$current.find(o => o[props.config.attributes.searchAttribute] === newValueElement);
126
- }
127
-
128
- if (find) {
129
- val.push(find);
130
- } else {
131
- console.error("Cannot map autocomplete key : " + newValueElement);
132
- }
132
+ val.push(entityStore.find(e => e[props.config.attributes.searchAttribute] === newValueElement));
133
133
  }
134
134
 
135
135
  value.current = newValue;
136
136
  base.handleValueChange(val);
137
137
  },
138
- options: options.length > 0 ? options.map(option => option[props.config.attributes.searchAttribute]) : [],
138
+ options: options,
139
139
  id: props.config.id,
140
140
  renderInput: params => /*#__PURE__*/_react.default.createElement(_TextField.default, _extends({
141
- error: !_Utils.default.isNull(props.hasError) ? props.hasError : false,
142
- helperText: !_Utils.default.isNull(props.errorMessage) && !_Utils.default.isNull(props.hasError) ? props.errorMessage : '',
141
+ required: base.required,
142
+ error: base.hasError,
143
+ helperText: base.errorMessage,
143
144
  variant: props.borderless ? 'standard' : 'outlined'
144
145
  }, params, {
145
146
  label: _Utils.default.getComponentAttribute(props.config, 'label', '')
@@ -11,7 +11,7 @@ var _Utils = _interopRequireDefault(require("../../Utils"));
11
11
 
12
12
  var _Observable = _interopRequireDefault(require("../../event/Observable"));
13
13
 
14
- var _ApplicationContext = _interopRequireDefault(require("../../ApplicationContext"));
14
+ var _ApplicationManager = _interopRequireDefault(require("../../ApplicationManager"));
15
15
 
16
16
  var _Event = _interopRequireDefault(require("../../event/Event"));
17
17
 
@@ -32,9 +32,13 @@ const BaseField = props => {
32
32
 
33
33
  const loadingRef = _react.default.useRef(true);
34
34
 
35
- const [config, setConfig] = _react.default.useState(null);
35
+ const [config, setConfig] = _react.default.useState(null); // TODO : Replace the state value with the valueRef below. The state value is occationaly not available in time for event scripts
36
36
 
37
- const [value, setValue] = _react.default.useState(!_Utils.default.isNull(props.value) ? props.value : null);
37
+
38
+ const [value, setValue] = _react.default.useState(!_Utils.default.isNull(props.value) ? props.value : null); // TODO : Replace the state value with this ref for the reason mensioned above
39
+
40
+
41
+ const valueRef = _react.default.useRef(!_Utils.default.isNull(props.value) ? props.value : null);
38
42
 
39
43
  const [selectOptions, setSelectOptions] = _react.default.useState([]);
40
44
 
@@ -54,11 +58,14 @@ const BaseField = props => {
54
58
  if (props.config.fieldType === 'SELECT' || props.config.fieldType === 'LOOKUP') {
55
59
  if (!value || _Utils.default.isNull(value.id)) {
56
60
  setValue(null);
61
+ valueRef.current = null;
57
62
  } else {
58
63
  setValue(value);
64
+ valueRef.current = value;
59
65
  }
60
66
  } else {
61
67
  setValue(value);
68
+ valueRef.current = value;
62
69
  }
63
70
  }, [valueObject[valueProperty]]); // Change the required value and re-validate field if necessary
64
71
 
@@ -78,10 +85,10 @@ const BaseField = props => {
78
85
  };
79
86
 
80
87
  if (!_Utils.default.isNull(config.validator) && !_Utils.default.isNull(config.validator.script)) {
81
- result.valid = _DynamicJS.default.executeScriptObject("".concat(config.id, "Validator"), config.validator.script);
88
+ result = _DynamicJS.default.executeScriptObject("".concat(config.id, "Validator"), config.validator.script);
82
89
 
83
90
  if (!result.valid) {
84
- result.message = config.validator.message;
91
+ result.message = result.message ? result.message : config.validator.message;
85
92
  }
86
93
  }
87
94
 
@@ -89,11 +96,11 @@ const BaseField = props => {
89
96
  result = _Utils.default.validateField(path.valueProperty, required, path.valueObject, currentValue, config.validator);
90
97
  }
91
98
 
92
- setErrorMessage(_ApplicationContext.default.isFormMarkersEnabled() ? result.message : '');
93
- setHasError(!result.valid && _ApplicationContext.default.isFormMarkersEnabled());
94
- valid.current = result.valid && _ApplicationContext.default.isFormMarkersEnabled();
99
+ setErrorMessage(_ApplicationManager.default.isFormMarkersEnabled() ? result.message : '');
100
+ setHasError(!result.valid && _ApplicationManager.default.isFormMarkersEnabled());
101
+ valid.current = result.valid && _ApplicationManager.default.isFormMarkersEnabled();
95
102
 
96
- if (_ApplicationContext.default.isFormMarkersEnabled()) {
103
+ if (_ApplicationManager.default.isFormMarkersEnabled()) {
97
104
  props.form().setFieldError(config.id, typeof result.message === 'undefined' ? null : result.message);
98
105
  }
99
106
 
@@ -110,7 +117,7 @@ const BaseField = props => {
110
117
 
111
118
  _Observable.default.addSubscriptions(parsedConfig.eventHandlingConfig, props.handle, props.viewId);
112
119
 
113
- _Observable.default.addSystemSubscriptions(parsedConfig);
120
+ _Observable.default.addSystemSubscriptions(props.viewId, parsedConfig);
114
121
 
115
122
  setConfig(parsedConfig);
116
123
  setVisible(_Utils.default.evaluateBooleanExpression(parsedConfig.visible, parsedConfig.id, true));
@@ -128,12 +135,13 @@ const BaseField = props => {
128
135
  }
129
136
 
130
137
  if (!_Utils.default.isNull(props.config.value)) {
131
- let scriptValue = _ApplicationContext.default.isExpression(props.config.value) ? _DynamicJS.default.executeScript(props.config.id.replace('.', '_') + 'Value', props.config.value) : props.config.value;
138
+ let scriptValue = _ApplicationManager.default.isExpression(props.config.value) ? _DynamicJS.default.executeScript(props.config.id.replace('.', '_') + 'Value', props.config.value) : props.config.value;
132
139
 
133
140
  if (!_Utils.default.isNull(scriptValue)) {
134
141
  let val = scriptValue.instanceType === 'TypedValue' ? scriptValue.value : scriptValue;
135
142
  valueObject[valueProperty] = val;
136
143
  setValue(val);
144
+ valueRef.current = val;
137
145
  props.form().handleChange(config.id, val);
138
146
  }
139
147
  }
@@ -164,23 +172,26 @@ const BaseField = props => {
164
172
  }, []);
165
173
 
166
174
  const handleValueChange = newValue => {
167
- let valueChanged = newValue !== value;
175
+ let valueChanged = newValue !== valueRef.current;
168
176
 
169
- if (!_Utils.default.isNull(newValue) && !_Utils.default.isNull(value)) {
177
+ if (!_Utils.default.isNull(newValue) && !_Utils.default.isNull(valueRef.current)) {
170
178
  if (props.config.fieldType === 'SELECT' || props.config.fieldType === 'LOOKUP') {
171
- valueChanged = newValue.id !== value.id;
179
+ valueChanged = newValue.id !== valueRef.current.id;
180
+ } else if (props.config.fieldType === 'DATE' || props.config.fieldType === 'TIME') {
181
+ valueChanged = newValue !== valueRef.current;
172
182
  } else {
173
- valueChanged = JSON.stringify(value) !== JSON.stringify(newValue);
183
+ valueChanged = JSON.stringify(valueRef.current) !== JSON.stringify(newValue);
174
184
  }
175
185
  }
176
186
 
177
187
  if (valueChanged) {
178
188
  let id = props.config.dataBinding ? props.config.dataBinding : props.config.id;
179
189
 
180
- _ApplicationContext.default.enableFormMarkers(true);
190
+ _ApplicationManager.default.enableFormMarkers(true);
181
191
 
182
192
  if (props.config.fieldType === 'SELECT') {
183
193
  setValue(props.form().handleSelectItemChange(id, selectOptions, newValue));
194
+ valueRef.current = props.form().handleSelectItemChange(id, selectOptions, newValue);
184
195
 
185
196
  for (const selectOption of selectOptions) {
186
197
  if (selectOption.id === newValue) {
@@ -190,6 +201,7 @@ const BaseField = props => {
190
201
  }
191
202
  } else {
192
203
  setValue(newValue);
204
+ valueRef.current = newValue;
193
205
  props.form().handleChange(!_Utils.default.isNull(props.config.dataBinding) ? props.config.dataBinding : id, newValue);
194
206
  }
195
207
 
@@ -251,11 +263,11 @@ const BaseField = props => {
251
263
  return null;
252
264
  },
253
265
 
254
- set value(value) {
255
- handleValueChange(value);
266
+ set value(val) {
267
+ handleValueChange(val);
256
268
 
257
269
  if (!_Utils.default.isNull(props.valueChangeCallback)) {
258
- props.valueChangeCallback(value);
270
+ props.valueChangeCallback(val);
259
271
  }
260
272
  },
261
273
 
@@ -272,13 +284,13 @@ const BaseField = props => {
272
284
  },
273
285
 
274
286
  refresh() {
275
- if (config) {
276
- setVisible(_Utils.default.evaluateBooleanExpression(config.visible, config.id, true));
277
- setDisabled(_Utils.default.evaluateBooleanExpression(config.disabled, config.id));
278
- let requiredNewVal = !_Utils.default.isNull(config.validator) ? !_Utils.default.evaluateBooleanExpression(config.validator.nullable, config.id, true) : false;
279
- validateOnChange.current = required !== null && required !== requiredNewVal && loadingRef.current === false;
280
- setRequired(requiredNewVal);
281
- }
287
+ let parsedConfig = _Utils.default.parseConfig(props.config, props.viewId);
288
+
289
+ setVisible(_Utils.default.evaluateBooleanExpression(parsedConfig.visible, parsedConfig.id, true));
290
+ setDisabled(_Utils.default.evaluateBooleanExpression(parsedConfig.disabled, parsedConfig.id));
291
+ let requiredNewVal = !_Utils.default.isNull(parsedConfig.validator) ? !_Utils.default.evaluateBooleanExpression(parsedConfig.validator.nullable, parsedConfig.id, true) : false;
292
+ validateOnChange.current = required !== null && required !== requiredNewVal && loadingRef.current === false;
293
+ setRequired(requiredNewVal);
282
294
  },
283
295
 
284
296
  get required() {