UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

116 lines 13.5 kB
import { ChangeDetectorRef, Directive, EventEmitter, Host, Input, Optional, Output } from '@angular/core'; import { NavigationEnd, Router, RouterLink, RouterLinkWithHref } from '@angular/router'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; /** * Directive to provide notification or state changes for angulars @see RouterLink directive. * The design of this directive is identical to @see RouterLinkActive * and as such supports the same @see RouterLinkActiveOptions are supported. */ export class SmeRouterLinkDirective { /** * Initializes a new instance of the @see PivotComponent class. * @param link The router link that's defined for the element or child elements * @param linkWithHref The router link with 'a' tags that's defined for the element or child elements * @param router The angular router service */ constructor(link, linkWithHref, router, changeDetectorRef) { this.link = link; this.linkWithHref = linkWithHref; this.router = router; this.changeDetectorRef = changeDetectorRef; /** * The output for when the route is activated */ this.smeRouterLinkActivated = new EventEmitter(); /** * The output for when the route is deactivated */ this.smeRouterLinkDeactivated = new EventEmitter(); /** * Use the same input options as angulars @see RouterLinkActive Directive */ this.routerLinkActiveOptions = { exact: false }; /** * Placeholder for the current activation state */ this.isActive = false; this.subscriptions = []; this.subscriptions.push(this.router.events.subscribe(s => { if (s instanceof NavigationEnd) { this.updateIsActive(); } })); } /** * Angulars AfterContentInit life cycle event */ ngAfterContentInit() { this.updateIsActive(); } /** * Angulars OnChanges life cycle event */ ngDoCheck() { this.updateIsActive(); } ngOnDestroy() { this.subscriptions.forEach(sub => sub.unsubscribe()); } /** * Updates the isActive state and fires appropriate events if that state has changed. */ updateIsActive() { if ((!this.link && !this.linkWithHref) || !this.router.navigated) { return; } const hasActiveLinks = this.hasActiveLinks(); if (this.isActive !== hasActiveLinks) { this.isActive = hasActiveLinks; if (this.isActive) { this.smeRouterLinkActivated.next(); } else { this.smeRouterLinkDeactivated.next(); } this.changeDetectorRef.detectChanges(); } } /** * Indicates if a given link is active * @param link the link to check */ isLinkActive(link) { return this.router.isActive(link.urlTree, this.routerLinkActiveOptions.exact); } /** * Indicates that at leased one link is active */ hasActiveLinks() { return (this.link && this.isLinkActive(this.link)) || (this.linkWithHref && this.isLinkActive(this.linkWithHref)); } } /** @nocollapse */ SmeRouterLinkDirective.ɵfac = function SmeRouterLinkDirective_Factory(t) { return new (t || SmeRouterLinkDirective)(i0.ɵɵdirectiveInject(i1.RouterLink, 9), i0.ɵɵdirectiveInject(i1.RouterLinkWithHref, 9), i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; /** @nocollapse */ SmeRouterLinkDirective.ɵdir = /** @pureOrBreakMyCode */ i0.ɵɵdefineDirective({ type: SmeRouterLinkDirective, selectors: [["", "routerLink", "", "smeRouterLinkActivated", ""], ["", "routerLink", "", "smeRouterLinkDeactivated", ""]], inputs: { routerLinkActiveOptions: "routerLinkActiveOptions" }, outputs: { smeRouterLinkActivated: "smeRouterLinkActivated", smeRouterLinkDeactivated: "smeRouterLinkDeactivated" } }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SmeRouterLinkDirective, [{ type: Directive, args: [{ selector: '[routerLink][smeRouterLinkActivated],[routerLink][smeRouterLinkDeactivated]' }] }], function () { return [{ type: i1.RouterLink, decorators: [{ type: Optional }, { type: Host }] }, { type: i1.RouterLinkWithHref, decorators: [{ type: Optional }, { type: Host }] }, { type: i1.Router }, { type: i0.ChangeDetectorRef }]; }, { smeRouterLinkActivated: [{ type: Output }], smeRouterLinkDeactivated: [{ type: Output }], routerLinkActiveOptions: [{ type: Input }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLWxpbmsuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvZGlyZWN0aXZlcy9yb3V0ZXIvcm91dGVyLWxpbmsuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixJQUFJLEVBQ0osS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUd4Rjs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLHNCQUFzQjtJQXlCL0I7Ozs7O09BS0c7SUFDSCxZQUMrQixJQUFnQixFQUNoQixZQUFnQyxFQUNuRCxNQUFjLEVBQ2QsaUJBQW9DO1FBSGpCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBQ25ELFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBbENoRDs7V0FFRztRQUVJLDJCQUFzQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFekQ7O1dBRUc7UUFFSSw2QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRTNEOztXQUVHO1FBRUksNEJBQXVCLEdBQXVCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBRXRFOztXQUVHO1FBQ0ssYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFldkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM3QixJQUFJLENBQUMsWUFBWSxhQUFhLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN6QjtRQUNMLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSSxrQkFBa0I7UUFDckIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVM7UUFDWixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7T0FFRztJQUNLLGNBQWM7UUFDbEIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQzlELE9BQU87U0FDVjtRQUVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM3QyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssY0FBYyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO1lBQy9CLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDZixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDdEM7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3hDO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLFlBQVksQ0FBQyxJQUFxQztRQUN0RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRDs7T0FFRztJQUNLLGNBQWM7UUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQzs7K0dBbkdRLHNCQUFzQjt3R0FBdEIsc0JBQXNCO3VGQUF0QixzQkFBc0I7Y0FIbEMsU0FBUztlQUFDO2dCQUNQLFFBQVEsRUFBRSw2RUFBNkU7YUFDMUY7O3NCQWlDUSxRQUFROztzQkFBSSxJQUFJOztzQkFDaEIsUUFBUTs7c0JBQUksSUFBSTs2RUE1QmQsc0JBQXNCO2tCQUQ1QixNQUFNO1lBT0Esd0JBQXdCO2tCQUQ5QixNQUFNO1lBT0EsdUJBQXVCO2tCQUQ3QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyQ29udGVudEluaXQsXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIERpcmVjdGl2ZSxcclxuICAgIERvQ2hlY2ssXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBIb3N0LFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPcHRpb25hbCxcclxuICAgIE91dHB1dFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIsIFJvdXRlckxpbmssIFJvdXRlckxpbmtXaXRoSHJlZiB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuLyoqXHJcbiAqIERpcmVjdGl2ZSB0byBwcm92aWRlIG5vdGlmaWNhdGlvbiBvciBzdGF0ZSBjaGFuZ2VzIGZvciBhbmd1bGFycyBAc2VlIFJvdXRlckxpbmsgZGlyZWN0aXZlLlxyXG4gKiBUaGUgZGVzaWduIG9mIHRoaXMgZGlyZWN0aXZlIGlzIGlkZW50aWNhbCB0byBAc2VlIFJvdXRlckxpbmtBY3RpdmVcclxuICogYW5kIGFzIHN1Y2ggc3VwcG9ydHMgdGhlIHNhbWUgQHNlZSBSb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucyBhcmUgc3VwcG9ydGVkLlxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tyb3V0ZXJMaW5rXVtzbWVSb3V0ZXJMaW5rQWN0aXZhdGVkXSxbcm91dGVyTGlua11bc21lUm91dGVyTGlua0RlYWN0aXZhdGVkXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtZVJvdXRlckxpbmtEaXJlY3RpdmUgaW1wbGVtZW50cyBEb0NoZWNrLCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgb3V0cHV0IGZvciB3aGVuIHRoZSByb3V0ZSBpcyBhY3RpdmF0ZWRcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgc21lUm91dGVyTGlua0FjdGl2YXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBvdXRwdXQgZm9yIHdoZW4gdGhlIHJvdXRlIGlzIGRlYWN0aXZhdGVkXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHNtZVJvdXRlckxpbmtEZWFjdGl2YXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZSB0aGUgc2FtZSBpbnB1dCBvcHRpb25zIGFzIGFuZ3VsYXJzIEBzZWUgUm91dGVyTGlua0FjdGl2ZSBEaXJlY3RpdmVcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyByb3V0ZXJMaW5rQWN0aXZlT3B0aW9uczogeyBleGFjdDogYm9vbGVhbiB9ID0geyBleGFjdDogZmFsc2UgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBsYWNlaG9sZGVyIGZvciB0aGUgY3VycmVudCBhY3RpdmF0aW9uIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaXNBY3RpdmUgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBAc2VlIFBpdm90Q29tcG9uZW50IGNsYXNzLlxyXG4gICAgICogQHBhcmFtICBsaW5rIFRoZSByb3V0ZXIgbGluayB0aGF0J3MgZGVmaW5lZCBmb3IgdGhlIGVsZW1lbnQgb3IgY2hpbGQgZWxlbWVudHNcclxuICAgICAqIEBwYXJhbSAgbGlua1dpdGhIcmVmIFRoZSByb3V0ZXIgbGluayB3aXRoICdhJyB0YWdzIHRoYXQncyBkZWZpbmVkIGZvciB0aGUgZWxlbWVudCBvciBjaGlsZCBlbGVtZW50c1xyXG4gICAgICogQHBhcmFtICByb3V0ZXIgVGhlIGFuZ3VsYXIgcm91dGVyIHNlcnZpY2VcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgQEhvc3QoKSBwdWJsaWMgbGluazogUm91dGVyTGluayxcclxuICAgICAgICBAT3B0aW9uYWwoKSBASG9zdCgpIHB1YmxpYyBsaW5rV2l0aEhyZWY6IFJvdXRlckxpbmtXaXRoSHJlZixcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgICApIHtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUocyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocyBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUlzQWN0aXZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuZ3VsYXJzIEFmdGVyQ29udGVudEluaXQgbGlmZSBjeWNsZSBldmVudFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXBkYXRlSXNBY3RpdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuZ3VsYXJzIE9uQ2hhbmdlcyBsaWZlIGN5Y2xlIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVJc0FjdGl2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWIgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgaXNBY3RpdmUgc3RhdGUgYW5kIGZpcmVzIGFwcHJvcHJpYXRlIGV2ZW50cyBpZiB0aGF0IHN0YXRlIGhhcyBjaGFuZ2VkLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHVwZGF0ZUlzQWN0aXZlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICgoIXRoaXMubGluayAmJiAhdGhpcy5saW5rV2l0aEhyZWYpIHx8ICF0aGlzLnJvdXRlci5uYXZpZ2F0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaGFzQWN0aXZlTGlua3MgPSB0aGlzLmhhc0FjdGl2ZUxpbmtzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUgIT09IGhhc0FjdGl2ZUxpbmtzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNBY3RpdmUgPSBoYXNBY3RpdmVMaW5rcztcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc21lUm91dGVyTGlua0FjdGl2YXRlZC5uZXh0KCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNtZVJvdXRlckxpbmtEZWFjdGl2YXRlZC5uZXh0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIGEgZ2l2ZW4gbGluayBpcyBhY3RpdmVcclxuICAgICAqIEBwYXJhbSBsaW5rIHRoZSBsaW5rIHRvIGNoZWNrXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaXNMaW5rQWN0aXZlKGxpbms6IFJvdXRlckxpbmsgfCBSb3V0ZXJMaW5rV2l0aEhyZWYpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZXIuaXNBY3RpdmUobGluay51cmxUcmVlLCB0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zLmV4YWN0KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGF0IGF0IGxlYXNlZCBvbmUgbGluayBpcyBhY3RpdmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBoYXNBY3RpdmVMaW5rcygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMubGluayAmJiB0aGlzLmlzTGlua0FjdGl2ZSh0aGlzLmxpbmspKSB8fFxyXG4gICAgICAgICAgICAodGhpcy5saW5rV2l0aEhyZWYgJiYgdGhpcy5pc0xpbmtBY3RpdmUodGhpcy5saW5rV2l0aEhyZWYpKTtcclxuICAgIH1cclxufVxyXG4iXX0=