Update model and add invalidated cycle

This commit is contained in:
Misode
2020-05-25 14:45:10 +02:00
parent 79a5742dad
commit 56f3766a13
9 changed files with 73 additions and 20 deletions

View File

@@ -1,12 +1,39 @@
import { RootNode } from "../nodes/RootNode"
import { Path } from "./Path"
export interface ModelListener {
invalidated(model: DataModel): void
}
export class DataModel {
data: any
schema: RootNode
listeners: ModelListener[]
constructor(schema: RootNode) {
this.schema = schema
this.data = schema.default
this.listeners = []
}
addListener(listener: ModelListener) {
this.listeners.push(listener)
}
invalidate() {
this.listeners.forEach(listener => listener.invalidated(this))
}
set(path: Path, value: any) {
let node = this.data;
for (let index of path.pop()) {
if (node[index] === undefined) {
node[index] = {}
}
node = node[index]
}
node[path.last()] = value
this.invalidate()
}
}