From e1ed82ff684877b56925016282a0e4d5bb4e1b4b Mon Sep 17 00:00:00 2001 From: Tyler Schicke Date: Sun, 13 Jan 2019 06:16:11 -0500 Subject: More controller stuff --- src/controllers/FieldController.ts | 45 +++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 13 deletions(-) (limited to 'src/controllers/FieldController.ts') 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(field: Opt, ctor: { new(): T }): Opt { + if (field) { + if (ctor && field instanceof ctor) { + return field; + } + } + return undefined; +} + +export type Opt = T | undefined; export abstract class FieldController { - Id: string; + FieldUpdated: TypedEvent> = new TypedEvent>(); - FieldUpdated: TypedEvent; + private id: string; + get Id(): string { + return this.id; + } - protected DereferenceImpl(): FieldController { + constructor(id: Opt = undefined) { + this.id = id || Utils.GenerateGuid(); + } + + protected DereferenceImpl(): Opt { return this; } - protected DereferenceToRootImpl(): FieldController { - let field = this; - while(field instanceof DocumentReferenceController) { - field = field.Dereference(); - } - return field; + protected DereferenceToRootImpl(): Opt { + return this; } - Dereference(ctor?: { new(): T }): T { + Dereference(ctor?: { new(): T }): Opt { let field = this.DereferenceImpl(); if (ctor && field instanceof ctor) { return field; } else { - return null; + return undefined; } } - DereferenceToRoot(ctor?: { new(): T }): T { + DereferenceToRoot(ctor?: { new(): T }): Opt { 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; -- cgit v1.2.3-70-g09d2