///
import type { SchemaProperties } from '@formily/json-schema';
import type { DatasetField, LayerSchema, WidgetSchema } from '../specs';
import type { WidgetMetadata } from '../specs/metadata';
import type { Dataset } from './dataset';
import type { ImplementService } from './service';
export type SlotsElements = {
[key in K]?: (props?: Record) => React.ReactNode;
};
export interface ImplementWidgetProps {
'data-widget-id': string;
'data-widget-name': string;
slotsElements: SlotsElements;
}
export type WidgetRegisterForm = Record, Values extends Record = Record> = {
/**
* 属性面板表单的 Schema 定义,来自表单库 formily 的 Schema:
* https://react.formilyjs.org/zh-CN/api/shared/schema
*/
schema: SchemaProperties;
/**
* 自定义表单组件:
* https://formilyjs.org/zh-CN/guide/advanced/custom
*/
components?: Record;
/**
* 表单数据格式转换,将结构化数据(属性面板数据类型)转换为表单的结构,
* 默认属性面板与表单数据一致,不做转换。
*/
toValues?: (config: Properties) => Values;
/**
* 表单数据格式转换,将表单的数据结构转为结构化数据(属性面板数据类型),
* 默认属性面板与表单数据一致,不做转换。
*/
fromValues?: (values: Values) => Properties;
};
export type DatasetFieldWithMeta = DatasetField & {
value: string;
label: string;
type?: string;
typeName?: string;
typeColor?: string;
};
export type WidgetRegisterFormProps = {
/**
* 数据集,用于提供数据集选择
*/
datasets: Dataset[];
/**
* 可视化图层,用于提供图层相关组件配置选择
*/
layers: LayerSchema[];
/**
* 原子组件,用于容器组件选择插槽内的原子组件
*/
atomWidgets: WidgetSchema[];
/**
* 组件 ID,用于原子组件的属性项
*/
widgetId: string;
/**
* 服务资产,用于提供选择可消费的服务资产
*/
services: ImplementService[];
};
export type ImplementWidgetOptions = Record, CP extends Properties = Properties> = {
/**
* 组件资产版本号
*/
version: string;
/**
* 组件
*/
component: React.FC;
/**
* 组件资产元属性信息
*/
metadata: WidgetMetadata;
/**
* 属性面板默认值,用于创建组件时默认值设置
*/
defaultProperties?: Properties;
/**
* 组件资产属性面板配置
*/
registerForm?: WidgetRegisterForm | ((props: WidgetRegisterFormProps) => WidgetRegisterForm);
};
export type ImplementWidget = Record, CP extends Properties = Properties> = {
version: string;
component: React.FC;
metadata: WidgetMetadata;
defaultProperties?: Properties;
registerForm: WidgetRegisterForm | ((props: WidgetRegisterFormProps) => WidgetRegisterForm);
};
export type ChildrenMap = Record & {
_grandChildren?: WidgetSchema[];
_allChildren: WidgetSchema[];
}>;