@ngqp/core
Version:
62 lines • 7.88 kB
JavaScript
import { Directive, Inject, Input, Optional, Self } from '@angular/core';
import { QueryParamGroupService } from './query-param-group.service';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { selectValueAccessor } from '../accessors/util';
import { QueryParamGroup } from '../model/query-param-group';
/**
* Binds a {@link QueryParam} to a component directly.
*
* This directive accepts a {@link QueryParam} without requiring an outer {@link QueryParamGroup}.
* It binds this parameter to the host component, which is required to have a [ControlValueAccessor]
* {@link https://angular.io/api/forms/ControlValueAccessor}.
*/
export class QueryParamDirective {
/** @internal */
constructor(groupService, valueAccessors) {
this.groupService = groupService;
/**
* The {@link QueryParam} to bind to the host component.
*/
this.queryParam = null;
/** @internal */
this.name = 'param';
/** @internal */
this.group = new QueryParamGroup({});
this.valueAccessor = selectValueAccessor(valueAccessors);
this.groupService.setQueryParamGroup(this.group);
}
/** @ignore */
ngOnChanges(changes) {
const paramChange = changes['queryParam'];
if (paramChange) {
if (this.group.get(this.name)) {
this.groupService.deregisterQueryParamDirective(this.name);
this.group.remove(this.name);
}
if (paramChange.currentValue) {
this.group.add(this.name, paramChange.currentValue);
this.groupService.registerQueryParamDirective(this);
}
}
}
/** @ignore */
ngOnDestroy() {
if (this.groupService) {
this.groupService.deregisterQueryParamDirective(this.name);
}
}
}
QueryParamDirective.decorators = [
{ type: Directive, args: [{
selector: '[queryParam]',
providers: [QueryParamGroupService],
},] }
];
QueryParamDirective.ctorParameters = () => [
{ type: QueryParamGroupService, decorators: [{ type: Optional }] },
{ type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALUE_ACCESSOR,] }] }
];
QueryParamDirective.propDecorators = {
queryParam: [{ type: Input, args: ['queryParam',] }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcGFyYW0uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL25ncXAvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvZGlyZWN0aXZlcy9xdWVyeS1wYXJhbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUF3QixRQUFRLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRSxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTdEOzs7Ozs7R0FNRztBQUtILE1BQU0sT0FBTyxtQkFBbUI7SUFpQjVCLGdCQUFnQjtJQUNoQixZQUN3QixZQUFvQyxFQUNULGNBQXNDO1FBRGpFLGlCQUFZLEdBQVosWUFBWSxDQUF3QjtRQWpCNUQ7O1dBRUc7UUFFSSxlQUFVLEdBQStCLElBQUksQ0FBQztRQUVyRCxnQkFBZ0I7UUFDQSxTQUFJLEdBQUcsT0FBTyxDQUFDO1FBSy9CLGdCQUFnQjtRQUNSLFVBQUssR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQU9wQyxJQUFJLENBQUMsYUFBYSxHQUFHLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxjQUFjO0lBQ1AsV0FBVyxDQUFDLE9BQXNCO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUUxQyxJQUFJLFdBQVcsRUFBRTtZQUNiLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2hDO1lBRUQsSUFBSSxXQUFXLENBQUMsWUFBWSxFQUFFO2dCQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2RDtTQUNKO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDUCxXQUFXO1FBQ2QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlEO0lBQ0wsQ0FBQzs7O1lBcERKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsY0FBYztnQkFDeEIsU0FBUyxFQUFFLENBQUMsc0JBQXNCLENBQUM7YUFDdEM7OztZQWpCUSxzQkFBc0IsdUJBcUN0QixRQUFRO3dDQUNSLFFBQVEsWUFBSSxJQUFJLFlBQUksTUFBTSxTQUFDLGlCQUFpQjs7O3lCQWZoRCxLQUFLLFNBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBTZWxmLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBRdWVyeVBhcmFtR3JvdXBTZXJ2aWNlIH0gZnJvbSAnLi9xdWVyeS1wYXJhbS1ncm91cC5zZXJ2aWNlJztcbmltcG9ydCB7IFF1ZXJ5UGFyYW1BY2Nlc3NvciB9IGZyb20gJy4vcXVlcnktcGFyYW0tYWNjZXNzb3IuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHNlbGVjdFZhbHVlQWNjZXNzb3IgfSBmcm9tICcuLi9hY2Nlc3NvcnMvdXRpbCc7XG5pbXBvcnQgeyBRdWVyeVBhcmFtIH0gZnJvbSAnLi4vbW9kZWwvcXVlcnktcGFyYW0nO1xuaW1wb3J0IHsgUXVlcnlQYXJhbUdyb3VwIH0gZnJvbSAnLi4vbW9kZWwvcXVlcnktcGFyYW0tZ3JvdXAnO1xuXG4vKipcbiAqIEJpbmRzIGEge0BsaW5rIFF1ZXJ5UGFyYW19IHRvIGEgY29tcG9uZW50IGRpcmVjdGx5LlxuICpcbiAqIFRoaXMgZGlyZWN0aXZlIGFjY2VwdHMgYSB7QGxpbmsgUXVlcnlQYXJhbX0gd2l0aG91dCByZXF1aXJpbmcgYW4gb3V0ZXIge0BsaW5rIFF1ZXJ5UGFyYW1Hcm91cH0uXG4gKiBJdCBiaW5kcyB0aGlzIHBhcmFtZXRlciB0byB0aGUgaG9zdCBjb21wb25lbnQsIHdoaWNoIGlzIHJlcXVpcmVkIHRvIGhhdmUgYSBbQ29udHJvbFZhbHVlQWNjZXNzb3JdXG4gKiB7QGxpbmsgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9mb3Jtcy9Db250cm9sVmFsdWVBY2Nlc3Nvcn0uXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3F1ZXJ5UGFyYW1dJyxcbiAgICBwcm92aWRlcnM6IFtRdWVyeVBhcmFtR3JvdXBTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJhbURpcmVjdGl2ZSBpbXBsZW1lbnRzIFF1ZXJ5UGFyYW1BY2Nlc3NvciwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kgIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSB7QGxpbmsgUXVlcnlQYXJhbX0gdG8gYmluZCB0byB0aGUgaG9zdCBjb21wb25lbnQuXG4gICAgICovXG4gICAgQElucHV0KCdxdWVyeVBhcmFtJylcbiAgICBwdWJsaWMgcXVlcnlQYXJhbTogUXVlcnlQYXJhbTx1bmtub3duPiB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWFkb25seSBuYW1lID0gJ3BhcmFtJztcblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgdmFsdWVBY2Nlc3NvcjogQ29udHJvbFZhbHVlQWNjZXNzb3I7XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgcHJpdmF0ZSBncm91cCA9IG5ldyBRdWVyeVBhcmFtR3JvdXAoe30pO1xuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGdyb3VwU2VydmljZTogUXVlcnlQYXJhbUdyb3VwU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBASW5qZWN0KE5HX1ZBTFVFX0FDQ0VTU09SKSB2YWx1ZUFjY2Vzc29yczogQ29udHJvbFZhbHVlQWNjZXNzb3JbXSxcbiAgICApIHtcbiAgICAgICAgdGhpcy52YWx1ZUFjY2Vzc29yID0gc2VsZWN0VmFsdWVBY2Nlc3Nvcih2YWx1ZUFjY2Vzc29ycyk7XG4gICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLnNldFF1ZXJ5UGFyYW1Hcm91cCh0aGlzLmdyb3VwKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmFtQ2hhbmdlID0gY2hhbmdlc1sncXVlcnlQYXJhbSddO1xuXG4gICAgICAgIGlmIChwYXJhbUNoYW5nZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXAuZ2V0KHRoaXMubmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwU2VydmljZS5kZXJlZ2lzdGVyUXVlcnlQYXJhbURpcmVjdGl2ZSh0aGlzLm5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXAucmVtb3ZlKHRoaXMubmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwYXJhbUNoYW5nZS5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwLmFkZCh0aGlzLm5hbWUsIHBhcmFtQ2hhbmdlLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cFNlcnZpY2UucmVnaXN0ZXJRdWVyeVBhcmFtRGlyZWN0aXZlKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmdyb3VwU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5ncm91cFNlcnZpY2UuZGVyZWdpc3RlclF1ZXJ5UGFyYW1EaXJlY3RpdmUodGhpcy5uYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxufSJdfQ==