@realsee/five
Version:
Realsee Renderer SDK
120 lines (119 loc) • 3.72 kB
TypeScript
import { Five, Subscribe } from '@realsee/five';
export declare namespace BasePlugin {
/**
* 基本属性字段
*/
interface State {
/**
* 插件是否启用
*/
enabled: boolean;
/**
* 插件UI是否展示
*/
visible?: boolean;
/**
* 插件的配置项
*/
config?: unknown;
}
interface BaseOptions {
/** 是否是用户行为 */
userAction?: boolean;
}
interface Config {
/** 静态资源前缀 */
staticPrefix?: string;
/** 国际化转换函数 */
i18n?: (key: string) => string;
}
interface StateChangeParams<PluginState> {
/** 最新的State */
state: PluginState;
/** 上一个State */
prevState?: PluginState;
/** 是否是用户触发 */
userAction: boolean;
}
/**
* 插件基本事件
*/
type EventMap<PluginState, PluginData> = {
/** 插件被销毁 */
dispose: () => void;
/** 插件状态变化 */
stateChange: (params: StateChangeParams<PluginState>) => void;
/** 数据变更 */
dataChange: (data: PluginData, prevData?: PluginData) => void;
/** 数据加载完成 */
dataLoaded: (data: PluginData) => void;
};
/**
* plugin 的基本控制器
*/
abstract class Controller<PluginState extends State, PluginEventMap extends EventMap<PluginState, PluginData>, PluginServerData, PluginData> {
five: Five;
protected abstract data?: PluginData;
/**
* 加载插件依赖数据
* @param serverData - 插件数据
* @param state - 插件 State
*/
abstract load?(serverData: PluginServerData, state?: PluginState, userAction?: boolean): Promise<void>;
/**
* @description 插件事件钩子
*/
hooks: Subscribe<PluginEventMap>;
readonly staticPrefix: string;
/**
* 当前状态
* @description
* ```text
* 可以通过 plugin.state 和 plugin.setState 来获取和设置。
* 通过 state 设置后,plugin 会通过合适的动画运动来达到设置的效果。
* 来迎合一些通过数据驱动的场景。
* ```
*/
abstract state: PluginState;
constructor(five: Five, config?: Config);
/**
* 获取当前的插件状态,如果当初插件内存在需要通过动画变更的 state 值,则通过此方法可以得到中间状态
*/
getCurrentState(): PluginState;
/**
* 插件自身DOM添加到父容器
* @param wrapper - Element元素
*/
appendTo?(wrapper: Element): void;
/**
* 展示UI
*/
show?(options?: BaseOptions): Promise<void> | void;
/**
* 隐藏UI
*/
hide?(options?: BaseOptions): Promise<void> | void;
/**
* 设置state
* @param state - 插件的目标状态
* @param options - 配置项
*/
setState?(state: Partial<PluginState>, options?: BaseOptions): void;
/**
* @description 获取静态资源的url
*/
absoluteUrl(url: string): string;
/**
* 启用插件,让插件能够响应交互
*/
abstract enable(options?: BaseOptions): void;
/**
* 禁用插件,让插件停止响应交互
*/
abstract disable(options?: BaseOptions): void;
/**
* 插件进行销毁
*/
abstract dispose(): void;
}
}