File

src/app/@theme/layouts/sample/sample.layout.ts

Implements

OnDestroy

Metadata

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>
      <a href="/" class="btn btn-hero-success main-btn">
        <i class="ion ion-social-github"></i> <span>persis</span>
      </a>
    </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>

Index

Properties
Methods

Constructor

constructor(stateService: StateService, menuService: NbMenuService, themeService: NbThemeService, bpService: NbMediaBreakpointsService, sidebarService: NbSidebarService)
Parameters :
Name Type Optional
stateService StateService no
menuService NbMenuService no
themeService NbThemeService no
bpService NbMediaBreakpointsService no
sidebarService NbSidebarService no

Methods

ngOnDestroy
ngOnDestroy()
Returns : void

Properties

layout
layout: any
Type : any
Default value : {}
Protected layoutState$
layoutState$: Subscription
Type : Subscription
Protected menuClick$
menuClick$: Subscription
Type : Subscription
sidebar
sidebar: any
Type : any
Default value : {}
Protected sidebarState$
sidebarState$: Subscription
Type : Subscription
subMenu
subMenu: NbMenuItem[]
Type : NbMenuItem[]
Default value : [ { 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', }, ]
import { Component, OnDestroy } from '@angular/core';
import { delay, withLatestFrom } from 'rxjs/operators';
import { Subscription } from 'rxjs';
import {
  NbMediaBreakpoint,
  NbMediaBreakpointsService,
  NbMenuItem,
  NbMenuService,
  NbSidebarService,
  NbThemeService,
} from '@nebular/theme';

import { StateService } from '../../../@core/data/state.service';

// 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>
          <a href="/" class="btn btn-hero-success main-btn">
            <i class="ion ion-social-github"></i> <span>persis</span>
          </a>
        </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>
  `,
})
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 = {};

  protected layoutState$: Subscription;
  protected sidebarState$: Subscription;
  protected menuClick$: Subscription;

  constructor(protected stateService: StateService,
              protected menuService: NbMenuService,
              protected themeService: NbThemeService,
              protected bpService: NbMediaBreakpointsService,
              protected sidebarService: NbSidebarService) {
    this.layoutState$ = this.stateService.onLayoutState()
      .subscribe((layout: string) => this.layout = layout);

    this.sidebarState$ = this.stateService.onSidebarState()
      .subscribe((sidebar: string) => {
        this.sidebar = sidebar;
      });

    const isBp = this.bpService.getByName('is');
    this.menuClick$ = this.menuService.onItemSelect()
      .pipe(
        withLatestFrom(this.themeService.onMediaQueryChange()),
        delay(20),
      )
      .subscribe(([item, [bpFrom, bpTo]]: [any, [NbMediaBreakpoint, NbMediaBreakpoint]]) => {

        if (bpTo.width <= isBp.width) {
          this.sidebarService.collapse('menu-sidebar');
        }
      });
  }

  ngOnDestroy() {
    this.layoutState$.unsubscribe();
    this.sidebarState$.unsubscribe();
    this.menuClick$.unsubscribe();
  }
}
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""