source: src/Clients/Angular/finki-chattery/src/app/shared-app/directives/handle-select-form-errors.directive.ts@ e6a6d9a

dev
Last change on this file since e6a6d9a was e6a6d9a, checked in by Стојков Марко <mst@…>, 3 years ago

Initialized FinkiChattery project

  • Property mode set to 100644
File size: 1.5 KB
Line 
1import {
2 AfterViewInit,
3 ComponentFactoryResolver,
4 ComponentRef,
5 ContentChild,
6 Directive,
7 ElementRef,
8 Renderer2,
9 ViewContainerRef
10} from '@angular/core';
11import { NgControl } from '@angular/forms';
12import { MatFormField } from '@angular/material/form-field';
13import { MatSelect } from '@angular/material/select';
14import { FormErrorComponent } from '../components/generic/form-error/form-error.component';
15
16@Directive({
17 selector: '[appHandleSelectFormErrors]'
18})
19export class HandleSelectFormErrorsDirective implements AfterViewInit {
20 private errorComponent: ComponentRef<FormErrorComponent>;
21 private control!: NgControl | null;
22 @ContentChild(MatSelect, { read: ElementRef }) controlElementRef!: ElementRef;
23
24 constructor(
25 private vcr: ViewContainerRef,
26 private resolver: ComponentFactoryResolver,
27 private formField: MatFormField,
28 private renderer: Renderer2
29 ) {
30 const factory = this.resolver.resolveComponentFactory(FormErrorComponent);
31 this.resolver.resolveComponentFactory(FormErrorComponent);
32 this.errorComponent = this.vcr.createComponent(factory);
33 }
34
35 public ngAfterViewInit(): void {
36 this.control = this.formField._control.ngControl;
37 this.renderer.listen(this.controlElementRef.nativeElement, 'blur', () => this.onChange());
38 this.formField?._control?.ngControl?.statusChanges?.subscribe(() => this.onChange());
39 }
40
41 private onChange(): void {
42 this.errorComponent.instance.errors = this.control?.errors;
43 }
44}
Note: See TracBrowser for help on using the repository browser.