Skip to content

Commit

Permalink
refactor: 2D phase correction filter options panel
Browse files Browse the repository at this point in the history
  • Loading branch information
hamed-musallam committed Sep 24, 2024
1 parent 528681f commit 67ee202
Show file tree
Hide file tree
Showing 5 changed files with 345 additions and 147 deletions.
4 changes: 2 additions & 2 deletions src/component/header/Header.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import { options } from '../toolbar/ToolTypes';
import { AutoPeakPickingOptionPanel } from './AutoPeakPickingOptionPanel';
import BaseLineCorrectionPanel from './BaseLineCorrectionPanel';
import { HeaderContainer } from './HeaderContainer';
import PhaseCorrectionTwoDimensionsPanel from './PhaseCorrectionTwoDimensionsPanel';
import { SimplePhaseCorrectionTwoDimensionsPanel } from './SimplePhaseCorrectionTwoDimensionsPanel';
import RangesPickingOptionPanel from './RangesPickingOptionPanel';
import { SimpleApodizationOptionsPanel } from './SimpleApodizationOptionsPanel';
import { SimplePhaseCorrectionOptionsPanel } from './SimplePhaseCorrectionOptionsPanel';
Expand Down Expand Up @@ -110,7 +110,7 @@ function HeaderInner(props: HeaderInnerProps) {
case options.phaseCorrection.id:
return <SimplePhaseCorrectionOptionsPanel />;
case options.phaseCorrectionTwoDimensions.id:
return <PhaseCorrectionTwoDimensionsPanel />;
return <SimplePhaseCorrectionTwoDimensionsPanel />;
case options.peakPicking.id:
return <AutoPeakPickingOptionPanel />;
case options.rangePicking.id:
Expand Down
108 changes: 108 additions & 0 deletions src/component/header/SimplePhaseCorrectionTwoDimensionsPanel.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
/** @jsxImportSource @emotion/react */
import { Select } from '@blueprintjs/select';
import { css } from '@emotion/react';
import { Filters } from 'nmr-processing';
import { FaRulerHorizontal, FaRulerVertical } from 'react-icons/fa';
import { MdLooksTwo } from 'react-icons/md';
import { Button, Toolbar } from 'react-science/ui';

import ActionButtons from '../elements/ActionButtons';
import InputRange from '../elements/InputRange';
import Label from '../elements/Label';
import { useFilter } from '../hooks/useFilter';
import {
phaseCorrectionalAlgorithms,
usePhaseCorrectionTwoDimensions,
AlgorithmItem,
} from '../panels/filtersPanel/Filters/usePhaseCorrectionTwoDimensions';

import { headerLabelStyle } from './Header';
import { HeaderContainer } from './HeaderContainer';

export function SimplePhaseCorrectionTwoDimensionsPanel() {
const filter = useFilter(Filters.phaseCorrectionTwoDimensions.id);
const {
ph0Ref,
ph1Ref,
phaseCorrectionSelectItem,
defaultPhaseCorrectionSelectProps,
activeTraceDirection,
addTracesToBothDirections,
handleRangeChange,
handleApplyFilter,
handleCancelFilter,
handleToggleAddTraceToBothDirections,
onChangeHandler,
} = usePhaseCorrectionTwoDimensions(filter);

return (
<HeaderContainer style={{ padding: '0 5px' }}>
<div style={{ padding: '0 5px' }}>
<Select<AlgorithmItem>
items={phaseCorrectionalAlgorithms}
filterable={false}
itemsEqual="value"
{...defaultPhaseCorrectionSelectProps}
>
<Button
text={phaseCorrectionSelectItem?.label}
rightIcon="double-caret-vertical"
/>
</Select>
</div>
{phaseCorrectionSelectItem?.value === 'manual' && (
<>
<Label title="Direction:" style={headerLabelStyle}>
<Toolbar>
<Toolbar.Item
css={css`
border: 1px solid #f7f7f7;
`}
tooltip="Horizontal"
icon={<FaRulerHorizontal />}
active={activeTraceDirection === 'horizontal'}
onClick={() => onChangeHandler('horizontal')}
/>
<Toolbar.Item
css={css`
border: 1px solid #f7f7f7;
`}
tooltip="Vertical"
icon={<FaRulerVertical />}
active={activeTraceDirection === 'vertical'}
onClick={() => onChangeHandler('vertical')}
/>
</Toolbar>
</Label>
<div style={{ paddingRight: '5px' }}>
<Toolbar>
<Toolbar.Item
tooltip="Add the trace in both directions"
icon={<MdLooksTwo />}
active={addTracesToBothDirections}
onClick={handleToggleAddTraceToBothDirections}
/>
</Toolbar>
</div>
<InputRange
ref={ph0Ref}
name="ph0"
label="Change PH0 (click and drag)"
shortLabel="Ph0"
style={{ width: '20%' }}
onChange={handleRangeChange}
/>
<InputRange
ref={ph1Ref}
name="ph1"
label="Change PH1 (click and drag)"
shortLabel="Ph1"
style={{ width: '20%' }}
onChange={handleRangeChange}
/>
</>
)}
<ActionButtons onDone={handleApplyFilter} onCancel={handleCancelFilter} />
</HeaderContainer>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
/** @jsxImportSource @emotion/react */
import { Select } from '@blueprintjs/select';
import { css } from '@emotion/react';
import { Filters } from 'nmr-processing';
import { CSSProperties } from 'react';
import { FaRulerHorizontal, FaRulerVertical } from 'react-icons/fa';
import { MdLooksTwo } from 'react-icons/md';
import { Button, Toolbar } from 'react-science/ui';

import InputRange from '../../../elements/InputRange';
import Label, { LabelStyle } from '../../../elements/Label';
import { NumberInput2 } from '../../../elements/NumberInput2';
import { Sections } from '../../../elements/Sections';
import { useFilter } from '../../../hooks/useFilter';
import {
phaseCorrectionalAlgorithms,
usePhaseCorrectionTwoDimensions,
AlgorithmItem,
} from '../../../panels/filtersPanel/Filters/usePhaseCorrectionTwoDimensions';

import { FilterActionButtons } from './FilterActionButtons';
import { HeaderContainer, StickyHeader } from './InnerFilterHeader';

const inputRangeStyle: CSSProperties = {
padding: '5px 10px',
};

const formLabelStyle: LabelStyle = {
label: {
flex: 2,
},
wrapper: {
flex: 10,
display: 'flex',
},
container: {
marginBottom: '5px',
},
};

export default function PhaseCorrectionTwoDimensionsOptionsPanel() {
const filter = useFilter(Filters.phaseCorrectionTwoDimensions.id);
const {
ph0Ref,
ph1Ref,
phaseCorrectionSelectItem,
defaultPhaseCorrectionSelectProps,
activeTraceDirection,
addTracesToBothDirections,
handleRangeChange,
handleApplyFilter,
handleCancelFilter,
handleToggleAddTraceToBothDirections,
onChangeHandler,
handleInputValueChange,
value,
} = usePhaseCorrectionTwoDimensions(filter);

return (
<>
<StickyHeader>
<HeaderContainer>
<div style={{ display: 'flex' }}>
{phaseCorrectionSelectItem?.value === 'manual' && (
<>
<Label title="Direction:">
<Toolbar>
<Toolbar.Item
css={css`
border: 1px solid #f7f7f7;
`}
tooltip="Horizontal"
icon={<FaRulerHorizontal />}
active={activeTraceDirection === 'horizontal'}
onClick={() => onChangeHandler('horizontal')}
/>
<Toolbar.Item
css={css`
border: 1px solid #f7f7f7;
`}
tooltip="Vertical"
icon={<FaRulerVertical />}
active={activeTraceDirection === 'vertical'}
onClick={() => onChangeHandler('vertical')}
/>
</Toolbar>
</Label>
<div style={{ paddingRight: '5px' }}>
<Toolbar>
<Toolbar.Item
tooltip="Add the trace in both directions"
icon={<MdLooksTwo />}
active={addTracesToBothDirections}
onClick={handleToggleAddTraceToBothDirections}
/>
</Toolbar>
</div>
</>
)}
</div>
<FilterActionButtons
onConfirm={handleApplyFilter}
onCancel={handleCancelFilter}
/>
</HeaderContainer>
</StickyHeader>
<Sections.Body>
<div style={{ display: 'flex', flexDirection: 'column' }}>
<Label title="Algorithm:" style={formLabelStyle}>
<Select<AlgorithmItem>
items={phaseCorrectionalAlgorithms}
filterable={false}
itemsEqual="value"
{...defaultPhaseCorrectionSelectProps}
>
<Button
text={phaseCorrectionSelectItem?.label}
rightIcon="double-caret-vertical"
outlined
/>
</Select>
</Label>
{phaseCorrectionSelectItem?.value === 'manual' && (
<>
<Label title="PH0:" style={formLabelStyle}>
<NumberInput2
name="ph0"
onValueChange={handleInputValueChange}
value={value[activeTraceDirection].ph0}
debounceTime={250}
style={{ width: '100px' }}
/>
<InputRange
ref={ph0Ref}
name="ph0"
label="Change PH0 (click and drag)"
shortLabel="Ph0"
onChange={handleRangeChange}
/>
</Label>

<Label title="PH1:" style={formLabelStyle}>
<NumberInput2
name="ph1"
onValueChange={handleInputValueChange}
value={value[activeTraceDirection].ph1}
debounceTime={250}
style={{ width: '100px' }}
/>
<InputRange
ref={ph1Ref}
name="ph1"
label="Change PH1 (click and drag)"
shortLabel="Ph1"
onChange={handleRangeChange}
style={inputRangeStyle}
/>
</Label>
</>
)}
</div>
</Sections.Body>
</>
);
}
10 changes: 8 additions & 2 deletions src/component/panels/filtersPanel/Filters/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,20 @@ import { LabelStyle } from '../../../elements/Label';

import ApodizationOptionsPanel from './ApodizationOptionsPanel';
import PhaseCorrectionOptionsPanel from './PhaseCorrectionOptionsPanel';
import PhaseCorrectionTwoDimensionsOptionsPanel from './PhaseCorrectionTwoDimensionsOptionsPanel';
import ZeroFillingOptionsPanel from './ZeroFillingOptionsPanel';

const { apodization, phaseCorrection, zeroFilling } = Filters;
const {
apodization,
phaseCorrection,
phaseCorrectionTwoDimensions,
zeroFilling,
} = Filters;
export const filterOptionPanels = {
[apodization.id]: ApodizationOptionsPanel,
[phaseCorrection.id]: PhaseCorrectionOptionsPanel,
[phaseCorrection.id]: PhaseCorrectionOptionsPanel,
[zeroFilling.id]: ZeroFillingOptionsPanel,
[phaseCorrectionTwoDimensions.id]: PhaseCorrectionTwoDimensionsOptionsPanel,
};

export const formLabelStyle: LabelStyle = {
Expand Down
Loading

0 comments on commit 67ee202

Please sign in to comment.