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