|
4 | 4 | /** @import { HGC, PluginDataFetcherConstructor, GenomicLocation, Viewconf, DataFetcher} from "./types.ts" */ |
5 | 5 |
|
6 | 6 | const NAME = "jupyter"; |
7 | | -const MAX_TILES_PER_REQUEST = 20; |
8 | 7 |
|
9 | 8 | /** |
10 | 9 | * @param {string} href |
@@ -207,29 +206,20 @@ async function registerJupyterHiGlassDataFetcher(model) { |
207 | 206 | fetchTiles: consolidator( |
208 | 207 | /** @param {Array<WithResolvers<{ tileIds: Array<string> }, Record<string, any>>>} requests */ |
209 | 208 | async (requests) => { |
210 | | - const batches = await Promise.all( |
211 | | - Array.from( |
212 | | - chunkIterable( |
213 | | - new Set(requests.flatMap((r) => r.data.tileIds)), |
214 | | - MAX_TILES_PER_REQUEST, |
215 | | - ), |
216 | | - async (tileIds) => { |
217 | | - let response = await sendCustomMessage(tModel, { |
218 | | - payload: { type: "tiles", tileIds }, |
219 | | - }); |
220 | | - return hgc.services.tileResponseToData( |
221 | | - response.payload, |
222 | | - NAME, |
223 | | - tileIds, |
224 | | - ); |
225 | | - }, |
226 | | - ), |
| 209 | + let tileIds = [...new Set(requests.flatMap((r) => r.data.tileIds))]; |
| 210 | + let response = await sendCustomMessage(tModel, { |
| 211 | + payload: { type: "tiles", tileIds }, |
| 212 | + }); |
| 213 | + let tiles = hgc.services.tileResponseToData( |
| 214 | + response.payload, |
| 215 | + NAME, |
| 216 | + tileIds, |
227 | 217 | ); |
228 | 218 | for (let request of requests) { |
229 | 219 | /** @type {Record<string, unknown>} */ |
230 | 220 | const requestData = {}; |
231 | 221 | for (let id of request.data.tileIds) { |
232 | | - let tileData = batches.find((tile) => tile[id])?.[id]; |
| 222 | + let tileData = tiles[id]; |
233 | 223 | if (tileData) requestData[id] = tileData; |
234 | 224 | } |
235 | 225 | request.resolve(requestData); |
@@ -362,25 +352,3 @@ function consolidator(processBatch) { |
362 | 352 | return promise; |
363 | 353 | }; |
364 | 354 | } |
365 | | - |
366 | | -/** |
367 | | - * Iterator helper to chunk an array into smaller arrays of a fixed size. |
368 | | - * |
369 | | - * @template T |
370 | | - * @param {Iterable<T>} iterable |
371 | | - * @param {number} size |
372 | | - * @returns {Generator<Array<T>, void, unknown>} |
373 | | - */ |
374 | | -function* chunkIterable(iterable, size) { |
375 | | - let chunk = []; |
376 | | - for (const item of iterable) { |
377 | | - chunk.push(item); |
378 | | - if (chunk.length === size) { |
379 | | - yield chunk; |
380 | | - chunk = []; |
381 | | - } |
382 | | - } |
383 | | - if (chunk.length) { |
384 | | - yield chunk; |
385 | | - } |
386 | | -} |
0 commit comments