aboutsummaryrefslogtreecommitdiff
path: root/src/new_fields/List.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/new_fields/List.ts')
-rw-r--r--src/new_fields/List.ts26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/new_fields/List.ts b/src/new_fields/List.ts
index ecde4edc7..e4a80f7a1 100644
--- a/src/new_fields/List.ts
+++ b/src/new_fields/List.ts
@@ -2,13 +2,13 @@ import { Deserializable, autoObject } from "../client/util/SerializationHelper";
import { Field, Update, Self } from "./Doc";
import { setter, getter } from "./util";
import { serializable, alias, list } from "serializr";
-import { observable, observe, IArrayChange, IArraySplice, IObservableArray, Lambda } from "mobx";
+import { observable, observe, IArrayChange, IArraySplice, IObservableArray, Lambda, reaction } from "mobx";
import { ObjectField, OnUpdate } from "./ObjectField";
const listHandlers: any = {
push(...items: any[]) {
- console.log("push");
- console.log(...items);
+ // console.log("push");
+ // console.log(...items);
return this[Self].__fields.push(...items);
},
pop(): any {
@@ -62,7 +62,7 @@ function listObserver<T extends Field>(this: ListImpl<T>, change: IArrayChange<T
class ListImpl<T extends Field> extends ObjectField {
constructor(fields: T[] = []) {
super();
- this.__fields = fields;
+ this.___fields = fields;
this[ObserveDisposer] = observe(this.__fields as IObservableArray<T>, listObserver.bind(this));
const list = new Proxy<this>(this, {
set: setter,
@@ -76,13 +76,25 @@ class ListImpl<T extends Field> extends ObjectField {
[key: number]: T | null | undefined;
@serializable(alias("fields", list(autoObject())))
+ private get __fields() {
+ return this.___fields;
+ }
+
+ private set __fields(value) {
+ this.___fields = value;
+ this[ObserveDisposer]();
+ this[ObserveDisposer] = observe(this.__fields as IObservableArray<T>, listObserver.bind(this));
+ }
+
+ // @serializable(alias("fields", list(autoObject())))
@observable
- private __fields: (T | null | undefined)[];
+ private ___fields: (T | null | undefined)[];
private [Update] = (diff: any) => {
- console.log(diff);
+ // console.log(diff);
const update = this[OnUpdate];
- update && update(diff);
+ // update && update(diff);
+ update && update();
}
private [ObserveDisposer]: Lambda;