UNPKG

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