aboutsummaryrefslogtreecommitdiff
path: root/src/fields/Field.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/fields/Field.ts')
-rw-r--r--src/fields/Field.ts43
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