Skip to content

Commit

Permalink
start with async support
Browse files Browse the repository at this point in the history
  • Loading branch information
sgratzl committed Dec 2, 2018
1 parent 92182c9 commit c634ffc
Show file tree
Hide file tree
Showing 5 changed files with 208 additions and 141 deletions.
40 changes: 34 additions & 6 deletions src/renderer/MultiLevelCellRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,15 @@ import {default as IRenderContext, ERenderMode, ICellRendererFactory, IImposer}
import {renderMissingCanvas, renderMissingDOM} from './missing';
import {matchColumns} from './utils';
import {cssClass} from '../styles';
import {IAbortAblePromise, allAbortAble} from 'lineupengine';

/** @internal */
export function gridClass(idPrefix: string, column: Column) {
return cssClass(`stacked-${idPrefix}-${column.id}`);
}

/** @internal */
export function createData(parent: { children: Column[] } & Column, context: IRenderContext, stacked: boolean, mode: ERenderMode, imposer?: IImposer) {
export function createData(parent: {children: Column[]} & Column, context: IRenderContext, stacked: boolean, mode: ERenderMode, imposer?: IImposer) {
const padding = COLUMN_PADDING;
let offset = 0;
const cols = parent.children.map((column) => {
Expand Down Expand Up @@ -89,10 +90,11 @@ export default class MultiLevelCellRenderer extends AAggregatedGroupRenderer<IMu
template: `<div class='${useGrid ? gridClass(context.idPrefix, col) : ''} ${useGrid && !stacked ? cssClass('grid-space') : ''}'>${cols.map((d) => d.template).join('')}</div>`,
update: (n: HTMLDivElement, d: IDataRow, i: number, group: IGroup, meta: IGroupMeta) => {
if (renderMissingDOM(n, col, d)) {
return;
return null;
}
matchColumns(n, cols, context);

const toWait: IAbortAblePromise<void>[] = [];
const children = <HTMLElement[]>Array.from(n.children);
const total = col.getWidth();
let missingWeight = 0;
Expand All @@ -108,29 +110,46 @@ export default class MultiLevelCellRenderer extends AAggregatedGroupRenderer<IMu
} else {
cnode.style.gridColumnStart = (ci + 1).toString();
}
col.renderer!.update(cnode, d, i, group, meta);
const r = col.renderer!.update(cnode, d, i, group, meta);
if (stacked) {
missingWeight += (1 - (<INumberColumn>col.column).getNumber(d)) * weight;
}
if (r) {
toWait.push(r);
}
});

if (toWait.length > 0) {
return <IAbortAblePromise<void>>allAbortAble(toWait);
}
return null;
},
render: (ctx: CanvasRenderingContext2D, d: IDataRow, i: number, group: IGroup, meta: IGroupMeta) => {
if (renderMissingCanvas(ctx, col, d, width)) {
return;
return null;
}
const toWait: IAbortAblePromise<void>[] = [];
let stackShift = 0;
cols.forEach((col) => {
const cr = col.renderer!;
if (cr.render) {
const shift = col.shift - stackShift;
ctx.translate(shift, 0);
cr.render(ctx, d, i, group, meta);
const r = cr.render(ctx, d, i, group, meta);
if (typeof r !== 'boolean' && r) {
toWait.push(r);
}
ctx.translate(-shift, 0);
}
if (stacked) {
stackShift += col.width * (1 - (<INumberColumn>col.column).getNumber(d));
}
});

if (toWait.length > 0) {
return <IAbortAblePromise<void>>allAbortAble(toWait);
}
return null;
}
};
}
Expand All @@ -148,6 +167,7 @@ export default class MultiLevelCellRenderer extends AAggregatedGroupRenderer<IMu
update: (n: HTMLElement, group: IGroup, rows: IDataRow[], meta: IGroupMeta) => {
matchColumns(n, cols, context);

const toWait: IAbortAblePromise<void>[] = [];
const children = <HTMLElement[]>Array.from(n.children);
const total = col.getWidth();
cols.forEach((col, ci) => {
Expand All @@ -161,8 +181,16 @@ export default class MultiLevelCellRenderer extends AAggregatedGroupRenderer<IMu
} else {
cnode.style.gridColumnStart = (ci + 1).toString();
}
col.groupRenderer!.update(cnode, group, rows, meta);
const r = col.groupRenderer!.update(cnode, group, rows, meta);
if (r) {
toWait.push(r);
}
});

if (toWait.length > 0) {
return <IAbortAblePromise<void>>allAbortAble(toWait);
}
return null;
}
};
}
Expand Down
9 changes: 5 additions & 4 deletions src/renderer/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import Column from '../model/Column';
import {IDataProvider} from '../provider';
import DialogManager from '../ui/dialogs/DialogManager';
import {ISequence} from '../internal/interable';
import {IAbortAblePromise} from 'lineupengine';

export interface IImposer {
color?(row: IDataRow | null, valueHint?: number): string | null;
Expand All @@ -26,12 +27,12 @@ export interface ICellRenderer {
* @param i the order relative index
* @param group the group this row is part of
*/
update(node: HTMLElement, d: IDataRow, i: number, group: IGroup, meta: IGroupMeta): void;
update(node: HTMLElement, d: IDataRow, i: number, group: IGroup, meta: IGroupMeta): void | IAbortAblePromise<void> | null;

/**
* render a low detail canvas row
*/
render?(ctx: CanvasRenderingContext2D, d: IDataRow, i: number, group: IGroup, meta: IGroupMeta): void | boolean;
render?(ctx: CanvasRenderingContext2D, d: IDataRow, i: number, group: IGroup, meta: IGroupMeta): void | IAbortAblePromise<void> | boolean | null;
}

/**
Expand All @@ -49,7 +50,7 @@ export interface IGroupCellRenderer {
* @param group the group to render
* @param rows the data items
*/
update(node: HTMLElement, group: IGroup, rows: ISequence<IDataRow>, meta: IGroupMeta): void;
update(node: HTMLElement, group: IGroup, rows: ISequence<IDataRow>, meta: IGroupMeta): void | IAbortAblePromise<void> | null;
}

export interface ISummaryRenderer {
Expand All @@ -58,7 +59,7 @@ export interface ISummaryRenderer {
*/
readonly template: string;

update(node: HTMLElement, hist: IStatistics | ICategoricalStatistics | null): void;
update(node: HTMLElement, hist: IStatistics | ICategoricalStatistics | null): void | IAbortAblePromise<void> | null;
}


Expand Down
Loading

0 comments on commit c634ffc

Please sign in to comment.