import { Entity, EntityOpts } from './entity'; import { EntityData } from './entity-data'; import type { EntityDataRegistry } from './entity-data'; import { Disposable } from '@gedit/utils'; export interface ConfigEntityProps { } export function createConfigDataRegistry
(entity: ConfigEntity {
getDefaultData(): P {
return entity.getDefaultConfig();
}
checkChanged(newProps: Partial ): boolean {
return entity.checkChanged(this.data, newProps);
}
toJSON(): object {
if (entity.toDataJSON) {
return {
type: this.type,
data: entity.toDataJSON()
};
}
return super.toJSON();
}
}
Object.defineProperty(ConfigData, 'type', {
value: '_' + entity.type + 'DataMixin'
});
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return ConfigData as any;
}
/**
* 用于专门的数据配置, 且是单例
*/
export class ConfigEntity extends Entity {
static type = 'ConfigEntity';
protected ConfigDataRegistry: EntityDataRegistry;
constructor(
opts: EntityOpts
) {
super(opts);
this.isInitialized = true;
this.ConfigDataRegistry = createConfigDataRegistry (this);
this.addData(this.ConfigDataRegistry);
this.isInitialized = false;
}
getDefaultConfig(): P {
return {} as P;
}
toDataJSON?(): P
/**
* 判断config数据是否变化
*/
checkChanged(oldData: P, newData: Partial ): boolean {
return Entity.checkDataChanged(oldData, newData);
}
get config(): P {
return this.getData(this.ConfigDataRegistry)!.data as P;
}
updateConfig(props: Partial ): void {
this.updateData(this.ConfigDataRegistry, props);
}
onConfigChanged(fn: (data: P) => void): Disposable {
return this.getData