import type { Api, ApiMapper, AsyncFuncString, IServiceStore, RendererEnv, RendererEvent, RendererProps, SchemaBoolean, SchemaExpression, SchemaMessage } from 'jamis-core'; import type { BaseSchemaScoped, SchemaCollection, StaticControlSchemaBase } from '../types'; /** * Service 服务类控件。 */ export interface ServiceSchema extends BaseSchemaScoped { /** * 指定为 Service 数据拉取控件。 */ type: 'service'; /** * 页面初始化的时候,可以设置一个 API 让其取拉取,发送数据会携带当前 data 数据(包含地址栏参数),获取得数据会合并到 data 中,供组件内使用。 */ api?: Api | ApiMapper; /** * WebScocket 地址,用于实时获取数据 */ ws?: string; /** * 通过调用外部函数来获取数据 */ dataProvider?: ((data: Record, setData: (data: Record) => void, env: RendererEnv) => any) | AsyncFuncString; /** * 内容区域 */ body?: SchemaCollection; /** * @deprecated 改成 api 的 sendOn。 */ fetchOn?: SchemaExpression; /** * 是否默认就拉取? */ initFetch?: boolean; /** * 是否默认就拉取?通过表达式来决定. * * @deprecated 改成 api 的 sendOn。 */ initFetchOn?: SchemaExpression; /** * 用来获取远程 Schema 的 api */ schemaApi?: Api | ApiMapper; /** * 页面schema提供者, 和前面的schema/schemaApi互斥, 优先级从前往后 */ schemaProvider?: (data: Record, store: IServiceStore) => Promise; /** * 是否默认加载 schemaApi */ initFetchSchema?: boolean; /** * 用表达式来配置。 * @deprecated 改成 api 的 sendOn。 */ initFetchSchemaOn?: SchemaExpression; /** * 是否轮询拉取 */ interval?: number | string; /** * 是否静默拉取 */ silentPolling?: boolean; /** * 关闭轮询的条件。 */ stopAutoRefreshWhen?: SchemaExpression; messages?: SchemaMessage; /** * 当schema加载失败时, 显示错误信息到页面上 */ showSchemaError?: boolean; /** * 控制是否要显示loading */ showLoading?: boolean; showLoadingOn?: SchemaBoolean; } export interface StaticServiceSchema extends Omit, StaticControlSchemaBase { type: 'static-service'; } export interface ServiceProps extends RendererProps, Omit { store: IServiceStore; messages: SchemaMessage; dispatchEvent: (event: IServiceEvent, data?: any) => Promise; } export type IServiceEvent = /** schemaProvider调用成功 */ 'schemaProviderInited' /** api接口数据调用成功 */ | 'fetchInited' /** schemaApi调用成功 */ | 'fetchSchemaInited';