@complat/react-spectra-editor 1.7.1 → 1.8.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.
Files changed (111) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/LICENSE +21 -662
  3. package/README.md +5 -0
  4. package/dist/__tests__/fixtures/lc_ms_jcamp.js +2329 -0
  5. package/dist/__tests__/fixtures/lc_ms_jcamp_2.js +2874 -0
  6. package/dist/__tests__/fixtures/lc_ms_jcamp_mz_chemstation.js +3242 -0
  7. package/dist/__tests__/fixtures/lc_ms_jcamp_tic_chemstation.js +854 -0
  8. package/dist/__tests__/fixtures/lc_ms_jcamp_tic_neg.js +1233 -0
  9. package/dist/__tests__/fixtures/lc_ms_jcamp_tic_pos.js +1233 -0
  10. package/dist/__tests__/fixtures/lc_ms_jcamp_uvvis.js +48908 -0
  11. package/dist/__tests__/fixtures/lc_ms_jcamp_uvvis_chemstation.js +15424 -0
  12. package/dist/__tests__/units/components/cmd_bar/r05_submit_btn.test.js +158 -3
  13. package/dist/__tests__/units/components/d3_line_rect.test.js +85 -0
  14. package/dist/__tests__/units/components/d3_multi/multi_focus.test.js +43 -0
  15. package/dist/__tests__/units/components/hplc_viewer.test.js +123 -0
  16. package/dist/__tests__/units/components/panel/info.test.js +55 -15
  17. package/dist/__tests__/units/features/lc-ms/parsing/lcmsCategory.test.js +73 -0
  18. package/dist/__tests__/units/features/lc-ms/submit/peaks.test.js +310 -0
  19. package/dist/actions/curve.js +5 -2
  20. package/dist/actions/hplc_ms.js +66 -0
  21. package/dist/actions/integration.js +17 -2
  22. package/dist/actions/ui.js +39 -11
  23. package/dist/app.js +21 -8
  24. package/dist/components/cmd_bar/01_viewer.js +15 -11
  25. package/dist/components/cmd_bar/03_peak.js +25 -16
  26. package/dist/components/cmd_bar/04_integration.js +116 -17
  27. package/dist/components/cmd_bar/08_peak_group.js +83 -0
  28. package/dist/components/cmd_bar/collapsible_toolbar_group.js +101 -0
  29. package/dist/components/cmd_bar/common.js +4 -3
  30. package/dist/components/cmd_bar/index.js +76 -18
  31. package/dist/components/cmd_bar/r01_layout.js +6 -0
  32. package/dist/components/cmd_bar/r02_scan.js +15 -11
  33. package/dist/components/cmd_bar/r03_threshold.js +19 -3
  34. package/dist/components/cmd_bar/r04_submit.js +61 -6
  35. package/dist/components/cmd_bar/r05_submit_btn.js +60 -13
  36. package/dist/components/cmd_bar/r06_predict_btn.js +4 -4
  37. package/dist/components/cmd_bar/r07_wavelength_btn.js +10 -9
  38. package/dist/components/cmd_bar/r09_detector.js +2 -2
  39. package/dist/components/cmd_bar/tri_btn.js +4 -1
  40. package/dist/components/common/draw.js +6 -5
  41. package/dist/components/d3_line/index.js +70 -15
  42. package/dist/components/d3_line/line_focus.js +104 -67
  43. package/dist/components/d3_line_rect/index.js +836 -0
  44. package/dist/components/d3_line_rect/line_focus.js +526 -0
  45. package/dist/components/d3_line_rect/multi_focus.js +433 -0
  46. package/dist/components/d3_line_rect/rect_focus.js +247 -0
  47. package/dist/components/d3_multi/index.js +154 -163
  48. package/dist/components/d3_multi/multi_focus.js +117 -68
  49. package/dist/components/d3_rect/index.js +6 -0
  50. package/dist/components/d3_rect/rect_focus.js +17 -5
  51. package/dist/components/hplc_viewer.js +169 -0
  52. package/dist/components/lc_ms_uv_tools_bar.js +175 -0
  53. package/dist/components/multi_jcamps_viewer.js +17 -5
  54. package/dist/components/panel/compare.js +84 -62
  55. package/dist/components/panel/cyclic_voltamery_data.js +15 -14
  56. package/dist/components/panel/graph_selection.js +32 -30
  57. package/dist/components/panel/index.js +28 -22
  58. package/dist/components/panel/info.js +75 -26
  59. package/dist/constants/action_type.js +23 -2
  60. package/dist/constants/list_graph.js +16 -0
  61. package/dist/constants/list_layout.js +2 -1
  62. package/dist/constants/list_ui.js +5 -2
  63. package/dist/features/lc-ms/entities/extractEntityLCMS.js +187 -0
  64. package/dist/features/lc-ms/parsing/chemstation.js +108 -0
  65. package/dist/features/lc-ms/parsing/index.js +46 -0
  66. package/dist/features/lc-ms/parsing/lcmsCategory.js +44 -0
  67. package/dist/features/lc-ms/parsing/lcmsJcampInfo.js +18 -0
  68. package/dist/features/lc-ms/parsing/lcmsMsPage.js +241 -0
  69. package/dist/features/lc-ms/parsing/pageValue.js +27 -0
  70. package/dist/features/lc-ms/submit/index.js +24 -0
  71. package/dist/features/lc-ms/submit/peaks.js +66 -0
  72. package/dist/features/lc-ms/ui/wavelengthSelect.js +54 -0
  73. package/dist/fn.js +4 -1
  74. package/dist/helpers/brush.js +74 -19
  75. package/dist/helpers/calc.js +4 -2
  76. package/dist/helpers/cfg.js +5 -4
  77. package/dist/helpers/chem.js +449 -71
  78. package/dist/helpers/compass.js +181 -17
  79. package/dist/helpers/extractEntityLCMS.js +24 -0
  80. package/dist/helpers/extractParams.js +118 -33
  81. package/dist/helpers/extractPeaksEdit.js +29 -9
  82. package/dist/helpers/format.js +189 -4
  83. package/dist/helpers/init.js +25 -5
  84. package/dist/helpers/integration.js +130 -17
  85. package/dist/helpers/integration_draft.js +43 -0
  86. package/dist/helpers/integration_focus.js +155 -0
  87. package/dist/helpers/integration_jcamp.js +68 -0
  88. package/dist/helpers/integration_split.js +202 -0
  89. package/dist/helpers/mount.js +8 -1
  90. package/dist/helpers/sweep.js +39 -0
  91. package/dist/index.js +284 -26
  92. package/dist/layer_content.js +17 -3
  93. package/dist/layer_init.js +124 -14
  94. package/dist/layer_prism.js +31 -5
  95. package/dist/reducers/index.js +3 -1
  96. package/dist/reducers/reducer_curve.js +54 -36
  97. package/dist/reducers/reducer_hplc_ms/hydrate.js +289 -0
  98. package/dist/reducers/reducer_hplc_ms/index.js +122 -0
  99. package/dist/reducers/reducer_hplc_ms/persistence.js +74 -0
  100. package/dist/reducers/reducer_hplc_ms/tic.js +70 -0
  101. package/dist/reducers/reducer_hplc_ms/utils.js +70 -0
  102. package/dist/reducers/reducer_hplc_ms/uvvis.js +377 -0
  103. package/dist/reducers/reducer_integration.js +265 -7
  104. package/dist/reducers/reducer_layout.js +1 -1
  105. package/dist/reducers/reducer_submit.js +2 -1
  106. package/dist/reducers/reducer_ui.js +149 -13
  107. package/dist/reducers/undo_redo_config.js +2 -2
  108. package/dist/sagas/saga_lcms_ui.js +85 -0
  109. package/dist/sagas/saga_ui.js +177 -74
  110. package/dist/setupTests.js +5 -5
  111. package/package.json +10 -7
