|
|
|
import { _i18n } from "./core/i18n";
|
|
|
|
import { _OB } from "./core/ob";
|
|
|
|
import { _func } from "./core/func";
|
|
|
|
import { _Widget, _WidgetStatic } from "./core/widget";
|
|
|
|
import { _Single } from "./base/single/single";
|
|
|
|
import { _base } from "./core/base";
|
|
|
|
import { _BasicButton } from "./base/single/button/button.basic";
|
|
|
|
import { _Trigger } from "./base/single/trigger/trigger";
|
|
|
|
import { _Action, _ActionFactory } from "./core/action/action";
|
|
|
|
import { _ShowAction } from "./core/action/action.show";
|
|
|
|
import { _Behavior, _BehaviorFactory } from "./core/behavior/behavior";
|
|
|
|
import { _HighlightBehavior } from "./core/behavior/behavior.highlight";
|
|
|
|
import { _RedMarkBehavior } from "./core/behavior/behavior.redmark";
|
|
|
|
|
|
|
|
|
|
|
|
type ClassConstructor<T extends {}> = T & {
|
|
|
|
new(config: any): T;
|
|
|
|
(config: any): T;
|
|
|
|
readonly prototype: T;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface _BI extends _func, _i18n, _base {
|
|
|
|
OB: ClassConstructor<_OB>;
|
|
|
|
Widget: ClassConstructor<_Widget> & _WidgetStatic;
|
|
|
|
Single: ClassConstructor<_Single>;
|
|
|
|
BasicButton: ClassConstructor<_BasicButton>;
|
|
|
|
Trigger: ClassConstructor<_Trigger>;
|
|
|
|
Action: ClassConstructor<_Action>;
|
|
|
|
ActionFactory: ClassConstructor<_ActionFactory>;
|
|
|
|
ShowAction: ClassConstructor<_ShowAction>;
|
|
|
|
Behavior: ClassConstructor<_Behavior>;
|
|
|
|
BehaviorFactory: ClassConstructor<_BehaviorFactory>;
|
|
|
|
HighlightBehavior: ClassConstructor<_HighlightBehavior>;
|
|
|
|
RedMarkBehavior: ClassConstructor<_RedMarkBehavior>;
|
|
|
|
}
|
|
|
|
|
|
|
|
interface Obj {
|
|
|
|
[key: string]: any;
|
|
|
|
}
|
|
|
|
|
|
|
|
declare let BI: Obj & _BI;
|
|
|
|
|
|
|
|
declare const Fix: Obj;
|
|
|
|
|
|
|
|
export type Constructor<T> = new(...args: any[]) => T;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 注册widget
|
|
|
|
*/
|
|
|
|
export function shortcut () {
|
|
|
|
return function decorator<U> (Target: Constructor<U> & {xtype: string}): void {
|
|
|
|
BI.shortcut(Target.xtype, Target);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 注册model
|
|
|
|
*/
|
|
|
|
export function model () {
|
|
|
|
return function decorator<U extends {new (...args:any[]):{}} & {xtype: string, context?: ReadonlyArray<string>}>(Target: U): void {
|
|
|
|
BI.model(Target.xtype, class extends Target {
|
|
|
|
context = Target.context;
|
|
|
|
});
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 类注册_store属性
|
|
|
|
* @param Model model类
|
|
|
|
* @param opts 额外条件
|
|
|
|
*/
|
|
|
|
export function store<T> (Model?: Constructor<T> & {xtype: string}, opts: { props?(this: unknown): { [key: string]: unknown } } = {}) {
|
|
|
|
return function classDecorator<U extends {new (...args:any[]):{}}>(constructor:U) {
|
|
|
|
return class extends constructor {
|
|
|
|
_store () {
|
|
|
|
const props = opts.props ? opts.props.apply(this) : undefined;
|
|
|
|
|
|
|
|
return BI.Models.getModel(Model.xtype, props);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Model基类
|
|
|
|
*/
|
|
|
|
export class Model<U extends {types?: {[key: string]: any}, context?: ReadonlyArray<string>} = {}> extends Fix.Model {
|
|
|
|
model: Pick<{[key in keyof U["types"]]: U["types"][key]}, U["context"][number]> & {[key in keyof ReturnType<this["state"]>]: ReturnType<this["state"]>[key]} & {[key in keyof this["computed"]]: ReturnType<this["computed"][key]>} & {[key: string]: unknown};
|
|
|
|
|
|
|
|
store: this["actions"];
|
|
|
|
|
|
|
|
state (): {[key: string]: any} {
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
|
|
|
|
context: U["context"];
|
|
|
|
|
|
|
|
actions:{[key: string]: (...args: any[]) => any};
|
|
|
|
|
|
|
|
childContext: ReadonlyArray<keyof (this["computed"] & ReturnType<this["state"]>)>;
|
|
|
|
|
|
|
|
TYPE: Pick<{[key in keyof this["computed"]]: ReturnType<this["computed"][key]>} & {[key in keyof ReturnType<this["state"]>]: ReturnType<this["state"]>[key]}, this["childContext"][number]>;
|
|
|
|
|
|
|
|
computed: {[key: string]: () => any};
|
|
|
|
}
|