diff --git a/docs/app/@theme/components/header/header.component.scss b/docs/app/@theme/components/header/header.component.scss
index 1a5d410c..e9cad406 100644
--- a/docs/app/@theme/components/header/header.component.scss
+++ b/docs/app/@theme/components/header/header.component.scss
@@ -267,6 +267,16 @@
flex-basis: auto;
}
+ ::ng-deep ngx-material-theme-link {
+ display: none;
+ }
+
+ @include media-breakpoint-up(is) {
+ ::ng-deep ngx-material-theme-link {
+ display: flex;
+ }
+ }
+
@include media-breakpoint-up(sm) {
::ng-deep nb-menu .menu-items li:first-child {
display: list-item;
diff --git a/docs/app/shared/components/material-theme-link/material-theme-link.component.html b/docs/app/shared/components/material-theme-link/material-theme-link.component.html
index 8e2562ba..3682f0ac 100644
--- a/docs/app/shared/components/material-theme-link/material-theme-link.component.html
+++ b/docs/app/shared/components/material-theme-link/material-theme-link.component.html
@@ -1,15 +1,16 @@
diff --git a/docs/app/shared/components/material-theme-link/material-theme-link.component.ts b/docs/app/shared/components/material-theme-link/material-theme-link.component.ts
index fd530449..a73339ab 100644
--- a/docs/app/shared/components/material-theme-link/material-theme-link.component.ts
+++ b/docs/app/shared/components/material-theme-link/material-theme-link.component.ts
@@ -4,29 +4,71 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*/
-import { Component, ViewChild, AfterViewInit, Input } from '@angular/core';
+import { Component, ViewChild, AfterViewInit, Input, OnDestroy } from '@angular/core';
import { coerceBooleanProperty } from '@angular/cdk/coercion';
-import { NbPopoverDirective } from '@nebular/theme';
+import { Subject, merge } from 'rxjs';
+import { map, take, takeUntil } from 'rxjs/operators';
+import { NbMediaBreakpointsService, NbMediaBreakpoint, NbPopoverDirective, NbThemeService } from '@nebular/theme';
@Component({
selector: 'ngx-material-theme-link',
templateUrl: './material-theme-link.component.html',
styleUrls: ['./material-theme-link.component.scss'],
})
-export class MaterialThemeLinkComponent implements AfterViewInit {
- public showPopover: boolean = false;
+export class MaterialThemeLinkComponent implements AfterViewInit, OnDestroy {
- @Input() public set withPopover(value: any) {
+ private destroy$ = new Subject();
+ private hidePopover$ = new Subject();
+
+ showPopover: boolean = false;
+
+ @Input()
+ set withPopover(value: any) {
this.showPopover = coerceBooleanProperty(value);
}
- @ViewChild(NbPopoverDirective, { static: true }) public popover: NbPopoverDirective;
+ @ViewChild(NbPopoverDirective) popover: NbPopoverDirective;
- public ngAfterViewInit(): void {
- this.showPopover && this.popover && this.popover.show();
+ constructor(
+ private breakpointService: NbMediaBreakpointsService,
+ private themeService: NbThemeService,
+ ) {}
+
+ ngAfterViewInit(): void {
+ if (!this.showPopover) {
+ return;
+ }
+
+ this.themeService.onMediaQueryChange()
+ .pipe(
+ map(([, currentBreakpoint]: NbMediaBreakpoint[]) => this.shouldShowPopover(currentBreakpoint)),
+ takeUntil(merge(this.destroy$, this.hidePopover$)),
+ )
+ .subscribe((showPopover: boolean) => {
+ if (showPopover) {
+ this.popover.show();
+ } else {
+ this.popover.hide();
+ }
+ });
+
+ this.hidePopover$
+ .pipe(
+ take(1),
+ takeUntil(this.destroy$),
+ )
+ .subscribe(() => this.popover.hide());
}
- public hidePopover(): void {
- this.popover && this.popover.hide();
+ ngOnDestroy() {
+ this.destroy$.next();
+ }
+
+ hidePopover(): void {
+ this.hidePopover$.next();
+ }
+
+ private shouldShowPopover(breakpoint: NbMediaBreakpoint): boolean {
+ return breakpoint.width >= this.breakpointService.getByName('is').width;
}
}