@complat/react-spectra-editor 0.11.2 → 0.11.4-beta.0

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.
@@ -0,0 +1,370 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ var _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; };
8
+
9
+ var _react = require('react');
10
+
11
+ var _react2 = _interopRequireDefault(_react);
12
+
13
+ var _propTypes = require('prop-types');
14
+
15
+ var _propTypes2 = _interopRequireDefault(_propTypes);
16
+
17
+ var _classnames = require('classnames');
18
+
19
+ var _classnames2 = _interopRequireDefault(_classnames);
20
+
21
+ var _reactRedux = require('react-redux');
22
+
23
+ var _redux = require('redux');
24
+
25
+ var _reactDropzone = require('react-dropzone');
26
+
27
+ var _reactDropzone2 = _interopRequireDefault(_reactDropzone);
28
+
29
+ var _ExpansionPanel = require('@material-ui/core/ExpansionPanel');
30
+
31
+ var _ExpansionPanel2 = _interopRequireDefault(_ExpansionPanel);
32
+
33
+ var _ExpansionPanelSummary = require('@material-ui/core/ExpansionPanelSummary');
34
+
35
+ var _ExpansionPanelSummary2 = _interopRequireDefault(_ExpansionPanelSummary);
36
+
37
+ var _ExpandMore = require('@material-ui/icons/ExpandMore');
38
+
39
+ var _ExpandMore2 = _interopRequireDefault(_ExpandMore);
40
+
41
+ var _HighlightOff = require('@material-ui/icons/HighlightOff');
42
+
43
+ var _HighlightOff2 = _interopRequireDefault(_HighlightOff);
44
+
45
+ var _Table = require('@material-ui/core/Table');
46
+
47
+ var _Table2 = _interopRequireDefault(_Table);
48
+
49
+ var _TableBody = require('@material-ui/core/TableBody');
50
+
51
+ var _TableBody2 = _interopRequireDefault(_TableBody);
52
+
53
+ var _TableCell = require('@material-ui/core/TableCell');
54
+
55
+ var _TableCell2 = _interopRequireDefault(_TableCell);
56
+
57
+ var _TableRow = require('@material-ui/core/TableRow');
58
+
59
+ var _TableRow2 = _interopRequireDefault(_TableRow);
60
+
61
+ var _Divider = require('@material-ui/core/Divider');
62
+
63
+ var _Divider2 = _interopRequireDefault(_Divider);
64
+
65
+ var _Typography = require('@material-ui/core/Typography');
66
+
67
+ var _Typography2 = _interopRequireDefault(_Typography);
68
+
69
+ var _Tooltip = require('@material-ui/core/Tooltip');
70
+
71
+ var _Tooltip2 = _interopRequireDefault(_Tooltip);
72
+
73
+ var _VisibilityOutlined = require('@material-ui/icons/VisibilityOutlined');
74
+
75
+ var _VisibilityOutlined2 = _interopRequireDefault(_VisibilityOutlined);
76
+
77
+ var _VisibilityOffOutlined = require('@material-ui/icons/VisibilityOffOutlined');
78
+
79
+ var _VisibilityOffOutlined2 = _interopRequireDefault(_VisibilityOffOutlined);
80
+
81
+ var _styles = require('@material-ui/core/styles');
82
+
83
+ var _format = require('../../helpers/format');
84
+
85
+ var _format2 = _interopRequireDefault(_format);
86
+
87
+ var _jcamp = require('../../actions/jcamp');
88
+
89
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
90
+
91
+ var styles = function styles(theme) {
92
+ return {
93
+ panel: {
94
+ backgroundColor: '#eee',
95
+ display: 'table-row'
96
+ },
97
+ panelSummary: {
98
+ backgroundColor: '#eee',
99
+ height: 32
100
+ },
101
+ txtBadge: {},
102
+ panelDetail: {
103
+ backgroundColor: '#fff',
104
+ maxHeight: 'calc(90vh - 220px)', // ROI
105
+ overflow: 'auto'
106
+ },
107
+ table: {
108
+ width: '100%'
109
+ },
110
+ tTxt: {
111
+ padding: 0
112
+ },
113
+ tTxtHide: {
114
+ color: '#D5D8DC'
115
+ },
116
+ tRow: {
117
+ height: 28,
118
+ '&:nth-of-type(even)': {
119
+ backgroundColor: theme.palette.background.default
120
+ }
121
+ },
122
+ rmBtn: {
123
+ color: 'red',
124
+ padding: '0 5px 0 5px',
125
+ '&:hover': {
126
+ borderRadius: 12,
127
+ backgroundColor: 'red',
128
+ color: 'white'
129
+ }
130
+ },
131
+ showBtn: {
132
+ color: 'steelblue',
133
+ padding: '0 5px 0 5px',
134
+ '&:hover': {
135
+ borderRadius: 12,
136
+ backgroundColor: 'steelblue',
137
+ color: 'white'
138
+ }
139
+ },
140
+ hideBtn: {
141
+ color: 'gray',
142
+ padding: '0 5px 0 5px',
143
+ '&:hover': {
144
+ borderRadius: 12,
145
+ backgroundColor: 'gray',
146
+ color: 'white'
147
+ }
148
+ },
149
+ square: {
150
+ textAlign: 'center !important'
151
+ },
152
+ baseDD: {
153
+ backgroundColor: 'white',
154
+ border: '1px dashed black',
155
+ borderRadius: 5,
156
+ height: 26,
157
+ lineHeight: '26px',
158
+ margin: '7px 0 7px 0',
159
+ textAlign: 'center',
160
+ verticalAlign: 'middle',
161
+ width: '90%'
162
+ },
163
+ enableDD: {
164
+ border: '2px dashed #000',
165
+ color: '#000'
166
+ },
167
+ disableDD: {
168
+ border: '2px dashed #aaa',
169
+ color: '#aaa'
170
+ },
171
+ tpCard: {},
172
+ tpMoreTxt: {
173
+ padding: '0 0 0 60px'
174
+ },
175
+ tpLabel: {
176
+ fontSize: 16
177
+ }
178
+ };
179
+ };
180
+
181
+ var msgDefault = 'Add spectra to compare.';
182
+
183
+ var tpHint = function tpHint(classes) {
184
+ return _react2.default.createElement(
185
+ 'span',
186
+ { className: (0, _classnames2.default)(classes.tpCard) },
187
+ _react2.default.createElement(
188
+ 'p',
189
+ { className: (0, _classnames2.default)(classes.tpLabel, 'txt-sv-tp') },
190
+ '- Accept *.dx, *.jdx, *.JCAMP,'
191
+ ),
192
+ _react2.default.createElement(
193
+ 'p',
194
+ { className: (0, _classnames2.default)(classes.tpLabel, 'txt-sv-tp') },
195
+ '- Max 5 spectra.'
196
+ )
197
+ );
198
+ };
199
+
200
+ var content = function content(classes, desc) {
201
+ return _react2.default.createElement(
202
+ _Tooltip2.default,
203
+ {
204
+ title: tpHint(classes),
205
+ placement: 'bottom'
206
+ },
207
+ _react2.default.createElement(
208
+ 'span',
209
+ { className: (0, _classnames2.default)(classes.tpLabel, 'txt-sv-tp') },
210
+ desc
211
+ )
212
+ );
213
+ };
214
+
215
+ var inputOthers = function inputOthers(classes, addOthersCbSt) {
216
+ var fileName = '';
217
+ var desc = fileName || msgDefault;
218
+ var onDrop = function onDrop(jcamps) {
219
+ if (!addOthersCbSt) return;
220
+ addOthersCbSt({ jcamps: jcamps });
221
+ };
222
+
223
+ return _react2.default.createElement(
224
+ _reactDropzone2.default,
225
+ {
226
+ className: 'dropbox',
227
+ onDrop: onDrop
228
+ },
229
+ function (_ref) {
230
+ var getRootProps = _ref.getRootProps,
231
+ getInputProps = _ref.getInputProps;
232
+ return _react2.default.createElement(
233
+ 'div',
234
+ _extends({}, getRootProps(), {
235
+ className: (0, _classnames2.default)(classes.baseDD)
236
+ }),
237
+ _react2.default.createElement('input', getInputProps()),
238
+ content(classes, desc)
239
+ );
240
+ }
241
+ );
242
+ };
243
+
244
+ var compareList = function compareList(classes, othersSt, rmOthersOneAct, toggleShowAct) {
245
+ var rows = othersSt.map(function (o, idx) {
246
+ return {
247
+ idx: idx,
248
+ title: o.spectra[0].title,
249
+ color: _format2.default.compareColors(idx),
250
+ rmCb: function rmCb() {
251
+ return rmOthersOneAct(idx);
252
+ },
253
+ isShow: o.show,
254
+ toggleShowCb: function toggleShowCb() {
255
+ return toggleShowAct(idx);
256
+ }
257
+ };
258
+ });
259
+
260
+ return _react2.default.createElement(
261
+ _Table2.default,
262
+ { className: classes.table },
263
+ _react2.default.createElement(
264
+ _TableBody2.default,
265
+ null,
266
+ rows.map(function (row) {
267
+ return _react2.default.createElement(
268
+ _TableRow2.default,
269
+ { key: row.idx, className: classes.tRow, hover: true },
270
+ _react2.default.createElement(
271
+ _TableCell2.default,
272
+ {
273
+ align: 'right',
274
+ className: (0, _classnames2.default)(classes.tTxt, classes.square, 'txt-sv-panel-txt'),
275
+ style: { backgroundColor: row.color }
276
+ },
277
+ row.idx + 1
278
+ ),
279
+ _react2.default.createElement(
280
+ _TableCell2.default,
281
+ { align: 'right', className: (0, _classnames2.default)(classes.tTxt, 'txt-sv-panel-txt', row.isShow ? null : classes.tTxtHide) },
282
+ row.title
283
+ ),
284
+ _react2.default.createElement(
285
+ _TableCell2.default,
286
+ { align: 'right', className: (0, _classnames2.default)(classes.tTxt, 'txt-sv-panel-txt') },
287
+ row.isShow ? _react2.default.createElement(_VisibilityOutlined2.default, {
288
+ onClick: row.toggleShowCb,
289
+ className: classes.showBtn
290
+ }) : _react2.default.createElement(_VisibilityOffOutlined2.default, {
291
+ onClick: row.toggleShowCb,
292
+ className: classes.hideBtn
293
+ }),
294
+ _react2.default.createElement(_HighlightOff2.default, { onClick: row.rmCb, className: classes.rmBtn })
295
+ )
296
+ );
297
+ })
298
+ )
299
+ );
300
+ };
301
+
302
+ var ComparePanel = function ComparePanel(_ref2) {
303
+ var classes = _ref2.classes,
304
+ expand = _ref2.expand,
305
+ onExapnd = _ref2.onExapnd,
306
+ othersSt = _ref2.othersSt,
307
+ addOthersCbSt = _ref2.addOthersCbSt,
308
+ rmOthersOneAct = _ref2.rmOthersOneAct,
309
+ toggleShowAct = _ref2.toggleShowAct;
310
+ return _react2.default.createElement(
311
+ _ExpansionPanel2.default,
312
+ {
313
+ expanded: expand,
314
+ onChange: onExapnd,
315
+ className: (0, _classnames2.default)(classes.panel),
316
+ TransitionProps: { unmountOnExit: true } // increase ExpansionPanel performance
317
+ },
318
+ _react2.default.createElement(
319
+ _ExpansionPanelSummary2.default,
320
+ {
321
+ expandIcon: _react2.default.createElement(_ExpandMore2.default, null),
322
+ className: (0, _classnames2.default)(classes.panelSummary)
323
+ },
324
+ _react2.default.createElement(
325
+ _Typography2.default,
326
+ { className: 'txt-panel-header' },
327
+ _react2.default.createElement(
328
+ 'span',
329
+ { className: (0, _classnames2.default)(classes.txtBadge, 'txt-sv-panel-title') },
330
+ 'Spectra Comparisons'
331
+ )
332
+ )
333
+ ),
334
+ _react2.default.createElement(_Divider2.default, null),
335
+ inputOthers(classes, addOthersCbSt),
336
+ _react2.default.createElement(
337
+ 'div',
338
+ { className: (0, _classnames2.default)(classes.panelDetail) },
339
+ compareList(classes, othersSt, rmOthersOneAct, toggleShowAct)
340
+ )
341
+ );
342
+ };
343
+
344
+ var mapStateToProps = function mapStateToProps(state, props) {
345
+ return (// eslint-disable-line
346
+ {
347
+ othersSt: state.jcamp.others,
348
+ addOthersCbSt: state.jcamp.addOthersCb
349
+ }
350
+ );
351
+ };
352
+
353
+ var mapDispatchToProps = function mapDispatchToProps(dispatch) {
354
+ return (0, _redux.bindActionCreators)({
355
+ rmOthersOneAct: _jcamp.rmOthersOne,
356
+ toggleShowAct: _jcamp.toggleShow
357
+ }, dispatch);
358
+ };
359
+
360
+ ComparePanel.propTypes = {
361
+ classes: _propTypes2.default.object.isRequired,
362
+ expand: _propTypes2.default.bool.isRequired,
363
+ onExapnd: _propTypes2.default.func.isRequired,
364
+ othersSt: _propTypes2.default.array.isRequired,
365
+ addOthersCbSt: _propTypes2.default.func.isRequired,
366
+ rmOthersOneAct: _propTypes2.default.func.isRequired,
367
+ toggleShowAct: _propTypes2.default.func.isRequired
368
+ };
369
+
370
+ exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)((0, _styles.withStyles)(styles)(ComparePanel));
@@ -36,6 +36,10 @@ var _Info = require('@material-ui/icons/Info');
36
36
 
