ngrx-forms
Version:
Proper integration of forms in Angular 4 applications using ngrx
50 lines • 6.28 kB
JavaScript
import { Directive, Host, Input, Optional, } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "./select";
import * as i2 from "./select-multiple";
// tslint:disable:directive-class-suffix
const NULL_RENDERER = {
setProperty: () => void 0,
};
/**
* This directive is necessary to restore the default behaviour of Angular
* when an `option` is used without an **ngrx-forms** form state. Since it
* is not possible to select an element with a selector that considers its
* parent the `option` directives for `select` and `select[multiple]` will
* always be applied and therefore overriding the `[value]` binding which
* disabled Angular's normal behaviour. This directive restores this
* behaviour if no `select` or `select[multiple]` view adapter is found.
* This is not a perfect solution since it may interfere with other
* directives that try to set the `[value]` but that is very unlikely.
*/
export class NgrxFallbackSelectOption {
constructor(element, renderer, viewAdapter, multipleViewAdapter) {
this.element = element;
this.renderer = renderer;
this.renderer = viewAdapter || multipleViewAdapter ? NULL_RENDERER : renderer;
}
set value(value) {
this.renderer.setProperty(this.element.nativeElement, 'value', value);
}
}
NgrxFallbackSelectOption.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: NgrxFallbackSelectOption, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.NgrxSelectViewAdapter, host: true, optional: true }, { token: i2.NgrxSelectMultipleViewAdapter, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
NgrxFallbackSelectOption.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.13", type: NgrxFallbackSelectOption, selector: "option", inputs: { value: "value" }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: NgrxFallbackSelectOption, decorators: [{
type: Directive,
args: [{
// tslint:disable-next-line:directive-selector
selector: 'option',
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.NgrxSelectViewAdapter, decorators: [{
type: Host
}, {
type: Optional
}] }, { type: i2.NgrxSelectMultipleViewAdapter, decorators: [{
type: Host
}, {
type: Optional
}] }]; }, propDecorators: { value: [{
type: Input,
args: ['value']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3ZpZXctYWRhcHRlci9vcHRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxJQUFJLEVBQ0osS0FBSyxFQUNMLFFBQVEsR0FFVCxNQUFNLGVBQWUsQ0FBQzs7OztBQUt2Qix3Q0FBd0M7QUFFeEMsTUFBTSxhQUFhLEdBQWM7SUFDL0IsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztDQUNuQixDQUFDO0FBRVQ7Ozs7Ozs7Ozs7R0FVRztBQUtILE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsWUFDVSxPQUFtQixFQUNuQixRQUFtQixFQUNQLFdBQWtDLEVBQ2xDLG1CQUFrRDtRQUg5RCxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGFBQVEsR0FBUixRQUFRLENBQVc7UUFJM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLElBQUksbUJBQW1CLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ2hGLENBQUM7SUFFRCxJQUNJLEtBQUssQ0FBQyxLQUFVO1FBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4RSxDQUFDOztzSEFiVSx3QkFBd0I7MEdBQXhCLHdCQUF3Qjs0RkFBeEIsd0JBQXdCO2tCQUpwQyxTQUFTO21CQUFDO29CQUNULDhDQUE4QztvQkFDOUMsUUFBUSxFQUFFLFFBQVE7aUJBQ25COzswQkFLSSxJQUFJOzswQkFBSSxRQUFROzswQkFDaEIsSUFBSTs7MEJBQUksUUFBUTs0Q0FNZixLQUFLO3NCQURSLEtBQUs7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgRGlyZWN0aXZlLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdCxcclxuICBJbnB1dCxcclxuICBPcHRpb25hbCxcclxuICBSZW5kZXJlcjIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBOZ3J4U2VsZWN0Vmlld0FkYXB0ZXIgfSBmcm9tICcuL3NlbGVjdCc7XHJcbmltcG9ydCB7IE5ncnhTZWxlY3RNdWx0aXBsZVZpZXdBZGFwdGVyIH0gZnJvbSAnLi9zZWxlY3QtbXVsdGlwbGUnO1xyXG5cclxuLy8gdHNsaW50OmRpc2FibGU6ZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxyXG5cclxuY29uc3QgTlVMTF9SRU5ERVJFUjogUmVuZGVyZXIyID0ge1xyXG4gIHNldFByb3BlcnR5OiAoKSA9PiB2b2lkIDAsXHJcbn0gYXMgYW55O1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgZGlyZWN0aXZlIGlzIG5lY2Vzc2FyeSB0byByZXN0b3JlIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBvZiBBbmd1bGFyXHJcbiAqIHdoZW4gYW4gYG9wdGlvbmAgaXMgdXNlZCB3aXRob3V0IGFuICoqbmdyeC1mb3JtcyoqIGZvcm0gc3RhdGUuIFNpbmNlIGl0XHJcbiAqIGlzIG5vdCBwb3NzaWJsZSB0byBzZWxlY3QgYW4gZWxlbWVudCB3aXRoIGEgc2VsZWN0b3IgdGhhdCBjb25zaWRlcnMgaXRzXHJcbiAqIHBhcmVudCB0aGUgYG9wdGlvbmAgZGlyZWN0aXZlcyBmb3IgYHNlbGVjdGAgYW5kIGBzZWxlY3RbbXVsdGlwbGVdYCB3aWxsXHJcbiAqIGFsd2F5cyBiZSBhcHBsaWVkIGFuZCB0aGVyZWZvcmUgb3ZlcnJpZGluZyB0aGUgYFt2YWx1ZV1gIGJpbmRpbmcgd2hpY2hcclxuICogZGlzYWJsZWQgQW5ndWxhcidzIG5vcm1hbCBiZWhhdmlvdXIuIFRoaXMgZGlyZWN0aXZlIHJlc3RvcmVzIHRoaXNcclxuICogYmVoYXZpb3VyIGlmIG5vIGBzZWxlY3RgIG9yIGBzZWxlY3RbbXVsdGlwbGVdYCB2aWV3IGFkYXB0ZXIgaXMgZm91bmQuXHJcbiAqIFRoaXMgaXMgbm90IGEgcGVyZmVjdCBzb2x1dGlvbiBzaW5jZSBpdCBtYXkgaW50ZXJmZXJlIHdpdGggb3RoZXJcclxuICogZGlyZWN0aXZlcyB0aGF0IHRyeSB0byBzZXQgdGhlIGBbdmFsdWVdYCBidXQgdGhhdCBpcyB2ZXJ5IHVubGlrZWx5LlxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1zZWxlY3RvclxyXG4gIHNlbGVjdG9yOiAnb3B0aW9uJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5ncnhGYWxsYmFja1NlbGVjdE9wdGlvbiB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBASG9zdCgpIEBPcHRpb25hbCgpIHZpZXdBZGFwdGVyOiBOZ3J4U2VsZWN0Vmlld0FkYXB0ZXIsXHJcbiAgICBASG9zdCgpIEBPcHRpb25hbCgpIG11bHRpcGxlVmlld0FkYXB0ZXI6IE5ncnhTZWxlY3RNdWx0aXBsZVZpZXdBZGFwdGVyLFxyXG4gICkge1xyXG4gICAgdGhpcy5yZW5kZXJlciA9IHZpZXdBZGFwdGVyIHx8IG11bHRpcGxlVmlld0FkYXB0ZXIgPyBOVUxMX1JFTkRFUkVSIDogcmVuZGVyZXI7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoJ3ZhbHVlJylcclxuICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgdmFsdWUpO1xyXG4gIH1cclxufVxyXG4iXX0=