GitHub

DaffFormFieldControl

class

import { DaffFormFieldControl } from '@daffodil/design/form-field'

The class that a form control must implement in order to be used with the DaffFormFieldComponent.

You may ask: "Why are you implementing an abstract class, not extending it?" We do this so that the Angular DI container can match the class token. A typical interface would be "more accurate" here, but since interfaces don't exist in javascript, they get thrown out by the typescript compiler and cannot be used for the necessary dependency injection.

abstract class DaffFormFieldControl<<T>>  {
  abstract readonly controlType: any
  readonly supportsAutoLabelling: boolean = true
  abstract readonly focused: boolean
  abstract readonly required: boolean
  abstract readonly disabled: boolean
  readonly id: string
  get raised(): boolean
  abstract readonly value: T
  ngControl: NgControl | null
  get state(): DaffFormFieldState
  _stateChanges: BehaviorSubject = new BehaviorSubject({
      focused: false,
      filled: false,
      disabled: false,
      error: false,
      valid: true,
    })
  stateChanges: Observable<DaffFormFieldState>

  abstract focus(event?: Event): void
  emitState(deferred: boolean = false): void
}