e-virt-table
Version:
A powerful data table based on canvas. You can use it as data grid、Microsoft Excel or Google sheets. It supports virtual scroll、cell edit etc.
151 lines (150 loc) • 4.22 kB
TypeScript
import Database from './Database';
import History from './History';
import { EventCallback } from './EventBus';
import Paint from './Paint';
import Config from './Config';
import { ChangeItem, Column, EVirtTableOptions } from './types';
import Icons from './Icons';
import CellHeader from './CellHeader';
import Row from './Row';
import Cell from './Cell';
export type ConfigType = Partial<typeof Config>;
export type containerElementOptions = {
containerElement: HTMLDivElement;
stageElement: HTMLDivElement;
canvasElement: HTMLCanvasElement;
overlayerElement: HTMLDivElement;
editorElement: HTMLDivElement;
emptyElement?: HTMLDivElement;
contextMenuElement?: HTMLDivElement;
};
export type HeaderOptions = {
x: number;
y: number;
width: number;
height: number;
visibleHeight: number;
visibleWidth: number;
visibleLeafColumns: Column[];
leafCellHeaders: CellHeader[];
renderLeafCellHeaders: CellHeader[];
renderCellHeaders: CellHeader[];
fixedLeftCellHeaders: [];
fixedRightCellHeaders: [];
renderCenterCellHeaders: [];
};
export type BodyOptions = {
x: number;
y: number;
width: number;
height: number;
visibleHeight: number;
visibleWidth: number;
headIndex: number;
tailIndex: number;
visibleRows: any[];
renderRows: Row[];
data: any[];
};
export type FooterOptions = {
x: number;
y: number;
width: number;
height: number;
visibleHeight: number;
visibleWidth: number;
renderRows: Row[];
};
export type SelectorOptions = {
enable: boolean;
xArr: number[];
yArr: number[];
xArrCopy: number[];
yArrCopy: number[];
};
export type AutofillOptions = {
enable: boolean;
xArr: number[];
yArr: number[];
};
export default class Context {
private eventBus;
private eventBrowser;
private eventTable;
containerElement: HTMLDivElement;
stageElement: HTMLDivElement;
canvasElement: HTMLCanvasElement;
overlayerElement: HTMLDivElement;
editorElement: HTMLDivElement;
emptyElement?: HTMLDivElement;
contextMenuElement?: HTMLDivElement;
stageWidth: number;
stageHeight: number;
paint: Paint;
icons: Icons;
isInsideTargetContainer: boolean;
mousedown: boolean;
isPointer: boolean;
rowResizing: boolean;
columnResizing: boolean;
scrollerMove: boolean;
scrollerFocus: boolean;
autofillMove: boolean;
selectorMove: boolean;
adjustPositioning: boolean;
editing: boolean;
onlyMergeCell: boolean;
selectOnlyOne: boolean;
scrollY: number;
scrollX: number;
fixedLeftWidth: number;
fixedRightWidth: number;
maxColIndex: number;
maxRowIndex: number;
hoverRow?: Row;
clickCell?: Cell;
focusCell?: Cell;
hoverCell?: Cell;
clickCellHeader?: CellHeader;
focusCellHeader?: CellHeader;
hoverCellHeader?: CellHeader;
body: BodyOptions;
footer: FooterOptions;
header: HeaderOptions;
selector: SelectorOptions;
autofill: AutofillOptions;
database: Database;
history: History;
config: Config;
constructor(containerOptions: containerElementOptions, options: EVirtTableOptions);
setConfig(config: Config): void;
setItemValueByEditor(rowKey: string, key: string, value: any, history?: boolean, reDraw?: boolean): void;
batchSetItemValueByEditor(_list: ChangeItem[], history?: boolean): void;
setFocusCell(cell: Cell): void;
clearSelector(): void;
clearAutofill(): void;
/**
* 获取选中的数据
* @returns
*/
getSelectedData(): {
xArr: number[];
yArr: number[];
text: string;
value: any[][];
};
setScroll(x: number, y: number): void;
setScrollX(x: number): void;
setScrollY(y: number): void;
isTarget(): boolean;
getOffset(e: MouseEvent): {
offsetX: number;
offsetY: number;
};
hasEvent(event: string): boolean;
on(event: string, callback: EventCallback): void;
once(event: string, callback: EventCallback): void;
off(event: string, callback: EventCallback): void;
emit(event: string, ...args: any[]): void;
destroy(): void;
}