UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

88 lines 12.5 kB
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=