diff options
author | Sam Wilkins <abdullah_ahmed@brown.edu> | 2019-05-08 23:16:24 -0400 |
---|---|---|
committer | Sam Wilkins <abdullah_ahmed@brown.edu> | 2019-05-08 23:16:24 -0400 |
commit | 508410d810f61b8f8602dedbbba3e0736c1f5ba3 (patch) | |
tree | b6de0f335ed187f7e795025ba9a304b3146fc6a2 /src/new_fields/List.ts | |
parent | 086391b7e45ed4b3cb29602a776f5812f142fff2 (diff) | |
parent | 890d43c23c5aaafc8ebc2978cd1ad2e19bfcd830 (diff) |
Working implementation of remote cursors
Diffstat (limited to 'src/new_fields/List.ts')
-rw-r--r-- | src/new_fields/List.ts | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/new_fields/List.ts b/src/new_fields/List.ts index 3e5fee646..88a65eba4 100644 --- a/src/new_fields/List.ts +++ b/src/new_fields/List.ts @@ -1,5 +1,5 @@ import { Deserializable, autoObject } from "../client/util/SerializationHelper"; -import { Field, Update, Self, FieldResult } from "./Doc"; +import { Field, Update, Self, FieldResult, SelfProxy } from "./Doc"; import { setter, getter, deleteProperty, updateFunction } from "./util"; import { serializable, alias, list } from "serializr"; import { observable, action } from "mobx"; @@ -233,11 +233,12 @@ class ListImpl<T extends Field> extends ObjectField { deleteProperty: deleteProperty, defineProperty: () => { throw new Error("Currently properties can't be defined on documents using Object.defineProperty"); }, }); + this[SelfProxy] = list; (list as any).push(...fields); return list; } - [key: number]: FieldResult<T>; + [key: number]: T | (T extends RefField ? Promise<T> : never); @serializable(alias("fields", list(autoObject()))) private get __fields() { @@ -246,6 +247,12 @@ class ListImpl<T extends Field> extends ObjectField { private set __fields(value) { this.___fields = value; + for (const key in value) { + const field = value[key]; + if (!(field instanceof ObjectField)) continue; + (field as ObjectField)[Parent] = this[Self]; + (field as ObjectField)[OnUpdate] = updateFunction(this[Self], key, field, this[SelfProxy]); + } } [Copy]() { @@ -266,6 +273,7 @@ class ListImpl<T extends Field> extends ObjectField { } private [Self] = this; + private [SelfProxy]: any; } -export type List<T extends Field> = ListImpl<T> & T[]; +export type List<T extends Field> = ListImpl<T> & (T | (T extends RefField ? Promise<T> : never))[]; export const List: { new <T extends Field>(fields?: T[]): List<T> } = ListImpl as any;
\ No newline at end of file |