Skip to content

Commit 32dc759

Browse files
committed
Update getExportURL prop documentation
1 parent 536c8ad commit 32dc759

File tree

2 files changed

+32
-44
lines changed

2 files changed

+32
-44
lines changed

packages/app/README.md

+30-41
Original file line numberDiff line numberDiff line change
@@ -206,44 +206,29 @@ need to pass the necessary request headers and configuration as well.
206206
207207
#### `getExportURL?: (...args) => URL | (() => Promise<URL | Blob>) | undefined` (optional)
208208

209-
The `DataProvider#getExportURL` method is used by the toolbars to generate URLs
210-
and controls for exporting the current dataset/slice to various formats. This
211-
prop allows providing your own implementation of this method.
209+
Some visualizations allow exporting the current dataset/slice to various
210+
formats. For instance, the _Line_ visualization allows exporting to CSV and NPY;
211+
the _Heatmap_ visualization to NPY and TIFF, etc.
212212

213-
`getExportURL` is called once for every export menu entry. It receives the
214-
export `format`, as well as the current `dataset` metadata object, `selection`
215-
string, and `value` array. The export entry behaviour then depends of the return
216-
type:
213+
For each format, the viewer invokes the provider's `getExportURL` method. If
214+
this method returns a `URL` or an async function, then the export menu in the
215+
toolbar shows an entry for the corresponding export format.
217216

218-
- `URL`: the URL is set as the `href` of the export entry's download anchor.
219-
- `() => Promise<URL | Blob>`: the function is called when the user clicks on
220-
the export entry. When the promise resolves, the returned `URL` or `Blob` is
221-
used to trigger a download.
222-
- `undefined`: the export entry is not rendered.
217+
In the case of JSON and CSV, the viewer itself takes care of the export by
218+
providing its own "exporter" function to the `getExportURL` method. When this
219+
happens, the `getExportURL` method just returns a function that calls the
220+
exporter.
223221

224-
Returning an async function enables advanced use cases like generating exports
225-
client-side, or server-side but from an authenticated endpoint.
222+
In the case of NPY and TIFF, `H5GroveApi#getExportURL` returns a `URL` so the
223+
export can be generated server-side by `h5grove`.
224+
225+
The optional `getExportURL` prop is called internally by the `getExportURL`
226+
method and allows taking over the export process. It enables advanced use cases
227+
like generating exports from an authenticated endpoint.
226228

227229
<details>
228230
<summary>Advanced examples</summary>
229231

230-
```tsx
231-
// Client-side CSV export
232-
getExportURL={(format, dataset, selection, value) => {
233-
if (format === 'csv') {
234-
// Async function that will be called when the user clicks on a `CSV` export menu entry
235-
return async () => {
236-
// Generate CSV string from `value` array
237-
let csv = '';
238-
value.forEach((val) => { ... })
239-
240-
// Return CSV string as Blob so it can be downloaded
241-
return new Blob([csv]);
242-
};
243-
}
244-
}}
245-
```
246-
247232
```tsx
248233
// Fetch export data from authenticated endpoint
249234
getExportURL={(format, dataset, selection) => async () => {
@@ -269,12 +254,19 @@ getExportURL={(format, dataset, selection) => async () => {
269254
}}
270255
```
271256

272-
</details>
257+
```tsx
258+
// Tweak a built-in export payload in some way (round or format numbers, truncate lines, etc.)
259+
getExportURL={(format, dataset, selection, builtInExporter) => async () => {
260+
if (!builtInExporter || format !== 'csv') {
261+
return undefined;
262+
}
263+
264+
const csvPayload = builtInExporter();
265+
return csvPayload.split('\n').slice(0, 100).join('\n'); // truncate to first 100 lines
266+
}}
267+
```
273268

274-
You may provide a partial implementation of `getExportURL` that handles only
275-
specific export scenarios. In this case, or if you don't provide a function at
276-
all, `H5GroveProvider` falls back to generating URLs based on the `/data`
277-
endpoint and `format` query param.
269+
</details>
278270

279271
#### `resetKeys?: unknown[]` (optional)
280272

@@ -343,9 +335,7 @@ The path of the file to request.
343335
See
344336
[`H5GroveProvider#getExportURL`](https://github.com/silx-kit/h5web/blob/main/packages/app/README.md#getexporturl-args--url----promiseurl--blob--undefined-optional).
345337

346-
`HsdsProvider` does not provide a fallback implementation of `getExportURL` at
347-
this time, so if you don't provide your own, the export menu will remain
348-
disabled in the toolbar.
338+
`HsdsProvider` doesn't support the NPY and TIFF export formats out of the box.
349339

350340
#### `resetKeys?: unknown[]` (optional)
351341

@@ -367,8 +357,7 @@ Data provider for demonstration and testing purposes.
367357
See
368358
[`H5GroveProvider#getExportURL`](https://github.com/silx-kit/h5web/blob/main/packages/app/README.md#getexporturl-args--url----promiseurl--blob--undefined-optional).
369359

370-
`MockProvider` provides a very basic fallback implementation of `getExportURL`
371-
that can generate only client-side CSV exports of 1D datasets.
360+
`MockProvider` doesn't support the NPY and TIFF export formats out of the box.
372361

373362
### Utilities
374363

packages/h5wasm/README.md

+2-3
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,8 @@ Local HDF5 `File` object obtained from an HTML file input (i.e.
133133
See
134134
[`H5GroveProvider#getExportURL`](https://github.com/silx-kit/h5web/blob/main/packages/app/README.md#getexporturl-args--url----promiseurl--blob--undefined-optional).
135135

136-
`H5WasmLocalFileProvider` does not provide a fallback implementation of
137-
`getExportURL` at this time, so if you don't provide your own, the export menu
138-
will remain disabled in the toolbar.
136+
`H5WasmLocalFileProvider` doesn't support the NPY and TIFF export formats out of
137+
the box.
139138

140139
#### `getPlugin?: (name: Plugin) => Promise<ArrayBuffer | undefined>`
141140

0 commit comments

Comments
 (0)