diff --git a/packages/h5wasm/src/h5wasm-api.ts b/packages/h5wasm/src/h5wasm-api.ts index 4e5a61518..6dc3cf740 100644 --- a/packages/h5wasm/src/h5wasm-api.ts +++ b/packages/h5wasm/src/h5wasm-api.ts @@ -22,6 +22,7 @@ import { isH5WasmDataset, isH5WasmGroup, isHDF5, + convertSelectionToRanges, } from './utils'; export class H5WasmApi extends ProviderApi { @@ -43,11 +44,16 @@ export class H5WasmApi extends ProviderApi { } public async getValue(params: ValuesStoreParams): Promise { - const { dataset } = params; + const { dataset, selection } = params; const h5wDataset = await this.getH5WasmEntity(dataset.path); assertH5WasmDataset(h5wDataset); + if (selection) { + const ranges = convertSelectionToRanges(h5wDataset, selection); + return h5wDataset.slice(ranges); + } + return h5wDataset.value; } diff --git a/packages/h5wasm/src/utils.ts b/packages/h5wasm/src/utils.ts index a99065730..069b9a301 100644 --- a/packages/h5wasm/src/utils.ts +++ b/packages/h5wasm/src/utils.ts @@ -70,3 +70,19 @@ export function convertMetadataToDType(metadata: Metadata): DType { }; } } + +export function convertSelectionToRanges( + dataset: H5WasmDataset, + selection: string +): number[][] { + const { shape } = dataset; + const selectionMembers = selection.split(','); + + return selectionMembers.map((member, i) => { + if (member === ':') { + return [0, shape[i]]; + } + + return [Number(member), Number(member) + 1]; + }); +}