diff options
author | Tyler Schicke <tyler_schicke@brown.edu> | 2019-01-10 23:52:54 -0500 |
---|---|---|
committer | Tyler Schicke <tyler_schicke@brown.edu> | 2019-01-10 23:52:54 -0500 |
commit | ee068ab30c43125efd2b0ab853531df9777f544f (patch) | |
tree | 9560b014b4de30c3a8f1e3d77ae70db27558fe58 /src/controllers/FieldController.ts | |
parent | 861d61970afc9e67afbafa64e8c1347a18335077 (diff) |
Started adding various controllers
Diffstat (limited to 'src/controllers/FieldController.ts')
-rw-r--r-- | src/controllers/FieldController.ts | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/controllers/FieldController.ts b/src/controllers/FieldController.ts new file mode 100644 index 000000000..19205014a --- /dev/null +++ b/src/controllers/FieldController.ts @@ -0,0 +1,45 @@ +import { TypedEvent } from "../util/TypedEvent"; +import { FieldUpdatedArgs } from "./FieldUpdatedArgs"; +import { DocumentReferenceController } from "./DocumentReferenceController"; + +export abstract class FieldController { + Id: string; + + FieldUpdated: TypedEvent<FieldUpdatedArgs>; + + protected DereferenceImpl(): FieldController { + return this; + } + protected DereferenceToRootImpl(): FieldController { + let field = this; + while(field instanceof DocumentReferenceController) { + field = field.Dereference(); + } + return field; + } + + Dereference<T extends FieldController = FieldController>(ctor?: { new(): T }): T { + let field = this.DereferenceImpl(); + if (ctor && field instanceof ctor) { + return field; + } else { + return null; + } + } + + DereferenceToRoot<T extends FieldController = FieldController>(ctor?: { new(): T }): T { + let field = this.DereferenceToRootImpl(); + if (ctor && field instanceof ctor) { + return field; + } else { + return null; + } + } + + abstract TrySetValue(value: any): boolean; + + abstract GetValue(): any; + + abstract Copy(): FieldController; + +}
\ No newline at end of file |