diff options
Diffstat (limited to 'src/fields')
| -rw-r--r-- | src/fields/Document.ts | 28 | ||||
| -rw-r--r-- | src/fields/Key.ts | 28 |
2 files changed, 41 insertions, 15 deletions
diff --git a/src/fields/Document.ts b/src/fields/Document.ts index 9580ab5c0..5c0a9caf0 100644 --- a/src/fields/Document.ts +++ b/src/fields/Document.ts @@ -1,7 +1,9 @@ import { Field, Cast, Opt } from "./Field" import { Key, KeyStore } from "./Key" +import { NumberField } from "./NumberField"; import { ObservableMap, computed } from "mobx"; import { TextField } from "./TextField"; +import { ListField } from "./ListField"; export class Document extends Field { private fields: ObservableMap<Key, Field> = new ObservableMap(); @@ -30,17 +32,39 @@ export class Document extends Field { return field; } - GetFieldT<T extends Field = Field>(key: Key, ctor: { new(): T }, ignoreProto?: boolean): Opt<T> { + GetFieldT<T extends Field = Field>(key: Key, ctor: { new(): T }, ignoreProto: boolean = false): Opt<T> { return Cast(this.GetField(key, ignoreProto), ctor); } + GetFieldOrCreate<T extends Field>(key: Key, ctor: { new(): T }, ignoreProto: boolean = false): T { + const field = this.GetFieldT(key, ctor, ignoreProto); + if (field) { + return field; + } + const newField = new ctor(); + this.SetField(key, newField); + return newField; + } + GetFieldValue<T, U extends { Data: T }>(key: Key, ctor: { new(): U }, defaultVal: T): T { let val = this.GetField(key); let vval = (val && val instanceof ctor) ? val.Data : defaultVal; return vval; } - SetField(key: Key, field: Opt<Field>): void { + GetNumberField(key: Key, defaultVal: number): number { + return this.GetFieldValue(key, NumberField, defaultVal); + } + + GetTextField(key: Key, defaultVal: string): string { + return this.GetFieldValue(key, TextField, defaultVal); + } + + GetListField<T extends Field>(key: Key, defaultVal: T[]): T[] { + return this.GetFieldValue<T[], ListField<T>>(key, ListField, defaultVal) + } + + SetField(key: Key, field: Field | undefined): void { if (field) { this.fields.set(key, field); } else { diff --git a/src/fields/Key.ts b/src/fields/Key.ts index 61b3cdd37..4da800fac 100644 --- a/src/fields/Key.ts +++ b/src/fields/Key.ts @@ -31,17 +31,19 @@ export class Key extends Field { } export namespace KeyStore { - export let Prototype = new Key("Prototype"); - export let X = new Key("X"); - export let Y = new Key("Y"); - export let Title = new Key("Title"); - export let PanX = new Key("PanX"); - export let PanY = new Key("PanY"); - export let Scale = new Key("Scale"); - export let Width = new Key("Width"); - export let Height = new Key("Height"); - export let Data = new Key("Data"); - export let Layout = new Key("Layout"); - export let LayoutKeys = new Key("LayoutKeys"); - export let LayoutFields = new Key("LayoutFields"); + export const Prototype = new Key("Prototype"); + export const X = new Key("X"); + export const Y = new Key("Y"); + export const Title = new Key("Title"); + export const Author = new Key("Author"); + export const PanX = new Key("PanX"); + export const PanY = new Key("PanY"); + export const Scale = new Key("Scale"); + export const Width = new Key("Width"); + export const Height = new Key("Height"); + export const Data = new Key("Data"); + export const Layout = new Key("Layout"); + export const LayoutKeys = new Key("LayoutKeys"); + export const LayoutFields = new Key("LayoutFields"); + export const ColumnsKey = new Key("SchemaColumns"); }
\ No newline at end of file |
