UNPKG

17.2 kBJavaScriptView Raw
1(function (global, factory) {
2 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3 typeof define === 'function' && define.amd ? define(['exports'], factory) :
4 (global = global || self, factory(global.dataObjectConnect = {}));
5}(this, function (exports) { 'use strict';
6
7 function _classCallCheck(instance, Constructor) {
8 if (!(instance instanceof Constructor)) {
9 throw new TypeError("Cannot call a class as a function");
10 }
11 }
12
13 function _defineProperties(target, props) {
14 for (var i = 0; i < props.length; i++) {
15 var descriptor = props[i];
16 descriptor.enumerable = descriptor.enumerable || false;
17 descriptor.configurable = true;
18 if ("value" in descriptor) descriptor.writable = true;
19 Object.defineProperty(target, descriptor.key, descriptor);
20 }
21 }
22
23 function _createClass(Constructor, protoProps, staticProps) {
24 if (protoProps) _defineProperties(Constructor.prototype, protoProps);
25 if (staticProps) _defineProperties(Constructor, staticProps);
26 return Constructor;
27 }
28
29 function _extends() {
30 _extends = Object.assign || function (target) {
31 for (var i = 1; i < arguments.length; i++) {
32 var source = arguments[i];
33
34 for (var key in source) {
35 if (Object.prototype.hasOwnProperty.call(source, key)) {
36 target[key] = source[key];
37 }
38 }
39 }
40
41 return target;
42 };
43
44 return _extends.apply(this, arguments);
45 }
46
47 function _inherits(subClass, superClass) {
48 if (typeof superClass !== "function" && superClass !== null) {
49 throw new TypeError("Super expression must either be null or a function");
50 }
51
52 subClass.prototype = Object.create(superClass && superClass.prototype, {
53 constructor: {
54 value: subClass,
55 writable: true,
56 configurable: true
57 }
58 });
59 if (superClass) _setPrototypeOf(subClass, superClass);
60 }
61
62 function _getPrototypeOf(o) {
63 _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
64 return o.__proto__ || Object.getPrototypeOf(o);
65 };
66 return _getPrototypeOf(o);
67 }
68
69 function _setPrototypeOf(o, p) {
70 _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
71 o.__proto__ = p;
72 return o;
73 };
74
75 return _setPrototypeOf(o, p);
76 }
77
78 function _assertThisInitialized(self) {
79 if (self === void 0) {
80 throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
81 }
82
83 return self;
84 }
85
86 function _possibleConstructorReturn(self, call) {
87 if (call && (typeof call === "object" || typeof call === "function")) {
88 return call;
89 }
90
91 return _assertThisInitialized(self);
92 }
93
94 const { React } = window;
95 const PureComponent = React.PureComponent;
96 const Component = React.Component;
97 const useState = React.useState;
98 const useEffect = React.useEffect;
99
100 var events = ["AllowDeleteChanged", "AllowUpdateChanged", "AllowInsertChanged", "SaveFailed", "PartialDataLoaded", "DataLoadFailed", "FieldChanged", "RecordCreated", "RecordRefreshed", "RecordDeleting", "RecordDeleted", "AfterSave", "BeforeLoad", "BeforeSave", "CancelEdit", "CurrentIndexChanged", "DataLoaded", "DirtyChanged"];
101 function dataObjectConnect(dataObject) {
102 var currentRowOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
103 return function connect(WrappedComponent) {
104 function getDataObject() {
105 return typeof dataObject === "string" ? window[dataObject] : dataObject;
106 }
107
108 var connector =
109 /*#__PURE__*/
110 function (_React$Component) {
111 _inherits(connector, _React$Component);
112
113 function connector(props) {
114 var _this;
115
116 _classCallCheck(this, connector);
117
118 _this = _possibleConstructorReturn(this, _getPrototypeOf(connector).call(this, props));
119 var initialState = {};
120 var dataObject = getDataObject();
121
122 if (currentRowOnly) {
123 var _iteratorNormalCompletion = true;
124 var _didIteratorError = false;
125 var _iteratorError = undefined;
126
127 try {
128 for (var _iterator = dataObject.getFields()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
129 var field = _step.value;
130 initialState[field.name] = null;
131 }
132 } catch (err) {
133 _didIteratorError = true;
134 _iteratorError = err;
135 } finally {
136 try {
137 if (!_iteratorNormalCompletion && _iterator.return != null) {
138 _iterator.return();
139 }
140 } finally {
141 if (_didIteratorError) {
142 throw _iteratorError;
143 }
144 }
145 }
146 } else {
147 initialState.data = [];
148 }
149
150 _this.state = Object.assign({
151 canDelete: dataObject.isDeleteAllowed(),
152 canUpdate: dataObject.isUpdateAllowed(),
153 canInsert: dataObject.isInsertAllowed(),
154 currentIndex: dataObject.getCurrentIndex(),
155 isDirty: dataObject.isDirty(),
156 isDeleting: false,
157 isLoading: dataObject.isDataLoading() === true,
158 isSaving: false,
159 loadError: null,
160 saveFailed: false
161 }, initialState);
162 _this.handleAfterSave = _this.handleAfterSave.bind(_assertThisInitialized(_assertThisInitialized(_this)));
163 _this.handleAllowDeleteChanged = _this.handleAllowDeleteChanged.bind(_assertThisInitialized(_assertThisInitialized(_this)));
164 _this.handleAllowInsertChanged = _this.handleAllowInsertChanged.bind(_assertThisInitialized(_assertThisInitialized(_this)));
165 _this.handleAllowUpdateChanged = _this.handleAllowUpdateChanged.bind(_assertThisInitialized(_assertThisInitialized(_this)));
166 _this.handleBeforeLoad = _this.handleBeforeLoad.bind(_assertThisInitialized(_assertThisInitialized(_this)));
167 _this.handleBeforeSave = _this.handleBeforeSave.bind(_assertThisInitialized(_assertThisInitialized(_this)));
168 _this.handleCancelEdit = _this.handleCancelEdit.bind(_assertThisInitialized(_assertThisInitialized(_this)));
169 _this.handleCurrentIndexChanged = _this.handleCurrentIndexChanged.bind(_assertThisInitialized(_assertThisInitialized(_this)));
170 _this.handleDataLoaded = _this.handleDataLoaded.bind(_assertThisInitialized(_assertThisInitialized(_this)));
171 _this.handleDataLoadFailed = _this.handleDataLoadFailed.bind(_assertThisInitialized(_assertThisInitialized(_this)));
172 _this.handleDirtyChanged = _this.handleDirtyChanged.bind(_assertThisInitialized(_assertThisInitialized(_this)));
173 _this.handlePartialDataLoaded = _this.handlePartialDataLoaded.bind(_assertThisInitialized(_assertThisInitialized(_this)));
174 _this.handleRecordDeleting = _this.handleRecordDeleting.bind(_assertThisInitialized(_assertThisInitialized(_this)));
175 _this.handleRecordDeleted = _this.handleRecordDeleted.bind(_assertThisInitialized(_assertThisInitialized(_this)));
176 _this.handleSaveFailed = _this.handleSaveFailed.bind(_assertThisInitialized(_assertThisInitialized(_this)));
177 _this.setFieldValue = _this.setFieldValue.bind(_assertThisInitialized(_assertThisInitialized(_this)));
178 _this.setFieldValues = _this.setFieldValues.bind(_assertThisInitialized(_assertThisInitialized(_this)));
179 _this.updateData = _this.updateData.bind(_assertThisInitialized(_assertThisInitialized(_this)));
180 _this.handleFieldChanged = _this.updateData;
181 _this.handleRecordCreated = _this.updateData;
182 _this.handleRecordRefreshed = _this.updateData;
183 return _this;
184 }
185
186 _createClass(connector, [{
187 key: "componentDidMount",
188 value: function componentDidMount() {
189 var dataObject = getDataObject();
190
191 for (var _i = 0; _i < events.length; _i++) {
192 var event = events[_i];
193 dataObject.attachEvent("on" + event, this["handle" + event]);
194 }
195
196 this.updateData();
197 }
198 }, {
199 key: "componentWillUnmount",
200 value: function componentWillUnmount() {
201 var dataObject = getDataObject();
202
203 for (var _i2 = 0; _i2 < events.length; _i2++) {
204 var event = events[_i2];
205 dataObject.detachEvent("on" + event, this["handle" + event]);
206 }
207 }
208 }, {
209 key: "cancelEdit",
210 value: function cancelEdit() {
211 getDataObject().cancelEdit();
212 }
213 }, {
214 key: "deleteRow",
215 value: function deleteRow(idx) {
216 var dataObject = getDataObject();
217 return new Promise(function (resolve) {
218 var callback = function callback(error, data) {
219 resolve({
220 data: data,
221 error: error
222 });
223 };
224
225 if (currentRowOnly) {
226 dataObject.deleteCurrentRow(callback);
227 } else {
228 dataObject.deleteRow(idx, callback);
229 }
230 });
231 }
232 }, {
233 key: "endEdit",
234 value: function endEdit(callback) {
235 var dataObject = getDataObject();
236 return new Promise(function (resolve) {
237 dataObject.endEdit(function (error, data) {
238 "function" === typeof callback && callback(error, data);
239 resolve({
240 data: data,
241 error: error
242 });
243 });
244 });
245 }
246 }, {
247 key: "updateData",
248 value: function updateData() {
249 var otherState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
250 var dataObject = getDataObject();
251
252 if (currentRowOnly) {
253 var record = dataObject.currentRow();
254 this.setState(Object.assign(record, otherState));
255 } else {
256 var data = dataObject.getData();
257 var current = dataObject.currentRow();
258 this.setState(Object.assign({
259 current: current,
260 data: data
261 }, otherState));
262 }
263 }
264 }, {
265 key: "handleAllowDeleteChanged",
266 value: function handleAllowDeleteChanged(allowed) {
267 this.setState({
268 canDelete: allowed
269 });
270 }
271 }, {
272 key: "handleAllowUpdateChanged",
273 value: function handleAllowUpdateChanged(allowed) {
274 this.setState({
275 canUpdate: allowed
276 });
277 }
278 }, {
279 key: "handleAllowInsertChanged",
280 value: function handleAllowInsertChanged(allowed) {
281 this.setState({
282 canInsert: allowed
283 });
284 }
285 }, {
286 key: "handleSaveFailed",
287 value: function handleSaveFailed() {
288 this.setState({
289 saveFailed: true
290 });
291 }
292 }, {
293 key: "handlePartialDataLoaded",
294 value: function handlePartialDataLoaded() {
295 return null;
296 }
297 }, {
298 key: "handleDataLoadFailed",
299 value: function handleDataLoadFailed(loadError) {
300 if (loadError) {
301 this.setState({
302 isLoading: false,
303 loadError: loadError
304 });
305 } else {
306 this.setState({
307 isLoading: false
308 });
309 }
310 }
311 }, {
312 key: "handleRecordDeleting",
313 value: function handleRecordDeleting() {
314 this.setState({
315 isDeleting: true
316 });
317 }
318 }, {
319 key: "handleRecordDeleted",
320 value: function handleRecordDeleted() {
321 this.updateData({
322 isDeleting: false
323 });
324 }
325 }, {
326 key: "handleAfterSave",
327 value: function handleAfterSave() {
328 this.updateData({
329 isSaving: false
330 });
331 }
332 }, {
333 key: "handleBeforeLoad",
334 value: function handleBeforeLoad() {
335 this.setState({
336 isLoading: true
337 });
338 }
339 }, {
340 key: "handleBeforeSave",
341 value: function handleBeforeSave() {
342 this.setState({
343 isSaving: true,
344 saveFailed: false
345 });
346 }
347 }, {
348 key: "handleCancelEdit",
349 value: function handleCancelEdit() {
350 this.updateData({
351 isSaving: false
352 });
353 }
354 }, {
355 key: "handleCurrentIndexChanged",
356 value: function handleCurrentIndexChanged(currentIndex) {
357 if (currentRowOnly) {
358 this.updateData();
359 } else {
360 this.updateData();
361 this.setState({
362 currentIndex: currentIndex
363 });
364 }
365 }
366 }, {
367 key: "handleDataLoaded",
368 value: function handleDataLoaded() {
369 this.updateData({
370 isLoading: false,
371 isSaving: false,
372 isDeleting: false,
373 saveFailed: false
374 });
375 }
376 }, {
377 key: "handleDirtyChanged",
378 value: function handleDirtyChanged() {
379 this.setState({
380 isDirty: getDataObject().isDirty()
381 });
382 }
383 }, {
384 key: "refreshData",
385 value: function refreshData(callback) {
386 var dataObject = getDataObject();
387 return new Promise(function (resolve) {
388 dataObject.refreshDataSource(function (error, data) {
389 "function" === typeof callback && callback(error, data);
390 resolve({
391 data: data,
392 error: error
393 });
394 });
395 });
396 }
397 }, {
398 key: "refreshRow",
399 value: function refreshRow(callback) {
400 var dataObject = getDataObject();
401 return new Promise(function (resolve) {
402 dataObject.refreshCurrentRow(function (error, data) {
403 "function" === typeof callback && callback(error, data);
404 resolve({
405 data: data,
406 error: error
407 });
408 });
409 });
410 }
411 }, {
412 key: "setFieldValue",
413 value: function setFieldValue(name, value) {
414 getDataObject().currentRow(name, value);
415 this.updateData();
416 }
417 }, {
418 key: "setFieldValues",
419 value: function setFieldValues(fields) {
420 var dataObject = getDataObject();
421
422 for (var field in fields) {
423 if (fields.hasOwnProperty(field)) {
424 dataObject.currentRow(field, fields[field]);
425 }
426 }
427
428 this.updateData();
429 }
430 }, {
431 key: "setCurrentIndex",
432 value: function setCurrentIndex(idx) {
433 getDataObject().setCurrentIndex(idx);
434 }
435 }, {
436 key: "setParameter",
437 value: function setParameter() {
438 var _getDataObject;
439
440 (_getDataObject = getDataObject()).setParameter.apply(_getDataObject, arguments);
441 }
442 }, {
443 key: "render",
444 value: function render() {
445 return React.createElement(WrappedComponent, _extends({}, this.state, {
446 onCancelEdit: this.cancelEdit,
447 onCurrentIndexChange: this.setCurrentIndex,
448 onDeleteRow: this.deleteRow,
449 onEndEdit: this.endEdit,
450 onFieldChange: this.setFieldValue,
451 onFieldsChange: this.setFieldValues,
452 onRefreshData: this.refreshData,
453 onRefreshRow: this.refreshRow,
454 onSetParameter: this.setParameter
455 }, this.props));
456 }
457 }]);
458
459 return connector;
460 }(React.Component);
461
462 function getDisplayName() {
463 return WrappedComponent.displayName || WrappedComponent.name || "Component";
464 }
465
466 connector.displayName = typeof dataObject === "string" ? dataObject : dataObject.getDataSourceId();
467 connector.displayName += "(".concat(getDisplayName(), ")");
468 return connector;
469 };
470 }
471 var properties = ["onCancelEdit", "onCurrentIndexChange", "onEndEdit", "onDeleteRow", "onFieldChange", "onFieldsChange", "onRefreshData", "onRefreshRow", "onSetParameter", "canDelete", "canUpdate", "canInsert", "currentIndex", "isDirty", "isDeleting", "isLoading", "isSaving", "loadError", "saveFailed"];
472
473 exports.dataObjectConnect = dataObjectConnect;
474 exports.properties = properties;
475
476 Object.defineProperty(exports, '__esModule', { value: true });
477
478}));