UNPKG

43.9 kBJavaScriptView Raw
1(function (global, factory) {
2 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :
3 typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) :
4 (global = global || self, factory(global.ReactDataObjectConnect = {}, global.React));
5}(this, function (exports, React) { 'use strict';
6
7 var React__default = 'default' in React ? React['default'] : React;
8
9 function _extends() {
10 _extends = Object.assign || function (target) {
11 for (var i = 1; i < arguments.length; i++) {
12 var source = arguments[i];
13
14 for (var key in source) {
15 if (Object.prototype.hasOwnProperty.call(source, key)) {
16 target[key] = source[key];
17 }
18 }
19 }
20
21 return target;
22 };
23
24 return _extends.apply(this, arguments);
25 }
26
27 function _classCallCheck(instance, Constructor) {
28 if (!(instance instanceof Constructor)) {
29 throw new TypeError("Cannot call a class as a function");
30 }
31 }
32
33 function _defineProperties(target, props) {
34 for (var i = 0; i < props.length; i++) {
35 var descriptor = props[i];
36 descriptor.enumerable = descriptor.enumerable || false;
37 descriptor.configurable = true;
38 if ("value" in descriptor) descriptor.writable = true;
39 Object.defineProperty(target, descriptor.key, descriptor);
40 }
41 }
42
43 function _createClass(Constructor, protoProps, staticProps) {
44 if (protoProps) _defineProperties(Constructor.prototype, protoProps);
45 if (staticProps) _defineProperties(Constructor, staticProps);
46 return Constructor;
47 }
48
49 function _typeof2(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof2(obj); }
50
51 function _typeof(obj) {
52 if (typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol") {
53 _typeof = function _typeof(obj) {
54 return _typeof2(obj);
55 };
56 } else {
57 _typeof = function _typeof(obj) {
58 return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : _typeof2(obj);
59 };
60 }
61
62 return _typeof(obj);
63 }
64
65 function _assertThisInitialized(self) {
66 if (self === void 0) {
67 throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
68 }
69
70 return self;
71 }
72
73 function _possibleConstructorReturn(self, call) {
74 if (call && (_typeof(call) === "object" || typeof call === "function")) {
75 return call;
76 }
77
78 return _assertThisInitialized(self);
79 }
80
81 function _getPrototypeOf(o) {
82 _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
83 return o.__proto__ || Object.getPrototypeOf(o);
84 };
85 return _getPrototypeOf(o);
86 }
87
88 function _setPrototypeOf(o, p) {
89 _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
90 o.__proto__ = p;
91 return o;
92 };
93
94 return _setPrototypeOf(o, p);
95 }
96
97 function _inherits(subClass, superClass) {
98 if (typeof superClass !== "function" && superClass !== null) {
99 throw new TypeError("Super expression must either be null or a function");
100 }
101
102 subClass.prototype = Object.create(superClass && superClass.prototype, {
103 constructor: {
104 value: subClass,
105 writable: true,
106 configurable: true
107 }
108 });
109 if (superClass) _setPrototypeOf(subClass, superClass);
110 }
111
112 var events = ["AllowDeleteChanged", "AllowUpdateChanged", "AllowInsertChanged", "SaveFailed", "PartialDataLoaded", "DataLoadFailed", "FieldChanged", "RecordCreated", "RecordRefreshed", "RecordDeleting", "RecordDeleted", "AfterSave", "BeforeLoad", "BeforeSave", "CancelEdit", "CurrentIndexChanged", "DataLoaded", "DirtyChanged"];
113 function connect(dataObject) {
114 var currentRowOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
115 return function connect(WrappedComponent) {
116 function getDataObject() {
117 return typeof dataObject === "string" ? window[dataObject] : dataObject;
118 }
119
120 var connector =
121 /*#__PURE__*/
122 function (_React$Component) {
123 _inherits(connector, _React$Component);
124
125 function connector(props) {
126 var _this;
127
128 _classCallCheck(this, connector);
129
130 _this = _possibleConstructorReturn(this, _getPrototypeOf(connector).call(this, props));
131 var initialState = {};
132 var dataObject = getDataObject();
133
134 if (currentRowOnly) {
135 var _iteratorNormalCompletion = true;
136 var _didIteratorError = false;
137 var _iteratorError = undefined;
138
139 try {
140 for (var _iterator = dataObject.getFields()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
141 var field = _step.value;
142 initialState[field.name] = null;
143 }
144 } catch (err) {
145 _didIteratorError = true;
146 _iteratorError = err;
147 } finally {
148 try {
149 if (!_iteratorNormalCompletion && _iterator.return != null) {
150 _iterator.return();
151 }
152 } finally {
153 if (_didIteratorError) {
154 throw _iteratorError;
155 }
156 }
157 }
158 } else {
159 initialState.data = [];
160 }
161
162 _this.state = Object.assign({
163 canDelete: dataObject.isDeleteAllowed(),
164 canUpdate: dataObject.isUpdateAllowed(),
165 canInsert: dataObject.isInsertAllowed(),
166 currentIndex: dataObject.getCurrentIndex(),
167 isDirty: dataObject.isDirty(),
168 isDeleting: false,
169 isLoading: dataObject.isDataLoading() === true,
170 isSaving: false,
171 loadError: null,
172 saveFailed: false
173 }, initialState);
174 _this.handleAfterSave = _this.handleAfterSave.bind(_assertThisInitialized(_this));
175 _this.handleAllowDeleteChanged = _this.handleAllowDeleteChanged.bind(_assertThisInitialized(_this));
176 _this.handleAllowInsertChanged = _this.handleAllowInsertChanged.bind(_assertThisInitialized(_this));
177 _this.handleAllowUpdateChanged = _this.handleAllowUpdateChanged.bind(_assertThisInitialized(_this));
178 _this.handleBeforeLoad = _this.handleBeforeLoad.bind(_assertThisInitialized(_this));
179 _this.handleBeforeSave = _this.handleBeforeSave.bind(_assertThisInitialized(_this));
180 _this.handleCancelEdit = _this.handleCancelEdit.bind(_assertThisInitialized(_this));
181 _this.handleCurrentIndexChanged = _this.handleCurrentIndexChanged.bind(_assertThisInitialized(_this));
182 _this.handleDataLoaded = _this.handleDataLoaded.bind(_assertThisInitialized(_this));
183 _this.handleDataLoadFailed = _this.handleDataLoadFailed.bind(_assertThisInitialized(_this));
184 _this.handleDirtyChanged = _this.handleDirtyChanged.bind(_assertThisInitialized(_this));
185 _this.handlePartialDataLoaded = _this.handlePartialDataLoaded.bind(_assertThisInitialized(_this));
186 _this.handleRecordDeleting = _this.handleRecordDeleting.bind(_assertThisInitialized(_this));
187 _this.handleRecordDeleted = _this.handleRecordDeleted.bind(_assertThisInitialized(_this));
188 _this.handleSaveFailed = _this.handleSaveFailed.bind(_assertThisInitialized(_this));
189 _this.setFieldValue = _this.setFieldValue.bind(_assertThisInitialized(_this));
190 _this.setFieldValues = _this.setFieldValues.bind(_assertThisInitialized(_this));
191 _this.updateData = _this.updateData.bind(_assertThisInitialized(_this));
192 _this.handleFieldChanged = _this.updateData;
193 _this.handleRecordCreated = _this.updateData;
194 _this.handleRecordRefreshed = _this.updateData;
195 return _this;
196 }
197
198 _createClass(connector, [{
199 key: "componentDidMount",
200 value: function componentDidMount() {
201 var dataObject = getDataObject();
202
203 for (var _i = 0, _events = events; _i < _events.length; _i++) {
204 var event = _events[_i];
205 dataObject.attachEvent("on" + event, this["handle" + event]);
206 }
207
208 this.updateData();
209 }
210 }, {
211 key: "componentWillUnmount",
212 value: function componentWillUnmount() {
213 var dataObject = getDataObject();
214
215 for (var _i2 = 0, _events2 = events; _i2 < _events2.length; _i2++) {
216 var event = _events2[_i2];
217 dataObject.detachEvent("on" + event, this["handle" + event]);
218 }
219 }
220 }, {
221 key: "cancelEdit",
222 value: function cancelEdit() {
223 getDataObject().cancelEdit();
224 }
225 }, {
226 key: "deleteRow",
227 value: function deleteRow(idx) {
228 var dataObject = getDataObject();
229 return new Promise(function (resolve) {
230 var callback = function callback(error, data) {
231 resolve({
232 data: data,
233 error: error
234 });
235 };
236
237 if (currentRowOnly) {
238 dataObject.deleteCurrentRow(callback);
239 } else {
240 dataObject.deleteRow(idx, callback);
241 }
242 });
243 }
244 }, {
245 key: "endEdit",
246 value: function endEdit(callback) {
247 var dataObject = getDataObject();
248 return new Promise(function (resolve) {
249 dataObject.endEdit(function (error, data) {
250 "function" === typeof callback && callback(error, data);
251 resolve({
252 data: data,
253 error: error
254 });
255 });
256 });
257 }
258 }, {
259 key: "updateData",
260 value: function updateData() {
261 var otherState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
262 var dataObject = getDataObject();
263
264 if (currentRowOnly) {
265 var record = dataObject.currentRow();
266 this.setState(Object.assign(record, otherState));
267 } else {
268 var data = dataObject.getData();
269 var current = dataObject.currentRow();
270 this.setState(Object.assign({
271 current: current,
272 data: data
273 }, otherState));
274 }
275 }
276 }, {
277 key: "handleAllowDeleteChanged",
278 value: function handleAllowDeleteChanged(allowed) {
279 this.setState({
280 canDelete: allowed
281 });
282 }
283 }, {
284 key: "handleAllowUpdateChanged",
285 value: function handleAllowUpdateChanged(allowed) {
286 this.setState({
287 canUpdate: allowed
288 });
289 }
290 }, {
291 key: "handleAllowInsertChanged",
292 value: function handleAllowInsertChanged(allowed) {
293 this.setState({
294 canInsert: allowed
295 });
296 }
297 }, {
298 key: "handleSaveFailed",
299 value: function handleSaveFailed() {
300 this.setState({
301 saveFailed: true
302 });
303 }
304 }, {
305 key: "handlePartialDataLoaded",
306 value: function handlePartialDataLoaded() {
307 return null;
308 }
309 }, {
310 key: "handleDataLoadFailed",
311 value: function handleDataLoadFailed(loadError) {
312 if (loadError) {
313 this.setState({
314 isLoading: false,
315 loadError: loadError
316 });
317 } else {
318 this.setState({
319 isLoading: false
320 });
321 }
322 }
323 }, {
324 key: "handleRecordDeleting",
325 value: function handleRecordDeleting() {
326 this.setState({
327 isDeleting: true
328 });
329 }
330 }, {
331 key: "handleRecordDeleted",
332 value: function handleRecordDeleted() {
333 this.updateData({
334 isDeleting: false
335 });
336 }
337 }, {
338 key: "handleAfterSave",
339 value: function handleAfterSave() {
340 this.updateData({
341 isSaving: false
342 });
343 }
344 }, {
345 key: "handleBeforeLoad",
346 value: function handleBeforeLoad() {
347 this.setState({
348 isLoading: true
349 });
350 }
351 }, {
352 key: "handleBeforeSave",
353 value: function handleBeforeSave() {
354 this.setState({
355 isSaving: true,
356 saveFailed: false
357 });
358 }
359 }, {
360 key: "handleCancelEdit",
361 value: function handleCancelEdit() {
362 this.updateData({
363 isSaving: false
364 });
365 }
366 }, {
367 key: "handleCurrentIndexChanged",
368 value: function handleCurrentIndexChanged(currentIndex) {
369 if (currentRowOnly) {
370 this.updateData();
371 } else {
372 this.updateData();
373 this.setState({
374 currentIndex: currentIndex
375 });
376 }
377 }
378 }, {
379 key: "handleDataLoaded",
380 value: function handleDataLoaded() {
381 this.updateData({
382 isLoading: false,
383 isSaving: false,
384 isDeleting: false,
385 saveFailed: false
386 });
387 }
388 }, {
389 key: "handleDirtyChanged",
390 value: function handleDirtyChanged() {
391 this.setState({
392 isDirty: getDataObject().isDirty()
393 });
394 }
395 }, {
396 key: "refreshData",
397 value: function refreshData(callback) {
398 var dataObject = getDataObject();
399 return new Promise(function (resolve) {
400 dataObject.refreshDataSource(function (error, data) {
401 "function" === typeof callback && callback(error, data);
402 resolve({
403 data: data,
404 error: error
405 });
406 });
407 });
408 }
409 }, {
410 key: "refreshRow",
411 value: function refreshRow(callback) {
412 var dataObject = getDataObject();
413 return new Promise(function (resolve) {
414 dataObject.refreshCurrentRow(function (error, data) {
415 "function" === typeof callback && callback(error, data);
416 resolve({
417 data: data,
418 error: error
419 });
420 });
421 });
422 }
423 }, {
424 key: "setFieldValue",
425 value: function setFieldValue(name, value) {
426 getDataObject().currentRow(name, value);
427 this.updateData();
428 }
429 }, {
430 key: "setFieldValues",
431 value: function setFieldValues(fields) {
432 var dataObject = getDataObject();
433
434 for (var field in fields) {
435 if (Object.prototype.hasOwnProperty.call(fields, field)) {
436 dataObject.currentRow(field, fields[field]);
437 }
438 }
439
440 this.updateData();
441 }
442 }, {
443 key: "setCurrentIndex",
444 value: function setCurrentIndex(idx) {
445 getDataObject().setCurrentIndex(idx);
446 }
447 }, {
448 key: "setParameter",
449 value: function setParameter() {
450 var _getDataObject;
451
452 (_getDataObject = getDataObject()).setParameter.apply(_getDataObject, arguments);
453 }
454 }, {
455 key: "render",
456 value: function render() {
457 return React__default.createElement(WrappedComponent, _extends({}, this.state, {
458 onCancelEdit: this.cancelEdit,
459 onCurrentIndexChange: this.setCurrentIndex,
460 onDeleteRow: this.deleteRow,
461 onEndEdit: this.endEdit,
462 onFieldChange: this.setFieldValue,
463 onFieldsChange: this.setFieldValues,
464 onRefreshData: this.refreshData,
465 onRefreshRow: this.refreshRow,
466 onSetParameter: this.setParameter
467 }, this.props));
468 }
469 }]);
470
471 return connector;
472 }(React__default.Component);
473
474 function getDisplayName() {
475 return WrappedComponent.displayName || WrappedComponent.name || "Component";
476 }
477
478 connector.displayName = typeof dataObject === "string" ? dataObject : dataObject.getDataSourceId();
479 connector.displayName += "(".concat(getDisplayName(), ")");
480 return connector;
481 };
482 }
483 var properties = ["onCancelEdit", "onCurrentIndexChange", "onEndEdit", "onDeleteRow", "onFieldChange", "onFieldsChange", "onRefreshData", "onRefreshRow", "onSetParameter", "canDelete", "canUpdate", "canInsert", "currentIndex", "isDirty", "isDeleting", "isLoading", "isSaving", "loadError", "saveFailed"];
484 var connectRow = function connectRow(dataObject) {
485 return connect(dataObject, true);
486 };
487
488 function getData(dataObject, filter) {
489 var data = window.af.data;
490 var dataHandler = new data.DataProviderHandler({
491 dataSourceId: dataObject.getDataSourceId(),
492 timeout: 30000
493 });
494 var fields = dataObject.getFields();
495 return new Promise(function (resolve, reject) {
496 var filterData = {
497 filterString: "",
498 whereClause: typeof filter === "string" ? filter : "",
499 whereObject: _typeof(filter) === "object" ? filter : null
500 };
501 dataHandler.retrieve(filterData, function (error, data) {
502 if (error !== null) {
503 reject(error);
504 } else {
505 var records = [];
506 var _iteratorNormalCompletion = true;
507 var _didIteratorError = false;
508 var _iteratorError = undefined;
509
510 try {
511 for (var _iterator = data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
512 var item = _step.value;
513 var record = {};
514
515 for (var i = 0; i < item.length; i++) {
516 record[fields[i].name] = item[i];
517 }
518
519 records.push(record);
520 }
521 } catch (err) {
522 _didIteratorError = true;
523 _iteratorError = err;
524 } finally {
525 try {
526 if (!_iteratorNormalCompletion && _iterator.return != null) {
527 _iterator.return();
528 }
529 } finally {
530 if (_didIteratorError) {
531 throw _iteratorError;
532 }
533 }
534 }
535
536 resolve(records);
537 }
538 });
539 });
540 }
541
542 function _arrayWithHoles(arr) {
543 if (Array.isArray(arr)) return arr;
544 }
545
546 function _iterableToArrayLimit(arr, i) {
547 var _arr = [];
548 var _n = true;
549 var _d = false;
550 var _e = undefined;
551
552 try {
553 for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
554 _arr.push(_s.value);
555
556 if (i && _arr.length === i) break;
557 }
558 } catch (err) {
559 _d = true;
560 _e = err;
561 } finally {
562 try {
563 if (!_n && _i["return"] != null) _i["return"]();
564 } finally {
565 if (_d) throw _e;
566 }
567 }
568
569 return _arr;
570 }
571
572 function _nonIterableRest() {
573 throw new TypeError("Invalid attempt to destructure non-iterable instance");
574 }
575
576 function _slicedToArray(arr, i) {
577 return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();
578 }
579
580 function useCurrentIndex(dataObject) {
581 var _useState = React.useState(dataObject.getCurrentIndex()),
582 _useState2 = _slicedToArray(_useState, 2),
583 index = _useState2[0],
584 setIndex = _useState2[1];
585
586 React.useEffect(function () {
587 dataObject.attachEvent("onCurrentIndexChanged", setIndex);
588 setIndex(dataObject.getCurrentIndex());
589 return function () {
590 return dataObject.detachEvent("onCurrentIndexChanged", setIndex);
591 };
592 }, [dataObject]);
593 return index;
594 }
595
596 function _arrayWithoutHoles(arr) {
597 if (Array.isArray(arr)) {
598 for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {
599 arr2[i] = arr[i];
600 }
601
602 return arr2;
603 }
604 }
605
606 function _iterableToArray(iter) {
607 if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
608 }
609
610 function _nonIterableSpread() {
611 throw new TypeError("Invalid attempt to spread non-iterable instance");
612 }
613
614 function _toConsumableArray(arr) {
615 return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
616 }
617
618 // A resusable array containing all data object events that should trigger an update
619 var dataUpdateEvents = ["onFieldChanged", "onRecordCreated", "onRecordDeleted", "onRecordRefreshed", "onAfterSave", "onCancelEdit", "onDataLoaded", "onPartialDataLoaded"];
620
621 function useCurrentRow(dataObject) {
622 var _useState = React.useState(dataObject.currentRow() || {}),
623 _useState2 = _slicedToArray(_useState, 2),
624 record = _useState2[0],
625 setRecord = _useState2[1];
626
627 var updateRecord = React.useCallback(function () {
628 return setRecord(dataObject.currentRow());
629 }, [dataObject]);
630 React.useEffect(function () {
631 var recordUpdateEvents = ["onCurrentIndexChanged"].concat(_toConsumableArray(dataUpdateEvents));
632 recordUpdateEvents.forEach(function (event) {
633 return dataObject.attachEvent(event, updateRecord);
634 });
635 updateRecord();
636 return function () {
637 return recordUpdateEvents.forEach(function (event) {
638 return dataObject.detachEvent(event, updateRecord);
639 });
640 };
641 }, [dataObject, updateRecord]);
642 return record;
643 }
644
645 function useData(dataObject) {
646 var _useState = React.useState(dataObject.getData()),
647 _useState2 = _slicedToArray(_useState, 2),
648 data = _useState2[0],
649 setData = _useState2[1];
650
651 var updateData = React.useCallback(function () {
652 var data = dataObject.getData(); // If current row is dirty, getData will still return the saved record
653
654 var idx = dataObject.getCurrentIndex();
655
656 if (idx >= 0) {
657 data[idx] = dataObject.currentRow();
658 }
659
660 setData(data);
661 }, [dataObject]);
662 React.useEffect(function () {
663 dataUpdateEvents.forEach(function (event) {
664 return dataObject.attachEvent(event, updateData);
665 });
666 updateData();
667 return function () {
668 return dataUpdateEvents.forEach(function (event) {
669 return dataObject.detachEvent(event, updateData);
670 });
671 };
672 }, [dataObject, updateData]);
673 return data;
674 }
675
676 function useDataLength(dataObject) {
677 var _useState = React.useState(function () {
678 return dataObject.getDataLength();
679 }),
680 _useState2 = _slicedToArray(_useState, 2),
681 length = _useState2[0],
682 setLength = _useState2[1];
683
684 React.useEffect(function () {
685 function update() {
686 setLength(dataObject.getDataLength());
687 }
688
689 dataObject.attachEvent("onRecordCreated", update);
690 dataObject.attachEvent("onRecordDeleted", update);
691 dataObject.attachEvent("onDataLoaded", update);
692 dataObject.attachEvent("onPartialDataLoaded", update);
693 update();
694 return function () {
695 dataObject.detachEvent("onRecordCreated", update);
696 dataObject.detachEvent("onRecordDeleted", update);
697 dataObject.detachEvent("onDataLoaded", update);
698 dataObject.detachEvent("onPartialDataLoaded", update);
699 };
700 }, [dataObject]);
701 return length;
702 }
703
704 var isArray = Array.isArray;
705 var keyList = Object.keys;
706 var hasProp = Object.prototype.hasOwnProperty;
707
708 var fastDeepEqual = function equal(a, b) {
709 if (a === b) return true;
710
711 if (a && b && typeof a == 'object' && typeof b == 'object') {
712 var arrA = isArray(a)
713 , arrB = isArray(b)
714 , i
715 , length
716 , key;
717
718 if (arrA && arrB) {
719 length = a.length;
720 if (length != b.length) return false;
721 for (i = length; i-- !== 0;)
722 if (!equal(a[i], b[i])) return false;
723 return true;
724 }
725
726 if (arrA != arrB) return false;
727
728 var dateA = a instanceof Date
729 , dateB = b instanceof Date;
730 if (dateA != dateB) return false;
731 if (dateA && dateB) return a.getTime() == b.getTime();
732
733 var regexpA = a instanceof RegExp
734 , regexpB = b instanceof RegExp;
735 if (regexpA != regexpB) return false;
736 if (regexpA && regexpB) return a.toString() == b.toString();
737
738 var keys = keyList(a);
739 length = keys.length;
740
741 if (length !== keyList(b).length)
742 return false;
743
744 for (i = length; i-- !== 0;)
745 if (!hasProp.call(b, keys[i])) return false;
746
747 for (i = length; i-- !== 0;) {
748 key = keys[i];
749 if (!equal(a[key], b[key])) return false;
750 }
751
752 return true;
753 }
754
755 return a!==a && b!==b;
756 };
757
758 function useFilter(dataObject, filter) {
759 var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "filterString";
760 React.useEffect(function () {
761 var current = dataObject.getParameter(type);
762
763 if (filter !== false) {
764 if (!fastDeepEqual(current, filter) || !dataObject.isDataLoaded() && !dataObject.isDataLoading()) {
765 dataObject.setParameter(type, filter);
766 dataObject.refreshDataSource();
767 }
768 }
769 }, [dataObject, filter, type]);
770 }
771
772 function useDataWithFilter(dataObject, filter) {
773 var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "filterString";
774 var data = useData(dataObject);
775 useFilter(dataObject, filter, type);
776 return data;
777 }
778
779 function useDirty(dataObject) {
780 var _useState = React.useState(dataObject.isDirty() || false),
781 _useState2 = _slicedToArray(_useState, 2),
782 isDirty = _useState2[0],
783 setDirty = _useState2[1];
784
785 React.useEffect(function () {
786 dataObject.attachEvent("onDirtyChanged", setDirty);
787 setDirty(dataObject.isDirty());
788 return function () {
789 dataObject.detachEvent("onDirtyChanged", setDirty);
790 };
791 }, [dataObject]);
792 return isDirty;
793 }
794
795 function useError(dataObject) {
796 var _useState = React.useState(null),
797 _useState2 = _slicedToArray(_useState, 2),
798 loadError = _useState2[0],
799 setError = _useState2[1];
800
801 React.useEffect(function () {
802 dataObject.attachEvent("onDataLoadFailed", setError);
803 return function () {
804 dataObject.detachEvent("onDataLoadFailed", setError);
805 };
806 }, [dataObject]);
807 return loadError;
808 }
809
810 function useFetchData(dataObject, filter) {
811 var _useState = React.useState([]),
812 _useState2 = _slicedToArray(_useState, 2),
813 data = _useState2[0],
814 setData = _useState2[1];
815
816 var _useState3 = React.useState(false),
817 _useState4 = _slicedToArray(_useState3, 2),
818 shouldUpdate = _useState4[0],
819 setShouldUpdate = _useState4[1];
820
821 var _useState5 = React.useState(filter !== false),
822 _useState6 = _slicedToArray(_useState5, 2),
823 isLoading = _useState6[0],
824 setIsLoading = _useState6[1];
825
826 var refresh = React.useCallback(function () {
827 setShouldUpdate(function (shouldUpdate) {
828 return !shouldUpdate;
829 });
830 }, []);
831 var refreshRows = React.useCallback(function (filter) {
832 var idField = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "PrimKey";
833 getData(dataObject, filter).then(function (records) {
834 var newData = _toConsumableArray(data);
835
836 var _iteratorNormalCompletion = true;
837 var _didIteratorError = false;
838 var _iteratorError = undefined;
839
840 try {
841 for (var _iterator = records[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
842 var record = _step.value;
843
844 for (var i = 0; i < newData.length; i++) {
845 var current = newData[i];
846
847 if (current[idField] === record[idField]) {
848 newData[i] = record;
849 }
850 }
851 }
852 } catch (err) {
853 _didIteratorError = true;
854 _iteratorError = err;
855 } finally {
856 try {
857 if (!_iteratorNormalCompletion && _iterator.return != null) {
858 _iterator.return();
859 }
860 } finally {
861 if (_didIteratorError) {
862 throw _iteratorError;
863 }
864 }
865 }
866
867 setData(newData);
868 });
869 }, [dataObject, data]);
870 React.useEffect(function () {
871 var isCancelled = false;
872
873 if (filter !== false) {
874 setIsLoading(true);
875 getData(dataObject, filter).then(function (data) {
876 if (!isCancelled) {
877 if (data.length > 0) {
878 setData(data);
879 } else {
880 setData([]);
881 }
882
883 setIsLoading(false);
884 }
885 });
886 }
887
888 return function () {
889 return isCancelled = true;
890 };
891 }, [dataObject, filter, shouldUpdate]);
892 return {
893 data: data,
894 refresh: refresh,
895 refreshRows: refreshRows,
896 isLoading: isLoading
897 };
898 }
899
900 function useFetchRecord(dataObject, filter) {
901 var _useFetchData = useFetchData(dataObject, filter),
902 isLoading = _useFetchData.isLoading,
903 data = _useFetchData.data,
904 refresh = _useFetchData.refresh;
905
906 var record = data.length > 0 ? data[0] : {};
907 return {
908 record: record,
909 refresh: refresh,
910 isLoading: isLoading
911 };
912 }
913
914 function useLoading(dataObject) {
915 var _useState = React.useState(dataObject.isDataLoading()),
916 _useState2 = _slicedToArray(_useState, 2),
917 isLoading = _useState2[0],
918 setLoading = _useState2[1];
919
920 function setIsLoading() {
921 setLoading(true);
922 }
923
924 function setIsNotLoading() {
925 setLoading(false);
926 }
927
928 React.useEffect(function () {
929 dataObject.attachEvent("onBeforeLoad", setIsLoading);
930 dataObject.attachEvent("onDataLoaded", setIsNotLoading);
931 dataObject.attachEvent("onDataLoadFailed", setIsNotLoading);
932 dataObject.attachEvent("onPartialDataLoaded", setIsNotLoading);
933 setLoading(dataObject.isDataLoading());
934 return function () {
935 dataObject.detachEvent("onBeforeLoad", setIsLoading);
936 dataObject.detachEvent("onDataLoaded", setIsNotLoading);
937 dataObject.detachEvent("onDataLoadFailed", setIsNotLoading);
938 dataObject.detachEvent("onPartialDataLoaded", setIsNotLoading);
939 };
940 }, [dataObject]);
941 return isLoading;
942 }
943
944 function getCurrentData(dataObject) {
945 return dataObject.getPagingComponent().getCurrentData() || [];
946 }
947
948 function usePagedData(dataObject) {
949 var _useState = React.useState(function () {
950 return getCurrentData(dataObject);
951 }),
952 _useState2 = _slicedToArray(_useState, 2),
953 currentData = _useState2[0],
954 setCurrentData = _useState2[1];
955
956 React.useEffect(function () {
957 function updateData() {
958 setCurrentData(_toConsumableArray(getCurrentData(dataObject)));
959 }
960
961 dataUpdateEvents.forEach(function (event) {
962 return dataObject.attachEvent(event, updateData);
963 });
964 var pagingComponent = dataObject.getPagingComponent();
965 pagingComponent.attach("on", "pageChange", updateData);
966 pagingComponent.attach("on", "pageRefresh", updateData);
967 updateData();
968 return function () {
969 dataUpdateEvents.forEach(function (event) {
970 return dataObject.detachEvent(event, updateData);
971 });
972 pagingComponent.detach("on", "pageChange", updateData);
973 pagingComponent.detach("on", "pageRefresh", updateData);
974 };
975 }, [dataObject]);
976 return currentData;
977 }
978
979 function usePagedDataWithFilter(dataObject, filter) {
980 var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "filterString";
981 var data = usePagedData(dataObject);
982 useFilter(dataObject, filter, type);
983 return data;
984 }
985
986 function usePaging(dataObject) {
987 var _useState = React.useState(function () {
988 return dataObject.getPagingComponent().getCurrentPage();
989 }),
990 _useState2 = _slicedToArray(_useState, 2),
991 page = _useState2[0],
992 setPage = _useState2[1];
993
994 var _useState3 = React.useState(function () {
995 return dataObject.getPagingComponent().getPageCount();
996 }),
997 _useState4 = _slicedToArray(_useState3, 2),
998 pageCount = _useState4[0],
999 setPageCount = _useState4[1];
1000
1001 React.useEffect(function () {
1002 var paging = dataObject.getPagingComponent();
1003
1004 var updateCurrentPage = function updateCurrentPage() {
1005 return setPage(paging.getCurrentPage());
1006 };
1007
1008 var updatePageCount = function updatePageCount() {
1009 return setPageCount(paging.getPageCount());
1010 };
1011
1012 paging.attach("on", "pageChange", updateCurrentPage);
1013 paging.attach("on", "pageCountChange", updatePageCount);
1014 return function () {
1015 paging.detach("on", "pageChange", updateCurrentPage);
1016 paging.detach("on", "pageCountChange", updatePageCount);
1017 };
1018 }, [dataObject]);
1019 return {
1020 page: page,
1021 pageCount: pageCount,
1022 changePage: dataObject.getPagingComponent().changePage
1023 };
1024 }
1025
1026 function useParameter(dataObject, parameter) {
1027 var _useState = React.useState(function () {
1028 return dataObject.getParameter(parameter);
1029 }),
1030 _useState2 = _slicedToArray(_useState, 2),
1031 value = _useState2[0],
1032 setValue = _useState2[1];
1033
1034 React.useEffect(function () {
1035 function update() {
1036 setValue(dataObject.getParameter(parameter));
1037 }
1038
1039 dataObject.attachEvent("onParameterUpdated", update);
1040 update();
1041 return function () {
1042 dataObject.detachEvent("onParameterUpdated", update);
1043 };
1044 }, [dataObject, parameter]);
1045 return value;
1046 }
1047
1048 function usePermissions(dataObject) {
1049 var _useState = React.useState(dataObject.isDeleteAllowed()),
1050 _useState2 = _slicedToArray(_useState, 2),
1051 allowDelete = _useState2[0],
1052 setAllowDelete = _useState2[1];
1053
1054 var _useState3 = React.useState(dataObject.isInsertAllowed()),
1055 _useState4 = _slicedToArray(_useState3, 2),
1056 allowInsert = _useState4[0],
1057 setAllowInsert = _useState4[1];
1058
1059 var _useState5 = React.useState(dataObject.isUpdateAllowed()),
1060 _useState6 = _slicedToArray(_useState5, 2),
1061 allowUpdate = _useState6[0],
1062 setAllowUpdate = _useState6[1];
1063
1064 React.useEffect(function () {
1065 var updateAllowDelete = function updateAllowDelete() {
1066 return setAllowDelete(dataObject.isDeleteAllowed());
1067 };
1068
1069 var updateAllowInsert = function updateAllowInsert() {
1070 return setAllowInsert(dataObject.isInsertAllowed());
1071 };
1072
1073 var updateAllowUpdate = function updateAllowUpdate() {
1074 return setAllowUpdate(dataObject.isUpdateAllowed());
1075 };
1076
1077 dataObject.attachEvent("onAllowDeleteChanged", updateAllowDelete);
1078 dataObject.attachEvent("onAllowInsertChanged", updateAllowInsert);
1079 dataObject.attachEvent("onAllowUpdateChanged", updateAllowUpdate);
1080 updateAllowDelete();
1081 updateAllowInsert();
1082 updateAllowUpdate();
1083 return function () {
1084 dataObject.detachEvent("onAllowDeleteChanged", updateAllowDelete);
1085 dataObject.detachEvent("onAllowInsertChanged", updateAllowInsert);
1086 dataObject.detachEvent("onAllowUpdateChanged", updateAllowUpdate);
1087 };
1088 }, [dataObject]);
1089 return {
1090 allowDelete: allowDelete,
1091 allowInsert: allowInsert,
1092 allowUpdate: allowUpdate
1093 };
1094 }
1095
1096 function useDeepCompareMemoize(value) {
1097 var ref = React.useRef();
1098
1099 if (!fastDeepEqual(value, ref.current)) {
1100 ref.current = value;
1101 }
1102
1103 return ref.current;
1104 }
1105
1106 function useDeepCompareEffect(callback, dependencies) {
1107 React.useEffect(callback, useDeepCompareMemoize(dependencies));
1108 }
1109 function useProcedure(procedure, params) {
1110 var _useState = React.useState([]),
1111 _useState2 = _slicedToArray(_useState, 2),
1112 data = _useState2[0],
1113 setData = _useState2[1];
1114
1115 var _useState3 = React.useState(null),
1116 _useState4 = _slicedToArray(_useState3, 2),
1117 error = _useState4[0],
1118 setError = _useState4[1];
1119
1120 var _useState5 = React.useState(false),
1121 _useState6 = _slicedToArray(_useState5, 2),
1122 isExecuting = _useState6[0],
1123 setIsExecuting = _useState6[1];
1124
1125 useDeepCompareEffect(function () {
1126 var isAborted = false;
1127
1128 if (params && procedure) {
1129 setIsExecuting(true);
1130 procedure.execute(params, function (err, data) {
1131 if (!isAborted) {
1132 setIsExecuting(false);
1133
1134 if (err) {
1135 setError(err);
1136 setData([]);
1137 } else {
1138 setData(data);
1139 setError(null);
1140 }
1141 }
1142 });
1143 }
1144
1145 return function () {
1146 isAborted = true;
1147 }; // eslint-disable-next-line react-hooks/exhaustive-deps
1148 }, [procedure, params]);
1149 return {
1150 data: data,
1151 error: error,
1152 isExecuting: isExecuting
1153 };
1154 }
1155
1156 function useStatus(dataObject) {
1157 var _useState = React.useState(false),
1158 _useState2 = _slicedToArray(_useState, 2),
1159 isSaving = _useState2[0],
1160 setIsSaving = _useState2[1];
1161
1162 var _useState3 = React.useState(false),
1163 _useState4 = _slicedToArray(_useState3, 2),
1164 isDeleting = _useState4[0],
1165 setIsDeleting = _useState4[1];
1166
1167 function setSaving() {
1168 setIsSaving(true);
1169 }
1170
1171 function setNotSaving() {
1172 setIsSaving(false);
1173 }
1174
1175 function setDeleting() {
1176 setIsDeleting(true);
1177 }
1178
1179 function setNotDeleting() {
1180 setIsDeleting(false);
1181 }
1182
1183 React.useEffect(function () {
1184 dataObject.attachEvent("onBeforeSave", setSaving);
1185 dataObject.attachEvent("onAfterSave", setNotSaving);
1186 dataObject.attachEvent("onSaveFailed", setNotSaving);
1187 dataObject.attachEvent("onRecordDeleting", setDeleting);
1188 dataObject.attachEvent("onRecordDeleted", setNotDeleting);
1189 return function () {
1190 dataObject.detachEvent("onBeforeSave", setSaving);
1191 dataObject.detachEvent("onAfterSave", setNotSaving);
1192 dataObject.detachEvent("onSaveFailed", setNotSaving);
1193 dataObject.detachEvent("onRecordDeleting", setDeleting);
1194 dataObject.detachEvent("onRecordDeleted", setNotDeleting);
1195 };
1196 }, [dataObject]);
1197 return {
1198 isDeleting: isDeleting,
1199 isSaving: isSaving
1200 };
1201 }
1202
1203 var SimpleDataHandler =
1204 /*#__PURE__*/
1205 function () {
1206 function SimpleDataHandler(dataObject) {
1207 _classCallCheck(this, SimpleDataHandler);
1208
1209 var data = window.af.data;
1210 this.dataObject = dataObject;
1211 this.fields = dataObject.getFields();
1212 this.dataHandler = new data.DataProviderHandler({
1213 dataSourceId: dataObject.getDataSourceId(),
1214 timeout: 30000
1215 });
1216 }
1217
1218 _createClass(SimpleDataHandler, [{
1219 key: "arrayRecordToObject",
1220 value: function arrayRecordToObject(record) {
1221 var obj = {};
1222
1223 for (var i = 0; i < record.length; i++) {
1224 obj[this.fields[i].name] = record[i];
1225 }
1226
1227 return obj;
1228 }
1229 }, {
1230 key: "createRecord",
1231 value: function createRecord(record) {
1232 var _this = this;
1233
1234 return new Promise(function (resolve, reject) {
1235 _this.dataHandler.create(record, function (error, data) {
1236 if (error !== null) {
1237 reject(error);
1238 } else {
1239 resolve(_this.arrayRecordToObject(data));
1240 }
1241 });
1242 });
1243 }
1244 }, {
1245 key: "deleteRecord",
1246 value: function deleteRecord(filter) {
1247 var _this2 = this;
1248
1249 return new Promise(function (resolve, reject) {
1250 _this2.dataHandler.destroy(filter, function (error, data) {
1251 if (error !== null) {
1252 reject(error);
1253 } else {
1254 resolve(_this2.arrayRecordToObject(data));
1255 }
1256 });
1257 });
1258 }
1259 }, {
1260 key: "getData",
1261 value: function getData(filter) {
1262 var _this3 = this;
1263
1264 return new Promise(function (resolve, reject) {
1265 var filterData = {
1266 filterString: "",
1267 whereClause: typeof filter === "string" ? filter : "",
1268 whereObject: _typeof(filter) === "object" ? filter : null
1269 };
1270
1271 _this3.dataHandler.retrieve(filterData, function (error, data) {
1272 if (error !== null) {
1273 reject(error);
1274 } else {
1275 var records = [];
1276 var _iteratorNormalCompletion = true;
1277 var _didIteratorError = false;
1278 var _iteratorError = undefined;
1279
1280 try {
1281 for (var _iterator = data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
1282 var item = _step.value;
1283 records.push(_this3.arrayRecordToObject(item));
1284 }
1285 } catch (err) {
1286 _didIteratorError = true;
1287 _iteratorError = err;
1288 } finally {
1289 try {
1290 if (!_iteratorNormalCompletion && _iterator.return != null) {
1291 _iterator.return();
1292 }
1293 } finally {
1294 if (_didIteratorError) {
1295 throw _iteratorError;
1296 }
1297 }
1298 }
1299
1300 resolve(records);
1301 }
1302 });
1303 });
1304 }
1305 }, {
1306 key: "updateRecord",
1307 value: function updateRecord(record) {
1308 var _this4 = this;
1309
1310 return new Promise(function (resolve, reject) {
1311 _this4.dataHandler.update(record, function (error, data) {
1312 if (error !== null) {
1313 reject(error);
1314 } else {
1315 resolve(_this4.arrayRecordToObject(data));
1316 }
1317 });
1318 });
1319 }
1320 }]);
1321
1322 return SimpleDataHandler;
1323 }();
1324
1325 exports.SimpleDataHandler = SimpleDataHandler;
1326 exports.connect = connect;
1327 exports.connectRow = connectRow;
1328 exports.connectedProperties = properties;
1329 exports.getData = getData;
1330 exports.useCurrentIndex = useCurrentIndex;
1331 exports.useCurrentRow = useCurrentRow;
1332 exports.useData = useData;
1333 exports.useDataLength = useDataLength;
1334 exports.useDataWithFilter = useDataWithFilter;
1335 exports.useDirty = useDirty;
1336 exports.useError = useError;
1337 exports.useFetchData = useFetchData;
1338 exports.useFetchRecord = useFetchRecord;
1339 exports.useFilter = useFilter;
1340 exports.useLoading = useLoading;
1341 exports.usePagedData = usePagedData;
1342 exports.usePagedDataWithFilter = usePagedDataWithFilter;
1343 exports.usePaging = usePaging;
1344 exports.useParameter = useParameter;
1345 exports.usePermissions = usePermissions;
1346 exports.useProcedure = useProcedure;
1347 exports.useStatus = useStatus;
1348
1349 Object.defineProperty(exports, '__esModule', { value: true });
1350
1351}));