mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2025-10-14 17:33:01 +08:00
52 lines
1.1 KiB
TypeScript
52 lines
1.1 KiB
TypeScript
import { EventEmitter } from 'events';
|
|
|
|
import { getValueByKeyPath, setValueByKeyPath } from '@tmagic/core';
|
|
|
|
import { ObservedData } from './ObservedData';
|
|
|
|
export class SimpleObservedData extends ObservedData {
|
|
data: Record<string, any> = {};
|
|
private event = new EventEmitter();
|
|
|
|
constructor(initialData: Record<string, any>) {
|
|
super();
|
|
this.data = initialData;
|
|
}
|
|
|
|
update(data: any, path?: string): void {
|
|
if (path) {
|
|
setValueByKeyPath(path, data, this.data);
|
|
} else {
|
|
this.data = data;
|
|
}
|
|
|
|
const changeEvent = {
|
|
updateData: data,
|
|
path: path ?? '',
|
|
};
|
|
|
|
if (path) {
|
|
this.event.emit(path, changeEvent);
|
|
}
|
|
|
|
this.event.emit('', changeEvent);
|
|
}
|
|
|
|
on(path: string, callback: (newVal: any) => void, options?: { immediate?: boolean }): void {
|
|
if (options?.immediate) {
|
|
callback(this.getData(path));
|
|
}
|
|
this.event.on(path, callback);
|
|
}
|
|
|
|
off(path: string, callback: (newVal: any) => void): void {
|
|
this.event.off(path, callback);
|
|
}
|
|
|
|
getData(path: string) {
|
|
return path ? getValueByKeyPath(path, this.data) : this.data;
|
|
}
|
|
|
|
destroy(): void {}
|
|
}
|