jamis
Version:
一种支持通过JSON配置方式生成页面的组件库
145 lines (144 loc) • 4.8 kB
TypeScript
import type { PickClassStyleType, RendererProps, Schema, SchemaBoolean } from 'jamis-core';
import type { ActionSchema, BaseSchemaScoped, CardSchema, IListItem, IListStore, SchemaClassName, SchemaCollection, SchemaExpression, SchemaSlots, SchemaTokenizeableString, SchemaTpl, WithPrefixAffixHook, WithWrapperHook } from '../types';
/**
* Cards 卡片集合组件。
*/
export interface CardsSchema extends BaseSchemaScoped, WithWrapperHook, WithPrefixAffixHook {
/**
* 指定为 cards 类型
*/
type: 'cards';
card?: Partial<CardSchema>;
/**
* 头部 CSS 类名
* @deprecated 请使用`slots.Cards-header.className`
*/
headerClassName?: SchemaClassName;
/**
* 底部 CSS 类名
* @deprecated 请使用`slots.Cards-footer.className`
*/
footerClassName?: SchemaClassName;
/**
* 卡片 CSS 类名
* @deprecated 请使用`slots.className`
*/
itemClassName?: SchemaClassName;
/** @deprecated 请使用`slots.className` */
cardClassName?: SchemaClassName;
checkAll?: boolean;
/**
* 无数据提示
* @deprecated 请使用`slots`
*/
placeholder?: SchemaTpl;
/**
* @deprecated 请使用`slots`
*/
placeholderExpr?: SchemaTpl;
/**
* 是否显示底部
*/
showFooter?: boolean;
/**
* 是否显示头部
*/
showHeader?: boolean;
/**
* 数据源: 绑定当前环境变量
*
* @default ${items}
*/
source?: SchemaTokenizeableString;
/**
* 是否隐藏勾选框
*/
hideCheckToggler?: boolean;
/**
* 是否固顶
*/
affixHeader?: boolean;
/**
* 顶部区域
* @deprecated 请使用`slots`
*/
header?: SchemaCollection;
/** @deprecated 请使用`slots.className` */
headerToolbarClassName?: SchemaClassName;
/** @deprecated 请使用`slots.className` */
toolbarClassName?: SchemaClassName;
/**
* 底部区域
* @deprecated 请使用`slots`
*/
footer?: SchemaCollection;
/** @deprecated 请使用`slots.className` */
footerToolbarClassName?: SchemaClassName;
/**
* 配置某项是否可以点选
*/
itemCheckableOn?: SchemaExpression;
/**
* 配置某项是否可拖拽排序,前提是要开启拖拽功能
*/
itemDraggableOn?: SchemaExpression;
/**
* 点击卡片的时候是否勾选卡片。
*/
checkOnItemClick?: boolean;
/**
* 是否为瀑布流布局?
*/
masonryLayout?: boolean;
/**
* 可以用来作为值的字段
*/
valueField?: string;
/**
* 卡片一行显示几列, 默认会自适应
*/
columnsCount?: number;
itemAction?: ActionSchema;
/** 是否显示加载中 */
showLoading?: boolean;
showLoadingOn?: SchemaBoolean;
lazyRenderAfter?: number;
/** @deprecated 请使用`slots.className` */
lazyItemClassName?: SchemaClassName;
/**
* 是否多选
*/
multiple?: SchemaBoolean;
slots?: SchemaSlots<'Cards-header' | 'Cards-toolbar' | 'Cards-headerToolbar' | 'Cards-footer' | 'Cards-footerToolbar' | 'Cards-beforeRegion' | 'Cards-afterRegion' | (string & {})>;
}
export interface CardsProps extends RendererProps, Omit<CardsSchema, 'className' | 'itemClassName' | 'data'> {
store: IListStore;
selectable?: boolean;
selected?: Array<any>;
checkAll?: 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 extends PickClassStyleType {
index: number;
card: Schema | undefined;
item: IListItem;
itemClassName: string;
lazyItemClassName?: SchemaClassName;
syncSelected: () => void;
handleAction: CardsProps['onAction'];
cardsProps: Pick<CardsProps, 'checkOnItemClick' | 'hideCheckToggler' | 'cardClassName' | 'itemAction' | 'data' | 'dispatchEvent' | 'onEvent' | 'onAction' | 'onSave' | 'primaryField' | 'render'> & {
multiple?: boolean;
};
storeProps: Pick<IListStore, 'dragging' | 'selectable' | 'selectedItems' | 'unSelectedItems'>;
}