Skip to content

Commit 30609da

Browse files
feat: update to nmrium pre-relase 0.33.0-pre.1674466111
1 parent 4d04f7a commit 30609da

9 files changed

Lines changed: 1856 additions & 1089 deletions

File tree

package-lock.json

Lines changed: 1194 additions & 698 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
"dependencies": {
1616
"@emotion/react": "^11.10.5",
1717
"@vitejs/plugin-react-swc": "^3.0.1",
18-
"filelist-utils": "^1.1.1",
19-
"nmr-load-save": "^0.4.8",
20-
"nmrium": "^0.33.0-pre.1667755480",
18+
"filelist-utils": "^1.5.1",
19+
"nmr-load-save": "^0.7.14",
20+
"nmrium": "^0.33.0-pre.1674466111",
2121
"react-router-dom": "^6.7.0"
2222
},
2323
"scripts": {

src/NMRiumWrapper.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { useEffect, useState, useCallback, CSSProperties, useRef } from 'react';
33
import events from './events';
44
import { usePreferences } from './hooks/usePreferences';
55
import { useLoadSpectra } from './hooks/useLoadSpectra';
6+
import { mapSourceObject } from './utilities/mapSourceObject';
67

78
const styles: Record<'container' | 'loadingContainer', CSSProperties> = {
89
container: {
@@ -33,7 +34,9 @@ export default function NMRiumWrapper() {
3334
const nmriumRef = useRef<NMRiumRef>(null);
3435
const [data, setDate] = useState<NMRiumData>();
3536
const { workspace, preferences } = usePreferences();
36-
const dataChangeHandler = useCallback((nmriumData) => {
37+
const dataChangeHandler = useCallback((nmriumData: any) => {
38+
// eslint-disable-next-line no-param-reassign
39+
nmriumData.data.spectra = mapSourceObject(nmriumData.data.spectra);
3740
events.trigger('data-change', nmriumData);
3841
}, []);
3942

src/demo/NMRiumWrapperDemo.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ export default function NMRiumWrapperDemo() {
4545
'https://cheminfo.github.io/nmr-dataset-demo/cytisine/13c.jdx',
4646
'https://cheminfo.github.io/nmr-dataset-demo/cytisine/1h.jdx',
4747
'https://cheminfo.github.io/bruker-data-test/data/zipped/aspirin-1h.zip',
48-
'../data/13c.zip',
48+
// '../data/13c.zip',
49+
// 'https://cloud.uni-jena.de/s/y72GbCX8bJbmpJT/download/10.zip',
50+
// 'https://cloud.uni-jena.de/s/jsMed9fmqWZzo6r/download/53.zip',
4951
],
5052
type: 'url',
5153
});

src/events/types.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { NMRiumData } from 'nmrium';
2-
import { State } from 'nmrium/lib/component/reducer/Reducer';
1+
import { NMRiumData, NMRiumDataReturn } from 'nmrium';
32
import { BlobObject } from 'nmrium/lib/component/utility/export';
43

54
type EventType =
@@ -34,7 +33,7 @@ type ActionResponse = {
3433
};
3534

3635
type EventData<T extends EventType> = T extends 'data-change'
37-
? State
36+
? NMRiumDataReturn
3837
: T extends 'load'
3938
? LoadData
4039
: T extends 'action-request'

src/hooks/useLoadSpectra.ts

Lines changed: 48 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,45 @@
11
import { useCallback, useMemo, useState } from 'react';
2-
import { read } from 'nmr-load-save';
2+
import { read, readSource, Source } from 'nmr-load-save';
33
import { Spectrum } from 'nmr-load-save/lib/types/Spectra/Spectrum';
4+
import { fileCollectionFromFiles } from 'filelist-utils';
45
import events from '../events';
56
import { isArrayOfString } from '../utilities/isArrayOfString';
6-
import { loadFilesFromURLs } from '../utilities/loadFilesFromURLs';
7-
import { createFileCollectionFromFiles } from '../utilities/createFileCollection';
7+
import { getFileNameFromURL } from '../utilities/getFileNameFromURL';
8+
9+
async function loadSpectraFromFiles(files: File[]) {
10+
// TODO use the new function from filelist-utils once they solve the problem of create filesCollection from files with empty webkitrelativepath
11+
const fileCollection = await fileCollectionFromFiles(files);
12+
const result = await read(fileCollection);
13+
// eslint-disable-next-line no-restricted-syntax
14+
for (const spectrum of result.data.spectra) {
15+
spectrum.source = {} as Source;
16+
}
17+
return result;
18+
}
19+
20+
async function loadSpectraFromURLs(urls: string[]) {
21+
const promises = urls.map((url) => {
22+
const refURL = new URL(url);
23+
let name = getFileNameFromURL(url);
24+
const hasExtension = name && name.indexOf('.') !== -1;
25+
if (!hasExtension) {
26+
name = `${name}.zip`;
27+
}
28+
return readSource({
29+
baseURL: refURL.origin,
30+
files: [{ relativePath: refURL.pathname, name }],
31+
});
32+
}, []);
33+
const results = await Promise.all(promises);
34+
const spectra: any[] = [];
35+
const molecules: any[] = [];
36+
// eslint-disable-next-line no-restricted-syntax
37+
for (const result of results) {
38+
spectra.push(...result.data.spectra);
39+
molecules.push(...result.data.spectra);
40+
}
41+
return { spectra, molecules };
42+
}
843

944
export function useLoadSpectra() {
1045
const [data, setData] = useState<{
@@ -17,21 +52,22 @@ export function useLoadSpectra() {
1752
async (options: { urls: string[] } | { files: File[] }) => {
1853
setLoading(true);
1954
try {
20-
let inputFiles: File[] = [];
21-
2255
if ('urls' in options) {
2356
if (isArrayOfString(options.urls)) {
24-
inputFiles = await loadFilesFromURLs(options.urls);
57+
const { spectra, molecules } = await loadSpectraFromURLs(
58+
options.urls,
59+
);
60+
setData({ spectra, molecules });
2561
} else {
26-
throw new Error('The input must be string[] ');
62+
throw new Error('The input must be a valid urls array of string[]');
2763
}
2864
} else if ('files' in options) {
29-
inputFiles = options.files;
65+
// TODO use the new function from filelist-utils once they solve the problem of create filesCollection from files with empty webkitrelativepath
66+
const {
67+
data: { spectra, molecules },
68+
} = await loadSpectraFromFiles(options.files);
69+
setData({ spectra, molecules });
3070
}
31-
// TODO use the new function from filelist-utils once they solve the problem of create filesCollection from files with empty webkitrelativepath
32-
const fileCollection = await createFileCollectionFromFiles(inputFiles);
33-
const { spectra, molecules } = await read(fileCollection);
34-
setData({ spectra, molecules });
3571
} catch (error: any) {
3672
events.trigger('error', error);
3773
// eslint-disable-next-line no-console

src/hooks/usePreferences.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ import { useLayoutEffect, useState } from 'react';
33

44
export function usePreferences() {
55
const [configuration, setConfiguration] = useState<{
6-
preferences: NMRiumPreferences;
6+
preferences: any;
77
workspace: NMRiumWorkspace;
88
}>({ preferences: {}, workspace: 'default' });
99

1010
useLayoutEffect(() => {
1111
const { href } = window.location;
1212
const parameters = new URL(href).searchParams;
1313

14-
let preferences: NMRiumPreferences = {};
14+
let preferences: any | undefined;
1515
let workspace: NMRiumWorkspace = 'default';
1616

1717
if (parameters.has('workspace')) {

src/utilities/mapSourceObject.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { Spectrum1D } from 'nmr-load-save/lib/types/Spectra/Spectrum1D';
2+
import { Spectrum2D } from 'nmr-load-save/lib/types/Spectra/Spectrum2D';
3+
4+
export function mapSourceObject(inputSpectra: (Spectrum1D | Spectrum2D)[]) {
5+
const spectra = inputSpectra.slice();
6+
// eslint-disable-next-line no-restricted-syntax
7+
for (const spectrum of spectra) {
8+
if (spectrum.source) {
9+
const files = spectrum.source?.files?.map((file) => {
10+
const { name, relativePath, size = -1, lastModified = 0 } = file as any;
11+
return { name, relativePath, size, lastModified };
12+
}, []);
13+
14+
spectrum.source = { ...spectrum.source, files };
15+
}
16+
}
17+
return spectra;
18+
}

0 commit comments

Comments
 (0)