@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
88 lines • 12.5 kB
JavaScript
import { Directive, EventEmitter, forwardRef, Inject, Optional, Output, Self } from '@angular/core';
import { NG_VALIDATORS } from '@angular/forms';
import { Subject } from 'rxjs';
import { FormValidatorBase } from '../validators/base-validator';
import { SME_VALIDATORS } from '../validators/sme-validator';
import * as i0 from "@angular/core";
/**
* Provider for the FormFieldValidatorDirective directive
*/
export const FORM_FIELD_VALIDATOR = {
provide: NG_VALIDATORS,
useExisting: forwardRef(() => FormFieldValidatorDirective),
multi: true
};
/**
* Implementation of Validator for sme-form-field
* The selector for this directive must match @see FormFieldComponent.selector. see FormFieldComponent for details.
*/
export class FormFieldValidatorDirective extends FormValidatorBase {
/**
* Instantiates a new instance of FormFieldValidatorDirective
*/
constructor(validators) {
super();
this.validators = validators;
/**
* EventEmitter for checking validation and raising alerts
* Subscribers are expected to populate the 'alerts' map with there own validation alerts
*/
this.customValidate = new EventEmitter();
/**
* Subject to emit when new alerts
*/
this.alert = new Subject();
if (validators) {
validators.forEach(v => v.registerOnValidatorChange(() => this.revalidate()));
}
}
/**
* Implementation of Validator interface.
* Validates the value of this elements form control. Use the @see checkValidate event to hook into this function.
* @param c The FormControl attached to this element
* @return null when valid, otherwise returns a validation object in the form of "{ errorType: {valid: false} }".
*/
validate(c) {
let alerts = super.validate(c) || {};
// collect custom validate alerts
this.customValidate.emit({ formControl: c, alerts: alerts });
// collect SmeValidator alerts
if (this.validators && this.validators.length > 0) {
const injectedAlerts = this.validators.reduce((result, validator) => {
return { ...result, ...validator.validate(c) || {} };
}, {});
alerts = { ...injectedAlerts, ...alerts };
}
// notify any listeners that we have alerts available
this.alert.next(alerts);
// get the errors list from the alerts. return that as our errors collection for angulars internal processing
const errors = {};
Object.keys(alerts).forEach(key => {
const alert = alerts[key];
if (!alert || !alert.valid) {
errors[key] = alert;
}
});
return this.alertsOrNull(errors);
}
}
/** @nocollapse */ FormFieldValidatorDirective.ɵfac = function FormFieldValidatorDirective_Factory(t) { return new (t || FormFieldValidatorDirective)(i0.ɵɵdirectiveInject(SME_VALIDATORS, 10)); };
/** @nocollapse */ FormFieldValidatorDirective.ɵdir = /** @pureOrBreakMyCode */ i0.ɵɵdefineDirective({ type: FormFieldValidatorDirective, selectors: [["sme-form-field"]], outputs: { customValidate: "customValidate" }, features: [i0.ɵɵProvidersFeature([FORM_FIELD_VALIDATOR]), i0.ɵɵInheritDefinitionFeature] });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FormFieldValidatorDirective, [{
type: Directive,
args: [{
// eslint-disable-next-line @angular-eslint/directive-selector
selector: 'sme-form-field',
providers: [FORM_FIELD_VALIDATOR]
}]
}], function () { return [{ type: Array, decorators: [{
type: Optional
}, {
type: Self
}, {
type: Inject,
args: [SME_VALIDATORS]
}] }]; }, { customValidate: [{
type: Output
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC12YWxpZGF0b3IuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZm9ybS9mb3JtLWZpZWxkL2Zvcm0tZmllbGQtdmFsaWRhdG9yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQWUsYUFBYSxFQUErQixNQUFNLGdCQUFnQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFnQixjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFpQjNFOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQW1CO0lBQ2hELE9BQU8sRUFBRSxhQUFhO0lBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUM7SUFDMUQsS0FBSyxFQUFFLElBQUk7Q0FDZCxDQUFDO0FBRUY7OztHQUdHO0FBTUgsTUFBTSxPQUFPLDJCQUE0QixTQUFRLGlCQUFpQjtJQWM5RDs7T0FFRztJQUNILFlBQ3dELFVBQStCO1FBQ25GLEtBQUssRUFBRSxDQUFDO1FBRDRDLGVBQVUsR0FBVixVQUFVLENBQXFCO1FBaEJ2Rjs7O1dBR0c7UUFFSSxtQkFBYyxHQUEyQyxJQUFJLFlBQVksRUFBNEIsQ0FBQztRQUU3Rzs7V0FFRztRQUNJLFVBQUssR0FBRyxJQUFJLE9BQU8sRUFBb0IsQ0FBQztRQVEzQyxJQUFJLFVBQVUsRUFBRTtZQUNaLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNqRjtJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFFBQVEsQ0FBQyxDQUFjO1FBQzFCLElBQUksTUFBTSxHQUFxQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2RCxpQ0FBaUM7UUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRTdELDhCQUE4QjtRQUM5QixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9DLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUN6QyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRTtnQkFDbEIsT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN6RCxDQUFDLEVBQ2lCLEVBQUUsQ0FDdkIsQ0FBQztZQUVGLE1BQU0sR0FBRyxFQUFFLEdBQUcsY0FBYyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7U0FDN0M7UUFFRCxxREFBcUQ7UUFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFeEIsNkdBQTZHO1FBQzdHLE1BQU0sTUFBTSxHQUFxQixFQUFFLENBQUM7UUFFcEMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDOUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBbUIsS0FBTSxDQUFDLEtBQUssRUFBRTtnQkFDM0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUN2QjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7O3lIQTlEUSwyQkFBMkIsdUJBa0JKLGNBQWM7NkdBbEJyQywyQkFBMkIsbUhBRnpCLENBQUMsb0JBQW9CLENBQUM7dUZBRXhCLDJCQUEyQjtjQUx2QyxTQUFTO2VBQUM7Z0JBQ1AsOERBQThEO2dCQUM5RCxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQixTQUFTLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQzthQUNwQzs7c0JBbUJRLFFBQVE7O3NCQUFJLElBQUk7O3NCQUFJLE1BQU07dUJBQUMsY0FBYzt3QkFYdkMsY0FBYztrQkFEcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbmplY3QsIE9wdGlvbmFsLCBPdXRwdXQsIFNlbGYsIFN0YXRpY1Byb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBOR19WQUxJREFUT1JTLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbkFsZXJ0LCBWYWxpZGF0aW9uQWxlcnRzIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi1hbGVydC92YWxpZGF0aW9uLWFsZXJ0JztcclxuaW1wb3J0IHsgRm9ybVZhbGlkYXRvckJhc2UgfSBmcm9tICcuLi92YWxpZGF0b3JzL2Jhc2UtdmFsaWRhdG9yJztcclxuaW1wb3J0IHsgU21lVmFsaWRhdG9yLCBTTUVfVkFMSURBVE9SUyB9IGZyb20gJy4uL3ZhbGlkYXRvcnMvc21lLXZhbGlkYXRvcic7XHJcblxyXG4vKipcclxuICogQXJndW1lbnRzIGZvciB0aGUgQHNlZSBGb3JtRmllbGRWYWxpZGF0b3JEaXJlY3RpdmUuY3VzdG9tVmFsaWRhdGUgT3V0cHV0IGV2ZW50XHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrVmFsaWRhdGlvbkV2ZW50QXJncyB7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBmb3JtIGNvbnRyb2wgdGhhdCB3ZSBhcmUgdmFsaWRhdGluZ1xyXG4gICAgICovXHJcbiAgICBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2w7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbiBlbXB0eSBvYmplY3QgdG8gcmV0dXJuIHBvcHVsYXRlIHdpdGggdmFsaWRhdGlvbiBhbGVydHNcclxuICAgICAqL1xyXG4gICAgYWxlcnRzOiBWYWxpZGF0aW9uQWxlcnRzO1xyXG59XHJcblxyXG4vKipcclxuICogUHJvdmlkZXIgZm9yIHRoZSBGb3JtRmllbGRWYWxpZGF0b3JEaXJlY3RpdmUgZGlyZWN0aXZlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRk9STV9GSUVMRF9WQUxJREFUT1I6IFN0YXRpY1Byb3ZpZGVyID0ge1xyXG4gICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZSksXHJcbiAgICBtdWx0aTogdHJ1ZVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEltcGxlbWVudGF0aW9uIG9mIFZhbGlkYXRvciBmb3Igc21lLWZvcm0tZmllbGRcclxuICogVGhlIHNlbGVjdG9yIGZvciB0aGlzIGRpcmVjdGl2ZSBtdXN0IG1hdGNoIEBzZWUgRm9ybUZpZWxkQ29tcG9uZW50LnNlbGVjdG9yLiBzZWUgRm9ybUZpZWxkQ29tcG9uZW50IGZvciBkZXRhaWxzLlxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxyXG4gICAgc2VsZWN0b3I6ICdzbWUtZm9ybS1maWVsZCcsXHJcbiAgICBwcm92aWRlcnM6IFtGT1JNX0ZJRUxEX1ZBTElEQVRPUl1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZSBleHRlbmRzIEZvcm1WYWxpZGF0b3JCYXNlIGltcGxlbWVudHMgVmFsaWRhdG9yIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEV2ZW50RW1pdHRlciBmb3IgY2hlY2tpbmcgdmFsaWRhdGlvbiBhbmQgcmFpc2luZyBhbGVydHNcclxuICAgICAqIFN1YnNjcmliZXJzIGFyZSBleHBlY3RlZCB0byBwb3B1bGF0ZSB0aGUgJ2FsZXJ0cycgbWFwIHdpdGggdGhlcmUgb3duIHZhbGlkYXRpb24gYWxlcnRzXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGN1c3RvbVZhbGlkYXRlOiBFdmVudEVtaXR0ZXI8Q2hlY2tWYWxpZGF0aW9uRXZlbnRBcmdzPiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hlY2tWYWxpZGF0aW9uRXZlbnRBcmdzPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3ViamVjdCB0byBlbWl0IHdoZW4gbmV3IGFsZXJ0c1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWxlcnQgPSBuZXcgU3ViamVjdDxWYWxpZGF0aW9uQWxlcnRzPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zdGFudGlhdGVzIGEgbmV3IGluc3RhbmNlIG9mIEZvcm1GaWVsZFZhbGlkYXRvckRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIEBJbmplY3QoU01FX1ZBTElEQVRPUlMpIHByaXZhdGUgdmFsaWRhdG9yczogQXJyYXk8U21lVmFsaWRhdG9yPikge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgaWYgKHZhbGlkYXRvcnMpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5mb3JFYWNoKHYgPT4gdi5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKCgpID0+IHRoaXMucmV2YWxpZGF0ZSgpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1wbGVtZW50YXRpb24gb2YgVmFsaWRhdG9yIGludGVyZmFjZS5cclxuICAgICAqIFZhbGlkYXRlcyB0aGUgdmFsdWUgb2YgdGhpcyBlbGVtZW50cyBmb3JtIGNvbnRyb2wuIFVzZSB0aGUgQHNlZSBjaGVja1ZhbGlkYXRlIGV2ZW50IHRvIGhvb2sgaW50byB0aGlzIGZ1bmN0aW9uLlxyXG4gICAgICogQHBhcmFtIGMgVGhlIEZvcm1Db250cm9sIGF0dGFjaGVkIHRvIHRoaXMgZWxlbWVudFxyXG4gICAgICogQHJldHVybiBudWxsIHdoZW4gdmFsaWQsIG90aGVyd2lzZSByZXR1cm5zIGEgdmFsaWRhdGlvbiBvYmplY3QgaW4gdGhlIGZvcm0gb2YgXCJ7IGVycm9yVHlwZToge3ZhbGlkOiBmYWxzZX0gfVwiLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICAgICAgbGV0IGFsZXJ0czogVmFsaWRhdGlvbkFsZXJ0cyA9IHN1cGVyLnZhbGlkYXRlKGMpIHx8IHt9O1xyXG4gICAgICAgIC8vIGNvbGxlY3QgY3VzdG9tIHZhbGlkYXRlIGFsZXJ0c1xyXG4gICAgICAgIHRoaXMuY3VzdG9tVmFsaWRhdGUuZW1pdCh7IGZvcm1Db250cm9sOiBjLCBhbGVydHM6IGFsZXJ0cyB9KTtcclxuXHJcbiAgICAgICAgLy8gY29sbGVjdCBTbWVWYWxpZGF0b3IgYWxlcnRzXHJcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdG9ycyAmJiB0aGlzLnZhbGlkYXRvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmplY3RlZEFsZXJ0cyA9IHRoaXMudmFsaWRhdG9ycy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAocmVzdWx0LCB2YWxpZGF0b3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5yZXN1bHQsIC4uLnZhbGlkYXRvci52YWxpZGF0ZShjKSB8fCB7fSB9O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIDxWYWxpZGF0aW9uQWxlcnRzPnt9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBhbGVydHMgPSB7IC4uLmluamVjdGVkQWxlcnRzLCAuLi5hbGVydHMgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG5vdGlmeSBhbnkgbGlzdGVuZXJzIHRoYXQgd2UgaGF2ZSBhbGVydHMgYXZhaWxhYmxlXHJcbiAgICAgICAgdGhpcy5hbGVydC5uZXh0KGFsZXJ0cyk7XHJcblxyXG4gICAgICAgIC8vIGdldCB0aGUgZXJyb3JzIGxpc3QgZnJvbSB0aGUgYWxlcnRzLiByZXR1cm4gdGhhdCBhcyBvdXIgZXJyb3JzIGNvbGxlY3Rpb24gZm9yIGFuZ3VsYXJzIGludGVybmFsIHByb2Nlc3NpbmdcclxuICAgICAgICBjb25zdCBlcnJvcnM6IFZhbGlkYXRpb25BbGVydHMgPSB7fTtcclxuXHJcbiAgICAgICAgT2JqZWN0LmtleXMoYWxlcnRzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsZXJ0ID0gYWxlcnRzW2tleV07XHJcbiAgICAgICAgICAgIGlmICghYWxlcnQgfHwgISg8VmFsaWRhdGlvbkFsZXJ0PmFsZXJ0KS52YWxpZCkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JzW2tleV0gPSBhbGVydDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5hbGVydHNPck51bGwoZXJyb3JzKTtcclxuICAgIH1cclxufVxyXG4iXX0=