File

projects/common/lib/components/email/email.component.ts

Description

TODO DOCUMENT NEED TO USE NGMODEL FOR REQUIRED TO WORK. Also test with reactive forms to see if still nec

Extends

AbstractFormControl

Implements

OnInit

Metadata

selector common-email
styleUrls ./email.component.scss
templateUrl ./email.component.html

Index

Properties
Methods
Inputs
Outputs
Accessors

Constructor

constructor(controlDir: NgControl)
Parameters :
Name Type Optional
controlDir NgControl No

Inputs

label
Type : string
Default value : 'Email'
labelforId
Type : string
Default value : 'email_' + this.objectId
maxlength
Type : string
Default value : '255'
required
Type : boolean
Default value : false
value
Type : string
disabled
Type : boolean
Default value : false
Inherited from AbstractFormControl
errorMessage
Type : ErrorMessage
Inherited from AbstractFormControl
label
Type : string
Inherited from AbstractFormControl

Outputs

blur
Type : EventEmitter<any>
valueChange
Type : EventEmitter<string>

Methods

ngOnInit
ngOnInit()
Returns : void
onBlur
onBlur(event: any)
Parameters :
Name Type Optional
event any No
Returns : void
onValueChange
onValueChange(value: any)
Parameters :
Name Type Optional
value any No
Returns : void
Private validateSelf
validateSelf()
Returns : ValidationErrors | null
writeValue
writeValue(value: any)
Parameters :
Name Type Optional
value any No
Returns : void
ngOnInit
ngOnInit()
Inherited from AbstractFormControl
Returns : void
registerOnChange
registerOnChange(fn: any)
Inherited from AbstractFormControl
Parameters :
Name Type Optional
fn any No
Returns : void
registerOnTouched
registerOnTouched(fn: any)
Inherited from AbstractFormControl
Parameters :
Name Type Optional
fn any No
Returns : void
Protected registerValidation
registerValidation(ngControl: NgControl, fn: ValidationErrors)
Inherited from AbstractFormControl

Register self validating method

Parameters :
Name Type Optional Description
ngControl NgControl No
fn ValidationErrors No

function for validating self

Returns : any
setDisabledState
setDisabledState(isDisabled: boolean)
Inherited from AbstractFormControl
Parameters :
Name Type Optional
isDisabled boolean No
Returns : void
Protected setErrorMsg
setErrorMsg()
Inherited from AbstractFormControl
Returns : void
Private validateLabel
validateLabel()
Inherited from AbstractFormControl
Returns : void
Abstract writeValue
writeValue(value: any)
Inherited from AbstractFormControl
Parameters :
Name Type Optional
value any No
Returns : void

Properties

Private _asciiPrintable
Type : RegExp
Default value : /^[ -~]+$/
_defaultErrMsg
Type : ErrorMessage
Default value : { required: `${LabelReplacementTag} is required.`, invalidEmail: `${LabelReplacementTag} must be properly formatted (e.g. name@domain.com)`, invalidChars: `${LabelReplacementTag} must contain letters, numbers and/or symbols(e.g. #, @, !).` }
Private _formatCriteria
Type : RegExp
Default value : /^(\S+)@(\S+)\.(\S+)$/
Public controlDir
Type : NgControl
Decorators :
@Optional()
@Self()
email
Type : string
Default value : ''
Abstract _defaultErrMsg
Type : ErrorMessage
Default value : {}
Inherited from AbstractFormControl
_onChange
Default value : () => {...}
Inherited from AbstractFormControl
_onTouched
Default value : () => {...}
Inherited from AbstractFormControl
Public objectId
Type : string
Default value : UUID.UUID()
Inherited from Base
Defined in Base:11

An identifier for parents to keep track of components

Accessors

value
getvalue()
setvalue(val: string)
Parameters :
Name Type Optional
val string No
Returns : void
import {
  Component,
  Input,
  Optional,
  Self,
  Output,
  EventEmitter,
  OnInit } from '@angular/core';
import { NgControl, ValidationErrors } from '@angular/forms';
import { AbstractFormControl } from '../../models/abstract-form-control';
import { ErrorMessage, LabelReplacementTag } from '../../models/error-message.interface';

/**
 * TODO DOCUMENT NEED TO USE NGMODEL FOR REQUIRED TO WORK. Also test with reactive forms to see if still nec
 */
@Component({
  selector: 'common-email',
  templateUrl: './email.component.html',
  styleUrls: ['./email.component.scss']
})
export class EmailComponent extends AbstractFormControl implements OnInit {

  @Input() label: string = 'Email';
  @Input() maxlength: string = '255';
  @Input() labelforId: string = 'email_' + this.objectId;
  @Input() required: boolean = false;

  @Input()
  set value( val: string ) {
    if ( val ) {
      this.email = val;
    }
  }
  get value() {
    return this.email;
  }

  @Output() valueChange: EventEmitter<string> = new EventEmitter<string>();
  @Output() blur: EventEmitter<any> = new EventEmitter<any>();

  email: string = '';

  _defaultErrMsg: ErrorMessage = {
    required: `${LabelReplacementTag} is required.`,
    invalidEmail: `${LabelReplacementTag} must be properly formatted (e.g. name@domain.com)`,
    invalidChars: `${LabelReplacementTag} must contain letters, numbers and/or symbols(e.g. #, @, !).`
  };

  private _formatCriteria: RegExp = /^(\S+)@(\S+)\.(\S+)$/;
  private _asciiPrintable: RegExp = /^[ -~]+$/;

  constructor( @Optional() @Self() public controlDir: NgControl ) {
    super();
    if ( controlDir ) {
      controlDir.valueAccessor = this;
    }
  }

  ngOnInit() {
    super.ngOnInit();

    this.registerValidation( this.controlDir, this.validateSelf );
  }

  onValueChange( value: any ) {
    this.email = value;
    this._onChange( value );
    this.valueChange.emit( value );
  }

  onBlur( event: any ) {
    this._onTouched( event );
    this.blur.emit( event.target.value );
  }

  writeValue( value: any ): void {
    if ( value ) {
      this.email = value;
    }
  }

  private validateSelf(): ValidationErrors | null {

    if ( this.email ) {

      let result = this._formatCriteria.test( this.email );
      if ( result ) {
        result = this._asciiPrintable.test( this.email );
        return result ? null : { invalidChars: true };
      }
      return { invalidEmail: true };
    }
    return null;
  }
}

<label for="{{labelforId}}" class="control-label">{{label}}</label>
<input type="text"
       class="form-control"
       id="{{labelforId}}"
       [value]="email"
       (change)="onValueChange( $event.target.value )"
       (blur)="onBlur( $event )"
       [disabled]="disabled"
       [required]="required"
       [attr.maxlength]="maxlength"
       autocomplete="off" />
<!-- Error messages for component -->
<common-error-container [displayError]="controlDir && !disabled && (controlDir.dirty || controlDir.touched) && controlDir?.errors">
  <div *ngIf="controlDir?.errors?.required">
    {{_defaultErrMsg.required}}
  </div>
  <div *ngIf="controlDir?.errors?.invalidEmail">
    {{_defaultErrMsg.invalidEmail}}
  </div>
  <div *ngIf="controlDir?.errors?.invalidChars">
    {{_defaultErrMsg.invalidChars}}
  </div>
</common-error-container>

Legend
Html element
Component
Html element with directive

result-matching ""

    No results matching ""