diff options
author | yipstanley <stanley_yip@brown.edu> | 2019-02-11 20:25:15 -0500 |
---|---|---|
committer | yipstanley <stanley_yip@brown.edu> | 2019-02-11 20:25:15 -0500 |
commit | 867fd2bffb67be06e889d3ac0fb6603bc8c4d92a (patch) | |
tree | 6b045d218d8211b5e0ac9f2b7fdb9e45dfe30515 /src/fields/Field.ts | |
parent | 448f8880b50dc50090a596cafaf68d2f444ce3db (diff) |
asdkjfl
Diffstat (limited to 'src/fields/Field.ts')
-rw-r--r-- | src/fields/Field.ts | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/fields/Field.ts b/src/fields/Field.ts index 6adee9b61..f55a80db4 100644 --- a/src/fields/Field.ts +++ b/src/fields/Field.ts @@ -1,5 +1,14 @@ import { Utils } from "../Utils"; +import { Types } from "../server/Message"; +import { NumberField } from "./NumberField"; +import { TextField } from "./TextField"; +import { RichTextField } from "./RichTextField"; +import { KeyStore } from "./Key"; +import { ImageField } from "./ImageField"; +import { ListField } from "./ListField"; +import { Document } from "./Document"; +import { Server } from "../client/Server"; export function Cast<T extends Field>(field: FieldValue<Field>, ctor: { new(): T }): Opt<T> { if (field) { @@ -55,4 +64,38 @@ export abstract class Field { abstract Copy(): Field; + abstract ToJson(): { id: string, type: Types, data: any } + + public static FromJson(obj: { id: string, type: number, data: any }): Field { + let data: any = obj.data + let id: string = obj.id + + switch (obj.type) { + case Types.Number: + return new NumberField(data, id) + case Types.Text: + return new TextField(data, id) + case Types.RichText: + return new RichTextField(data, id) + case Types.Key: + return KeyStore.Get(data) + case Types.Image: + return new ImageField(data, id) + case Types.List: + return new ListField(data, id) + case Types.Document: + let doc: Document = new Document(id) + let fields: [string, string][] = data as [string, string][] + fields.forEach(element => { + let keyName: string = element[0] + let valueId: string = element[1] + let key = KeyStore.Get(keyName) + Server.GetField(valueId, (field: Field) => { + doc.Set(key, field) + }) + }); + return doc + } + return new TextField(data, id) + } }
\ No newline at end of file |