diff options
author | Bob Zeleznik <zzzman@gmail.com> | 2019-02-20 21:02:17 -0500 |
---|---|---|
committer | Bob Zeleznik <zzzman@gmail.com> | 2019-02-20 21:02:17 -0500 |
commit | 8b4da172f9d53a1ad6925801192bd0280ec21e3f (patch) | |
tree | 2d69b900567725e3c09fb85f8a95ca12f7712176 /src/fields/ListField.ts | |
parent | 6e6b202c905f2b33a7ea140f5fd719cda1933ac9 (diff) | |
parent | 5c147db2e12be2a5aeb57647eda3f4ab43bc697b (diff) |
Merge branch 'master' of https://github.com/browngraphicslab/Dash-Web
Diffstat (limited to 'src/fields/ListField.ts')
-rw-r--r-- | src/fields/ListField.ts | 16 |
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); }) } |