@datagrok-libraries/bio 5.40.7 → 5.41.0

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.
Files changed (44) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/package.json +5 -5
  3. package/src/helm/helm-helper.d.ts +3 -2
  4. package/src/helm/helm-helper.d.ts.map +1 -1
  5. package/src/helm/helm-helper.js.map +1 -1
  6. package/src/helm/types.d.ts +3 -24
  7. package/src/helm/types.d.ts.map +1 -1
  8. package/src/helm/types.js +1 -1
  9. package/src/helm/types.js.map +1 -1
  10. package/src/types/dojo.d.ts +4 -0
  11. package/src/types/dojo.d.ts.map +1 -0
  12. package/src/types/dojo.js +2 -0
  13. package/src/types/dojo.js.map +1 -0
  14. package/src/types/helm.d.ts +83 -0
  15. package/src/types/helm.d.ts.map +1 -0
  16. package/src/types/helm.js +2 -0
  17. package/src/types/helm.js.map +1 -0
  18. package/src/types/index.d.ts +2 -0
  19. package/src/types/index.d.ts.map +1 -1
  20. package/src/types/index.js.map +1 -1
  21. package/src/types/jsdraw2.d.ts +44 -0
  22. package/src/types/jsdraw2.d.ts.map +1 -0
  23. package/src/types/jsdraw2.js +2 -0
  24. package/src/types/jsdraw2.js.map +1 -0
  25. package/src/utils/cell-renderer-async-base.d.ts +94 -0
  26. package/src/utils/cell-renderer-async-base.d.ts.map +1 -0
  27. package/src/utils/cell-renderer-async-base.js +406 -0
  28. package/src/utils/cell-renderer-async-base.js.map +1 -0
  29. package/src/utils/cell-renderer-back-base.d.ts +26 -0
  30. package/src/utils/cell-renderer-back-base.d.ts.map +1 -0
  31. package/src/utils/cell-renderer-back-base.js +80 -0
  32. package/src/utils/cell-renderer-back-base.js.map +1 -0
  33. package/src/utils/cell-renderer-monomer-placer.d.ts +5 -6
  34. package/src/utils/cell-renderer-monomer-placer.d.ts.map +1 -1
  35. package/src/utils/cell-renderer-monomer-placer.js +25 -44
  36. package/src/utils/cell-renderer-monomer-placer.js.map +1 -1
  37. package/src/viewers/helm-service.d.ts +17 -0
  38. package/src/viewers/helm-service.d.ts.map +1 -0
  39. package/src/viewers/helm-service.js +19 -0
  40. package/src/viewers/helm-service.js.map +1 -0
  41. package/src/viewers/ngl-gl-service.d.ts +7 -27
  42. package/src/viewers/ngl-gl-service.d.ts.map +1 -1
  43. package/src/viewers/ngl-gl-service.js +8 -1
  44. package/src/viewers/ngl-gl-service.js.map +1 -1
