Skip to content

Commit

Permalink
feat: resurrect spectrum from database spectrum
Browse files Browse the repository at this point in the history
close #1259
  • Loading branch information
hamed-musallam committed Oct 7, 2021
1 parent 35f7b33 commit 010129f
Show file tree
Hide file tree
Showing 7 changed files with 90 additions and 19 deletions.
2 changes: 1 addition & 1 deletion src/component/panels/databasePanel/DatabasePanel.tsx
Expand Up @@ -154,7 +154,7 @@ function DatabasePanelInner({ nucleus }: DatabaseInnerProps) {
containerStyle={{ overflow: 'hidden', height: '100%' }}
>
<div style={{ overflow: 'auto', height: '100%', display: 'block' }}>
<DatabaseTable data={result.data} />
<DatabaseTable data={result.data} nucleus={nucleus} />
</div>
<DatabasePreferences ref={settingRef} />
</ReactCardFlip>
Expand Down
41 changes: 38 additions & 3 deletions src/component/panels/databasePanel/DatabaseTable/index.tsx
@@ -1,8 +1,12 @@
import { useMemo, memo } from 'react';
/** @jsxImportSource @emotion/react */
import { useMemo, memo, useCallback } from 'react';
import { FaPlus } from 'react-icons/fa';
import { useDispatch } from '../../../context/DispatchContext';

import { usePreferences } from '../../../context/PreferencesContext';
import ReactTable from '../../../elements/ReactTable/ReactTable';
import setCustomColumn from '../../../elements/ReactTable/setCustomColumn';
import { RESURRECTING_SPECTRUM_FROM_RANGES } from '../../../reducer/types/Types';
import { getValue } from '../../../utility/LocalStorage';
import NoTableData from '../../extra/placeholder/NoTableData';
import { databaseDefaultValues } from '../../extra/preferences/defaultValues';
Expand All @@ -12,10 +16,24 @@ import { RangesRenderer } from './RangesRenderer';

interface DatabaseTableProps {
data: any;
nucleus: string;
}

function DatabaseTable({ data }: DatabaseTableProps) {
function DatabaseTable({ data, nucleus }: DatabaseTableProps) {
const preferences = usePreferences();
const dispatch = useDispatch();

const resurrectHandler = useCallback(
(data) => {
const { ranges, solvent } = data.original;
dispatch({
type: RESURRECTING_SPECTRUM_FROM_RANGES,
payload: { ranges, info: { solvent, nucleus } },
});
},
[dispatch, nucleus],
);

const initialColumns = useMemo(
() => [
{
Expand All @@ -25,8 +43,25 @@ function DatabaseTable({ data }: DatabaseTableProps) {
minWidth: '24px',
Cell: ({ row }) => row.index + 1,
},
{
index: 20,
Header: '',
width: '1%',
maxWidth: '24px',
minWidth: '24px',
id: 'add-button',
Cell: ({ row }) => (
<button
type="button"
className="add-button"
onClick={() => resurrectHandler(row)}
>
<FaPlus />
</button>
),
},
],
[],
[resurrectHandler],
);

const tableColumns = useMemo(() => {
Expand Down
16 changes: 10 additions & 6 deletions src/component/reducer/Reducer.ts
Expand Up @@ -15,6 +15,7 @@ import { options } from '../toolbar/ToolTypes';
import { nmredataToNmrium } from '../utility/nmredataToNmrium';

import * as CorrelationsActions from './actions/CorrelationsActions';
import * as DatabaseActions from './actions/DatabaseActions';
import { setWidth, handleSetDimensions } from './actions/DimensionsActions';
import * as DomainActions from './actions/DomainActions';
import * as FiltersActions from './actions/FiltersActions';
Expand All @@ -33,7 +34,7 @@ import {
applyKeyPreferencesHandler,
} from './actions/PreferencesActions';
import * as RangesActions from './actions/RangesActions';
import * as SpectraAanalysisActions from './actions/SpectraAanalysisAction';
import * as SpectraAnalysisActions from './actions/SpectraAnalysisAction';
import * as SpectrumsActions from './actions/SpectrumsActions';
import * as ToolsActions from './actions/ToolsActions';
import * as ZonesActions from './actions/ZonesActions';
Expand Down Expand Up @@ -698,15 +699,18 @@ function innerSpectrumReducer(draft: Draft<State>, action) {
return ZonesActions.handleAutoSpectraZonesDetection(draft);

case types.ANALYZE_SPECTRA:
return SpectraAanalysisActions.analyzeSpectra(draft, action);
return SpectraAnalysisActions.analyzeSpectra(draft, action);
case types.DELETE_ANALYZE_SPECTRA_RANGE:
return SpectraAanalysisActions.handleDeleteSpectraRanges(draft, action);
return SpectraAnalysisActions.handleDeleteSpectraRanges(draft, action);
case types.RESIZE_ANALYZE_SPECTRA_RANGE:
return SpectraAanalysisActions.handleResizeSpectraRange(draft, action);
return SpectraAnalysisActions.handleResizeSpectraRange(draft, action);
case types.SET_ANALYZE_SPECTRA_COLUMNS:
return SpectraAanalysisActions.handleSetColumns(draft, action);
return SpectraAnalysisActions.handleSetColumns(draft, action);
case types.FILTER_SPECTRA_COLUMN:
return SpectraAanalysisActions.handleFilterColumn(draft, action);
return SpectraAnalysisActions.handleFilterColumn(draft, action);

case types.RESURRECTING_SPECTRUM_FROM_RANGES:
return DatabaseActions.handleRangeResurrecting(draft, action);

case UNDO:
return handleHistoryUndo(draft);
Expand Down
21 changes: 21 additions & 0 deletions src/component/reducer/actions/DatabaseActions.ts
@@ -0,0 +1,21 @@
import { Draft } from 'immer';

import { generateSpectrumFromRanges } from '../../../data/data1d/Spectrum1D';
import { State } from '../Reducer';

import { setDomain } from './DomainActions';
import { setZoom } from './Zoom';

function handleRangeResurrecting(draft: Draft<State>, action) {
const {
payload: { ranges, info },
usedColors,
} = action;

const datum = generateSpectrumFromRanges(ranges, info, usedColors['1d']);
draft.data.push(datum);
setDomain(draft);
setZoom(draft, { scale: 0.8 });
}

export { handleRangeResurrecting };
2 changes: 2 additions & 0 deletions src/component/reducer/types/Types.ts
Expand Up @@ -117,3 +117,5 @@ export const AUTO_RANGES_SPECTRA_PICKING = 'AUTO_RANGES_SPECTRA_PICKING';
export const AUTO_ZONES_SPECTRA_PICKING = 'AUTO_ZONES_SPECTRA_PICKING';
export const GENERATE_SPECTRUM_FROM_PUBLICATION_STRING =
'GENERATE_SPECTRUM_FROM_PUBLICATION_STRING';
export const RESURRECTING_SPECTRUM_FROM_RANGES =
'RESURRECTING_SPECTRUM_FROM_RANGES';
27 changes: 18 additions & 9 deletions src/data/data1d/Spectrum1D.ts
Expand Up @@ -569,19 +569,17 @@ export function changeRangeSignal(datum, rangeID, signalID, newSignalValue) {
return shiftValue;
}

export function generateSpectrumFromPublicationString(
publicationString: string,
usedColors,
export function generateSpectrumFromRanges(
ranges,
info: { nucleus: string; solvent: string },
usedColors: string[],
) {
const {
ranges,
experiment: { nucleus, solvent },
} = resurrect(publicationString);

const { nucleus, solvent } = info;
const { x, y } = rangesToXY(ranges, {
frequency: 400,
nbPoints: 524288,
});

const datum = initiateDatum1D(
{
data: { x, im: null, re: y },
Expand All @@ -598,10 +596,21 @@ export function generateSpectrumFromPublicationString(
);
datum.ranges.values = mapRanges(ranges, datum);
updateIntegralRanges(datum);

return datum;
}

export function generateSpectrumFromPublicationString(
publicationString: string,
usedColors,
) {
const {
ranges,
experiment: { nucleus, solvent },
} = resurrect(publicationString);

return generateSpectrumFromRanges(ranges, { nucleus, solvent }, usedColors);
}

export function isSpectrum1D(spectrum: Datum1D | Datum2D): spectrum is Datum1D {
return spectrum.info.dimension === 1;
}

0 comments on commit 010129f

Please sign in to comment.