37
37
  var _Info2 = _interopRequireDefault(_Info);
38
38
 
39
+ var _Help = require('@material-ui/icons/Help');
40
+
41
+ var _Help2 = _interopRequireDefault(_Help);
42
+
39
43
  var _Tooltip = require('@material-ui/core/Tooltip');
40
44
 
41
45
  var _Tooltip2 = _interopRequireDefault(_Tooltip);
@@ -98,12 +102,30 @@ var styles = function styles() {
98
102
  padding: 10
99
103
  },
100
104
  infoIcon: {
101
- width: '0.6em',
102
- height: '0.6em'
105
+ width: '15px',
106
+ height: '16px'
103
107
  },
104
108
  txtToolTip: {
105
109
  lineHeight: 'normal !important',
106
110
  fontSize: '14px !important'
111
+ },
112
+ rowRoot: {
113
+ border: '1px solid #eee',
114
+ height: 36,
115
+ lineHeight: '36px',
116
+ overflow: 'hidden',
117
+ paddingLeft: 24,
118
+ textAlign: 'left'
119
+ },
120
+ rowOdd: {
121
+ backgroundColor: '#fff',
122
+ textOverflow: 'ellipsis',
123
+ whiteSpace: 'nowrap'
124
+ },
125
+ rowEven: {
126
+ backgroundColor: '#fafafa',
127
+ textOverflow: 'ellipsis',
128
+ whiteSpace: 'nowrap'
107
129
  }
