-
Notifications
You must be signed in to change notification settings - Fork 33
Expand file tree
/
Copy pathNMRiumRefAPI.ts
More file actions
40 lines (36 loc) · 1.31 KB
/
NMRiumRefAPI.ts
File metadata and controls
40 lines (36 loc) · 1.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import type { FileCollection } from 'file-collection';
import type { ForwardedRef, RefObject } from 'react';
import { useImperativeHandle } from 'react';
import { useCreateNmriumZip } from '../hooks/useCreateNmriumZip.ts';
import type { SaveIncludeOptions } from '../hooks/useExport.tsx';
import { useLoadFiles } from '../loader/useLoadFiles.js';
import type { BlobObject } from '../utility/export.js';
import { getBlob } from '../utility/export.js';
export interface NMRiumRefAPI {
getSpectraViewerAsBlob: () => BlobObject | null;
getNMRiumFile: (option: SaveIncludeOptions) => Promise<Blob>;
loadFiles: (files: File[]) => void;
loadFileCollection: (fileCollection: FileCollection) => void;
}
export function useNMRiumRefAPI(
ref: ForwardedRef<NMRiumRefAPI>,
rootRef: RefObject<HTMLDivElement>,
) {
const loadFiles = useLoadFiles();
const createNmriumZip = useCreateNmriumZip();
useImperativeHandle(
ref,
() => ({
getSpectraViewerAsBlob: () => {
return rootRef.current
? getBlob('nmrSVG', { rootElement: rootRef.current })
: null;
},
loadFiles,
loadFileCollection: (fileCollection: FileCollection) =>
loadFiles(fileCollection),
getNMRiumFile: (options) => createNmriumZip(options),
}),
[loadFiles, rootRef, createNmriumZip],
);
}