ng-halfmoon
Version:
Angular Library to build upon the halfmoon-framework
48 lines • 5.95 kB
JavaScript
import { ContentChild, Directive, ElementRef, HostBinding, Injector, Renderer2 } from '@angular/core';
import { InputDirective } from '../input/input.directive';
import { ControlService, ControlStatus } from '../services/control.service';
export class FormGroupDirective {
constructor(el, renderer, injector) {
this.el = el;
this.renderer = renderer;
this.injector = injector;
this.baseClass = true;
this.isInvalid = false;
this.controlService = injector.get(ControlService);
this.subscription = this.controlService.currentStatus$.subscribe((status) => {
this.isInvalid = status === ControlStatus.INVALID;
});
}
ngOnInit() {
this.controlLabel = this.el.nativeElement.firstChild;
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
updateLabelPostfix(isRequired) {
if (isRequired && !this.controlLabel.classList.contains('required')) {
this.renderer.addClass(this.controlLabel, 'required');
}
else if (!isRequired &&
this.controlLabel.classList.contains('required')) {
this.renderer.removeClass(this.controlLabel, 'required');
}
}
get canShowError() {
return this.isInvalid;
}
}
FormGroupDirective.decorators = [
{ type: Directive }
];
FormGroupDirective.ctorParameters = () => [
{ type: ElementRef },
{ type: Renderer2 },
{ type: Injector }
];
FormGroupDirective.propDecorators = {
baseClass: [{ type: HostBinding, args: ['class.form-group',] }],
isInvalid: [{ type: HostBinding, args: ['class.is-invalid',] }],
input: [{ type: ContentChild, args: [InputDirective,] }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1ncm91cC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1oYWxmbW9vbi9zcmMvbGliL2Zvcm0vZm9ybS1ncm91cC9mb3JtLWdyb3VwLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsWUFBWSxFQUNaLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFFBQVEsRUFHUixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxjQUFjLEVBQUUsYUFBYSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFJMUUsTUFBTSxPQUFnQixrQkFBa0I7SUFVdEMsWUFDWSxFQUFjLEVBQ2QsUUFBbUIsRUFDbkIsUUFBa0I7UUFGbEIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQVpHLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQWFqRCxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQzlELENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sS0FBSyxhQUFhLENBQUMsT0FBTyxDQUFDO1FBQ3BELENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQztJQUN2RCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELGtCQUFrQixDQUFDLFVBQW1CO1FBQ3BDLElBQUksVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ25FLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDdkQ7YUFBTSxJQUNMLENBQUMsVUFBVTtZQUNYLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFDaEQ7WUFDQSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQzFEO0lBQ0gsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDOzs7WUE3Q0YsU0FBUzs7O1lBWFIsVUFBVTtZQUtWLFNBQVM7WUFIVCxRQUFROzs7d0JBV1AsV0FBVyxTQUFDLGtCQUFrQjt3QkFDOUIsV0FBVyxTQUFDLGtCQUFrQjtvQkFHOUIsWUFBWSxTQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb250ZW50Q2hpbGQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdG9yLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtJbnB1dERpcmVjdGl2ZX0gZnJvbSAnLi4vaW5wdXQvaW5wdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7Q29udHJvbFNlcnZpY2UsIENvbnRyb2xTdGF0dXN9IGZyb20gJy4uL3NlcnZpY2VzL2NvbnRyb2wuc2VydmljZSc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZvcm1Hcm91cERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mb3JtLWdyb3VwJykgYmFzZUNsYXNzID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy1pbnZhbGlkJykgaXNJbnZhbGlkID0gZmFsc2U7XG4gIGNvbnRyb2xMYWJlbDogSFRNTExhYmVsRWxlbWVudDtcblxuICBAQ29udGVudENoaWxkKElucHV0RGlyZWN0aXZlKSBpbnB1dDogSW5wdXREaXJlY3RpdmU7XG5cbiAgcHJpdmF0ZSBjb250cm9sU2VydmljZTogQ29udHJvbFNlcnZpY2U7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBlbDogRWxlbWVudFJlZixcbiAgICBwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yXG4gICkge1xuICAgIHRoaXMuY29udHJvbFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQ29udHJvbFNlcnZpY2UpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5jb250cm9sU2VydmljZS5jdXJyZW50U3RhdHVzJC5zdWJzY3JpYmUoXG4gICAgICAoc3RhdHVzKSA9PiB7XG4gICAgICAgIHRoaXMuaXNJbnZhbGlkID0gc3RhdHVzID09PSBDb250cm9sU3RhdHVzLklOVkFMSUQ7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbExhYmVsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmZpcnN0Q2hpbGQ7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgdXBkYXRlTGFiZWxQb3N0Zml4KGlzUmVxdWlyZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoaXNSZXF1aXJlZCAmJiAhdGhpcy5jb250cm9sTGFiZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdyZXF1aXJlZCcpKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuY29udHJvbExhYmVsLCAncmVxdWlyZWQnKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgIWlzUmVxdWlyZWQgJiZcbiAgICAgIHRoaXMuY29udHJvbExhYmVsLmNsYXNzTGlzdC5jb250YWlucygncmVxdWlyZWQnKVxuICAgICkge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmNvbnRyb2xMYWJlbCwgJ3JlcXVpcmVkJyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNhblNob3dFcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0ludmFsaWQ7XG4gIH1cbn1cbiJdfQ==