ngx-vest-forms
Version:
Opinionated template-driven forms library for Angular
43 lines • 5.45 kB
JavaScript
import { Directive, inject, input } from '@angular/core';
import { NG_ASYNC_VALIDATORS, } from '@angular/forms';
import { FormDirective } from './form.directive';
import { getFormGroupField } from '../utils/form-utils';
import * as i0 from "@angular/core";
/**
* Hooks into the ngModelGroup selector and triggers an asynchronous validation for a form group
* It will use a vest suite behind the scenes
*/
export class FormModelGroupDirective {
constructor() {
this.validationOptions = input({ debounceTime: 0 });
this.formDirective = inject(FormDirective);
}
validate(control) {
const { ngForm } = this.formDirective;
const field = getFormGroupField(ngForm.control, control);
return this.formDirective.createAsyncValidator(field, this.validationOptions())(control.value);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: FormModelGroupDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.1", type: FormModelGroupDirective, isStandalone: true, selector: "[ngModelGroup]", inputs: { validationOptions: { classPropertyName: "validationOptions", publicName: "validationOptions", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
{
provide: NG_ASYNC_VALIDATORS,
useExisting: FormModelGroupDirective,
multi: true,
},
], ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: FormModelGroupDirective, decorators: [{
type: Directive,
args: [{
selector: '[ngModelGroup]',
standalone: true,
providers: [
{
provide: NG_ASYNC_VALIDATORS,
useExisting: FormModelGroupDirective,
multi: true,
},
],
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1tb2RlbC1ncm91cC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmVzdC1mb3Jtcy9zcmMvbGliL2RpcmVjdGl2ZXMvZm9ybS1tb2RlbC1ncm91cC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFHTCxtQkFBbUIsR0FFcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBR3hEOzs7R0FHRztBQVlILE1BQU0sT0FBTyx1QkFBdUI7SUFYcEM7UUFZUyxzQkFBaUIsR0FBRyxLQUFLLENBQW9CLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEQsa0JBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7S0FXeEQ7SUFUUSxRQUFRLENBQ2IsT0FBd0I7UUFFeEIsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDdEMsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQzdFLE9BQU8sQ0FBQyxLQUFLLENBQ3lCLENBQUM7SUFDM0MsQ0FBQzs4R0FaVSx1QkFBdUI7a0dBQXZCLHVCQUF1QixxT0FSdkI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsbUJBQW1CO2dCQUM1QixXQUFXLEVBQUUsdUJBQXVCO2dCQUNwQyxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0Y7OzJGQUVVLHVCQUF1QjtrQkFYbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxtQkFBbUI7NEJBQzVCLFdBQVcseUJBQXlCOzRCQUNwQyxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgaW5qZWN0LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBBc3luY1ZhbGlkYXRvcixcbiAgTkdfQVNZTkNfVkFMSURBVE9SUyxcbiAgVmFsaWRhdGlvbkVycm9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybURpcmVjdGl2ZSB9IGZyb20gJy4vZm9ybS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZ2V0Rm9ybUdyb3VwRmllbGQgfSBmcm9tICcuLi91dGlscy9mb3JtLXV0aWxzJztcbmltcG9ydCB7IFZhbGlkYXRpb25PcHRpb25zIH0gZnJvbSAnLi92YWxpZGF0aW9uLW9wdGlvbnMnO1xuXG4vKipcbiAqIEhvb2tzIGludG8gdGhlIG5nTW9kZWxHcm91cCBzZWxlY3RvciBhbmQgdHJpZ2dlcnMgYW4gYXN5bmNocm9ub3VzIHZhbGlkYXRpb24gZm9yIGEgZm9ybSBncm91cFxuICogSXQgd2lsbCB1c2UgYSB2ZXN0IHN1aXRlIGJlaGluZCB0aGUgc2NlbmVzXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tuZ01vZGVsR3JvdXBdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfQVNZTkNfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBGb3JtTW9kZWxHcm91cERpcmVjdGl2ZSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Nb2RlbEdyb3VwRGlyZWN0aXZlIGltcGxlbWVudHMgQXN5bmNWYWxpZGF0b3Ige1xuICBwdWJsaWMgdmFsaWRhdGlvbk9wdGlvbnMgPSBpbnB1dDxWYWxpZGF0aW9uT3B0aW9ucz4oeyBkZWJvdW5jZVRpbWU6IDAgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZm9ybURpcmVjdGl2ZSA9IGluamVjdChGb3JtRGlyZWN0aXZlKTtcblxuICBwdWJsaWMgdmFsaWRhdGUoXG4gICAgY29udHJvbDogQWJzdHJhY3RDb250cm9sXG4gICk6IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+IHtcbiAgICBjb25zdCB7IG5nRm9ybSB9ID0gdGhpcy5mb3JtRGlyZWN0aXZlO1xuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUdyb3VwRmllbGQobmdGb3JtLmNvbnRyb2wsIGNvbnRyb2wpO1xuICAgIHJldHVybiB0aGlzLmZvcm1EaXJlY3RpdmUuY3JlYXRlQXN5bmNWYWxpZGF0b3IoZmllbGQsIHRoaXMudmFsaWRhdGlvbk9wdGlvbnMoKSkoXG4gICAgICBjb250cm9sLnZhbHVlXG4gICAgKSBhcyBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPjtcbiAgfVxufVxuIl19