@imfusion/sdk-react 0.7.0-dev.37.g21ff3e6b → 0.7.0-dev.38.gb2cede30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -35,12 +35,12 @@ import { useImFusion, useDataLoader, useData } from '@imfusion/sdk-react';
35
35
 
36
36
  function Viewer() {
37
37
  const imf = useImFusion();
38
- const { loadUrl, isLoading, progress } = useDataLoader();
38
+ const { loadFileFromUrl, isLoading, progress } = useDataLoader();
39
39
  const datasets = useData();
40
40
 
41
41
  return (
42
42
  <div>
43
- <button onClick={() => loadUrl('/data/scan.nii.gz')} disabled={isLoading}>
43
+ <button onClick={() => loadFileFromUrl('/data/scan.nii.gz')} disabled={isLoading}>
44
44
  {isLoading ? 'Loading...' : 'Load'}
45
45
  </button>
46
46
  <p>{datasets.length} dataset(s) loaded</p>
@@ -6,9 +6,9 @@ export interface DataLoaderProgress {
6
6
  /**
7
7
  * Provides data loading methods with reactive loading, progress, and error state.
8
8
  *
9
- * Wraps {@link @imfusion/sdk!ImFusion.loadUrl | ImFusion.loadUrl}, {@link @imfusion/sdk!ImFusion.loadFile | ImFusion.loadFile},
10
- * {@link @imfusion/sdk!ImFusion.loadBuffer | ImFusion.loadBuffer}, and {@link @imfusion/sdk!ImFusion.loadFolder | ImFusion.loadFolder} with
11
- * React-friendly state management.
9
+ * Wraps {@link @imfusion/sdk!ImFusion.loadFile | ImFusion.loadFile}, {@link @imfusion/sdk!ImFusion.loadFileFromUrl | ImFusion.loadFileFromUrl},
10
+ * {@link @imfusion/sdk!ImFusion.loadFolder | ImFusion.loadFolder}, {@link @imfusion/sdk!ImFusion.loadFolderFromUrls | ImFusion.loadFolderFromUrls}, and
11
+ * {@link @imfusion/sdk!ImFusion.loadBuffer | ImFusion.loadBuffer} with React-friendly state management.
12
12
  *
13
13
  * State (`isLoading`, `progress`, `error`) tracks a single load operation at a time.
14
14
  * Concurrent loads from the same hook instance are not supported, use separate instances if needed.
@@ -20,10 +20,10 @@ export interface DataLoaderProgress {
20
20
  * @example
21
21
  * ```tsx
22
22
  * function LoadButton() {
23
- * const { loadUrl, isLoading, progress, error } = useDataLoader();
23
+ * const { loadFileFromUrl, isLoading, progress, error } = useDataLoader();
24
24
  * return (
25
25
  * <>
26
- * <button onClick={() => loadUrl('/data/ct.nii.gz')} disabled={isLoading}>
26
+ * <button onClick={() => loadFileFromUrl('/data/ct.nii.gz')} disabled={isLoading}>
27
27
  * Load CT
28
28
  * </button>
29
29
  * {isLoading && progress && (
@@ -39,10 +39,11 @@ export interface DataLoaderProgress {
39
39
  * @see {@link useVisibleData}
40
40
  */
41
41
  export declare function useDataLoader(): {
42
- loadUrl: (url: string) => Promise<HandleArray<Data>>;
43
42
  loadFile: (file: File) => Promise<HandleArray<Data>>;
44
- loadBuffer: (buffer: ArrayBufferLike, filename: string) => Promise<HandleArray<Data>>;
43
+ loadFileFromUrl: (url: string) => Promise<HandleArray<Data>>;
45
44
  loadFolder: (files: File[]) => Promise<HandleArray<Data>>;
45
+ loadFolderFromUrls: (urls: ReadonlyArray<string>) => Promise<HandleArray<Data>>;
46
+ loadBuffer: (buffer: ArrayBufferLike, filename: string) => Promise<HandleArray<Data>>;
46
47
  isLoading: boolean;
47
48
  progress: DataLoaderProgress | null;
48
49
  error: Error | null;
@@ -3,9 +3,9 @@ import { useImFusion } from './useImFusion.js';
3
3
  /**
4
4
  * Provides data loading methods with reactive loading, progress, and error state.
5
5
  *
6
- * Wraps {@link @imfusion/sdk!ImFusion.loadUrl | ImFusion.loadUrl}, {@link @imfusion/sdk!ImFusion.loadFile | ImFusion.loadFile},
7
- * {@link @imfusion/sdk!ImFusion.loadBuffer | ImFusion.loadBuffer}, and {@link @imfusion/sdk!ImFusion.loadFolder | ImFusion.loadFolder} with
8
- * React-friendly state management.
6
+ * Wraps {@link @imfusion/sdk!ImFusion.loadFile | ImFusion.loadFile}, {@link @imfusion/sdk!ImFusion.loadFileFromUrl | ImFusion.loadFileFromUrl},
7
+ * {@link @imfusion/sdk!ImFusion.loadFolder | ImFusion.loadFolder}, {@link @imfusion/sdk!ImFusion.loadFolderFromUrls | ImFusion.loadFolderFromUrls}, and
8
+ * {@link @imfusion/sdk!ImFusion.loadBuffer | ImFusion.loadBuffer} with React-friendly state management.
9
9
  *
10
10
  * State (`isLoading`, `progress`, `error`) tracks a single load operation at a time.
11
11
  * Concurrent loads from the same hook instance are not supported, use separate instances if needed.
@@ -17,10 +17,10 @@ import { useImFusion } from './useImFusion.js';
17
17
  * @example
18
18
  * ```tsx
19
19
  * function LoadButton() {
20
- * const { loadUrl, isLoading, progress, error } = useDataLoader();
20
+ * const { loadFileFromUrl, isLoading, progress, error } = useDataLoader();
21
21
  * return (
22
22
  * <>
23
- * <button onClick={() => loadUrl('/data/ct.nii.gz')} disabled={isLoading}>
23
+ * <button onClick={() => loadFileFromUrl('/data/ct.nii.gz')} disabled={isLoading}>
24
24
  * Load CT
25
25
  * </button>
26
26
  * {isLoading && progress && (
@@ -56,15 +56,28 @@ export function useDataLoader() {
56
56
  setIsLoading(false);
57
57
  }
58
58
  }, []);
59
- const loadUrl = useCallback((url) => run(() => imf.loadUrl(url, {
59
+ const loadFile = useCallback((file) => run(() => imf.loadFile(file)), [imf, run]);
60
+ const loadFileFromUrl = useCallback((url) => run(() => imf.loadFileFromUrl(url, {
60
61
  onProgress: (received, total) => setProgress({ received, total }),
61
62
  })), [imf, run]);
62
- const loadFile = useCallback((file) => run(() => imf.loadFile(file)), [imf, run]);
63
- const loadBuffer = useCallback((buffer, filename) => run(() => imf.loadBuffer(buffer, filename)), [imf, run]);
64
63
  const loadFolder = useCallback((files) => run(() => imf.loadFolder(files)), [imf, run]);
64
+ const loadFolderFromUrls = useCallback((urls) => run(() => imf.loadFolderFromUrls(urls, {
65
+ onProgress: (received, total) => setProgress({ received, total }),
66
+ })), [imf, run]);
67
+ const loadBuffer = useCallback((buffer, filename) => run(() => imf.loadBuffer(buffer, filename)), [imf, run]);
65
68
  const reset = useCallback(() => {
66
69
  setError(null);
67
70
  setProgress(null);
68
71
  }, []);
69
- return useMemo(() => ({ loadUrl, loadFile, loadBuffer, loadFolder, isLoading, progress, error, reset }), [loadUrl, loadFile, loadBuffer, loadFolder, isLoading, progress, error, reset]);
72
+ return useMemo(() => ({
73
+ loadFile,
74
+ loadFileFromUrl,
75
+ loadFolder,
76
+ loadFolderFromUrls,
77
+ loadBuffer,
78
+ isLoading,
79
+ progress,
80
+ error,
81
+ reset,
82
+ }), [loadFile, loadFileFromUrl, loadFolder, loadFolderFromUrls, loadBuffer, isLoading, progress, error, reset]);
70
83
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@imfusion/sdk-react",
3
- "version": "0.7.0-dev.37.g21ff3e6b",
3
+ "version": "0.7.0-dev.38.gb2cede30",
4
4
  "description": "React bindings for ImFusion Web SDK",
5
5
  "author": "ImFusion GmbH",
6
6
  "license": "SEE LICENSE IN License.rtf",
@@ -29,7 +29,7 @@
29
29
  "License.rtf"
30
30
  ],
31
31
  "peerDependencies": {
32
- "@imfusion/sdk": "0.7.0-dev.37.g21ff3e6b",
32
+ "@imfusion/sdk": "0.7.0-dev.38.gb2cede30",
33
33
  "react": ">=18"
34
34
  },
35
35
  "devDependencies": {