108
130
  };
109
131
  };
@@ -118,7 +140,8 @@ var CyclicVoltammetryPanel = function CyclicVoltammetryPanel(_ref) {
118
140
  removePairPeakAct = _ref.removePairPeakAct,
119
141
  sweepTypeSt = _ref.sweepTypeSt,
120
142
  setUiSweepTypeAct = _ref.setUiSweepTypeAct,
121
- jcampIdx = _ref.jcampIdx;
143
+ jcampIdx = _ref.jcampIdx,
144
+ userManualLink = _ref.userManualLink;
122
145
  var spectraList = cyclicVotaSt.spectraList;
123
146
 
124
147
  var spectra = spectraList[jcampIdx];
@@ -236,7 +259,7 @@ var CyclicVoltammetryPanel = function CyclicVoltammetryPanel(_ref) {
236
259
  { className: (0, _classnames2.default)(classes.txtToolTip) },
237
260
  'Baseline correction value for I ratio ',
238
261
  _react2.default.createElement('br', null),
239
- '(aka y value of pecker)'
262
+ '(a.k.a y value of pecker)'
240
263
  )
241
264
  },
242
265
  _react2.default.createElement(_Info2.default, { className: (0, _classnames2.default)(classes.infoIcon) })
@@ -361,6 +384,30 @@ var CyclicVoltammetryPanel = function CyclicVoltammetryPanel(_ref) {
361
384
  );
