diff options
author | Jude <julie_wang1@brown.edu> | 2019-03-10 13:29:58 -0400 |
---|---|---|
committer | Jude <julie_wang1@brown.edu> | 2019-03-10 13:29:58 -0400 |
commit | 8145fd3bcd2abeb8f8c0e819e365b90e7227b8b3 (patch) | |
tree | 2a3c59d51ec7fd12fb993f85d33f07e5396fa984 /src/fields/ListField.ts | |
parent | 43c96800f0a651247fdcaf2c77c710a30cb3f79d (diff) | |
parent | 6b63817dc2936ebec82b67600b33845a82c7fe99 (diff) |
merged and added audio/video nodes
Diffstat (limited to 'src/fields/ListField.ts')
-rw-r--r-- | src/fields/ListField.ts | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/fields/ListField.ts b/src/fields/ListField.ts index a71325a65..ce32da0a6 100644 --- a/src/fields/ListField.ts +++ b/src/fields/ListField.ts @@ -70,7 +70,25 @@ export class ListField<T extends Field> extends BasicField<T[]> { init(callback: (field: Field) => any) { Server.GetFields(this._proxies, action((fields: { [index: string]: Field }) => { if (!this.arraysEqual(this._proxies, this.Data.map(field => field.Id))) { - this.data = this._proxies.map(id => fields[id] as T) + var dataids = this.data.map(d => d.Id); + var added = this.data.length == this._proxies.length - 1; + var deleted = this.data.length > this._proxies.length; + for (let i = 0; i < dataids.length && added; i++) + added = this._proxies.indexOf(dataids[i]) != -1; + for (let i = 0; i < this._proxies.length && deleted; i++) + deleted = dataids.indexOf(this._proxies[i]) != -1; + if (added) { // if only 1 items was added + for (let i = 0; i < this._proxies.length; i++) + if (dataids.indexOf(this._proxies[i]) === -1) + this.Data.splice(i, 0, fields[this._proxies[i]] as T); + } else if (deleted) { // if only items were deleted + for (let i = this.data.length - 1; i >= 0; i--) { + if (this._proxies.indexOf(this.data[i].Id) === -1) { + this.Data.splice(i, 1); + } + } + } else // otherwise, just rebuild the whole list + this.data = this._proxies.map(id => fields[id] as T) observe(this.Data, () => { this.updateProxies() Server.UpdateField(this); |