diff --git a/src/NMRiumWrapper.tsx b/src/NMRiumWrapper.tsx index 10978e3..9bb85d7 100644 --- a/src/NMRiumWrapper.tsx +++ b/src/NMRiumWrapper.tsx @@ -23,7 +23,7 @@ export default function NMRiumWrapper() { const { workspace, preferences, defaultEmptyMessage, customWorkspaces } = usePreferences(); - const { load: loadSpectra, data, isLoading } = useLoadSpectra(); + const { load: loadSpectra, data, isLoading, setActiveTab } = useLoadSpectra(); const dataChangeHandler = useCallback((state, source) => { // avoid triggering data-change event for SET_2D_LEVEL action, This should be handled internally in NMRium @@ -48,6 +48,11 @@ export default function NMRiumWrapper() { } break; } + case 'selectTab': { + const { tab } = request.params; + setActiveTab({ tab: tab.toUpperCase() }); + break; + } default: { throw new Error( `ERROR! Property 'type' accepts only 'exportViewerAsBlob'.`, diff --git a/src/events/types.ts b/src/events/types.ts index 5b8925b..eef988a 100644 --- a/src/events/types.ts +++ b/src/events/types.ts @@ -29,10 +29,14 @@ type LoadData = activeTab?: string; }; -interface ActionRequest { - type: 'exportSpectraViewerAsBlob'; - // params?: any; -} +type ActionRequest = + | { + type: 'exportSpectraViewerAsBlob'; + } + | { + type: 'selectTab'; + params: { tab: string }; + }; interface ActionResponse { type: 'exportSpectraViewerAsBlob'; diff --git a/src/hooks/useLoadSpectra.ts b/src/hooks/useLoadSpectra.ts index ffc0c77..830bc9f 100644 --- a/src/hooks/useLoadSpectra.ts +++ b/src/hooks/useLoadSpectra.ts @@ -28,6 +28,7 @@ interface UseLoadSpectraResult { data: NMRiumData | null; load: (options: LoadOptions) => Promise; isLoading: boolean; + setActiveTab: (input: { tab: string }) => void; } const core = init(); @@ -77,7 +78,7 @@ async function loadSpectraFromURLs(urls: string[]): Promise { export function useLoadSpectra(): UseLoadSpectraResult { const [result, setResult] = useState(null); - const [activeTab, setActiveTab] = useState(); + const [activeTab, setActiveTab] = useState<{ tab: string } | undefined>(); const [isLoading, setLoading] = useState(false); const load = useCallback(async (options: LoadOptions) => { @@ -102,7 +103,7 @@ export function useLoadSpectra(): UseLoadSpectraResult { } setResult(loadedResult); - setActiveTab(resolvedActiveTab); + setActiveTab({ tab: resolvedActiveTab ?? '' }); const state = { ...loadedResult.state, data: { @@ -127,7 +128,9 @@ export function useLoadSpectra(): UseLoadSpectraResult { }, []); return useMemo(() => { - const view = { spectra: { activeTab } } as unknown as ViewState; + const view = { + spectra: { activeTab: activeTab?.tab }, + } as unknown as ViewState; const data: NMRiumData | null = result ? { @@ -140,6 +143,6 @@ export function useLoadSpectra(): UseLoadSpectraResult { } : null; - return { data, load, isLoading }; - }, [activeTab, result, isLoading, load]); + return { data, load, isLoading, setActiveTab }; + }, [activeTab, result, isLoading, load, setActiveTab]); }