362
385
  })
363
386
  )
387
+ ),
388
+ _react2.default.createElement(
389
+ 'div',
390
+ { className: (0, _classnames2.default)(classes.rowRoot, classes.rowEven) },
391
+ _react2.default.createElement(
392
+ _Tooltip2.default,
393
+ {
394
+ title: _react2.default.createElement(
395
+ 'span',
396
+ { className: (0, _classnames2.default)(classes.txtToolTip) },
397
+ 'Click here to open the User manual document'
398
+ )
399
+ },
400
+ _react2.default.createElement(
401
+ 'span',
402
+ null,
403
+ _react2.default.createElement(
404
+ 'a',
405
+ { target: '_blank', rel: 'noopener noreferrer', href: userManualLink },
406
+ 'How-To'
407
+ ),
408
+ _react2.default.createElement(_Help2.default, { className: (0, _classnames2.default)(classes.infoIcon) })
409
+ )
410
+ )
364
411
  )
365
412
  );
366
413
  };
@@ -398,7 +445,8 @@ CyclicVoltammetryPanel.propTypes = {
398
445
  selectPairPeakAct: _propTypes2.default.func.isRequired,
399
446
  removePairPeakAct: _propTypes2.default.func.isRequired,
400
447
  setUiSweepTypeAct: _propTypes2.default.func.isRequired,
401
- sweepTypeSt: _propTypes2.default.string.isRequired
448
+ sweepTypeSt: _propTypes2.default.string.isRequired,
449
+ userManualLink: _propTypes2.default.string
402
450
  };
