aboutsummaryrefslogtreecommitdiff
path: root/src/controllers/FieldController.ts
diff options
context:
space:
mode:
authorTyler Schicke <tyler_schicke@brown.edu>2019-01-13 06:16:11 -0500
committerTyler Schicke <tyler_schicke@brown.edu>2019-01-13 06:16:11 -0500
commite1ed82ff684877b56925016282a0e4d5bb4e1b4b (patch)
tree7f251def17dd86da9675bf0506f7db2c5d71148f /src/controllers/FieldController.ts
parentee068ab30c43125efd2b0ab853531df9777f544f (diff)
More controller stuff
Diffstat (limited to 'src/controllers/FieldController.ts')
-rw-r--r--src/controllers/FieldController.ts45
1 files changed, 32 insertions, 13 deletions
diff --git a/src/controllers/FieldController.ts b/src/controllers/FieldController.ts
index 19205014a..6e7daf6e1 100644
--- a/src/controllers/FieldController.ts
+++ b/src/controllers/FieldController.ts
@@ -1,41 +1,60 @@
import { TypedEvent } from "../util/TypedEvent";
import { FieldUpdatedArgs } from "./FieldUpdatedArgs";
import { DocumentReferenceController } from "./DocumentReferenceController";
+import { Utils } from "../Utils";
+
+export function Cast<T extends FieldController>(field: Opt<FieldController>, ctor: { new(): T }): Opt<T> {
+ if (field) {
+ if (ctor && field instanceof ctor) {
+ return field;
+ }
+ }
+ return undefined;
+}
+
+export type Opt<T> = T | undefined;
export abstract class FieldController {
- Id: string;
+ FieldUpdated: TypedEvent<Opt<FieldUpdatedArgs>> = new TypedEvent<Opt<FieldUpdatedArgs>>();
- FieldUpdated: TypedEvent<FieldUpdatedArgs>;
+ private id: string;
+ get Id(): string {
+ return this.id;
+ }
- protected DereferenceImpl(): FieldController {
+ constructor(id: Opt<string> = undefined) {
+ this.id = id || Utils.GenerateGuid();
+ }
+
+ protected DereferenceImpl(): Opt<FieldController> {
return this;
}
- protected DereferenceToRootImpl(): FieldController {
- let field = this;
- while(field instanceof DocumentReferenceController) {
- field = field.Dereference();
- }
- return field;
+ protected DereferenceToRootImpl(): Opt<FieldController> {
+ return this;
}
- Dereference<T extends FieldController = FieldController>(ctor?: { new(): T }): T {
+ Dereference<T extends FieldController = FieldController>(ctor?: { new(): T }): Opt<T> {
let field = this.DereferenceImpl();
if (ctor && field instanceof ctor) {
return field;
} else {
- return null;
+ return undefined;
}
}
- DereferenceToRoot<T extends FieldController = FieldController>(ctor?: { new(): T }): T {
+ DereferenceToRoot<T extends FieldController = FieldController>(ctor?: { new(): T }): Opt<T> {
let field = this.DereferenceToRootImpl();
if (ctor && field instanceof ctor) {
return field;
} else {
- return null;
+ return undefined;
}
}
+ Equals(other: FieldController) : boolean {
+ return this.id === other.id;
+ }
+
abstract TrySetValue(value: any): boolean;
abstract GetValue(): any;