aboutsummaryrefslogtreecommitdiff
path: root/src/fields/ListField.ts
diff options
context:
space:
mode:
authorBob Zeleznik <zzzman@gmail.com>2019-02-20 21:02:17 -0500
committerBob Zeleznik <zzzman@gmail.com>2019-02-20 21:02:17 -0500
commit8b4da172f9d53a1ad6925801192bd0280ec21e3f (patch)
tree2d69b900567725e3c09fb85f8a95ca12f7712176 /src/fields/ListField.ts
parent6e6b202c905f2b33a7ea140f5fd719cda1933ac9 (diff)
parent5c147db2e12be2a5aeb57647eda3f4ab43bc697b (diff)
Merge branch 'master' of https://github.com/browngraphicslab/Dash-Web
Diffstat (limited to 'src/fields/ListField.ts')
-rw-r--r--src/fields/ListField.ts16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/fields/ListField.ts b/src/fields/ListField.ts
index 2e192bf90..ad5374dc9 100644
--- a/src/fields/ListField.ts
+++ b/src/fields/ListField.ts
@@ -1,9 +1,10 @@
import { Field, FieldId, FieldValue, Opt } from "./Field";
import { BasicField } from "./BasicField";
import { Types } from "../server/Message";
-import { observe, action } from "mobx";
+import { observe, action, IArrayChange, IArraySplice, IObservableArray } from "mobx";
import { Server } from "../client/Server";
import { ServerUtils } from "../server/ServerUtil";
+import { UndoManager } from "../client/util/UndoManager";
export class ListField<T extends Field> extends BasicField<T[]> {
private _proxies: string[] = []
@@ -13,8 +14,19 @@ export class ListField<T extends Field> extends BasicField<T[]> {
if (save) {
Server.UpdateField(this);
}
- observe(this.Data, () => {
+ observe(this.Data as IObservableArray<T>, (change: IArrayChange<T> | IArraySplice<T>) => {
this.updateProxies()
+ if (change.type == "splice") {
+ UndoManager.AddEvent({
+ undo: () => this.Data.splice(change.index, change.addedCount, ...change.removed),
+ redo: () => this.Data.splice(change.index, change.removedCount, ...change.added)
+ })
+ } else {
+ UndoManager.AddEvent({
+ undo: () => this.Data[change.index] = change.oldValue,
+ redo: () => this.Data[change.index] = change.newValue
+ })
+ }
Server.UpdateField(this);
})
}