403
451
 
404
452
  CyclicVoltammetryPanel.defaultProps = {
@@ -129,7 +129,8 @@ var PanelViewer = function (_React$Component) {
129
129
  layoutSt = _props.layoutSt,
130
130
  canChangeDescription = _props.canChangeDescription,
131
131
  jcampIdx = _props.jcampIdx,
132
- entityFileNames = _props.entityFileNames;
132
+ entityFileNames = _props.entityFileNames,
133
+ userManualLink = _props.userManualLink;
133
134
 
134
135
  var onExapndInfo = function onExapndInfo() {
135
136
  return _this2.onExapnd('info');
@@ -173,7 +174,7 @@ var PanelViewer = function (_React$Component) {
173
174
  _cfg2.default.hidePanelPeak(layoutSt) ? null : _react2.default.createElement(_peaks2.default, { expand: expand === 'peak', onExapnd: onExapndPeak }),
174
175
  _cfg2.default.hidePanelMpy(layoutSt) ? null : _react2.default.createElement(_multiplicity2.default, { expand: expand === 'mpy', onExapnd: onExapndMpy }),
175
176
  _cfg2.default.hidePanelCompare(layoutSt) ? null : _react2.default.createElement(_compare2.default, { expand: expand === 'compare', onExapnd: onExapndCompare }),
176
- _cfg2.default.hidePanelCyclicVolta(layoutSt) ? null : _react2.default.createElement(_cyclic_voltamery_data2.default, { jcampIdx: jcampIdx, feature: feature, expand: expand === 'cyclicvolta', onExapnd: onExapndCyclicVolta })
177
+ _cfg2.default.hidePanelCyclicVolta(layoutSt) ? null : _react2.default.createElement(_cyclic_voltamery_data2.default, { jcampIdx: jcampIdx, feature: feature, expand: expand === 'cyclicvolta', onExapnd: onExapndCyclicVolta, userManualLink: userManualLink ? userManualLink.cv : undefined })
177
178
  )
178
179
  );
179
180
  }
@@ -204,7 +205,8 @@ PanelViewer.propTypes = {
204
205
  layoutSt: _propTypes2.default.string.isRequired,
205
206
  canChangeDescription: _propTypes2.default.bool.isRequired,
206
207
  onDescriptionChanged: _propTypes2.default.func,
207
- entityFileNames: _propTypes2.default.array
208
+ entityFileNames: _propTypes2.default.array,
209
+ userManualLink: _propTypes2.default.object
208
210
  };
209
211
 
210
212
  exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)((0, _styles.withStyles)(styles)(PanelViewer));