@@ -0,0 +1,406 @@
1
+ import * as DG from 'datagrok-api/dg';
2
+ import * as ui from 'datagrok-api/ui';
3
+ import { Subject } from 'rxjs';
4
+ import { testEvent } from '@datagrok-libraries/utils/src/test';
5
+ import { errInfo } from './err-info';
6
+ import { CellRendererBackBase } from './cell-renderer-back-base';
7
+ export class PropsBase {
8
+ constructor(backColor, width, height) {
9
+ this.backColor = backColor;
10
+ this.width = width;
11
+ this.height = height;
12
+ }
13
+ }
14
+ export class RenderTask {
15
+ constructor(name, props, onAfterRender, isPriority) {
16
+ this.name = name;
17
+ this.props = props;
18
+ this.onAfterRender = onAfterRender;
19
+ this.isPriority = isPriority;
20
+ }
21
+ }
22
+ export class RenderServiceBase {
23
+ constructor(logger, retryLimit = 3, _errorCount = 0, errorLimit = 3, taskTimout = 1000) {
24
+ this.logger = logger;
25
+ this.retryLimit = retryLimit;
26
+ this._errorCount = _errorCount;
27
+ this.errorLimit = errorLimit;
28
+ this.taskTimout = taskTimout;
29
+ this.consumerCounter = 0;
30
+ /** The flag allows {@link _processQueue}() on add item to the queue with {@link render}() */
31
+ this._busy = false;
32
+ this._sweeperHandle = null;
33
+ this.viewerId = ++RenderServiceBase.viewerCounter;
34
+ this._queue = [];
35
+ this._queueDict = {};
36
+ this._sweepToggle(false);
37
+ }
38
+ toLog() {
39
+ return `${this.constructor.name}<${this.viewerId}>`;
40
+ }
41
+ get errorCount() { return this._errorCount; }
42
+ /** Queues render tasks
43
+ * @param consumerId Identifier of the consumer of this render service
44
+ * @param task Task to render
45
+ * @param key Specify to skip previously queued tasks with the same key
46
+ * @return {@link consumerId} or assigned new if null
47
+ */
48
+ render(consumerId, task, key, tryCount = 0) {
49
+ const logPrefix = `${this.toLog()}.render()`;
50
+ this.logger.debug(`${logPrefix}, start ` + `key: ${key?.toString()}`);
51
+ if (key !== undefined) {
52
+ if (key in this._queueDict) {
53
+ // remove outdated task from the queue
54
+ const oldTaskI = this._queue.findIndex((item) => item.key === key);
55
+ this._queue.splice(oldTaskI, 1);
56
+ }
57
+ this.logger.debug(`${logPrefix}, _queueDict[ key: ${key?.toString()} ] = <task>`);
58
+ this._queueDict[key] = task;
59
+ }
60
+ this.logger.debug(`${logPrefix}, _queue.push(), ` + `key: ${key?.toString()}`);
61
+ if (consumerId === null)
62
+ consumerId = ++this.consumerCounter;
63
+ this._queue.push({ consumerId, key, task, tryCount, dt: window.performance.now() });
64
+ if (!this._busy) {
65
+ this._sweepToggle(this._busy = true);
66
+ // TODO: Use requestAnimationFrame()
67
+ this.logger.debug(`${logPrefix}, window.setTimeout() -> this._processQueue() `);
68
+ window.setTimeout(() => { this._processQueue(); }, 0 /* next event cycle */);
69
+ }
70
+ return consumerId;
71
+ }
72
+ getTask() {
73
+ if (this._queue.length == 0)
74
+ return undefined;
75
+ let resItem = undefined;
76
+ const head = this._queue[0];
77
+ if (head.task.isPriority && !head.task.isPriority()) {
78
+ let priorityItemIdx = null;
79
+ for (let i = 0; i < this._queue.length; ++i) {
80
+ const item = this._queue[i];
81
+ if (item.consumerId === head.consumerId && item.task.isPriority) {
82
+ if (item.task.isPriority()) {
83
+ priorityItemIdx = i;
84
+ break;
85
+ }
86
+ else {
87
+ // Push back not-priority items to the end of the queue
88
+ const deferredItemList = this._queue.splice(i);
89
+ this._queue.push(...deferredItemList);
90
+ }
91
+ }
92
+ }
93
+ if (priorityItemIdx !== null) {
94
+ resItem = this._queue.splice(priorityItemIdx, 1)[0];
95
+ }
96
+ }
97
+ if (!resItem)
98
+ resItem = this._queue.shift();
99
+ return resItem;
100
+ }
101
+ _processQueue() {
102
+ const logPrefix = `${this.toLog()}._processQueue()`;
103
+ if (this._queue.length === 0)
104
+ return;
105
+ this.logger.debug(`${logPrefix}, ` +
106
+ `queue: ${JSON.stringify(this._queue.map((t) => t.key))}`);
107
+ let renderSub = null;
108
+ const finallyProcessQueue = (caller) => {
109
+ const logPrefixR = `${logPrefix}.finallyProcessQueue( <- ${caller} )`;
110
+ if (renderSub)
111
+ renderSub.unsubscribe(); // renderSub can be undefined for a sync render service (?)
112
+ if (this._queue.length > 0) {
113
+ // Schedule processQueue the next item only afterRender has asynchronously completed for the previous one
114
+ this.logger.debug(`${logPrefixR}, ` + 'window.setTimeout() -> this._processQueue() ');
115
+ window.setTimeout(() => { this._processQueue(); }, 0 /* next event cycle */);
116
+ }
117
+ else {
118
+ // release flag allowing _processQueue on add queue item
119
+ this.logger.debug(`${logPrefixR}, ` + 'this._busy = false');
120
+ this._sweepToggle(this._busy = false);
121
+ }
122
+ };
123
+ const queueItem = this.getTask();
124
+ if (!queueItem) {
125
+ this.logger.error(`${logPrefix}, queueItem = undefined `);
126
+ finallyProcessQueue('no queue item');
127
+ return;
128
+ } // in case of empty queue
129
+ const { consumerId, key, task, tryCount, dt } = queueItem;
130
+ if (key !== undefined) {
131
+ this.logger.debug(`${logPrefix}, ` + `key: ${key.toString()}`);
132
+ delete this._queueDict[key];
133
+ }
134
+ if (tryCount > this.retryLimit) {
135
+ this.logger.warning(`${logPrefix}, skip task, ` +
136
+ ` key: ${key?.toString()}, tryCount: ${tryCount}`);
137
+ finallyProcessQueue('try count limit');
138
+ return;
139
+ }
140
+ let emptyCanvasHash;
141
+ let handled = false;
142
+ const timeoutHandle = window.setTimeout(() => {
143
+ if (!handled) {
144
+ this.logger.warning(`${logPrefix}.timeoutHandle(), not handled, ` +
145
+ `key: ${key?.toString()}.` + `\n` +
146
+ ` The .requestRender() overridden method must call renderHandler callback from args.`);
147
+ this._errorCount += 1;
148
+ this.render(consumerId, task, key, tryCount + 1); // return task to the queue
149
+ finallyProcessQueue('timeout');
150
+ }
151
+ }, 1000);
152
+ const renderHandler = (aux) => {
153
+ this.logger.debug(`${logPrefix}.renderHandler(), ` + `key: ${key?.toString()}`);
154
+ if (this.onRendered(key, task, emptyCanvasHash, aux)) {
155
+ handled = true;
156
+ window.clearTimeout(timeoutHandle);
157
+ finallyProcessQueue('render');
158
+ }
159
+ };
160
+ this.requestRender(key, task, renderHandler).then((res) => {
161
+ const logPrefixInt = `${logPrefix}, requestRender().then()`;
162
+ renderSub = res[0];
163
+ emptyCanvasHash = res[1];
164
+ const triggerRender = res[2];
165
+ if (emptyCanvasHash === undefined)
166
+ console.warn(`${logPrefixInt}, this.requestRender.then() emptyCanvasHash undefined`);
167
+ triggerRender();
168
+ })
169
+ .catch((err) => {
170
+ const logPrefixInt = `${logPrefix}, requestRender().catch()`;
171
+ // Not waiting timeout on error
172
+ const [errMsg, errStack] = errInfo(err);
173
+ this.logger.error(errMsg, undefined, errStack);
174
+ window.clearTimeout(timeoutHandle);
175
+ this._errorCount += 1;
176
+ this.render(consumerId, task, key, tryCount + 1); // return task to the queue
177
+ finallyProcessQueue(`${logPrefixInt}`);
178
+ });
179
+ }
180
+ /** Sweep queue for stalled tasks */
181
+ _sweepQueue() {
182
+ const logPrefix = `${this.toLog()}._sweepQueue()`;
183
+ const nowDt = window.performance.now();
184
+ let swept = 0;
185
+ for (let qI = this._queue.length - 1; qI >= 0; qI--) {
186
+ const { key, task: _task, dt } = this._queue[qI];
187
+ if ((nowDt - dt) > this.taskTimout) {
188
+ // stalled task
189
+ this.logger.warning(`${logPrefix}, remove task key = ${key?.toString()}`);
190
+ this._queue.splice(qI);
191
+ delete this._queueDict[key];
192
+ ++swept;
193
+ }
194
+ }
195
+ this._sweepToggle(this._busy = this._queue.length > 0);
196
+ if (!this._busy && swept)
197
+ this.logger.warning(`${logPrefix}, ${swept} task(s) had been swept`);
198
+ }
199
+ _sweepToggle(busy) {
200
+ const logPrefix = `${this.toLog()}._sweepToggle( busy = ${busy} )`;
201
+ if (busy && this._sweeperHandle !== null) {
202
+ this.logger.debug(`${logPrefix}, disable queue sweeper`);
203
+ window.clearInterval(this._sweeperHandle);
204
+ this._sweeperHandle = null;
205
+ }
206
+ if (!busy && this._sweeperHandle === null) {
207
+ this.logger.debug(`${logPrefix}, enable queue sweeper`);
208
+ this._sweeperHandle = window.setInterval(() => { this._sweepQueue(); }, 500);
209
+ }
210
+ return busy;
211
+ }
212
+ }
213
+ RenderServiceBase.viewerCounter = -1;
214
+ export class CellRendererBackAsyncBase extends CellRendererBackBase {
215
+ constructor(gridCol, tableCol, logger, cacheEnabled = true) {
216
+ super(gridCol, tableCol, logger);
217
+ this.cacheEnabled = cacheEnabled;
218
+ this.taskQueueMap = new Map;
219
+ this.imageCache = new Map();
220
+ /** Consumer identifier of the render service */
221
+ this.consumerId = null;
222
+ // -- IRenderer --
223
+ this._onRendered = new Subject();
224
+ }
225
+ reset() {
226
+ if (this.imageCache) {
227
+ // for (const cellImageData of this.imageCache.values())
228
+ // cellImageData.remove();
229
+ }
230
+ this.imageCache = new Map();
231
+ }
232
+ render(g, x, y, w, h, gridCell, cellStyle) {
233
+ const dpr = window.devicePixelRatio;
234
+ const service = this.getRenderService();
235
+ if (gridCell.tableRowIndex == null)
236
+ return;
237
+ const rowIdx = gridCell.tableRowIndex;
238
+ this.logger.debug('PdbRenderer.render() start ' + `rowIdx=${rowIdx}`);
239
+ g.save();
240
+ try {
241
+ const cellImageData = this.imageCache.has(rowIdx) ? this.imageCache.get(rowIdx) : null;
242
+ const bd = new DG.Rect(x, y, w, h);
243
+ let gridCellWidth;
244
+ let gridCellHeight;
245
+ let backColor;
246
+ if (this.gridCol) {
247
+ // Rendering for a grid
248
+ gridCellWidth = gridCell.gridColumn.width * dpr - 2;
249
+ gridCellHeight = gridCell.grid.props.rowHeight * dpr - 2;
250
+ backColor = cellStyle ? cellStyle.backColor : null;
251
+ backColor = backColor ?? (this.gridCol ? this.gridCol.grid.props.backColor : null);
252
+ backColor = backColor ?? DG.Color.argb(0, 0, 0, 0);
253
+ }
254
+ else {
255
+ // Rendering probably for row tooltip (scatter plot)
256
+ gridCellWidth = w * dpr - 2;
257
+ gridCellHeight = h * dpr - 2;
258
+ backColor = DG.Color.argb(0, 0, 0, 0);
259
+ }
260
+ if (!this.cacheEnabled || !cellImageData ||
261
+ Math.abs(cellImageData.width / dpr - gridCellWidth) > 0.5 ||
262
+ Math.abs(cellImageData.height / dpr - gridCellHeight) > 0.5) {
263
+ let toUpdate = true;
264
+ if (cellImageData)
265
+ toUpdate = this.renderCellImageData(g, bd, gridCell, cellImageData);
266
+ if (!toUpdate)
267
+ return;
268
+ const task = new RenderTask(gridCell.cell.rowIndex.toString(), this.getRenderTaskProps(gridCell, backColor, gridCellWidth, gridCellHeight),
269
+ /* onAfterRender */ (cellCanvas, aux) => {
270
+ this.storeAux(gridCell, aux);
271
+ g.save();
272
+ try {
273
+ this.logger.debug('PdbRenderer.render() onAfterRender() ' + `rowIdx = ${rowIdx}`);
274
+ let cellCanvasCtx = cellCanvas.getContext('2d');
275
+ if (!cellCanvasCtx) {
276
+ // Fallback for canvas with WebGL context
277
+ const tempCanvas = ui.canvas(cellCanvas.width, cellCanvas.height);
278
+ cellCanvasCtx = tempCanvas.getContext('2d');
279
+ cellCanvasCtx.drawImage(cellCanvas, 0, 0);
280
+ }
281
+ const cellCanvasData = cellCanvasCtx.getImageData(0, 0, cellCanvas.width, cellCanvas.height);
282
+ this.renderOnGrid(g, new DG.Rect(x, y, w, h), gridCell, cellCanvasData);
283
+ this.imageCache.set(rowIdx, cellCanvasData);
284
+ }
285
+ finally {
286
+ g.restore();
287
+ this.taskQueueMap.delete(rowIdx);
288
+ if (this.taskQueueMap.size === 0)
289
+ this._onRendered.next();
290
+ }
291
+ },
292
+ /* isPriority */ !this.gridCol ? undefined : () => {
293
+ const grid = gridCell.grid;
294
+ return (grid.vertScroll.min - 1) <= gridCell.gridRow && gridCell.gridRow <= grid.vertScroll.max;
295
+ });
296
+ this.taskQueueMap.set(rowIdx, task);
297
+ this.consumerId = service.render(this.consumerId, task, rowIdx);
298
+ }
299
+ else {
300
+ this.logger.debug('PdbRenderer.render(), ' + `from imageCache[${rowIdx}]`);
301
+ this.renderOnGrid(g, bd, gridCell, cellImageData);
302
+ }
303
+ }
304
+ catch (err) {
305
+ const errMsg = err instanceof Error ? err.message : err.toString();
306
+ this.logger.error(`BsV:PdbGridCellRenderer.render() no rethrown error: ${errMsg}`, undefined, err instanceof Error ? err.stack : undefined);
307
+ //throw err; // Do not throw to prevent disabling event handler
308
+ }
309
+ finally {
310
+ g.restore();
311
+ }
312
+ }
313
+ /** Renders cell from image data (cache)
314
+ * @param {CanvasRenderingContext2D} gCtx Grid canvas context
315
+ * @param {DG.Rect} bd Bound rect to clip drawing
316
+ * @param {DG.GridCell} gridCell Grid cell to draw
317
+ * @param {ImageData} cellImageData Cell image data from cache
318
+ * @return {boolean} true - cell is requiring update by render service
319
+ */
320
+ renderCellImageData(gCtx, bd, gCell, cellImageData) {
321
+ const dpr = window.devicePixelRatio;
322
+ // Draw cell image data to scale it with drawImage() while transform()
323
+ const cellCanvas = ui.canvas(cellImageData.width, cellImageData.height);
324
+ const cellCtx = cellCanvas.getContext('2d');
325
+ cellCtx.putImageData(cellImageData, 0, 0);
326
+ const fitCanvasWidth = (bd.width - 1) * dpr;
327
+ const fitCanvasHeight = (bd.height - 1) * dpr;
328
+ const fitCanvas = ui.canvas(fitCanvasWidth, fitCanvasHeight);
329
+ const fitScale = Math.min(fitCanvasWidth / cellImageData.width, fitCanvasHeight / cellImageData.height);
330
+ const fitWidth = cellImageData.width * fitScale;
331
+ const fitHeight = cellImageData.height * fitScale;
332
+ const fitLeft = (fitCanvasWidth - fitWidth) / 2;
333
+ const fitTop = (fitCanvasHeight - fitHeight) / 2;
334
+ const fitCtx = fitCanvas.getContext('2d');
335
+ fitCtx.transform(fitScale, 0, 0, fitScale, fitLeft, fitTop);
336
+ fitCtx.drawImage(cellCanvas, 0, 0);
337
+ const fitImageData = fitCtx.getImageData(0, 0, fitCanvasWidth, fitCanvasHeight);
338
+ this.renderOnGrid(gCtx, bd, gCell, fitImageData);
339
+ return true;
340
+ }
341
+ /** Default implementation of rendering tree on grid cell
342
+ * @param gCtx Context to draw on grid
343
+ * @param bd Bound rect to clip drawing on task moment
344
+ * @param gCell Grid cell to draw
345
+ * @param cellImageData Image data of the cell to be drawn
346
+ */
347
+ renderOnGrid(gCtx, bd, gCell, cellImageData) {
348
+ const callLog = `renderOnGridCell( gRow = ${gCell.gridRow} )`;
349
+ const logPrefix = `${this.toLog()}.${callLog}`;
350
+ const dpr = window.devicePixelRatio;
351
+ this.logger.debug(`${logPrefix}, start`);
352
+ gCtx.save();
353
+ try {
354
+ gCtx.resetTransform();
355
+ if (this.gridCol) {
356
+ const grid = this.gridCol.grid;
357
+ const vertScrollMin = Math.floor(grid.vertScroll.min);
358
+ // Correction for vert scrolling happened between task and render, calculate bd.y directly
359
+ bd.y = ((gCell.gridRow - vertScrollMin) * grid.props.rowHeight +
360
+ grid.colHeaderHeight) * dpr;
361
+ // Correction for horz scrolling happened between task and render, calculate bd.x directly
362
+ let left = 0;
363
+ for (let colI = 0; colI < this.gridCol.idx; colI++) {
364
+ const col = grid.columns.byIndex(colI);
365
+ left += col.visible ? col.width : 0;
366
+ }
367
+ bd.x = (left - grid.horzScroll.min) * dpr;
368
+ }
369
+ /** Clip rect*/ const cr = new DG.Rect(bd.x + dpr, bd.y + dpr, (bd.width - 1) * dpr, (bd.height - 1) * dpr);
370
+ // gCtx.beginPath();
371
+ // gCtx.strokeStyle = '#408000';
372
+ // gCtx.rect(cr.x, cr.y, cr.width, cr.height);
373
+ // gCtx.stroke();
374
+ gCtx.beginPath();
375
+ gCtx.rect(cr.x, cr.y, cr.width, cr.height);
376
+ gCtx.clip();
377
+ //gCtx.drawImage(cellImageData, cr.x, cr.y, cr.width, cr.height);
378
+ gCtx.putImageData(cellImageData, bd.x + dpr, bd.y + dpr); // does not respect clip
379
+ }
380
+ finally {
381
+ gCtx.restore();
382
+ }
383
+ }
384
+ get onRendered() { return this._onRendered; }
385
+ invalidate(caller) {
386
+ this.invalidateGrid();
387
+ }
388
+ async awaitRendered(timeout = 10000, reason = `await rendered ${timeout} timeout`) {
389
+ await testEvent(this._onRendered, () => { }, () => { this.invalidate(); }, timeout, reason);
390
+ }
391
+ }
392
+ async function base64ToImg(base64) {
393
+ return new Promise((resolve, reject) => {
394
+ try {
395
+ const img = new Image();
396
+ img.onload = () => {
397
+ resolve(img);
398
+ };
399
+ img.src = base64;
400
+ }
401
+ catch (err) {
402
+ reject(err);
403
+ }
404
+ });
405
+ }
406
+ //# sourceMappingURL=cell-renderer-async-base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cell-renderer-async-base.js","sourceRoot":"","sources":["cell-renderer-async-base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import * as DG from 'datagrok-api/dg';
2
+ import { ILogger } from './logger';
3
+ import { Unsubscribable } from 'rxjs';
4
+ type GridCellRendererTemp<TBack> = {
5
+ rendererBack: TBack;
6
+ };
7
+ export declare function getGridCellRendererBack<TValue, TBack extends CellRendererBackBase<TValue>>(gridCell: DG.GridCell): [DG.GridColumn | null, DG.Column<TValue>, GridCellRendererTemp<TBack>];
8
+ export declare abstract class CellRendererBackBase<TValue> {
9
+ /** Not null if rendered on a grid */
10
+ protected readonly gridCol: DG.GridColumn | null;
11
+ protected readonly tableCol: DG.Column<TValue>;
12
+ protected readonly logger: ILogger;
13
+ protected subs: Unsubscribable[];
14
+ protected destroyed: boolean;
15
+ protected constructor(
16
+ /** Not null if rendered on a grid */
17
+ gridCol: DG.GridColumn | null, tableCol: DG.Column<TValue>, logger: ILogger);
18
+ private static viewerCounter;
19
+ private readonly viewerId;
20
+ protected toLog(): string;
21
+ protected destroy(): void;
22
+ protected invalidateGrid(): void;
23
+ protected abstract reset(): void;
24
+ }
25
+ export {};
26
+ //# sourceMappingURL=cell-renderer-back-base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cell-renderer-back-base.d.ts","sourceRoot":"","sources":["cell-renderer-back-base.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,OAAO,EAAC,OAAO,EAAC,MAAM,UAAU,CAAC;AACjC,OAAO,EAAC,cAAc,EAAC,MAAM,MAAM,CAAC;AAGpC,KAAK,oBAAoB,CAAC,KAAK,IAAI;IACjC,YAAY,EAAE,KAAK,CAAC;CACrB,CAAA;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,KAAK,SAAS,oBAAoB,CAAC,MAAM,CAAC,EACxF,QAAQ,EAAE,EAAE,CAAC,QAAQ,GACpB,CAAC,EAAE,CAAC,UAAU,GAAG,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAcxE;AAED,8BAAsB,oBAAoB,CAAC,MAAM;IAK7C,qCAAqC;IACrC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,GAAG,IAAI;IAChD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO;IAPpC,SAAS,CAAC,IAAI,EAAE,cAAc,EAAE,CAAM;IACtC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAS;IAErC,SAAS;IACP,qCAAqC;IAClB,OAAO,EAAE,EAAE,CAAC,UAAU,GAAG,IAAI,EAC7B,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAC3B,MAAM,EAAE,OAAO;IAiCpC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgD;IAEzE,SAAS,CAAC,KAAK,IAAI,MAAM;IAIzB,SAAS,CAAC,OAAO,IAAI,IAAI;IAMzB,SAAS,CAAC,cAAc,IAAI,IAAI;IAIhC,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI;CACjC"}
@@ -0,0 +1,80 @@
1
+ import * as grok from 'datagrok-api/grok';
2
+ export function getGridCellRendererBack(gridCell) {
3
+ let temp = null;
4
+ let gridCol = null;
5
+ try {
6
+ gridCol = gridCell.dart ? gridCell.gridColumn : null;
7
+ temp = gridCol ? gridCol.temp : null;
8
+ }
9
+ catch {
10
+ [gridCol, temp] = [null, null];
11
+ }
12
+ const tableCol = gridCell.cell.column;
13
+ temp = temp ?? tableCol.temp;
14
+ if (!temp)
15
+ throw new Error(`Grid cell renderer back store (GridColumn or Column) not found.`);
16
+ return [gridCol, tableCol, temp];
17
+ }
18
+ export class CellRendererBackBase {
19
+ constructor(
20
+ /** Not null if rendered on a grid */
21
+ gridCol, tableCol, logger) {
22
+ this.gridCol = gridCol;
23
+ this.tableCol = tableCol;
24
+ this.logger = logger;
25
+ this.subs = [];
26
+ this.destroyed = false;
27
+ this.viewerId = ++CellRendererBackBase.viewerCounter;
28
+ this.reset();
29
+ if (this.tableCol && this.tableCol.dataFrame) {
30
+ this.subs.push(this.tableCol.dataFrame.onDataChanged.subscribe(() => {
31
+ try {
32
+ this.reset();
33
+ }
34
+ catch (err) {
35
+ this.logger.error(err);
36
+ }
37
+ }));
38
+ }
39
+ if (this.tableCol) {
40
+ this.subs.push(grok.events.onTableRemoved.subscribe((eventData) => {
41
+ try {
42
+ const eventDf = eventData.args.dataFrame;
43
+ if (this.tableCol?.dataFrame.id === eventDf.id && !this.destroyed)
44
+ this.destroy();
45
+ }
46
+ catch (err) {
47
+ this.logger.error(err);
48
+ }
49
+ }));
50
+ }
51
+ if (this.gridCol) {
52
+ this.subs.push(grok.events.onViewRemoving.subscribe((eventData) => {
53
+ try {
54
+ const eventView = eventData.args.view;
55
+ if (this.gridCol?.dart &&
56
+ this.gridCol.grid && this.gridCol?.grid?.dart &&
57
+ this.gridCol?.grid?.view?.id === eventView.id && !this.destroyed)
58
+ this.destroy();
59
+ }
60
+ catch (err) {
61
+ this.logger.error(err);
62
+ }
63
+ }));
64
+ }
65
+ }
66
+ toLog() {
67
+ return `${this.constructor.name}<${this.viewerId}>`;
68
+ }
69
+ destroy() {
70
+ for (const sub of this.subs)
71
+ sub.unsubscribe();
72
+ this.destroyed = true;
73
+ }
74
+ invalidateGrid() {
75
+ if (this.gridCol && this.gridCol.dart)
76
+ this.gridCol.grid?.invalidate();
77
+ }
78
+ }
79
+ CellRendererBackBase.viewerCounter = -1;
80
+ //# sourceMappingURL=cell-renderer-back-base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cell-renderer-back-base.js","sourceRoot":"","sources":["cell-renderer-back-base.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,8 @@ import * as DG from 'datagrok-api/dg';
2
2
  import { SeqHandler } from './seq-handler';
