File

projects/rebirth-ng/src/lib/dialog/prompt-dialog.component.ts

Implements

Modal OnInit

Metadata

selector re-prompt
styleUrls dialog.scss
templateUrl ./prompt-dialog.component.html

Index

Properties
Methods

Constructor

constructor(rebirthNGConfig: RebirthNGConfig, formBuilder: FormBuilder, changeDetectorRef: ChangeDetectorRef)
Parameters :
Name Type Optional
rebirthNGConfig RebirthNGConfig no
formBuilder FormBuilder no
changeDetectorRef ChangeDetectorRef no

Methods

getFieldErrors
getFieldErrors(control: AbstractControl)
Parameters :
Name Type Optional
control AbstractControl no
Returns : {}
ngOnInit
ngOnInit()
Returns : void
no
no()
Returns : void
yes
yes()
Returns : void

Properties

btnNo
btnNo: string
Type : string
btnNoType
btnNoType: string
Type : string
btnYes
btnYes: string
Type : string
btnYesType
btnYesType: string
Type : string
content
content: PromptContent
Type : PromptContent
context
context: DialogOptions
Type : DialogOptions
defaultTemplate
defaultTemplate: TemplateRef<any>
Type : TemplateRef<any>
Decorators : ViewChild
dismiss
dismiss: EventEmitter<any>
Type : EventEmitter<any>
form
form: FormGroup
Type : FormGroup
validators
validators: literal type
Type : literal type
import { Component, EventEmitter, OnInit, TemplateRef, ViewChild, ChangeDetectorRef } from '@angular/core';
import { FormBuilder, FormGroup, ValidatorFn, AbstractControl } from '@angular/forms';
import { DialogOptions, PromptContent } from './dialog-options.model';
import { RebirthNGConfig } from '../rebirth-ng.config';
import { Modal } from '../modal/modal.model';
import { ModalDismissReasons } from '../modal/modal-dismiss-reasons.model';

@Component({
  selector: 're-prompt',
  templateUrl: './prompt-dialog.component.html',
  styleUrls: ['./dialog.scss']
})

export class PromptDialogComponent implements Modal, OnInit {

  context: DialogOptions;
  content: PromptContent;
  dismiss: EventEmitter<any>;
  btnYes: string;
  btnNo: string;
  btnYesType: string;
  btnNoType: string;
  form: FormGroup;
  validators: { [key: string]: { validator: ValidatorFn, message: string } };
  @ViewChild('defaultTemplate') defaultTemplate: TemplateRef<any>;

  constructor(private rebirthNGConfig: RebirthNGConfig,
              private formBuilder: FormBuilder,
              private changeDetectorRef: ChangeDetectorRef) {
    this.btnYes = rebirthNGConfig.dialog.button.yes;
    this.btnYesType = rebirthNGConfig.dialog.button.btnYesType;
    this.btnNo = rebirthNGConfig.dialog.button.no;
    this.btnNoType = rebirthNGConfig.dialog.button.btnNoType;
  }

  ngOnInit(): void {
    this.content = this.context.content as PromptContent;
    this.validators = this.content.validators || {};

    const validatorFns = Object.keys(this.validators).map((key) => this.validators[key].validator);
    this.form = this.formBuilder.group({
      promptValue: [this.content.defaultValue || '', validatorFns]
    });
    this.form.valueChanges.subscribe(() => {
      this.changeDetectorRef.markForCheck();
    });
  }

  getFieldErrors(control: AbstractControl) {
    if (control && control.errors) {
      const errors = Object.keys(control.errors).filter((key) => control.errors[key]);
      return errors.length > 0 ? [errors[0]] : [];
    }
  }

  yes() {
    this.dismiss.emit({ ...this.form.value, type: ModalDismissReasons.YES });
  }

  no() {
    this.dismiss.error(ModalDismissReasons.NO);
  }
}
<div class="modal-header">
  <button type="button" class="close" data-dismiss="modal" aria-label="Close" (click)="no()">
    <span aria-hidden="true">&times;</span></button>
  <h4 class="modal-title">{{context.title}}</h4>
</div>
<div class="modal-body">
  <form [formGroup]="form" novalidate>
    <div class="form-group"
         [class.has-error]="form.controls['promptValue'].touched && form.controls['promptValue'].invalid">
      <label for="promptValue" class="control-label">{{content?.label}}</label>
      <ng-template [ngTemplateOutlet]="content.template || defaultTemplate"
                   [ngTemplateOutletContext]="{ $implicit: this, option: context, formGroup:form }"></ng-template>

      <ng-container *ngIf="form.controls['promptValue'].touched">
        <div class="help-block" *ngFor="let key of getFieldErrors(form.controls['promptValue'])">
          {{validators[key]?.message}}
        </div>
      </ng-container>
    </div>
  </form>
</div>
<div class="modal-footer">
  <button type="button" [disabled]="form.untouched || form.invalid" class="btn btn-{{btnYesType}}" (click)="yes()">
    {{context.yes ||btnYes}}
  </button>
  <button type="button" class="btn btn-{{btnNoType}}" (click)="no()">{{context.no || btnNo}}</button>
</div>
<ng-template #defaultTemplate let-option="option" let-formGroup="formGroup">
  <input type="text" class="form-control" id="promptValue" name="promptValue"
         [formControl]="formGroup.controls.promptValue"
         [placeholder]="option.content?.placeholder">
</ng-template>
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""