UNPKG

20.3 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _isNil2 = require('ramda/src/isNil');
8
9var _isNil3 = _interopRequireDefault(_isNil2);
10
11var _filter2 = require('ramda/src/filter');
12
13var _filter3 = _interopRequireDefault(_filter2);
14
15var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
16
17var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
18
19var _templateObject = _taggedTemplateLiteral(['\n text-align: center;\n'], ['\n text-align: center;\n']),
20 _templateObject2 = _taggedTemplateLiteral(['\n padding-left: 2em;\n padding-right: 2em;\n position: relative;\n'], ['\n padding-left: 2em;\n padding-right: 2em;\n position: relative;\n']),
21 _templateObject3 = _taggedTemplateLiteral(['\n margin-top: 5px;\n margin-bottom: 3px;\n'], ['\n margin-top: 5px;\n margin-bottom: 3px;\n']);
22
23var _react = require('react');
24
25var _react2 = _interopRequireDefault(_react);
26
27var _Grid = require('@integec/grid-tools/lib/Grid');
28
29var _Grid2 = _interopRequireDefault(_Grid);
30
31var _flexRenderer = require('@integec/grid-tools/lib/flexRenderer');
32
33var _flexRenderer2 = _interopRequireDefault(_flexRenderer);
34
35var _editEngine = require('@integec/grid-tools/lib/editEngine');
36
37var freeEditEngine = _interopRequireWildcard(_editEngine);
38
39var _styledComponents = require('styled-components');
40
41var _styledComponents2 = _interopRequireDefault(_styledComponents);
42
43var _semanticUiReact = require('semantic-ui-react');
44
45var _propTypes = require('prop-types');
46
47var _propTypes2 = _interopRequireDefault(_propTypes);
48
49var _Overlay = require('./Overlay');
50
51var _Overlay2 = _interopRequireDefault(_Overlay);
52
53var _modal = require('../modal');
54
55var _gridTools = require('../grid-tools');
56
57function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
58
59function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
60
61function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
62
63function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
64
65function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
66
67function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
68
69function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
70
71function _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
72// import { Grid, flexGridRenderer, freeEditEngine } from '@integec/grid-tools'
73
74
75// import { Prompt } from 'react-router'
76
77var Title = _styledComponents2.default.h3(_templateObject);
78var Container = _styledComponents2.default.div(_templateObject2);
79var Toolbar = _styledComponents2.default.div(_templateObject3);
80
81var createInitialEditInfo = function createInitialEditInfo(props) {
82 return props && props.gridProps && props.gridProps.editMode === 'cell' ? freeEditEngine.generateInitialEditInfo() : undefined;
83};
84
85var Screen = function (_React$Component) {
86 _inherits(Screen, _React$Component);
87
88 function Screen() {
89 var _ref2;
90
91 var _temp, _this, _ret;
92
93 _classCallCheck(this, Screen);
94
95 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
96 args[_key] = arguments[_key];
97 }
98
99 return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref2 = Screen.__proto__ || Object.getPrototypeOf(Screen)).call.apply(_ref2, [this].concat(args))), _this), _this.state = {
100 data: [],
101 loading: false,
102 saving: false,
103 sorting: false,
104 showAdd: false,
105 fuzzyFilter: '',
106 criteria: _this.props.initialCriteria || {},
107 promptInfo: null,
108 transLog: null,
109 editInfo: createInitialEditInfo(_this.props)
110 }, _this.onError = function (error) {
111 return _this.setState({
112 loading: false,
113 saving: false,
114 promptInfo: error,
115 sorting: false
116 });
117 }, _this.onFuzzyFilterChange = function (fuzzyFilter) {
118 return _this.setState({ fuzzyFilter: fuzzyFilter });
119 }, _this.onSave = function (e) {
120 var _this$props = _this.props,
121 getModifyTask = _this$props.getModifyTask,
122 apiTargetInfo = _this$props.apiTargetInfo,
123 saveAllGridData = _this$props.saveAllGridData;
124 var editInfo = _this.state.editInfo;
125
126 console.log('saving ', _this.state.editInfo);
127 var data = saveAllGridData ? { data: _this.state.data, editInfo: editInfo } : [].concat(_toConsumableArray(editInfo.updated), _toConsumableArray(editInfo.added));
128
129 _this.setState(function (_) {
130 return { saving: true };
131 }, function (_) {
132 return getModifyTask({
133 apiTargetInfo: apiTargetInfo,
134 criteria: _this.state.criteria,
135 data: data
136 }).fork(_this.onError,
137 /* retrieve on Success */
138 _this.onRetrieve);
139 });
140 }, _this.onEdit = function (_ref3) {
141 var originalRow = _ref3.originalRow,
142 editedRow = _ref3.editedRow;
143 var _this$props2 = _this.props,
144 getModifyTask = _this$props2.getModifyTask,
145 getInsertTask = _this$props2.getInsertTask,
146 apiTargetInfo = _this$props2.apiTargetInfo;
147
148
149 if (originalRow) {
150 console.log('adding row', editedRow);
151 } else {
152 console.log('updating row', originalRow, editedRow);
153 }
154
155 var getTask = originalRow === undefined ? getInsertTask || getModifyTask : getModifyTask;
156
157 _this.setState(function (_) {
158 return { saving: true };
159 }, function (_) {
160 return getTask({
161 apiTargetInfo: apiTargetInfo,
162 criteria: _this.state.criteria,
163 data: [editedRow]
164 }).fork(_this.onError,
165 /* retrieve on Success */
166 _this.onRetrieve);
167 });
168 }, _this.onAddRowClicked = function (_) {
169 return _this.setState({ showAdd: true, addWithSelected: false });
170 }, _this.onCopyRowClicked = function (_) {
171 return _this.setState({ showAdd: true, addWithSelected: true });
172 }, _this.confirmRemove = function (_) {
173 return _this.setState({ confirm: 'Remove' });
174 }, _this.cancelConfirm = function (_) {
175 return _this.setState({ confirm: null });
176 }, _this.doRemoveRows = function (_) {
177 if (_this.selectedRows && _this.selectedRows.length > 0) {
178 var _this$props3 = _this.props,
179 getDeleteTask = _this$props3.getDeleteTask,
180 apiTargetInfo = _this$props3.apiTargetInfo;
181
182 _this.setState(function (_) {
183 return { saving: true, confirm: null };
184 }, function (_) {
185 return getDeleteTask({
186 apiTargetInfo: apiTargetInfo,
187 criteria: _this.state.criteria,
188 data: _this.selectedRows
189 }).fork(_this.onError, _this.onRetrieve);
190 });
191 }
192 }, _this.doConfirm = _this.doRemoveRows, _this.onEditCancel = function (_) {
193 return _this.setState({ showAdd: false });
194 }, _this.onHidePrompt = function (_) {
195 return _this.setState({ promptInfo: undefined });
196 }, _this.selectionChange = function (_ref4) {
197 var selectedRows = _ref4.selectedRows,
198 selectedHeaders = _ref4.selectedHeaders;
199
200 _this.selectedRows = selectedRows;
201 }, _this.onRetrieve = function (_) {
202 var criteria = _this.state.criteria;
203 var _this$props4 = _this.props,
204 apiTargetInfo = _this$props4.apiTargetInfo,
205 getRetrieveTask = _this$props4.getRetrieveTask;
206
207 _this.setState(function (_) {
208 return { saving: false, loading: true };
209 }, function (_) {
210 return getRetrieveTask(_extends({ apiTargetInfo: apiTargetInfo }, criteria)).fork(_this.onError, function (data) {
211 _this.setState({
212 data: data,
213 loading: false,
214 showAdd: false,
215 editInfo: createInitialEditInfo(_this.props)
216 });
217 });
218 });
219 }, _this.onImport = function (_) {
220 var criteria = _this.state.criteria;
221 var _this$props5 = _this.props,
222 apiTargetInfo = _this$props5.apiTargetInfo,
223 getImportTask = _this$props5.getImportTask;
224
225 _this.setState(function (_) {
226 return { loading: true };
227 }, function (_) {
228 return getImportTask(_extends({ apiTargetInfo: apiTargetInfo }, criteria)).fork(_this.onError, function (data) {
229 _this.setState({ loading: false });
230 _this.onRetrieve(data);
231 });
232 });
233 }, _this.onSubmit = function (_) {
234 var criteria = _this.state.criteria;
235 var _this$props6 = _this.props,
236 apiTargetInfo = _this$props6.apiTargetInfo,
237 getSubmitTask = _this$props6.getSubmitTask;
238
239 _this.setState(function (_) {
240 return { loading: true };
241 }, function (_) {
242 return getSubmitTask(_extends({ apiTargetInfo: apiTargetInfo }, criteria)).fork(_this.onError, function (data) {
243 _this.setState({ data: data, loading: false });
244 // this.onRetrieve(data)
245 });
246 });
247 }, _this.onShowSubmitDetail = function () {
248 var _this$props7 = _this.props,
249 apiTargetInfo = _this$props7.apiTargetInfo,
250 getShowSubmitDetailTask = _this$props7.getShowSubmitDetailTask;
251
252 var extractSubmitId = function extractSubmitId(data) {
253 var _ref;
254
255 return (_ref = data) != null ? (_ref = _ref.submitInfo) != null ? _ref.submitTransId : _ref : _ref;
256 };
257 if (_this.selectedRows && _this.selectedRows.length > 0) {
258 var ids = _this.selectedRows.map(extractSubmitId).filter(function (submitId) {
259 return submitId != null;
260 });
261
262 if (ids.length > 0) {
263 _this.setState(function (_) {
264 return { loading: true };
265 }, function (_) {
266 return getShowSubmitDetailTask({
267 apiTargetInfo: apiTargetInfo,
268 ids: ids
269 }).fork(_this.onError, _this.setTransLog);
270 });
271 }
272 }
273 }, _this.onCriteriaChange = function (data) {
274 return _this.setState(function (_ref5) {
275 var criteria = _ref5.criteria;
276 return {
277 criteria: _extends({}, criteria, data),
278 data: []
279 };
280 });
281 }, _this.getCriteriaProps = function (_) {
282 return {
283 data: _this.state.data,
284 headers: _this.props.headers,
285 loading: _this.state.loading,
286 onCriteriaChange: _this.onCriteriaChange,
287 onRetrieve: _this.onRetrieve,
288 criteria: _this.state.criteria,
289 onFuzzyFilterChange: _this.onFuzzyFilterChange,
290 fuzzyFilter: _this.state.fuzzyFilter,
291 onError: _this.onError,
292 title: _this.props.title,
293 onImport: _this.props.getImportTask ? _this.onImport : undefined,
294 onSubmit: _this.props.getSubmitTask ? _this.onSubmit : undefined,
295 onShowSubmitDetail: _this.props.getShowSubmitDetailTask ? _this.onShowSubmitDetail : undefined,
296 hasSelectedRows: _this.selectedRows && _this.selectedRows.length > 0,
297 onSave: _this.state.editInfo ? _this.onSave : undefined,
298 saveEnabled: _this.state.editInfo && freeEditEngine.isDirty(_this.state.editInfo)
299 };
300 }, _this.setEditInfo = function (editInfo) {
301 _this.setState(function (_) {
302 return { editInfo: editInfo, showAdd: false };
303 });
304 }, _this.getGridProps = function (_) {
305 var _this$state = _this.state,
306 data = _this$state.data,
307 showAdd = _this$state.showAdd,
308 fuzzyFilter = _this$state.fuzzyFilter,
309 addWithSelected = _this$state.addWithSelected,
310 editInfo = _this$state.editInfo;
311 var _this$props8 = _this.props,
312 headers = _this$props8.headers,
313 gridProps = _this$props8.gridProps,
314 isEditable = _this$props8.isEditable,
315 dataFilter = _this$props8.dataFilter;
316 // const isFreeEdit = gridProps && this.props.gridProps.editMode === 'cell'
317
318 var _gridProps$render = gridProps.render,
319 render = _gridProps$render === undefined ? (0, _flexRenderer2.default)() : _gridProps$render,
320 _gridProps$renderRowE = gridProps.renderRowEditor,
321 renderRowEditor = _gridProps$renderRowE === undefined ? (0, _gridTools.rowEditorRender)() : _gridProps$renderRowE,
322 restOfGridProps = _objectWithoutProperties(gridProps, ['render', 'renderRowEditor']);
323
324 return _extends({
325 fuzzyFilter: fuzzyFilter,
326 data: dataFilter ? (0, _filter3.default)(dataFilter, data) : data,
327 headers: headers,
328 render: render,
329 renderRowEditor: renderRowEditor,
330 onEdit: editInfo == null ? _this.onEdit : undefined,
331 onSelectionChange: _this.selectionChange,
332 isEditable: isEditable,
333 showAdd: showAdd,
334 addWithSelected: addWithSelected,
335 onEditCancel: _this.onEditCancel,
336 editInfo: editInfo,
337 onEditInfoChange: editInfo && _this.setEditInfo
338 }, restOfGridProps);
339 }, _this.setTransLog = function (transLog) {
340 return _this.setState({ transLog: transLog, loading: false });
341 }, _temp), _possibleConstructorReturn(_this, _ret);
342 }
343
344 _createClass(Screen, [{
345 key: 'componentDidMount',
346 value: function componentDidMount() {
347 var disableAutoRetrieve = this.props.disableAutoRetrieve;
348
349 if (!disableAutoRetrieve) this.onRetrieve();
350 }
351
352 // change this to {name/value}
353
354 }, {
355 key: 'render',
356 value: function render() {
357 var _state = this.state,
358 data = _state.data,
359 promptInfo = _state.promptInfo,
360 criteria = _state.criteria,
361 sorting = _state.sorting,
362 saving = _state.saving,
363 loading = _state.loading,
364 confirm = _state.confirm,
365 transLog = _state.transLog;
366 var _props = this.props,
367 title = _props.title,
368 renderCriteria = _props.renderCriteria,
369 renderPrompt = _props.renderPrompt,
370 renderProcessing = _props.renderProcessing,
371 renderSubmissionResponse = _props.renderSubmissionResponse,
372 isEditable = _props.isEditable,
373 isOnlyUpdatable = _props.isOnlyUpdatable,
374 ErrorComponent = _props.ErrorComponent;
375
376 var noYetRetrieved = data === undefined;
377 // const noData = data && data.length === 0
378 // const dataAvailable = !noYetRetrieved && !noData
379 console.log('rendering with', this.state.editInfo);
380
381 return _react2.default.createElement(
382 Container,
383 null,
384 _react2.default.createElement(
385 Title,
386 { 'data-testid': 'screen-title' },
387 title
388 ),
389 renderCriteria(this.getCriteriaProps()),
390 isEditable && !isOnlyUpdatable && _react2.default.createElement(
391 Toolbar,
392 null,
393 _react2.default.createElement(
394 _semanticUiReact.Button.Group,
395 { color: 'grey', size: 'tiny' },
396 _react2.default.createElement(
397 _semanticUiReact.Button,
398 { onClick: this.onAddRowClicked, id: 'add-row' },
399 _react2.default.createElement(_semanticUiReact.Icon, { name: 'add square' }),
400 'New'
401 ),
402 _react2.default.createElement(
403 _semanticUiReact.Button,
404 { onClick: this.onCopyRowClicked, id: 'add-row' },
405 _react2.default.createElement(_semanticUiReact.Icon, { name: 'add square' }),
406 'Copy Selected Row'
407 ),
408 _react2.default.createElement(
409 _semanticUiReact.Button,
410 { onClick: this.confirmRemove, id: 'remove-row' },
411 _react2.default.createElement(_semanticUiReact.Icon, { name: 'remove circle' }),
412 'Remove'
413 )
414 )
415 ),
416 noYetRetrieved && 'Please Click on Retrieve',
417 _react2.default.createElement(_Grid2.default, this.getGridProps()),
418 promptInfo && renderPrompt && _react2.default.createElement(
419 _Overlay2.default,
420 {
421 style: { paddingLeft: '10vw', paddingRight: '10vw' },
422 onClose: this.onHidePrompt
423 },
424 renderPrompt(_extends({ promptInfo: promptInfo }, { criteria: criteria }))
425 ),
426 promptInfo && !renderPrompt && _react2.default.createElement(ErrorComponent, { modalInfo: promptInfo, setModalInfo: this.onHidePrompt }),
427 _react2.default.createElement(_semanticUiReact.Confirm, {
428 open: !(0, _isNil3.default)(confirm),
429 header: 'Confirm ' + confirm + ' of selected rows',
430 onCancel: this.cancelConfirm,
431 confirmButton: 'Confirm ' + confirm,
432 content: 'Are you sure you want to ' + confirm + ' the selected rows?',
433 onConfirm: this.doConfirm
434 }),
435 (sorting || saving || loading) && _react2.default.createElement(
436 _Overlay2.default,
437 null,
438 renderProcessing({ criteria: criteria })
439 ),
440 transLog && renderSubmissionResponse({
441 transLog: transLog,
442 setTransLog: this.setTransLog,
443 selectedRows: this.selectedRows
444 })
445 );
446 }
447 }]);
448
449 return Screen;
450}(_react2.default.Component);
451
452Screen.propTypes = {
453 renderCriteria: _propTypes2.default.func.isRequired,
454 title: _propTypes2.default.string.isRequired,
455 headers: _propTypes2.default.array.isRequired,
456 /* signature of isEditable ({rowData,header}) => bool **/
457 isEditable: _propTypes2.default.oneOfType([_propTypes2.default.func, _propTypes2.default.bool]),
458 getRetrieveTask: _propTypes2.default.func.isRequired,
459 /** only required when it is a editable Grid **/
460 getModifyTask: _propTypes2.default.func,
461 getDeleteTask: _propTypes2.default.func,
462 /** for error handling **/
463 renderPrompt: _propTypes2.default.func,
464 ErrorComponent: _propTypes2.default.element,
465 renderProcessing: _propTypes2.default.func,
466 heightOffSet: _propTypes2.default.number,
467 /* additional grid props */
468 gridProps: _propTypes2.default.object,
469 isOnlyUpdatable: _propTypes2.default.oneOfType([_propTypes2.default.func, _propTypes2.default.bool]),
470 saveAllGridData: _propTypes2.default.bool,
471 dataFilter: _propTypes2.default.func
472};
473Screen.defaultProps = {
474 heightOffSet: 0,
475 gridProps: {},
476 renderProcessing: function renderProcessing() {
477 return _react2.default.createElement(_semanticUiReact.Loader, { active: true });
478 },
479 ErrorComponent: _modal.ErrorModal
480};
481exports.default = Screen;
482//# sourceMappingURL=Screen.js.map
\No newline at end of file