1- import type {
2- NmriumData ,
3- ParsingOptions ,
4- ViewState ,
5- } from '@zakodium/nmrium-core' ;
1+ import type { ParsingOptions , ViewState } from '@zakodium/nmrium-core' ;
62import { CURRENT_EXPORT_VERSION } from '@zakodium/nmrium-core' ;
73import init from '@zakodium/nmrium-core-plugins' ;
84import { FifoLogger } from 'fifo-logger' ;
95import { FileCollection } from 'file-collection' ;
6+ import type { NMRiumState } from 'nmrium' ;
107import { useCallback , useMemo , useState } from 'react' ;
118
129import events from '../events/event.js' ;
@@ -43,9 +40,9 @@ const PARSING_OPTIONS: Partial<ParsingOptions> = {
4340async function loadSpectraFromFiles ( files : File [ ] ) {
4441 const fileCollection = await new FileCollection ( ) . appendFileList ( files ) ;
4542 const {
46- nmriumState : { data } ,
43+ nmriumState : { data, version } ,
4744 } = await core . read ( fileCollection , PARSING_OPTIONS ) ;
48- return data ;
45+ return { data, version } as NMRiumData ;
4946}
5047
5148async function loadSpectraFromURLs ( urls : string [ ] ) {
@@ -60,23 +57,31 @@ async function loadSpectraFromURLs(urls: string[]) {
6057 return { relativePath : path , baseURL : refURL . origin } ;
6158 } , [ ] ) ;
6259
63- const [ { data } ] = await core . readFromWebSource ( { entries } , PARSING_OPTIONS ) ;
64- return data ;
60+ const [ { data, version } ] = await core . readFromWebSource (
61+ { entries } ,
62+ PARSING_OPTIONS ,
63+ ) ;
64+ return { data, version } as NMRiumData ;
6565}
6666
6767type LoadOptions =
6868 | { urls : string [ ] ; activeTab ?: string }
6969 | { files : File [ ] ; activeTab ?: string } ;
7070
71+ export type NMRiumData = Pick < NMRiumState , 'data' | 'version' > ;
72+
7173interface UseLoadSpectraResult {
72- data : { version : number ; data : NmriumData } ;
74+ data : NMRiumData ;
7375 load : ( options : LoadOptions ) => void ;
74- setData : ( data : NmriumData ) => void ;
76+ setData : ( data : NMRiumData ) => void ;
7577 isLoading : boolean ;
7678}
7779
7880export function useLoadSpectra ( ) : UseLoadSpectraResult {
79- const [ data , setData ] = useState < NmriumData > ( { spectra : [ ] , molecules : [ ] } ) ;
81+ const [ data , setData ] = useState < NMRiumData > ( {
82+ data : { spectra : [ ] , molecules : [ ] } ,
83+ version : CURRENT_EXPORT_VERSION ,
84+ } ) ;
8085 const [ activeTab , setActiveTab ] = useState < string > ( ) ;
8186 const [ isLoading , setLoading ] = useState < boolean > ( false ) ;
8287
@@ -86,14 +91,14 @@ export function useLoadSpectra(): UseLoadSpectraResult {
8691 if ( 'urls' in options ) {
8792 if ( isArrayOfString ( options . urls ) ) {
8893 const result = await loadSpectraFromURLs ( options . urls ) ;
89- setData ( result as NmriumData ) ;
94+ setData ( result ) ;
9095 setActiveTab ( options ?. activeTab ) ;
9196 } else {
9297 throw new Error ( 'The input must be a valid urls array of string[]' ) ;
9398 }
9499 } else if ( 'files' in options ) {
95100 const result = await loadSpectraFromFiles ( options . files ) ;
96- setData ( result as NmriumData ) ;
101+ setData ( result ) ;
97102 setActiveTab ( options ?. activeTab ) ;
98103 }
99104 } catch ( error : unknown ) {
@@ -109,8 +114,9 @@ export function useLoadSpectra(): UseLoadSpectraResult {
109114 return useMemo ( ( ) => {
110115 let view : DeepPartial < ViewState > = { } ;
111116 view = { spectra : { activeTab } } ;
117+ const { version, ...other } = data ;
112118 return {
113- data : { version : CURRENT_EXPORT_VERSION , data , view } ,
119+ data : { version : version ?? CURRENT_EXPORT_VERSION , ... other , view } ,
114120 load,
115121 isLoading,
116122 setData,
0 commit comments