jamis
Version:
一种支持通过JSON配置方式生成页面的组件库
125 lines (124 loc) • 3.93 kB
TypeScript
import type { RendererProps, Schema, SchemaBoolean } from 'jamis-core';
import type { ActionSchema, BaseSchema, Card2Schema, CardSchema, IListItem, IListStore, SchemaClassName, SchemaCollection, SchemaExpression, SchemaTokenizeableString, SchemaTpl, WithPrefixAffixHook, WithWrapperHook } from '../types';
/**
* Cards 卡片集合渲染器。
*/
export interface CardsSchema extends BaseSchema, WithWrapperHook, WithPrefixAffixHook {
/**
* 指定为 cards 类型
*/
type: 'cards';
card?: Partial<CardSchema> | Card2Schema;
/**
* 头部 CSS 类名
*/
headerClassName?: SchemaClassName;
/**
* 底部 CSS 类名
*/
footerClassName?: SchemaClassName;
/**
* 卡片 CSS 类名
*/
itemClassName?: SchemaClassName;
cardClassName?: SchemaClassName;
checkAll?: boolean;
/**
* 无数据提示
*/
placeholder?: SchemaTpl;
placeholderExpr?: SchemaTpl;
/**
* 是否显示底部
*/
showFooter?: boolean;
/**
* 是否显示头部
*/
showHeader?: boolean;
/**
* 数据源: 绑定当前环境变量
*
* @default ${items}
*/
source?: SchemaTokenizeableString;
/**
* 是否隐藏勾选框
*/
hideCheckToggler?: boolean;
/**
* 是否固顶
*/
affixHeader?: boolean;
/**
* 顶部区域
*/
header?: SchemaCollection;
headerToolbarClassName?: SchemaClassName;
toolbarClassName?: SchemaClassName;
/**
* 底部区域
*/
footer?: SchemaCollection;
footerToolbarClassName?: SchemaClassName;
/**
* 配置某项是否可以点选
*/
itemCheckableOn?: SchemaExpression;
/**
* 配置某项是否可拖拽排序,前提是要开启拖拽功能
*/
itemDraggableOn?: SchemaExpression;
/**
* 点击卡片的时候是否勾选卡片。
*/
checkOnItemClick?: boolean;
/**
* 是否为瀑布流布局?
*/
masonryLayout?: boolean;
/**
* 可以用来作为值的字段
*/
valueField?: string;
/**
* 卡片一行显示几列, 默认会自适应
*/
columnsCount?: number;
itemAction?: ActionSchema;
/** 是否显示加载中 */
showLoading?: boolean;
showLoadingOn?: SchemaBoolean;
lazyRenderAfter?: number;
lazyItemClassName?: SchemaClassName;
}
export interface CardsProps extends RendererProps, Omit<CardsSchema, 'className' | 'itemClassName'> {
store: IListStore;
selectable?: boolean;
selected?: Array<any>;
checkAll?: boolean;
multiple?: boolean;
valueField?: string;
draggable?: boolean;
dragIcon?: SVGAElement;
onSelect: (selectedItems: Array<object>, unSelectedItems: Array<object>) => void;
onSave?: (items: Array<object> | object, diff: Array<object> | object, rowIndexes: Array<number> | number, unModifiedItems?: Array<object>, rowOrigins?: Array<object> | object, options?: {
resetOnFailed?: boolean;
reload?: string;
}) => void;
onSaveOrder?: (moved: Array<object>, items: Array<object>) => void;
onQuery: (values: object) => void;
}
export type CardsRendererEvent = 'change' | 'selected' | 'selectedChange' | 'cardClick' | 'cardDbClick';
export type CardsRendererAction = 'check-all' | 'toggleSelectAll' | 'selectAll' | 'clearAll';
export interface CardsItemWrapperProps {
index: number;
card: Schema | undefined;
item: IListItem;
itemClassName: string;
lazyItemClassName?: SchemaClassName;
syncSelected: () => void;
handleAction: CardsProps['onAction'];
cardsProps: Pick<CardsProps, 'multiple' | 'checkOnItemClick' | 'hideCheckToggler' | 'cardClassName' | 'itemAction' | 'data' | 'dispatchEvent' | 'onEvent' | 'onAction' | 'onSave' | 'primaryField' | 'render'>;
storeProps: Pick<IListStore, 'dragging' | 'selectable' | 'selectedItems' | 'unSelectedItems'>;
}