@ngqp/core
Version:
66 lines • 7.86 kB
JavaScript
import { Directive, Inject, Input, Optional, Self } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { QueryParamGroupService } from './query-param-group.service';
import { selectValueAccessor } from '../accessors/util';
/**
* Binds a {@link QueryParam} to a DOM element.
*
* This directive accepts the name of a {@link QueryParam} inside its parent {@link QueryParamGroup}.
* It binds this parameter to the host element, which is required to have a [ControlValueAccessor]
* {@link https://angular.io/api/forms/ControlValueAccessor}.
*/
export class QueryParamNameDirective {
/** @internal */
constructor(groupService, valueAccessors) {
this.groupService = groupService;
this._name = null;
if (!this.groupService) {
throw new Error(`No parent configuration found. Did you forget to add [queryParamGroup]?`);
}
this.valueAccessor = selectValueAccessor(valueAccessors);
}
/**
* The name of the {@link QueryParam} inside its parent {@link QueryParamGroup}.
* Note that this does not refer to the [parameter name]{@link QueryParam#urlParam}.
*/
set name(name) {
this._name = name;
}
get name() {
if (!this._name) {
throw new Error(`No queryParamName has been specified.`);
}
return this._name;
}
/** @ignore */
ngOnChanges(changes) {
const nameChange = changes['name'];
if (nameChange) {
if (!nameChange.firstChange) {
this.groupService.deregisterQueryParamDirective(nameChange.previousValue);
}
if (nameChange.currentValue) {
this.groupService.registerQueryParamDirective(this);
}
}
}
/** @ignore */
ngOnDestroy() {
if (this.groupService) {
this.groupService.deregisterQueryParamDirective(this.name);
}
}
}
QueryParamNameDirective.decorators = [
{ type: Directive, args: [{
selector: '[queryParamName]',
},] }
];
QueryParamNameDirective.ctorParameters = () => [
{ type: QueryParamGroupService, decorators: [{ type: Optional }] },
{ type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALUE_ACCESSOR,] }] }
];
QueryParamNameDirective.propDecorators = {
name: [{ type: Input, args: ['queryParamName',] }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcGFyYW0tbmFtZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdxcC9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9kaXJlY3RpdmVzL3F1ZXJ5LXBhcmFtLW5hbWUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBd0IsUUFBUSxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXJFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXhEOzs7Ozs7R0FNRztBQUlILE1BQU0sT0FBTyx1QkFBdUI7SUF3QmhDLGdCQUFnQjtJQUNoQixZQUN3QixZQUFvQyxFQUNULGNBQXNDO1FBRGpFLGlCQUFZLEdBQVosWUFBWSxDQUF3QjtRQUpwRCxVQUFLLEdBQWtCLElBQUksQ0FBQztRQU9oQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLHlFQUF5RSxDQUFDLENBQUM7U0FDOUY7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFoQ0Q7OztPQUdHO0lBQ0gsSUFDVyxJQUFJLENBQUMsSUFBWTtRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7U0FDNUQ7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQW1CRCxjQUFjO0lBQ1AsV0FBVyxDQUFDLE9BQXNCO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyxJQUFJLFVBQVUsRUFBRTtZQUNaLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO2dCQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLDZCQUE2QixDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUM3RTtZQUVELElBQUksVUFBVSxDQUFDLFlBQVksRUFBRTtnQkFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2RDtTQUNKO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDUCxXQUFXO1FBQ2QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlEO0lBQ0wsQ0FBQzs7O1lBMURKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsa0JBQWtCO2FBQy9COzs7WUFiUSxzQkFBc0IsdUJBd0N0QixRQUFRO3dDQUNSLFFBQVEsWUFBSSxJQUFJLFlBQUksTUFBTSxTQUFDLGlCQUFpQjs7O21CQXJCaEQsS0FBSyxTQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBTZWxmLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBRdWVyeVBhcmFtR3JvdXBTZXJ2aWNlIH0gZnJvbSAnLi9xdWVyeS1wYXJhbS1ncm91cC5zZXJ2aWNlJztcbmltcG9ydCB7IFF1ZXJ5UGFyYW1BY2Nlc3NvciB9IGZyb20gJy4vcXVlcnktcGFyYW0tYWNjZXNzb3IuaW50ZXJmYWNlJztcbmltcG9ydCB7IHNlbGVjdFZhbHVlQWNjZXNzb3IgfSBmcm9tICcuLi9hY2Nlc3NvcnMvdXRpbCc7XG5cbi8qKlxuICogQmluZHMgYSB7QGxpbmsgUXVlcnlQYXJhbX0gdG8gYSBET00gZWxlbWVudC5cbiAqXG4gKiBUaGlzIGRpcmVjdGl2ZSBhY2NlcHRzIHRoZSBuYW1lIG9mIGEge0BsaW5rIFF1ZXJ5UGFyYW19IGluc2lkZSBpdHMgcGFyZW50IHtAbGluayBRdWVyeVBhcmFtR3JvdXB9LlxuICogSXQgYmluZHMgdGhpcyBwYXJhbWV0ZXIgdG8gdGhlIGhvc3QgZWxlbWVudCwgd2hpY2ggaXMgcmVxdWlyZWQgdG8gaGF2ZSBhIFtDb250cm9sVmFsdWVBY2Nlc3Nvcl1cbiAqIHtAbGluayBodHRwczovL2FuZ3VsYXIuaW8vYXBpL2Zvcm1zL0NvbnRyb2xWYWx1ZUFjY2Vzc29yfS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcXVlcnlQYXJhbU5hbWVdJyxcbn0pXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJhbU5hbWVEaXJlY3RpdmUgaW1wbGVtZW50cyBRdWVyeVBhcmFtQWNjZXNzb3IsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSB7QGxpbmsgUXVlcnlQYXJhbX0gaW5zaWRlIGl0cyBwYXJlbnQge0BsaW5rIFF1ZXJ5UGFyYW1Hcm91cH0uXG4gICAgICogTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgcmVmZXIgdG8gdGhlIFtwYXJhbWV0ZXIgbmFtZV17QGxpbmsgUXVlcnlQYXJhbSN1cmxQYXJhbX0uXG4gICAgICovXG4gICAgQElucHV0KCdxdWVyeVBhcmFtTmFtZScpXG4gICAgcHVibGljIHNldCBuYW1lKG5hbWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLl9uYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHF1ZXJ5UGFyYW1OYW1lIGhhcyBiZWVuIHNwZWNpZmllZC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgdmFsdWVBY2Nlc3NvcjogQ29udHJvbFZhbHVlQWNjZXNzb3I7XG5cbiAgICBwcml2YXRlIF9uYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBncm91cFNlcnZpY2U6IFF1ZXJ5UGFyYW1Hcm91cFNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgQEluamVjdChOR19WQUxVRV9BQ0NFU1NPUikgdmFsdWVBY2Nlc3NvcnM6IENvbnRyb2xWYWx1ZUFjY2Vzc29yW10sXG4gICAgKSB7XG4gICAgICAgIGlmICghdGhpcy5ncm91cFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcGFyZW50IGNvbmZpZ3VyYXRpb24gZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGFkZCBbcXVlcnlQYXJhbUdyb3VwXT9gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsdWVBY2Nlc3NvciA9IHNlbGVjdFZhbHVlQWNjZXNzb3IodmFsdWVBY2Nlc3NvcnMpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgY29uc3QgbmFtZUNoYW5nZSA9IGNoYW5nZXNbJ25hbWUnXTtcbiAgICAgICAgaWYgKG5hbWVDaGFuZ2UpIHtcbiAgICAgICAgICAgIGlmICghbmFtZUNoYW5nZS5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLmRlcmVnaXN0ZXJRdWVyeVBhcmFtRGlyZWN0aXZlKG5hbWVDaGFuZ2UucHJldmlvdXNWYWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuYW1lQ2hhbmdlLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLnJlZ2lzdGVyUXVlcnlQYXJhbURpcmVjdGl2ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5ncm91cFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlLmRlcmVnaXN0ZXJRdWVyeVBhcmFtRGlyZWN0aXZlKHRoaXMubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdfQ==