aboutsummaryrefslogtreecommitdiff
path: root/src/fields/ListField.ts
diff options
context:
space:
mode:
authortschicke-brown <tyler_schicke@brown.edu>2019-02-22 12:36:11 -0500
committerGitHub <noreply@github.com>2019-02-22 12:36:11 -0500
commitd2a34dca0cac114190f8f0eb36769b2b8fd9f329 (patch)
tree1128cba0e4532e1ca9ad5eba8c85cec1c74c2c5a /src/fields/ListField.ts
parent9e4403f9c14cdb7e05901af5f8509753269eeb07 (diff)
parent0a5b336a638694b8d2f9d7366dc4dca6af97e970 (diff)
Merge pull request #9 from browngraphicslab/collectionView
Added CollectionView
Diffstat (limited to 'src/fields/ListField.ts')
-rw-r--r--src/fields/ListField.ts19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/fields/ListField.ts b/src/fields/ListField.ts
index 75c2eb343..700600804 100644
--- a/src/fields/ListField.ts
+++ b/src/fields/ListField.ts
@@ -1,4 +1,4 @@
-import { action, IArrayChange, IArraySplice, IObservableArray, observe } from "mobx";
+import { action, IArrayChange, IArraySplice, IObservableArray, observe, observable, Lambda } from "mobx";
import { Server } from "../client/Server";
import { UndoManager } from "../client/util/UndoManager";
import { Types } from "../server/Message";
@@ -13,7 +13,12 @@ export class ListField<T extends Field> extends BasicField<T[]> {
if (save) {
Server.UpdateField(this);
}
- observe(this.Data as IObservableArray<T>, (change: IArrayChange<T> | IArraySplice<T>) => {
+ this.observeList();
+ }
+
+ private observeDisposer: Lambda | undefined;
+ private observeList(): void {
+ this.observeDisposer = observe(this.Data as IObservableArray<T>, (change: IArrayChange<T> | IArraySplice<T>) => {
this.updateProxies()
if (change.type == "splice") {
UndoManager.AddEvent({
@@ -27,7 +32,15 @@ export class ListField<T extends Field> extends BasicField<T[]> {
})
}
Server.UpdateField(this);
- })
+ });
+ }
+
+ protected setData(value: T[]) {
+ if (this.observeDisposer) {
+ this.observeDisposer()
+ }
+ this.data = observable(value);
+ this.observeList();
}
private updateProxies() {