Skip to content

Commit ce73266

Browse files
feat: set spectra active tab
1 parent ca9ff18 commit ce73266

4 files changed

Lines changed: 33 additions & 12 deletions

File tree

src/NMRiumWrapper.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,16 @@ export default function NMRiumWrapper() {
8585
case 'nmrium':
8686
setDate(loadData.data);
8787
break;
88-
case 'file':
89-
loadSpectra({ files: loadData.data });
88+
case 'file': {
89+
const { data: files, activeTab } = loadData;
90+
loadSpectra({ files, activeTab });
9091
break;
91-
case 'url':
92-
loadSpectra({ urls: loadData.data });
92+
}
93+
case 'url': {
94+
const { data: urls, activeTab } = loadData;
95+
loadSpectra({ urls, activeTab });
9396
break;
94-
97+
}
9598
default: {
9699
throw new Error(
97100
`ERROR! Property 'type' accept only nmrium, url or file.`,

src/demo/NMRiumWrapperDemo.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ export default function NMRiumWrapperDemo() {
8282
events.trigger('load', {
8383
data: files,
8484
type: 'file',
85+
activeTab: '13C',
8586
});
8687
});
8788
}}
@@ -96,6 +97,7 @@ export default function NMRiumWrapperDemo() {
9697
events.trigger('load', {
9798
data: files,
9899
type: 'file',
100+
activeTab: '13C',
99101
});
100102
},
101103
);

src/events/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ type EventType =
1111
type LoadData =
1212
| {
1313
data: string[];
14+
activeTab?: string;
1415
type: 'url';
1516
}
1617
| {
1718
data: File[];
19+
activeTab?: string;
1820
type: 'file';
1921
}
2022
| {

src/hooks/useLoadSpectra.ts

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,18 @@ import {
66
NmriumState,
77
CURRENT_EXPORT_VERSION,
88
ParsingOptions,
9+
ViewState,
910
} from 'nmr-load-save';
1011
import { useCallback, useMemo, useState } from 'react';
1112

1213
import events from '../events';
1314
import { getFileNameFromURL } from '../utilities/getFileNameFromURL';
1415
import { isArrayOfString } from '../utilities/isArrayOfString';
1516

17+
type DeepPartial<T> = {
18+
[K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];
19+
};
20+
1621
const logger = new FifoLogger({
1722
onChange: (log) => {
1823
if (log && ['error', 'fatal'].includes(log.levelLabel) && log?.error) {
@@ -56,7 +61,9 @@ async function loadSpectraFromURLs(urls: string[]) {
5661

5762
type NMRiumData = NmriumState['data'];
5863

59-
type LoadOptions = { urls: string[] } | { files: File[] };
64+
type LoadOptions =
65+
| { urls: string[]; activeTab?: string }
66+
| { files: File[]; activeTab?: string };
6067

6168
interface UseLoadSpectraResult {
6269
data: { version: number; data: NMRiumData };
@@ -66,6 +73,7 @@ interface UseLoadSpectraResult {
6673

6774
export function useLoadSpectra(): UseLoadSpectraResult {
6875
const [data, setData] = useState<NMRiumData>({ spectra: [], molecules: [] });
76+
const [activeTab, setActiveTab] = useState<string>();
6977
const [isLoading, setLoading] = useState<boolean>(false);
7078

7179
const load = useCallback(async (options: LoadOptions) => {
@@ -75,12 +83,14 @@ export function useLoadSpectra(): UseLoadSpectraResult {
7583
if (isArrayOfString(options.urls)) {
7684
const result = await loadSpectraFromURLs(options.urls);
7785
setData(result as NMRiumData);
86+
setActiveTab(options?.activeTab);
7887
} else {
7988
throw new Error('The input must be a valid urls array of string[]');
8089
}
8190
} else if ('files' in options) {
8291
const result = await loadSpectraFromFiles(options.files);
8392
setData(result as NMRiumData);
93+
setActiveTab(options?.activeTab);
8494
}
8595
} catch (error: unknown) {
8696
const loadError = error as Error;
@@ -92,12 +102,16 @@ export function useLoadSpectra(): UseLoadSpectraResult {
92102
}
93103
}, []);
94104

95-
return useMemo(
96-
() => ({
97-
data: { version: CURRENT_EXPORT_VERSION, data },
105+
return useMemo(() => {
106+
let view: DeepPartial<ViewState> = {};
107+
if (activeTab) {
108+
view = { spectra: { activeTab } };
109+
}
110+
111+
return {
112+
data: { version: CURRENT_EXPORT_VERSION, data, view },
98113
load,
99114
isLoading,
100-
}),
101-
[data, isLoading, load],
102-
);
115+
};
116+
}, [activeTab, data, isLoading, load]);
103117
}

0 commit comments

Comments
 (0)