jamis
Version:
一种支持通过JSON配置方式生成页面的组件库
149 lines (148 loc) • 6.77 kB
TypeScript
import React from 'react';
import { ScopedContext } from 'jamis-core';
import Sortable from 'sortablejs';
import type { ActionObject, IScopedContext, SchemaNode } from 'jamis-core';
import type { BackTopRef, ExportExcelToolbar, HeaderCellRenderProps, IColumn, IRow, ITableStore, RenderCellProps, SummaryRow, TableProps } from '../types';
export declare class TableCmpt extends React.Component<TableProps, object> {
static contextType: React.Context<IScopedContext<import("jamis-core").ScopedComponentType>>;
context: React.ContextType<typeof ScopedContext>;
static propsList: Array<string>;
static defaultProps: Partial<TableProps>;
table?: HTMLTableElement;
backTop: BackTopRef['current'];
sortable?: Sortable;
dragTip?: HTMLElement;
affixedTable?: HTMLTableElement;
parentNode?: HTMLElement | Window;
totalWidth: number;
totalHeight: number;
outterWidth: number;
outterHeight: number;
unSensor?: Function;
toDispose: Array<() => void>;
updateTableInfoLazy: import("lodash").DebouncedFuncLeading<any>;
widths: {
[propName: string]: number;
};
widths2: {
[propName: string]: number;
};
heights: {
[propName: string]: number;
};
renderedToolbars: Array<string>;
subForms: any;
timer: ReturnType<typeof setTimeout>;
tableFixed: boolean;
constructor(props: TableProps, context: IScopedContext);
static syncRows(store: ITableStore, props: TableProps, prevProps?: TableProps): boolean;
componentDidMount(): void;
/**
* 自动设置表格高度占满界面剩余区域
* 用 css 实现有点麻烦,要改很多结构,所以先用 dom hack 了,避免对之前的功能有影响
*/
updateAutoFillHeight(): void;
componentDidUpdate(prevProps: TableProps): void;
componentWillUnmount(): void;
subFormRef(form: any, x: number, y: number): void;
handleAction(e: React.UIEvent<any> | undefined, action: ActionObject, ctx: object): void;
handleCheck: (item: IRow, checked: boolean, shift?: boolean) => Promise<void>;
handleRowClick: (item: IRow, index: number, restArgs: {
clientX: number;
clientY: number;
}) => Promise<void | import("jamis-core").RendererEvent<any, any>>;
handleRowMouseUp: (item: IRow, index: number, restArgs: {
clientX: number;
clientY: number;
}) => Promise<void | import("jamis-core").RendererEvent<any, any>>;
handleRowDbClick: (item: IRow, index: number, restArgs: {
clientX: number;
clientY: number;
}) => Promise<void | import("jamis-core").RendererEvent<any, any>>;
handleRowMouseEnter: import("lodash").DebouncedFuncLeading<(item: IRow, index: number) => Promise<void | import("jamis-core").RendererEvent<any, any>>>;
handleRowMouseLeave: import("lodash").DebouncedFuncLeading<(item: IRow, index: number) => Promise<void | import("jamis-core").RendererEvent<any, any>>>;
handleCheckAll(): Promise<void>;
handleQuickChange(item: IRow, values: object, saveImmediately?: boolean | any, savePristine?: boolean, options?: {
resetOnFailed?: boolean;
reload?: string;
}): void;
handleSave(): Promise<void>;
handleSaveOrder(): Promise<void>;
syncSelected(): void;
reset(): void;
bulkUpdate(value: any, items: Array<object>): void;
getSelected(): any[];
affixDetect(): void;
updateTableInfo(): void;
handleOutterScroll(): void;
tableRef(ref: HTMLTableElement): void;
dragTipRef(ref: any): void;
affixedTableRef(ref: HTMLTableElement): void;
initDragging(): void;
destroyDragging(): void;
getPopOverContainer: () => Element | Text | null;
handleMouseMove: (e: React.MouseEvent<any>) => void;
handleMouseLeave(): void;
draggingTr: HTMLTableRowElement;
originIndex: number;
draggingSibling: Array<HTMLTableRowElement>;
handleDragStart(e: React.DragEvent): void;
handleDragOver(e: any): void;
handleDrop(): Promise<void>;
handleDragEnd(): void;
handleImageEnlarge(info: any, target: {
rowIndex: number;
colIndex: number;
}): void;
resizeLine: HTMLElement;
resizeLineLeft: number;
targetTh: HTMLElement;
targetThWidth: number;
lineStartX: number;
handleColResizeMouseDown(e: React.MouseEvent<HTMLElement>): void;
handleColResizeMouseMove(e: MouseEvent): void;
handleColResizeMouseUp(e: MouseEvent): void;
handleColumnToggle(columns: Array<IColumn>): void;
doAction(action: ActionObject, args: any, throwErrors: boolean): any;
renderAutoFilterForm(): React.ReactNode;
renderHeading(): JSX.Element | null;
/**
* 执行onQuery, 并异步将content区域的scrollTop重置
*/
handleQueryWithResetScroll: (values: any) => void;
handleSort: (column: IColumn) => Promise<void>;
/**
* 封装一层使用props.data来作为数据域以解析表达式
*/
resolveVariable: (expr: string) => any;
/**
* 渲染表格头部列的前缀元素
*/
renderHeaderCellAffix: (column: IColumn | (() => JSX.Element | null)) => JSX.Element;
renderHeadCell: (column: IColumn | (() => JSX.Element | null), cellProps: HeaderCellRenderProps) => JSX.Element;
renderCell: (region: "placeholder" | string, column: IColumn | (() => JSX.Element | null), row: IRow, cellProps: RenderCellProps, ignoreDrag?: boolean) => JSX.Element;
renderAffixHeader(tableClassName: string): JSX.Element | null;
renderToolbar(toolbar: SchemaNode): JSX.Element | null | undefined;
renderColumnsToggler(config?: any): JSX.Element | null;
renderDragToggler(): JSX.Element | null;
renderExportExcel(toolbar: ExportExcelToolbar): JSX.Element | null;
renderActions(region: string): JSX.Element | null;
renderHeader(editable?: boolean): JSX.Element | JSX.Element[] | null;
renderFooter(): JSX.Element | JSX.Element[] | null;
generateRowKey: (row: IRow, rowKeyGenerator?: string) => any;
renderRows(rows?: IRow[], columns?: IColumn[], rowProps?: {
parent?: any;
regionPrefix?: string;
ignoreFootableContent?: boolean;
renderCell?: TableCmpt['renderCell'];
}): any[];
renderItemActions: () => JSX.Element | null;
renderSummaryRow: (position: "prefix" | "affix", items?: Array<any>, rowIndex?: number) => JSX.Element | null;
renderSummaryRows: (position: "prefix" | "affix", summaryRow?: SummaryRow) => JSX.Element | (JSX.Element | null)[] | null;
renderTableContent(tableClassName: string): JSX.Element;
render(): JSX.Element;
}
export declare class TableRenderer extends TableCmpt {
receive(values: any, subPath?: string): void;
reload(subPath?: string, query?: any, ctx?: any): void;
}