UNPKG

@ngqp/core

Version:

Synchronizing form controls with the URL for Angular

46 lines 5.14 kB
import { Directive, Input } from '@angular/core'; import { QueryParamGroupService } from './query-param-group.service'; /** * Binds a {@link QueryParamGroup} to a DOM element. * * This directive accepts an instance of {@link QueryParamGroup}. Any child using * {@link QueryParamNameDirective} will then be matched against this group, and the * synchronization process can take place. */ export class QueryParamGroupDirective { /** @internal */ constructor(groupService) { this.groupService = groupService; /** * The {@link QueryParamGroup} to bind. */ this.queryParamGroup = null; } /** @ignore */ ngOnChanges(changes) { const groupChange = changes['queryParamGroup']; if (groupChange) { if (!groupChange.firstChange) { throw new Error(`Binding a different QueryParamGroup during runtime is currently not supported.`); } const queryParamGroup = groupChange.currentValue; if (!queryParamGroup) { throw new Error(`You added the queryParamGroup directive, but haven't supplied a group to use.`); } this.groupService.setQueryParamGroup(queryParamGroup); } } } QueryParamGroupDirective.decorators = [ { type: Directive, args: [{ selector: '[queryParamGroup]', providers: [QueryParamGroupService], },] } ]; QueryParamGroupDirective.ctorParameters = () => [ { type: QueryParamGroupService } ]; QueryParamGroupDirective.propDecorators = { queryParamGroup: [{ type: Input, args: ['queryParamGroup',] }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcGFyYW0tZ3JvdXAuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL25ncXAvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvZGlyZWN0aXZlcy9xdWVyeS1wYXJhbS1ncm91cC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBRzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXJFOzs7Ozs7R0FNRztBQUtILE1BQU0sT0FBTyx3QkFBd0I7SUFRakMsZ0JBQWdCO0lBQ2hCLFlBQW9CLFlBQW9DO1FBQXBDLGlCQUFZLEdBQVosWUFBWSxDQUF3QjtRQVB4RDs7V0FFRztRQUVJLG9CQUFlLEdBQTJCLElBQUksQ0FBQztJQUl0RCxDQUFDO0lBRUQsY0FBYztJQUNQLFdBQVcsQ0FBQyxPQUFzQjtRQUNyQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMvQyxJQUFJLFdBQVcsRUFBRTtZQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO2dCQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLGdGQUFnRixDQUFDLENBQUM7YUFDckc7WUFFRCxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDO1lBQ2pELElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0VBQStFLENBQUMsQ0FBQzthQUNwRztZQUVELElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDekQ7SUFDTCxDQUFDOzs7WUEvQkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLFNBQVMsRUFBRSxDQUFDLHNCQUFzQixDQUFDO2FBQ3RDOzs7WUFaUSxzQkFBc0I7Ozs4QkFrQjFCLEtBQUssU0FBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFF1ZXJ5UGFyYW1OYW1lRGlyZWN0aXZlIH0gZnJvbSAnLi9xdWVyeS1wYXJhbS1uYW1lLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBRdWVyeVBhcmFtR3JvdXAgfSBmcm9tICcuLi9tb2RlbC9xdWVyeS1wYXJhbS1ncm91cCc7XG5pbXBvcnQgeyBRdWVyeVBhcmFtR3JvdXBTZXJ2aWNlIH0gZnJvbSAnLi9xdWVyeS1wYXJhbS1ncm91cC5zZXJ2aWNlJztcblxuLyoqXG4gKiBCaW5kcyBhIHtAbGluayBRdWVyeVBhcmFtR3JvdXB9IHRvIGEgRE9NIGVsZW1lbnQuXG4gKlxuICogVGhpcyBkaXJlY3RpdmUgYWNjZXB0cyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgUXVlcnlQYXJhbUdyb3VwfS4gQW55IGNoaWxkIHVzaW5nXG4gKiB7QGxpbmsgUXVlcnlQYXJhbU5hbWVEaXJlY3RpdmV9IHdpbGwgdGhlbiBiZSBtYXRjaGVkIGFnYWluc3QgdGhpcyBncm91cCwgYW5kIHRoZVxuICogc3luY2hyb25pemF0aW9uIHByb2Nlc3MgY2FuIHRha2UgcGxhY2UuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3F1ZXJ5UGFyYW1Hcm91cF0nLFxuICAgIHByb3ZpZGVyczogW1F1ZXJ5UGFyYW1Hcm91cFNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBRdWVyeVBhcmFtR3JvdXBEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHtAbGluayBRdWVyeVBhcmFtR3JvdXB9IHRvIGJpbmQuXG4gICAgICovXG4gICAgQElucHV0KCdxdWVyeVBhcmFtR3JvdXAnKVxuICAgIHB1YmxpYyBxdWVyeVBhcmFtR3JvdXA6IFF1ZXJ5UGFyYW1Hcm91cCB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZ3JvdXBTZXJ2aWNlOiBRdWVyeVBhcmFtR3JvdXBTZXJ2aWNlKSB7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBjb25zdCBncm91cENoYW5nZSA9IGNoYW5nZXNbJ3F1ZXJ5UGFyYW1Hcm91cCddO1xuICAgICAgICBpZiAoZ3JvdXBDaGFuZ2UpIHtcbiAgICAgICAgICAgIGlmICghZ3JvdXBDaGFuZ2UuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJpbmRpbmcgYSBkaWZmZXJlbnQgUXVlcnlQYXJhbUdyb3VwIGR1cmluZyBydW50aW1lIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtR3JvdXAgPSBncm91cENoYW5nZS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBpZiAoIXF1ZXJ5UGFyYW1Hcm91cCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IGFkZGVkIHRoZSBxdWVyeVBhcmFtR3JvdXAgZGlyZWN0aXZlLCBidXQgaGF2ZW4ndCBzdXBwbGllZCBhIGdyb3VwIHRvIHVzZS5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5ncm91cFNlcnZpY2Uuc2V0UXVlcnlQYXJhbUdyb3VwKHF1ZXJ5UGFyYW1Hcm91cCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn0iXX0=