3
3
  import { MonomerToShortFunc } from './macromolecule';
4
4
  import { IMonomerLib } from '../types';
5
+ import { CellRendererBackBase } from './cell-renderer-back-base';
6
+ import { ILogger } from './logger';
5
7
  type MonomerPlacerProps = {
6
8
  seqHandler: SeqHandler;
7
9
  monomerLib: IMonomerLib;
@@ -10,9 +12,7 @@ type MonomerPlacerProps = {
10
12
  monomerToShort: MonomerToShortFunc;
11
13
  monomerLengthLimit: number;
12
14
  };
13
- export declare class MonomerPlacer {
14
- readonly grid: DG.Grid | null;
15
- readonly col: DG.Column<string>;
15
+ export declare class MonomerPlacer extends CellRendererBackBase<string> {
16
16
  private readonly propsProvider;
17
17
  private _monomerLengthList;
18
18
  private separatorWidth;
@@ -26,10 +26,9 @@ export declare class MonomerPlacer {
26
26
  _monomerStructureMap: {
27
27
  [key: string]: HTMLElement;
28
28
  };
29
- private readonly subs;
30
29
  /** View is required to subscribe and handle for data frame changes */
31
- constructor(grid: DG.Grid | null, col: DG.Column<string>, propsProvider: () => MonomerPlacerProps);
32
- private destroy;
30
+ constructor(gridCol: DG.GridColumn | null, tableCol: DG.Column<string>, logger: ILogger, propsProvider: () => MonomerPlacerProps);
31
+ protected reset(): void;
33
32
  /** Returns monomers lengths of the {@link rowIdx} and cumulative sums for borders, monomer places */
34
33
  getCellMonomerLengths(rowIdx: number): [number[], number[]];
35
34
  private getCellMonomerLengthsForSeq;
@@ -1 +1 @@
1
- {"version":3,"file":"cell-renderer-monomer-placer.d.ts","sourceRoot":"","sources":["cell-renderer-monomer-placer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAKtC,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAC,WAAW,EAAC,MAAM,UAAU,CAAC;AAGrC,KAAK,kBAAkB,GAAG;IACxB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,WAAW,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IACjD,cAAc,EAAE,kBAAkB,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;CAChE,CAAC;AAEF,qBAAa,aAAa;aAiBN,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI;aACpB,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAlBhC,OAAO,CAAC,kBAAkB,CAA2B;IAGrD,OAAO,CAAC,cAAc,CAAK;IACpB,KAAK,EAAE,kBAAkB,CAAC;IACjC,OAAO,CAAC,cAAc,CAAY;IAElC,OAAO,CAAC,QAAQ,CAAkB;IAClC,IAAW,OAAO,IAAI,OAAO,CAA0B;IAEhD,iBAAiB,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE,CAAM;IACvD,oBAAoB,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE,CAAM;IACjE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;IAE7C,sEAAsE;gBAEpD,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,EACpB,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EACrB,aAAa,EAAE,MAAM,kBAAkB;IA4B1D,OAAO,CAAC,OAAO;IAIf,qGAAqG;IAC9F,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC;IAWlE,OAAO,CAAC,2BAA2B;IAsBnC,OAAO,CAAC,8BAA8B;IAwCtC,yCAAyC;IAClC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAkCrD,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1C,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKtC,KAAK,IAAI,OAAO;CAGxB"}
1
+ {"version":3,"file":"cell-renderer-monomer-placer.d.ts","sourceRoot":"","sources":["cell-renderer-monomer-placer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAKtC,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAC,WAAW,EAAC,MAAM,UAAU,CAAC;AAErC,OAAO,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAC,OAAO,EAAC,MAAM,UAAU,CAAC;AAEjC,KAAK,kBAAkB,GAAG;IACxB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,WAAW,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IACjD,cAAc,EAAE,kBAAkB,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;CAChE,CAAC;AAEF,qBAAa,aAAc,SAAQ,oBAAoB,CAAC,MAAM,CAAC;IAmB3D,OAAO,CAAC,QAAQ,CAAC,aAAa;IAlBhC,OAAO,CAAC,kBAAkB,CAA2B;IAGrD,OAAO,CAAC,cAAc,CAAK;IACpB,KAAK,EAAE,kBAAkB,CAAC;IACjC,OAAO,CAAC,cAAc,CAAY;IAElC,OAAO,CAAC,QAAQ,CAAkB;IAClC,IAAW,OAAO,IAAI,OAAO,CAA0B;IAEhD,iBAAiB,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE,CAAM;IACvD,oBAAoB,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE,CAAM;IAEjE,sEAAsE;gBAEpE,OAAO,EAAE,EAAE,CAAC,UAAU,GAAG,IAAI,EAC7B,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAC3B,MAAM,EAAE,OAAO,EACE,aAAa,EAAE,MAAM,kBAAkB;cAWvC,KAAK,IAAI,IAAI;IAQhC,qGAAqG;IAC9F,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC;IAWlE,OAAO,CAAC,2BAA2B;IAsBnC,OAAO,CAAC,8BAA8B;IAyCtC,yCAAyC;IAClC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAkCrD,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1C,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKtC,KAAK,IAAI,OAAO;CAGxB"}