From ee068ab30c43125efd2b0ab853531df9777f544f Mon Sep 17 00:00:00 2001 From: Tyler Schicke Date: Thu, 10 Jan 2019 23:52:54 -0500 Subject: Started adding various controllers --- src/controllers/FieldController.ts | 45 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/controllers/FieldController.ts (limited to 'src/controllers/FieldController.ts') 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; + + protected DereferenceImpl(): FieldController { + return this; + } + protected DereferenceToRootImpl(): FieldController { + let field = this; + while(field instanceof DocumentReferenceController) { + field = field.Dereference(); + } + return field; + } + + Dereference(ctor?: { new(): T }): T { + let field = this.DereferenceImpl(); + if (ctor && field instanceof ctor) { + return field; + } else { + return null; + } + } + + DereferenceToRoot(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 -- cgit v1.2.3-70-g09d2