@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
116 lines • 13.5 kB
JavaScript
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=