Skip to content

Commit c4db5f0

Browse files
author
Lan Le
committed
feat: WIP avoid cannot reappear deleted peaks
1 parent 6e71ecf commit c4db5f0

File tree

11 files changed

+383
-275
lines changed

11 files changed

+383
-275
lines changed

dist/actions/edit_peak.js

+7-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
Object.defineProperty(exports, "__esModule", {
44
value: true
55
});
6-
exports.rmFromPosList = exports.rmFromNegList = void 0;
6+
exports.rmFromPosList = exports.rmFromNegList = exports.clearAllPeaks = void 0;
77
var _action_type = require("../constants/action_type");
88
const rmFromPosList = payload => ({
99
type: _action_type.EDITPEAK.RM_POSITIVE,
@@ -14,4 +14,9 @@ const rmFromNegList = payload => ({
1414
type: _action_type.EDITPEAK.RM_NEGATIVE,
1515
payload
1616
});
17-
exports.rmFromNegList = rmFromNegList;
17+
exports.rmFromNegList = rmFromNegList;
18+
const clearAllPeaks = payload => ({
19+
type: _action_type.EDITPEAK.CLEAR_ALL,
20+
payload
21+
});
22+
exports.clearAllPeaks = clearAllPeaks;

dist/components/cmd_bar/03_peak.js

+46-10
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ var _ui = require("../../actions/ui");
1717
var _cfg = _interopRequireDefault(require("../../helpers/cfg"));
1818
var _common = require("./common");
1919
var _list_ui = require("../../constants/list_ui");
20-
/* eslint-disable prefer-object-spread, function-paren-newline,
20+
var _tri_btn = _interopRequireDefault(require("./tri_btn"));
21+
var _edit_peak = require("../../actions/edit_peak");
22+
var _extractPeaksEdit = require("../../helpers/extractPeaksEdit");
23+
/* eslint-disable prefer-object-spread, function-paren-newline, no-unused-vars,
2124
react/function-component-definition, react/require-default-props, max-len,
2225
react/no-unused-prop-types */
2326

@@ -34,15 +37,28 @@ const Peak = _ref => {
3437
disableSetRefSt,
3538
isHandleMaxAndMinPeaksSt,
3639
cyclicVotaSt,
37-
curveSt
40+
curveSt,
41+
clearAllPeaksAct,
42+
feature,
43+
editPeakSt,
44+
thresSt,
45+
shiftSt,
46+
layoutSt
3847
} = _ref;
3948
let onSweepPeakAdd = () => setUiSweepTypeAct(_list_ui.LIST_UI_SWEEP_TYPE.PEAK_ADD);
4049
let onSweepPeakDELETE = () => setUiSweepTypeAct(_list_ui.LIST_UI_SWEEP_TYPE.PEAK_DELETE);
4150
let onSweepAnchorShift = () => setUiSweepTypeAct(_list_ui.LIST_UI_SWEEP_TYPE.ANCHOR_SHIFT);
51+
const {
52+
curveIdx
53+
} = curveSt;
54+
const onClearAll = () => {
55+
const dataPeaks = (0, _extractPeaksEdit.extractAutoPeaks)(feature, thresSt, shiftSt, layoutSt);
56+
clearAllPeaksAct({
57+
curveIdx,
58+
dataPeaks
59+
});
60+
};
4261
if (isHandleMaxAndMinPeaksSt) {
43-
const {
44-
curveIdx
45-
} = curveSt;
4662
const {
4763
spectraList
4864
} = cyclicVotaSt;
@@ -84,7 +100,16 @@ const Peak = _ref => {
84100
onClick: onSweepPeakDELETE
85101
}, /*#__PURE__*/_react.default.createElement("span", {
86102
className: (0, _classnames.default)(classes.txt, 'txt-sv-bar-rmpeak')
87-
}, "P-")))), !disableSetRefSt ? /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
103+
}, "P-")))), /*#__PURE__*/_react.default.createElement(_tri_btn.default, {
104+
content: {
105+
tp: 'Clear All Peaks'
106+
},
107+
cb: onClearAll
108+
}, /*#__PURE__*/_react.default.createElement("span", {
109+
className: (0, _classnames.default)(classes.txt, 'txt-sv-bar-rmallpeaks')
110+
}, "P"), /*#__PURE__*/_react.default.createElement("span", {
111+
className: (0, _classnames.default)(classes.txt, classes.txtIcon, 'txt-sv-bar-rmallpeaks')
112+
}, "x")), !disableSetRefSt ? /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
88113
title: /*#__PURE__*/_react.default.createElement("span", {
89114
className: "txt-sv-tp"
90115
}, "Set Reference")
@@ -96,7 +121,7 @@ const Peak = _ref => {
96121
className: classes.icon
97122
})))) : null);
98123
};
99-
const mapStateToProps = (state, _) => (
124+
const mapStateToProps = (state, props) => (
100125
// eslint-disable-line
101126
{
102127
isFocusAddPeakSt: state.ui.sweepType === _list_ui.LIST_UI_SWEEP_TYPE.PEAK_ADD || state.ui.sweepType === _list_ui.LIST_UI_SWEEP_TYPE.CYCLIC_VOLTA_ADD_MAX_PEAK || state.ui.sweepType === _list_ui.LIST_UI_SWEEP_TYPE.CYCLIC_VOLTA_ADD_MIN_PEAK,
@@ -107,10 +132,15 @@ const mapStateToProps = (state, _) => (
107132
disableSetRefSt: _cfg.default.btnCmdSetRef(state.layout),
108133
isHandleMaxAndMinPeaksSt: !_cfg.default.hidePanelCyclicVolta(state.layout),
109134
cyclicVotaSt: state.cyclicvolta,
110-
curveSt: state.curve
135+
curveSt: state.curve,
136+
editPeakSt: state.editPeak.present,
137+
thresSt: state.threshold,
138+
layoutSt: state.layout,
139+
shiftSt: state.shift
111140
});
112141
const mapDispatchToProps = dispatch => (0, _redux.bindActionCreators)({
113-
setUiSweepTypeAct: _ui.setUiSweepType
142+
setUiSweepTypeAct: _ui.setUiSweepType,
143+
clearAllPeaksAct: _edit_peak.clearAllPeaks
114144
}, dispatch);
115145
Peak.propTypes = {
116146
classes: _propTypes.default.object.isRequired,
@@ -123,6 +153,12 @@ Peak.propTypes = {
123153
setUiSweepTypeAct: _propTypes.default.func.isRequired,
124154
isHandleMaxAndMinPeaksSt: _propTypes.default.bool.isRequired,
125155
cyclicVotaSt: _propTypes.default.object.isRequired,
126-
curveSt: _propTypes.default.object.isRequired
156+
curveSt: _propTypes.default.object.isRequired,
157+
clearAllPeaksAct: _propTypes.default.func.isRequired,
158+
feature: _propTypes.default.object.isRequired,
159+
editPeakSt: _propTypes.default.object.isRequired,
160+
thresSt: _propTypes.default.object.isRequired,
161+
layoutSt: _propTypes.default.string.isRequired,
162+
shiftSt: _propTypes.default.object.isRequired
127163
};
128164
var _default = exports.default = (0, _redux.compose)((0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps), (0, _withStyles.default)(styles))(Peak);

dist/components/cmd_bar/index.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ const CmdBar = _ref => {
4444
}, /*#__PURE__*/_react.default.createElement(_viewer.default, {
4545
editorOnly: editorOnly
4646
}), /*#__PURE__*/_react.default.createElement(_zoom.default, null), /*#__PURE__*/_react.default.createElement(_peak.default, {
47-
jcampIdx: jcampIdx
47+
jcampIdx: jcampIdx,
48+
feature: feature
4849
}), /*#__PURE__*/_react.default.createElement(_pecker.default, {
4950
jcampIdx: jcampIdx
5051
}), /*#__PURE__*/_react.default.createElement(_integration.default, null), /*#__PURE__*/_react.default.createElement(_multiplicity.default, null), /*#__PURE__*/_react.default.createElement(_undo_redo.default, null), /*#__PURE__*/_react.default.createElement(_r04_submit.default, {

dist/constants/action_type.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ const EDITPEAK = exports.EDITPEAK = {
1616
ADD_NEGATIVE: 'ADD_TO_NEGATIVE_EDITPEAK_LIST',
1717
RM_NEGATIVE: 'RM_FROM_NEGATIVE_EDITPEAK_LIST',
1818
RM_POSITIVE: 'RM_FROM_POSITIVE_EDITPEAK_LIST',
19-
SHIFT: 'EDITPEAK_SHIFT'
19+
SHIFT: 'EDITPEAK_SHIFT',
20+
CLEAR_ALL: 'EDITPEAK_CLEAR_ALL'
2021
};
2122
const STATUS = exports.STATUS = {
2223
TOGGLEBTNSUBMIT: 'TOGGLE_BTN_SUBMIT',

dist/helpers/extractPeaksEdit.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
44
Object.defineProperty(exports, "__esModule", {
55
value: true
66
});
7-
exports.extractPeaksEdit = exports.extractAreaUnderCurve = void 0;
7+
exports.extractPeaksEdit = exports.extractAutoPeaks = exports.extractAreaUnderCurve = void 0;
88
var _converter = require("./converter");
99
var _chem = require("./chem");
1010
var _shift = require("./shift");
@@ -35,6 +35,13 @@ const extractPeaksEdit = function (feature, editPeakSt, thresSt, shiftSt, layout
3535
return peaksEdit;
3636
};
3737
exports.extractPeaksEdit = extractPeaksEdit;
38+
const extractAutoPeaks = function (feature, thresSt, shiftSt, layoutSt) {
39+
let atIndex = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
40+
const offset = _format.default.isMsLayout(layoutSt) ? msOffset() : niOffset(shiftSt, atIndex);
41+
const peaks = (0, _chem.Convert2Peak)(feature, thresSt.value, offset);
42+
return peaks;
43+
};
44+
exports.extractAutoPeaks = extractAutoPeaks;
3845
const getAUCValue = (integrationSt, layoutSt) => {
3946
const {
4047
refArea,

dist/reducers/reducer_edit_peak.js

+26-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
44
Object.defineProperty(exports, "__esModule", {
55
value: true
66
});
7-
exports.default = void 0;
7+
exports.editPeakReducer = exports.default = void 0;
88
var _reduxUndo = _interopRequireDefault(require("redux-undo"));
99
var _action_type = require("../constants/action_type");
1010
var _undo_redo_config = require("./undo_redo_config");
@@ -180,6 +180,28 @@ const processShift = (state, action) => {
180180
peaks: newPeaks
181181
});
182182
};
183+
const clearAllPeaks = (state, action) => {
184+
const {
185+
curveIdx,
186+
dataPeaks
187+
} = action.payload;
188+
const {
189+
peaks
190+
} = state;
191+
const selectedEditPeaks = peaks[curveIdx];
192+
const {
193+
pos
194+
} = selectedEditPeaks;
195+
const newSelectedEditPeaks = Object.assign({}, selectedEditPeaks, {
196+
pos: [],
197+
neg: [...pos, ...dataPeaks]
198+
});
199+
const newPeaks = [...peaks];
200+
newPeaks[curveIdx] = newSelectedEditPeaks;
201+
return Object.assign({}, state, {
202+
peaks: newPeaks
203+
});
204+
};
183205
const editPeakReducer = function () {
184206
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
185207
let action = arguments.length > 1 ? arguments[1] : undefined;
@@ -194,6 +216,8 @@ const editPeakReducer = function () {
194216
return rmFromNeg(state, action);
195217
case _action_type.EDITPEAK.SHIFT:
196218
return processShift(state, action);
219+
case _action_type.EDITPEAK.CLEAR_ALL:
220+
return clearAllPeaks(state, action);
197221
case _action_type.MANAGER.RESETALL:
198222
return {
199223
selectedIdx: 0,
@@ -207,5 +231,6 @@ const editPeakReducer = function () {
207231
return _undo_redo_config.undoRedoActions.indexOf(action.type) >= 0 ? Object.assign({}, state) : state;
208232
}
209233
};
234+
exports.editPeakReducer = editPeakReducer;
210235
const undoableEditPeakReducer = (0, _reduxUndo.default)(editPeakReducer, _undo_redo_config.undoRedoConfig);
211236
var _default = exports.default = undoableEditPeakReducer;

dist/reducers/undo_redo_config.js

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/__tests__/units/helpers/extractPeaksEdit.test.tsx

+23-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { extractPeaksEdit, extractAreaUnderCurve } from "../../../helpers/extractPeaksEdit";
1+
import { extractPeaksEdit, extractAreaUnderCurve, extractAutoPeaks } from "../../../helpers/extractPeaksEdit";
22
import { LIST_LAYOUT } from "../../../constants/list_layout";
33
import { LIST_SHIFT_1H } from "../../../constants/list_shift";
44

@@ -29,6 +29,28 @@ describe('Test extract edited peaks and area under curve', () => {
2929
})
3030
})
3131

32+
describe('Test extract auto peaks from feature', () => {
33+
const feature = { data: [{ x: [1, 2, 3], y: [1, 2, 3] }], operation: { layout: '1H'}, maxY: 2, peakUp: true }
34+
const threshold = { value: 55 }
35+
const shiftSt = {
36+
shifts: [
37+
{ ref: LIST_SHIFT_1H[1], peak: { x: 2, y: 2 } }
38+
]
39+
}
40+
41+
it('Extract with MS layout', () => {
42+
const peaks = extractAutoPeaks(feature, threshold, shiftSt, LIST_LAYOUT.MS)
43+
const expectedPeaks = [{x: 2, y: 2}, {x: 3, y: 3}]
44+
expect(peaks).toEqual(expectedPeaks)
45+
})
46+
47+
it('Extract with non-MS layout', () => {
48+
const peaks = extractAutoPeaks(feature, threshold, shiftSt, LIST_LAYOUT.H1)
49+
const expectedPeaks = [{x: 2.04, y: 2}, {x: 3.04, y: 3}]
50+
expect(peaks).toEqual(expectedPeaks)
51+
})
52+
})
53+
3254
describe('Test extract AUC', () => {
3355
type Integration = { area: number }
3456
type IntegrationState = { refArea: number, refFactor: number, stack: Array<Integration>}

src/components/cmd_bar/03_peak.js

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* eslint-disable prefer-object-spread, function-paren-newline,
1+
/* eslint-disable prefer-object-spread, function-paren-newline, no-unused-vars,
22
react/function-component-definition, react/require-default-props, max-len,
33
react/no-unused-prop-types */
44
import React from 'react';
@@ -17,7 +17,7 @@ import { MuButton, commonStyle, focusStyle } from './common';
1717
import { LIST_UI_SWEEP_TYPE } from '../../constants/list_ui';
1818
import TriBtn from './tri_btn';
1919
import { clearAllPeaks } from '../../actions/edit_peak';
20-
import { extractPeaksEdit } from '../../helpers/extractPeaksEdit';
20+
import { extractAutoPeaks } from '../../helpers/extractPeaksEdit';
2121

2222
const styles = () => (
2323
Object.assign(
@@ -40,8 +40,10 @@ const Peak = ({
4040
let onSweepPeakDELETE = () => setUiSweepTypeAct(LIST_UI_SWEEP_TYPE.PEAK_DELETE);
4141
let onSweepAnchorShift = () => setUiSweepTypeAct(LIST_UI_SWEEP_TYPE.ANCHOR_SHIFT);
4242
const { curveIdx } = curveSt;
43-
const dataPeaks = extractPeaksEdit(feature, editPeakSt, thresSt, shiftSt, layoutSt);
44-
const onClearAll = () => clearAllPeaksAct({ curveIdx, dataPeaks });
43+
const onClearAll = () => {
44+
const dataPeaks = extractAutoPeaks(feature, thresSt, shiftSt, layoutSt);
45+
clearAllPeaksAct({ curveIdx, dataPeaks });
46+
};
4547
if (isHandleMaxAndMinPeaksSt) {
4648
const { spectraList } = cyclicVotaSt;
4749
const spectra = spectraList[curveIdx];

src/helpers/extractPeaksEdit.js

+7-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ const extractPeaksEdit = (feature, editPeakSt, thresSt, shiftSt, layoutSt, atInd
2424
return peaksEdit;
2525
};
2626

27+
const extractAutoPeaks = (feature, thresSt, shiftSt, layoutSt, atIndex = 0) => {
28+
const offset = Format.isMsLayout(layoutSt) ? msOffset() : niOffset(shiftSt, atIndex);
29+
const peaks = Convert2Peak(feature, thresSt.value, offset);
30+
return peaks;
31+
};
32+
2733
const getAUCValue = (integrationSt, layoutSt) => {
2834
const { refArea, refFactor, stack } = integrationSt;
2935
if (Array.isArray(stack) && stack.length > 0) {
@@ -47,4 +53,4 @@ const extractAreaUnderCurve = (allIntegrationSt, presentIntegrationSt, layoutSt)
4753
return null;
4854
};
4955

50-
export { extractPeaksEdit, extractAreaUnderCurve }; // eslint-disable-line
56+
export { extractPeaksEdit, extractAreaUnderCurve, extractAutoPeaks }; // eslint-disable-line

0 commit comments

Comments
 (0)