Skip to content

Commit c95d83a

Browse files
feat: improve information panel header
- Move the "edit custom meta" option from the accordion header to the panel header - Add a toggle button to show/hide the title box
1 parent bdf619e commit c95d83a

2 files changed

Lines changed: 87 additions & 42 deletions

File tree

‎src/component/panels/Panels.tsx‎

Lines changed: 4 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,14 @@
11
import styled from '@emotion/styled';
22
import type { NMRiumPanelPreferences } from '@zakodium/nmrium-core';
33
import { memo } from 'react';
4-
import { FaRegEdit } from 'react-icons/fa';
5-
import type { ToolbarItemProps } from 'react-science/ui';
64
import { Accordion, Toolbar } from 'react-science/ui';
75

86
import { usePreferences } from '../context/PreferencesContext.js';
9-
import { useActiveSpectrum } from '../hooks/useActiveSpectrum.js';
10-
import { useDialogToggle } from '../hooks/useDialogToggle.js';
117

128
import type { AccordionItem } from './accordionItems.js';
139
import { useAccordionItems } from './hooks/useAccordionItems.js';
1410
import { useGetPanelOptions } from './hooks/useGetPanelOptions.js';
1511
import { useTogglePanel } from './hooks/useTogglePanel.js';
16-
import { InformationEditionModal } from './informationPanel/InformationEditionModal.js';
1712

1813
const Container = styled.div`
1914
flex: 1 1 0%;
@@ -23,9 +18,7 @@ const Container = styled.div`
2318

