jamis
Version:
一种支持通过JSON配置方式生成页面的组件库
94 lines (93 loc) • 5.39 kB
TypeScript
import React from 'react';
import type { ActionObject, IScopedContext, RendererProps, Schema, SchemaNode } from 'jamis-core';
import { ScopedContext } from 'jamis-core';
import type { CRUDProps, ScrollEventParam } from '../types';
export default class CRUD extends React.Component<CRUDProps, any> {
static propsList: Array<keyof CRUDProps>;
static defaultProps: Partial<CRUDProps>;
control: any;
lastQuery: any;
lastData: any;
timer: ReturnType<typeof setTimeout>;
mounted: boolean;
/** 父容器, 主要用于定位CRUD内部popover的挂载点 */
parentContainer: Element | null;
filterOnEvent: ((onEvent: RendererProps["onEvent"]) => import("lodash").Dictionary<import("jamis-core").EventListenerAction | undefined>) & import("lodash").MemoizedFunction;
/** 正在加载下一页中 */
loadMoreSearch: Promise<void> | null;
disposers: (() => void)[];
constructor(props: CRUDProps);
componentDidMount(): void;
componentDidUpdate(prevProps: CRUDProps): void;
componentWillUnmount(): void;
/**
* 防抖解析source关联的数据域里的items, 兼容可能通过source使用了ARRAYFILTER等表达式的场景, 避免死循环
*/
resolveSourceItemsLazy: import("lodash").DebouncedFunc<() => void>;
/** 查找CRUD最近层级的父窗口 */
getClosestParentContainer: () => Element | null;
controlRef(control: any): void;
handleAction(e: React.UIEvent<any> | undefined, action: ActionObject, ctx: Record<string, any>, throwErrors?: boolean, delegate?: IScopedContext): any;
handleScroll: (param: ScrollEventParam) => void;
handleBulkAction(selectedItems: Array<any>, unSelectedItems: Array<any>, e: React.UIEvent<any>, action: ActionObject): void;
handleItemAction(action: ActionObject, ctx: any): void;
handleFilterInit(values: object): void;
handleFilterReset(values: object, action: any): void;
handleFilterSubmit(values: object, jumpToFirstPage?: boolean, replaceLocation?: boolean, search?: boolean): void;
handleBulkGo(selectedItems: Array<any>, unSelectedItems: Array<any>, e: React.MouseEvent<any>): void | Promise<false | void>;
handleDialogConfirm(values: object[], action: ActionObject, ctx: any, components: Array<any>): any;
handleDialogClose(confirmed?: boolean): void;
openFeedback(dialog: any, ctx: any): Promise<unknown>;
/**
* 执行加载
*
* @param values 搜索条件
*/
search: (values?: any, silent?: boolean, clearSelection?: boolean, forceReload?: boolean) => Promise<void>;
silentSearch: (values?: object, clearSelection?: boolean, forceReload?: boolean) => Promise<void>;
handleChangePage(page: number, perPage?: number): void;
handleSave(rows: Array<object> | object, diff: Array<object> | object, indexes: Array<string>, unModifiedItems?: Array<any>, rowsOrigin?: Array<object> | object, options?: {
resetOnFailed?: boolean;
reload?: string;
}): void;
handleSaveOrder(moved: Array<object>, rows: Array<object>): void;
handleSelect(items: Array<any>, unSelectedItems: Array<any>): void;
handleChildPopOverOpen(popOver: any): void;
handleChildPopOverClose(popOver: any): void;
handleQuery(values: Record<string, any>, forceReload?: boolean): void;
reload(subpath?: string, query?: any): void;
receive(values: object): void;
reloadTarget(target: string, data: any): void;
closeTarget(target: string, data: any): void;
doAction(action: ActionObject, data: object, throwErrors?: boolean): any;
unSelectItem(item: any, index: number): void;
clearSelection(): void;
hasBulkActionsToolbar(): any;
hasBulkActions(): number | false;
renderBulkActions(childProps: any): JSX.Element | null;
renderPagination(toolbar: SchemaNode, showPerPage?: boolean, showStatistics?: boolean): JSX.Element | null;
renderStatistics(): JSX.Element | null;
renderLoadMore(): JSX.Element;
renderFilterToggler(): JSX.Element | null;
renderExportCSV(toolbar: Schema): JSX.Element;
renderToolbar(toolbar?: SchemaNode, index?: number, childProps?: any, restArgs?: {
toolbarRenderer?: (toolbar: SchemaNode, index: number) => React.ReactNode;
showPerPage?: boolean;
showStatistics?: boolean;
}): string | number | boolean | JSX.Element | React.ReactFragment | null;
renderHeaderToolbar: (childProps: any, toolbarRenderer?: (toolbar: SchemaNode, index: number) => React.ReactNode) => string | number | boolean | JSX.Element | React.ReactFragment | null;
renderFooterToolbar(childProps: Record<string, any>, toolbarRenderer?: (toolbar: SchemaNode, index: number) => React.ReactNode): string | number | boolean | JSX.Element | React.ReactFragment | null;
renderSelection(): React.ReactNode;
render(): JSX.Element;
}
export declare class CRUDRenderer extends CRUD {
static contextType: React.Context<IScopedContext<import("jamis-core").ScopedComponentType>>;
context: React.ContextType<typeof ScopedContext>;
constructor(props: CRUDProps, context: IScopedContext);
componentWillUnmount(): void;
reload(subpath?: string, query?: any, ctx?: any): void;
receive(values: any, subPath?: string): void;
reloadTarget(target: string, data: any): void;
closeTarget(target: string, data: any): void;
setData(values: Record<string, any>): void;
}