123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- import { Component, OnDestroy } from '@angular/core';
- import { delay, withLatestFrom, takeWhile } from 'rxjs/operators';
- import {
- NbMediaBreakpoint,
- NbMediaBreakpointsService,
- NbMenuItem,
- NbMenuService,
- NbSidebarService,
- NbThemeService,
- } from '@nebular/theme';
- import { StateService } from '../../../@core/utils';
- // TODO: move layouts into the framework
- @Component({
- selector: 'ngx-sample-layout',
- styleUrls: ['./sample.layout.scss'],
- template: `
- <nb-layout [center]="layout.id === 'center-column'" windowMode>
- <nb-layout-header fixed>
- <ngx-header [position]="sidebar.id === 'start' ? 'normal': 'inverse'"></ngx-header>
- </nb-layout-header>
- <nb-sidebar class="menu-sidebar"
- tag="menu-sidebar"
- responsive
- [end]="sidebar.id === 'end'">
- <nb-sidebar-header *ngIf="currentTheme !== 'corporate'">
-
- </nb-sidebar-header>
- <ng-content select="nb-menu"></ng-content>
- </nb-sidebar>
- <nb-layout-column class="main-content">
- <ng-content select="router-outlet"></ng-content>
- </nb-layout-column>
- <nb-layout-column start class="small" *ngIf="layout.id === 'two-column' || layout.id === 'three-column'">
- <nb-menu [items]="subMenu"></nb-menu>
- </nb-layout-column>
- <nb-layout-column class="small" *ngIf="layout.id === 'three-column'">
- <nb-menu [items]="subMenu"></nb-menu>
- </nb-layout-column>
- <nb-layout-footer fixed>
- <ngx-footer></ngx-footer>
- </nb-layout-footer>
- <nb-sidebar class="settings-sidebar"
- tag="settings-sidebar"
- state="collapsed"
- fixed
- [end]="sidebar.id !== 'end'">
- <ngx-theme-settings></ngx-theme-settings>
- </nb-sidebar>
- </nb-layout>
- <ngx-toggle-settings-button></ngx-toggle-settings-button>
- `,
- })
- export class SampleLayoutComponent implements OnDestroy {
- subMenu: NbMenuItem[] = [
- {
- title: 'PAGE LEVEL MENU',
- group: true,
- },
- {
- title: 'Buttons',
- icon: 'ion ion-android-radio-button-off',
- link: '/pages/ui-features/buttons',
- },
- {
- title: 'Grid',
- icon: 'ion ion-android-radio-button-off',
- link: '/pages/ui-features/grid',
- },
- {
- title: 'Icons',
- icon: 'ion ion-android-radio-button-off',
- link: '/pages/ui-features/icons',
- },
- {
- title: 'Modals',
- icon: 'ion ion-android-radio-button-off',
- link: '/pages/ui-features/modals',
- },
- {
- title: 'Typography',
- icon: 'ion ion-android-radio-button-off',
- link: '/pages/ui-features/typography',
- },
- {
- title: 'Animated Searches',
- icon: 'ion ion-android-radio-button-off',
- link: '/pages/ui-features/search-fields',
- },
- {
- title: 'Tabs',
- icon: 'ion ion-android-radio-button-off',
- link: '/pages/ui-features/tabs',
- },
- ];
- layout: any = {};
- sidebar: any = {};
- private alive = true;
- currentTheme: string;
- constructor(protected stateService: StateService,
- protected menuService: NbMenuService,
- protected themeService: NbThemeService,
- protected bpService: NbMediaBreakpointsService,
- protected sidebarService: NbSidebarService) {
- this.stateService.onLayoutState()
- .pipe(takeWhile(() => this.alive))
- .subscribe((layout: string) => this.layout = layout);
- this.stateService.onSidebarState()
- .pipe(takeWhile(() => this.alive))
- .subscribe((sidebar: string) => {
- this.sidebar = sidebar;
- });
- const isBp = this.bpService.getByName('is');
- this.menuService.onItemSelect()
- .pipe(
- takeWhile(() => this.alive),
- withLatestFrom(this.themeService.onMediaQueryChange()),
- delay(20),
- )
- .subscribe(([item, [bpFrom, bpTo]]: [any, [NbMediaBreakpoint, NbMediaBreakpoint]]) => {
- if (bpTo.width <= isBp.width) {
- this.sidebarService.collapse('menu-sidebar');
- }
- });
- this.themeService.getJsTheme()
- .pipe(takeWhile(() => this.alive))
- .subscribe(theme => {
- this.currentTheme = theme.name;
- });
- }
- ngOnDestroy() {
- this.alive = false;
- }
- }
|