@@ -11,18 +11,34 @@ var _reactRedux = require("react-redux");
11
11
  var _redux = require("redux");
12
12
  var _styles = require("@mui/styles");
13
13
  var _submit = require("./actions/submit");
14
+ var _layout = require("./actions/layout");
14
15
  var _manager = require("./actions/manager");
15
16
  var _meta = require("./actions/meta");
16
17
  var _jcamp = require("./actions/jcamp");
17
18
  var _layer_prism = _interopRequireDefault(require("./layer_prism"));
18
19
  var _format = _interopRequireDefault(require("./helpers/format"));
20
+ var _extractEntityLCMS = require("./helpers/extractEntityLCMS");
19
21
  var _multi_jcamps_viewer = _interopRequireDefault(require("./components/multi_jcamps_viewer"));
22
+ var _hplc_viewer = _interopRequireDefault(require("./components/hplc_viewer"));
20
23
  var _curve = require("./actions/curve");
24
+ var _hplc_ms = require("./actions/hplc_ms");
21
25
  var _jsxRuntime = require("react/jsx-runtime");
22
26
  /* eslint-disable prefer-object-spread, default-param-last */
23
27
 
24
28
  const styles = () => ({});
25
29
  class LayerInit extends _react.default.Component {
30
+ static entitySignature(e) {
31
+ if (!e) return 'none';
32
+ const id = e.idDt ?? e.id ?? e.datasetId;
33
+ if (id != null && id !== '') return `id:${id}`;
34
+ const firstFeature = (Array.isArray(e.features) ? e.features[0] : null) || (Array.isArray(e.spectra) ? e.spectra[0] : null) || null;
35
+ const data0 = firstFeature?.data?.[0];
36
+ const xs = data0?.x;
37
+ const xLen = Array.isArray(xs) ? xs.length : 0;
38
+ const xHead = Array.isArray(xs) && xs.length > 0 ? xs[0] : '';
39
+ const xTail = Array.isArray(xs) && xs.length > 0 ? xs[xs.length - 1] : '';
40
+ return `sig:${e.layout || ''}|${e.title || ''}|${xLen}|${xHead}|${xTail}`;
41
+ }
26
42
  constructor(props) {
27
43
  super(props);
28
44
  this.normChange = this.normChange.bind(this);
@@ -38,15 +54,40 @@ class LayerInit extends _react.default.Component {
38
54
  this.updateMultiEntities();
39
55
  }
40
56
  componentDidUpdate(prevProps) {
57
+ const {
58
+ others,
59
+ multiEntities,
60
+ entity,
61
+ operations
62
+ } = this.props;
41
63
  this.normChange(prevProps);
42
- this.updateOthers();
43
- this.updateMultiEntities();
64
+ if (prevProps.operations !== operations || prevProps.entity !== entity) {
65
+ this.initReducer();
66
+ }
67
+ if (prevProps.others !== others) {
68
+ this.updateOthers();
69
+ }
70
+ if (prevProps.multiEntities !== multiEntities || prevProps.entity !== entity) {
71
+ this.updateMultiEntities();
72
+ }
44
73
  }
45
74
  normChange(prevProps) {
46
75
  const {
47
- entity
76
+ entity,
77
+ multiEntities,
78
+ clearHplcMsStateAct
48
79
  } = this.props;
49
80
  if (prevProps.entity !== entity) {
81
+ const prevIsLcms = _format.default.isLCMsLayout(prevProps.entity?.layout);
82
+ const nextIsLcms = _format.default.isLCMsLayout(entity?.layout);
83
+ const lcmsSessionActive = prevIsLcms && nextIsLcms && Array.isArray(multiEntities) && (0, _extractEntityLCMS.isLcMsGroup)(multiEntities);
84
+ if ((prevIsLcms || nextIsLcms) && !lcmsSessionActive) {
85
+ const prevSig = LayerInit.entitySignature(prevProps.entity);
86
+ const nextSig = LayerInit.entitySignature(entity);
87
+ if (prevSig !== nextSig) {
88
+ clearHplcMsStateAct();
89
+ }
90
+ }
50
91
  this.execReset();
51
92
  }
52
93
  }
@@ -60,14 +101,17 @@ class LayerInit extends _react.default.Component {
60
101
  resetInitCommonWithIntergationAct,
61
102
  resetDetectorAct,
62
103
  updateDSCMetaDataAct,
63
- resetMultiplicityAct
104
+ resetMultiplicityAct,
105
+ updateLayoutAct
64
106
  } = this.props;
107
+ if (!entity || !entity.layout) return;
65
108
  resetInitCommonAct();
66
109
  resetDetectorAct();
67
110
  const {
68
111
  layout,
69
- features
112
+ features = {}
70
113
  } = entity;
114
+ updateLayoutAct(layout);
71
115
  if (_format.default.isMsLayout(layout)) {
72
116
  // const { autoPeak, editPeak } = features; // TBD
73
117
  const autoPeak = features.autoPeak || features[0];
@@ -108,14 +152,18 @@ class LayerInit extends _react.default.Component {
108
152
  operations,
109
153
  updateOperationAct
110
154
  } = this.props;
111
- updateOperationAct(operations[0]);
155
+ if (Array.isArray(operations) && operations.length > 0) {
156
+ updateOperationAct(operations[0]);
157
+ }
112
158
  }
113
159
  updateOthers() {
114
160
  const {
115
161
  others,
116
162
  addOthersAct
117
163
  } = this.props;
118
- addOthersAct(others);
164
+ if (others) {
165
+ addOthersAct(others);
166
+ }
119
167
  }
120
168
  updateMultiEntities() {
121
169
  const {
@@ -123,9 +171,37 @@ class LayerInit extends _react.default.Component {
123
171
  setAllCurvesAct,
124
172
  entity
125
173
  } = this.props;
174
+ if (!entity || !entity.layout) return;
175
+ const lcmsCurveMeta = () => {
176
+ const uvvisFromMulti = Array.isArray(multiEntities) ? multiEntities.find(e => (0, _extractEntityLCMS.getLcMsInfo)(e).kind === 'uvvis') : null;
177
+ const mzFromMulti = Array.isArray(multiEntities) ? multiEntities.find(e => (0, _extractEntityLCMS.getLcMsInfo)(e).kind === 'mz') : null;
178
+ const idDt = uvvisFromMulti?.idDt ?? uvvisFromMulti?.id ?? uvvisFromMulti?.datasetId ?? entity?.idDt ?? entity?.id ?? entity?.datasetId ?? null;
179
+ const lcmsUvvisWavelength = entity?.lcms_uvvis_wavelength ?? entity?.lcmsUvvisWavelength ?? uvvisFromMulti?.lcms_uvvis_wavelength ?? uvvisFromMulti?.lcmsUvvisWavelength;
180
+ const lcmsMzPage = entity?.lcms_mz_page ?? entity?.lcmsMzPage ?? mzFromMulti?.lcms_mz_page ?? mzFromMulti?.lcmsMzPage ?? uvvisFromMulti?.lcms_mz_page ?? uvvisFromMulti?.lcmsMzPage;
181
+ const mzInfo = mzFromMulti ? (0, _extractEntityLCMS.getLcMsInfo)(mzFromMulti) : null;
182
+ const lcmsPolarity = entity?.lcms_polarity ?? entity?.lcmsPolarity ?? entity?.ticPolarity ?? mzFromMulti?.lcms_polarity ?? mzFromMulti?.lcmsPolarity ?? (mzInfo?.kind === 'mz' ? mzInfo.polarity : null);
183
+ const out = {};
184
+ if (idDt != null) out.idDt = idDt;
185
+ if (lcmsUvvisWavelength != null && lcmsUvvisWavelength !== '') {
186
+ out.lcmsUvvisWavelength = lcmsUvvisWavelength;
187
+ }
188
+ if (lcmsMzPage != null && lcmsMzPage !== '') {
189
+ out.lcmsMzPage = lcmsMzPage;
190
+ }
191
+ if (lcmsPolarity != null && lcmsPolarity !== '') {
192
+ out.lcmsPolarity = lcmsPolarity;
193
+ }
194
+ return Object.keys(out).length ? out : undefined;
195
+ };
126
196
  const isMultiSpectra = Array.isArray(multiEntities) && multiEntities.length > 1;
127
197
  if (isMultiSpectra) {
128
- setAllCurvesAct(multiEntities);
198
+ const meta = _format.default.isLCMsLayout(entity.layout) ? lcmsCurveMeta() : undefined;
199
+ setAllCurvesAct(multiEntities, meta);
200
+ return;
201
+ }
202
+ if (_format.default.isLCMsLayout(entity.layout)) {
203
+ const payload = Array.isArray(multiEntities) && multiEntities.length > 0 ? multiEntities : [entity];
204
+ setAllCurvesAct(payload, lcmsCurveMeta());
129
205
  return;
130
206
  }
131
207
  if (_format.default.isCyclicVoltaLayout(entity.layout)) {
@@ -151,15 +227,35 @@ class LayerInit extends _react.default.Component {
151
227
  onDescriptionChanged,
152
228
  multiEntities,
153
229
  entityFileNames,
154
- userManualLink
230
+ userManualLink,
231
+ onLcmsPageRequest
155
232
  } = this.props;
156
- const target = entity.spectra[0];
157
233
  const {
158
234
  layout
159
235
  } = entity;
160
- const xxLabel = !xLabel && xLabel === '' ? `X (${target.xUnit})` : xLabel;
161
- const yyLabel = !yLabel && yLabel === '' ? `Y (${target.yUnit})` : yLabel;
236
+ const hasMultiEntities = Array.isArray(multiEntities) && multiEntities.length > 0;
237
+ const hasLcmsEntity = hasMultiEntities && multiEntities.some(multiEntity => _format.default.isLCMsLayout(multiEntity?.layout));
238
+ const isDetectedLcmsGroup = hasLcmsEntity && (0, _extractEntityLCMS.isLcMsGroup)(multiEntities);
239
+ // For multi mode, trust multiEntities over single entity to avoid mixed-layout misrouting.
240
+ const isLcms = hasMultiEntities ? isDetectedLcmsGroup : _format.default.isLCMsLayout(layout);
241
+ const target = isLcms ? null : entity.spectra && Array.isArray(entity.spectra) && entity.spectra[0] || null;
242
+ const xxLabel = !xLabel && xLabel === '' && target && target.xUnit ? `X (${target.xUnit})` : xLabel;
243
+ const yyLabel = !yLabel && yLabel === '' && target && target.yUnit ? `Y (${target.yUnit})` : yLabel;
162
244
  const isMultiSpectra = Array.isArray(multiEntities) && multiEntities.length > 1;
245
+ if (isLcms) {
246
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_hplc_viewer.default, {
247
+ entityFileNames: entityFileNames,
248
+ userManualLink: userManualLink,
249
+ molSvg: molSvg,
250
+ forecast: forecast,
251
+ operations: operations,
252
+ descriptions: descriptions,
253
+ canChangeDescription: canChangeDescription,
254
+ onDescriptionChanged: onDescriptionChanged,
255
+ editorOnly: editorOnly,
256
+ onLcmsPageRequest: onLcmsPageRequest
257
+ });
258
+ }
163
259
  if (isMultiSpectra) {
164
260
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_multi_jcamps_viewer.default, {
165
261
  multiEntities: multiEntities,
@@ -167,6 +263,8 @@ class LayerInit extends _react.default.Component {
167
263
  userManualLink: userManualLink,
168
264
  molSvg: molSvg,
169
265
  exactMass: exactMass,
266
+ forecast: forecast,
267
+ editorOnly: editorOnly,
170
268
  operations: operations,
171
269
  descriptions: descriptions,
172
270
  canChangeDescription: canChangeDescription,
@@ -180,6 +278,8 @@ class LayerInit extends _react.default.Component {
180
278
  userManualLink: userManualLink,
181
279
  molSvg: molSvg,
182
280
  exactMass: exactMass,
281
+ forecast: forecast,
282
+ editorOnly: editorOnly,
183
283
  operations: operations,
184
284
  descriptions: descriptions,
185
285
  canChangeDescription: canChangeDescription,
@@ -197,6 +297,8 @@ class LayerInit extends _react.default.Component {
197
297
  molSvg: molSvg,
198
298
  editorOnly: editorOnly,
199
299
  exactMass: exactMass,
300
+ entityFileNames: entityFileNames,
301
+ userManualLink: userManualLink,
200
302
  canChangeDescription: canChangeDescription,
201
303
  onDescriptionChanged: onDescriptionChanged
202
304
  });
@@ -213,10 +315,12 @@ const mapDispatchToProps = dispatch => (0, _redux.bindActionCreators)({
213
315
  resetDetectorAct: _manager.resetDetector,
214
316
  resetMultiplicityAct: _manager.resetMultiplicity,
215
317
  updateOperationAct: _submit.updateOperation,
318
+ updateLayoutAct: _layout.updateLayout,
216
319
  updateMetaPeaksAct: _meta.updateMetaPeaks,
217
320
  addOthersAct: _jcamp.addOthers,
218
321
  setAllCurvesAct: _curve.setAllCurves,
219
- updateDSCMetaDataAct: _meta.updateDSCMetaData
322
+ updateDSCMetaDataAct: _meta.updateDSCMetaData,
323
+ clearHplcMsStateAct: _hplc_ms.clearHplcMsState
220
324
  }, dispatch);
221
325
  LayerInit.propTypes = {
222
326
  entity: _propTypes.default.object.isRequired,
@@ -239,17 +343,23 @@ LayerInit.propTypes = {
239
343
  resetInitMsAct: _propTypes.default.func.isRequired,
240
344
  resetInitCommonWithIntergationAct: _propTypes.default.func.isRequired,
241
345
  updateOperationAct: _propTypes.default.func.isRequired,
346
+ updateLayoutAct: _propTypes.default.func.isRequired,
242
347
  updateMetaPeaksAct: _propTypes.default.func.isRequired,
243
348
  addOthersAct: _propTypes.default.func.isRequired,
244
349
  canChangeDescription: _propTypes.default.bool.isRequired,
245
350
  onDescriptionChanged: _propTypes.default.func,
246
351
  // eslint-disable-line
352
+ onLcmsPageRequest: _propTypes.default.func,
247
353
  setAllCurvesAct: _propTypes.default.func.isRequired,
248
354
  userManualLink: _propTypes.default.object,
249
355
  // eslint-disable-line
250
356
  resetDetectorAct: _propTypes.default.func.isRequired,
251
357
  resetMultiplicityAct: _propTypes.default.func.isRequired,
252
- updateDSCMetaDataAct: _propTypes.default.func.isRequired
358
+ updateDSCMetaDataAct: _propTypes.default.func.isRequired,
359
+ clearHplcMsStateAct: _propTypes.default.func.isRequired
360
+ };
361
+ LayerInit.defaultProps = {
362
+ onLcmsPageRequest: null
253
363
  };
254
364
  var _default = exports.default = (0, _reactRedux.connect)(
255
365
  // eslint-disable-line
@@ -22,6 +22,13 @@ react/function-component-definition, react/require-default-props
22
22
  */
23
23
 
24
24
  const styles = () => ({});
25
+ const getThresholdState = state => {
26
+ const curveIdx = state?.curve?.curveIdx;
27
+ const thresholdList = state?.threshold?.list;
28
+ if (!Array.isArray(thresholdList)) return {};
29
+ if (!Number.isInteger(curveIdx)) return thresholdList[0] || {};
30
+ return thresholdList[curveIdx] || thresholdList[0] || {};
31
+ };
25
32
  const LayerPrism = ({
26
33
  entity,
27
34
  cLabel,
@@ -36,16 +43,25 @@ const LayerPrism = ({
36
43
  thresSt,
37
44
  scanSt,
38
45
  uiSt,
46
+ curveSt,
47
+ integrationSt,
39
48
  canChangeDescription,
40
- onDescriptionChanged
49
+ onDescriptionChanged,
50
+ entityFileNames,
51
+ userManualLink
41
52
  }) => {
42
53
  const {
43
54
  topic,
44
55
  feature,
45
56
  hasEdit,
46
- integration
57
+ integration: initialIntegration,
58
+ features
47
59
  } = (0, _extractParams.extractParams)(entity, thresSt, scanSt);
48
60
  if (!topic) return null;
61
+ const curveIdx = curveSt && Number.isFinite(curveSt.curveIdx) ? curveSt.curveIdx : 0;
62
+ const liveIntegrations = integrationSt && Array.isArray(integrationSt.integrations) ? integrationSt.integrations : null;
63
+ const liveIntegration = liveIntegrations ? liveIntegrations[curveIdx] : null;
64
+ const integration = liveIntegration || initialIntegration;
49
65
  const {
50
66
  viewer
51
67
  } = uiSt;
@@ -67,6 +83,7 @@ const LayerPrism = ({
67
83
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_layer_content.default, {
68
84
  topic: topic,
69
85
  feature: feature,
86
+ features: features || [],
70
87
  cLabel: cLabel,
71
88
  xLabel: xLabel,
72
89
  yLabel: yLabel,
@@ -95,6 +112,7 @@ const LayerPrism = ({
95
112
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_layer_content.default, {
96
113
  topic: topic,
97
114
  feature: feature,
115
+ features: features || [],
98
116
  cLabel: cLabel,
99
117
  xLabel: xLabel,
100
118
  yLabel: yLabel,
@@ -111,6 +129,8 @@ const LayerPrism = ({
111
129
  editorOnly: editorOnly,
112
130
  molSvg: molSvg,
113
131
  exactMass: exactMass,
132
+ entityFileNames: entityFileNames,
133
+ userManualLink: userManualLink,
114
134
  descriptions: descriptions,
115
135
  canChangeDescription: canChangeDescription,
116
136
  onDescriptionChanged: onDescriptionChanged
@@ -124,8 +144,10 @@ const mapStateToProps = (state, props) => (
124
144
  // eslint-disable-line
125
145
  {
126
146
  scanSt: state.scan,
127
- thresSt: state.threshold.list[state.curve.curveIdx],
128
- uiSt: state.ui
147
+ thresSt: getThresholdState(state),
148
+ uiSt: state.ui,
149
+ curveSt: state.curve,
150
+ integrationSt: state.integration.present
129
151
  });
130
152
  const mapDispatchToProps = dispatch => (0, _redux.bindActionCreators)({}, dispatch);
131
153
  LayerPrism.propTypes = {
@@ -142,8 +164,12 @@ LayerPrism.propTypes = {
142
164
  thresSt: _propTypes.default.object.isRequired,
143
165
  scanSt: _propTypes.default.object.isRequired,
144
166
  uiSt: _propTypes.default.object.isRequired,
167
+ curveSt: _propTypes.default.object.isRequired,
168
+ integrationSt: _propTypes.default.object.isRequired,
145
169
  canChangeDescription: _propTypes.default.bool.isRequired,
146
- onDescriptionChanged: _propTypes.default.func
170
+ onDescriptionChanged: _propTypes.default.func,
171
+ entityFileNames: _propTypes.default.array,
172
+ userManualLink: _propTypes.default.object
147
173
  };
148
174
  var _default = exports.default = (0, _reactRedux.connect)(
149
175
  // eslint-disable-line
@@ -26,6 +26,7 @@ var _reducer_voltammetry = _interopRequireDefault(require("./reducer_voltammetry
26
26
  var _reducer_curve = _interopRequireDefault(require("./reducer_curve"));
27
27
  var _reducer_axes = _interopRequireDefault(require("./reducer_axes"));
28
28
  var _reducer_detector = _interopRequireDefault(require("./reducer_detector"));
29
+ var _reducer_hplc_ms = _interopRequireDefault(require("./reducer_hplc_ms"));
29
30
  const rootReducer = (0, _redux.combineReducers)({
30
31
  threshold: _reducer_threshold.default,
31
32
  editPeak: _reducer_edit_peak.default,
@@ -46,6 +47,7 @@ const rootReducer = (0, _redux.combineReducers)({
46
47
  cyclicvolta: _reducer_voltammetry.default,
47
48
  curve: _reducer_curve.default,
48
49
  axesUnits: _reducer_axes.default,
49
- detector: _reducer_detector.default
50
+ detector: _reducer_detector.default,
51
+ hplcMs: _reducer_hplc_ms.default
50
52
  });
51
53
  var _default = exports.default = rootReducer;
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.default = void 0;
8
8
  var _action_type = require("../constants/action_type");
9
9
  var _extractParams = require("../helpers/extractParams");
10
+ var _extractEntityLCMS = require("../helpers/extractEntityLCMS");
11
+ var _list_layout = require("../constants/list_layout");
10
12
  var _chem = require("../helpers/chem");
11
13
  var _format = _interopRequireDefault(require("../helpers/format"));
12
14
  /* eslint-disable prefer-object-spread, default-param-last, max-len */
@@ -20,44 +22,60 @@ const setAllCurves = (state, action) => {
20
22
  const {
21
23
  payload
22
24
  } = action;
23
- if (payload) {
24
- const entities = payload.map((entity, idx) => {
25
- const {
26
- topic,
27
- feature,
28
- hasEdit,
29
- integration,
30
- multiplicity
31
- } = (0, _extractParams.extractParams)(entity, {
32
- isEdit: true
33
- });
34
- // const layout = entity.layout;
35
- const {
36
- layout
37
- } = entity;
38
- const maxminPeak = (0, _chem.Convert2MaxMinPeak)(layout, feature, 0);
39
- const color = _format.default.mutiEntitiesColors(idx);
40
- return {
41
- layout,
42
- topic,
43
- feature,
44
- hasEdit,
45
- integration,
46
- multiplicity,
47
- maxminPeak,
48
- color,
49
- curveIdx: idx
50
- };
51
- });
52
- return Object.assign({}, state, {
53
- curveIdx: 0,
54
- listCurves: entities
55
- });
56
- }
57
- return Object.assign({}, state, {
25
+ if (!payload) return {
26
+ ...state,
58
27
  curveIdx: 0,
59
- listCurves: payload
28
+ listCurves: []
29
+ };
30
+ const isLcmsGroup = (0, _extractEntityLCMS.isLcMsGroup)(payload);
31
+ const entities = payload.map((entity, idx) => {
32
+ const lcmsInfo = (0, _extractEntityLCMS.getLcMsInfo)(entity);
33
+ const layout = isLcmsGroup && lcmsInfo.kind !== 'unknown' ? _list_layout.LIST_LAYOUT.LC_MS : entity.layout;
34
+ const extracted = (0, _extractParams.extractParams)(entity, {
35
+ isEdit: true
36
+ }, null, {
37
+ forceLcms: isLcmsGroup && lcmsInfo.kind !== 'unknown'
38
+ });
39
+ const {
40
+ topic,
41
+ feature,
42
+ hasEdit,
43
+ integration,
44
+ multiplicity,
45
+ features,
46
+ entity: entityFromExtract,
47
+ spectra
48
+ } = extracted;
49
+ let finalFeatures = features;
50
+ if (!finalFeatures || Array.isArray(finalFeatures) && finalFeatures.length === 0) {
51
+ finalFeatures = entityFromExtract?.features || entity.features || [];
52
+ }
53
+ const maxminPeak = (0, _chem.Convert2MaxMinPeak)(layout, feature, 0);
54
+ const color = _format.default.mutiEntitiesColors(idx);
55
+ return {
56
+ layout,
57
+ lcmsKind: lcmsInfo.kind,
58
+ lcmsPolarity: lcmsInfo.polarity,
59
+ topic,
60
+ feature,
61
+ hasEdit,
62
+ integration,
63
+ multiplicity,
64
+ maxminPeak,
65
+ color,
66
+ curveIdx: idx,
67
+ features: finalFeatures,
68
+ entity: entityFromExtract || entity,
69
+ spectra: spectra || entity.spectra
70
+ };
60
71
  });
72
+ const maxIdx = entities.length - 1;
73
+ const safeCurveIdx = Math.min(state.curveIdx || 0, maxIdx);
74
+ return {
75
+ ...state,
76
+ curveIdx: safeCurveIdx,
77
+ listCurves: entities
78
+ };
61
79
  };
62
80
  const curveReducer = (state = initialState, action) => {
63
81
  switch (action.type) {