2419
function PanelsInner() {
2520
const getPanelPreferences = useGetPanelOptions();
26-
const { dialog, openDialog, closeDialog } = useDialogToggle({
27-
informationModal: false,
28-
});
21+
2922
const { dispatch } = usePreferences();
3023
const items = useAccordionItems();
3124
function isOpened(item: AccordionItem) {
@@ -43,10 +36,6 @@ function PanelsInner() {
4336

4437
return (
4538
<Container>
46-
<InformationEditionModal
47-
isOpen={dialog.informationModal}
48-
onCloseDialog={closeDialog}
49-
/>
5039
<Accordion>
5140
{displayedPanels.map((item) => {
5241
const { title, component, id } = item;
@@ -63,15 +52,7 @@ function PanelsInner() {
6352
payload: { id, options: { open: isOpened } },
6453
});
6554
}}
66-
renderToolbar={() => (
67-
<RightButtons
68-
id={id}
69-
onEdit={(event) => {
70-
event.stopPropagation();
71-
openDialog('informationModal');
72-
}}
73-
/>
74-
)}
55+
renderToolbar={() => <RightButtons id={id} />}
7556
>
7657
{component}
7758
</Accordion.Item>
@@ -82,12 +63,8 @@ function PanelsInner() {
8263
);
8364
}
8465

85-
function RightButtons(props: {
86-
id: keyof NMRiumPanelPreferences;
87-
onEdit: ToolbarItemProps['onClick'];
88-
}) {
89-
const { onEdit, id } = props;
90-
const activeSpectrum = useActiveSpectrum();
66+
function RightButtons(props: { id: keyof NMRiumPanelPreferences }) {
67+
const { id } = props;
9168
const toggle = useTogglePanel();
9269
function handleClosePanel(event: any) {
9370
event?.stopPropagation();
@@ -96,19 +73,6 @@ function RightButtons(props: {
9673

9774
return (
9875
<Toolbar>
99-
{id === 'informationPanel' && (
100-
<Toolbar.Item
101-
disabled={!activeSpectrum}
102-
tooltipProps={{ intent: !activeSpectrum ? 'danger' : 'none' }}
103-
icon={<FaRegEdit />}
104-
onClick={onEdit}
105-
tooltip={
106-
!activeSpectrum
107-
? 'Select a spectrum to edit its meta information'
108-
: 'Edit spectrum meta information'
109-
}
110-
/>
111-
)}
11276
<Toolbar.Item
11377
icon="cross"
11478
tooltip="Close panel"
Lines changed: 83 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,48 @@
1+
import type { TooltipProps } from '@blueprintjs/core';
12
import { useMemo } from 'react';
3+
import { FaRegEdit } from 'react-icons/fa';
4+
import { TbTableShortcut } from 'react-icons/tb';
25
import type { InfoPanelData } from 'react-science/ui';
3-
import { InfoPanel } from 'react-science/ui';
6+
import { InfoPanel, Toolbar } from 'react-science/ui';
47

8+
import { usePreferences } from '../../context/PreferencesContext.tsx';
9+
import { useActiveSpectrum } from '../../hooks/useActiveSpectrum.ts';
10+
import { useDialogToggle } from '../../hooks/useDialogToggle.ts';
511
import useSpectrum from '../../hooks/useSpectrum.js';
12+
import { booleanToString } from '../../utility/booleanToString.ts';
13+
14+
import { InformationEditionModal } from './InformationEditionModal.tsx';
615

716
const emptyData = { info: {}, meta: {} };
817

18+
function getToggleInformationBlock(
19+
isVisible: boolean,
20+
isSpectrumSelected: boolean,
21+
) {
22+
if (!isSpectrumSelected) {
23+
return 'Select a spectrum to display the information block';
24+
}
25+
26+
return `${booleanToString(!isVisible, { trueLabel: 'Display' })} information block}`;
27+
}
28+
29+
function getEditTooltip(isSpectrumSelected: boolean) {
30+
if (!isSpectrumSelected) {
31+
return 'Select a spectrum to edit its meta information';
32+
}
33+
return 'Edit spectrum meta information';
34+
}
35+
936
export function InformationPanel() {
1037
const { info, meta, customInfo } = useSpectrum(emptyData);
38+
const activeSpectrum = useActiveSpectrum();
39+
const {
40+
dispatch,
41+
current: { infoBlock },
42+
} = usePreferences();
43+
const { dialog, openDialog, closeDialog } = useDialogToggle({
44+
informationModal: false,
45+
});
1146
const data: InfoPanelData[] = useMemo(
1247
() => [
1348
{ description: 'Custom information', data: customInfo || {} },
@@ -17,5 +52,51 @@ export function InformationPanel() {
1752
[customInfo, info, meta],
1853
);
1954

20-
return <InfoPanel data={data} title="" />;
55+
const toolTipProps: Omit<TooltipProps, 'content'> = {
56+
intent: !activeSpectrum ? 'danger' : 'none',
57+
};
58+
59+
function handleToggleInformationBlock() {
60+
dispatch({
61+
type: 'TOGGLE_INFORMATION_BLOCK',
62+
payload: {},
63+
});
64+
}
65+
66+
return (
67+
<>
68+
<InformationEditionModal
69+
isOpen={dialog.informationModal}
70+
onCloseDialog={closeDialog}
71+
/>
72+
<InfoPanel
73+
leftElement={
74+
<Toolbar>
75+
<Toolbar.Item
76+
disabled={!activeSpectrum}
77+
tooltipProps={toolTipProps}
78+
icon={<TbTableShortcut />}
79+
onClick={handleToggleInformationBlock}
80+
active={infoBlock.visible}
81+
tooltip={getToggleInformationBlock(
82+
infoBlock.visible,
83+
!!activeSpectrum,
84+
)}
85+
/>
86+
<Toolbar.Item
87+
disabled={!activeSpectrum}
88+
tooltipProps={toolTipProps}
89+
icon={<FaRegEdit />}
90+
onClick={() => {
91+
openDialog('informationModal');
92+
}}
93+
tooltip={getEditTooltip(!!activeSpectrum)}
94+
/>
95+
</Toolbar>
96+
}
97+
data={data}
98+
title=""
99+
/>
100+
</>
101+
);
21102
}

0 commit comments

Comments
 (0)