UNPKG

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
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; }