mirror of
https://github.com/akveo/ngx-admin.git
synced 2025-12-16 15:40:11 +01:00
feat(sidebar): hide on mobile when navigation is complete
This commit is contained in:
parent
5839bdd3cf
commit
d5db2d0614
6 changed files with 255 additions and 5 deletions
|
|
@ -1,6 +1,47 @@
|
||||||
@import '../../styles/themes';
|
@import '../../styles/themes';
|
||||||
|
@import '~bootstrap/scss/mixins/breakpoints';
|
||||||
|
@import '~@nebular/theme/styles/global/bootstrap/breakpoints';
|
||||||
|
|
||||||
@include nb-install-component() {
|
@include nb-install-component() {
|
||||||
|
nb-layout-column.small {
|
||||||
|
flex: 0.15 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
nb-sidebar.settings-sidebar {
|
||||||
|
$sidebar-width: 7.5rem;
|
||||||
|
|
||||||
|
transition: width 0.3s ease;
|
||||||
|
width: $sidebar-width;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
&.collapsed {
|
||||||
|
width: 0;
|
||||||
|
|
||||||
|
/deep/ .main-container {
|
||||||
|
width: 0;
|
||||||
|
|
||||||
|
.scrollable {
|
||||||
|
width: $sidebar-width;
|
||||||
|
padding: 1.25rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .main-container {
|
||||||
|
width: $sidebar-width;
|
||||||
|
background: nb-theme(color-bg);
|
||||||
|
transition: width 0.3s ease;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.scrollable {
|
||||||
|
width: $sidebar-width;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include nb-for-theme(cosmic) {
|
||||||
|
background: nb-theme(layout-bg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
nb-sidebar.menu-sidebar {
|
nb-sidebar.menu-sidebar {
|
||||||
|
|
||||||
|
|
@ -58,4 +99,32 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-down(xs) {
|
||||||
|
.main-content {
|
||||||
|
padding: 0.75rem !important;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-down(sm) {
|
||||||
|
|
||||||
|
nb-sidebar.menu-sidebar {
|
||||||
|
|
||||||
|
margin-top: 0;
|
||||||
|
|
||||||
|
/deep/ .main-container {
|
||||||
|
height: calc(#{nb-theme(sidebar-height)} - #{nb-theme(header-height)}) !important;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
|
||||||
|
.scrollable {
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-btn {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -106,4 +106,25 @@
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-down(sm) {
|
||||||
|
|
||||||
|
nb-sidebar.menu-sidebar {
|
||||||
|
|
||||||
|
margin-top: 0;
|
||||||
|
|
||||||
|
/deep/ .main-container {
|
||||||
|
height: calc(#{nb-theme(sidebar-height)} - #{nb-theme(header-height)}) !important;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
|
||||||
|
.scrollable {
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-btn {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,19 @@
|
||||||
import { Component, OnDestroy } from '@angular/core';
|
import { Component, OnDestroy } from '@angular/core';
|
||||||
import { NbMenuItem } from '@nebular/theme';
|
import {
|
||||||
import { Subscription } from 'rxjs/Subscription';
|
NbMediaBreakpoint,
|
||||||
|
NbMediaBreakpointsService,
|
||||||
|
NbMenuItem,
|
||||||
|
NbMenuService,
|
||||||
|
NbSidebarService,
|
||||||
|
NbThemeService,
|
||||||
|
} from '@nebular/theme';
|
||||||
|
|
||||||
import { StateService } from '../../../@core/data/state.service';
|
import { StateService } from '../../../@core/data/state.service';
|
||||||
|
|
||||||
|
import { Subscription } from 'rxjs/Subscription';
|
||||||
|
import 'rxjs/add/operator/withLatestFrom';
|
||||||
|
import 'rxjs/add/operator/delay';
|
||||||
|
|
||||||
// TODO: move layouts into the framework
|
// TODO: move layouts into the framework
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'ngx-sample-layout',
|
selector: 'ngx-sample-layout',
|
||||||
|
|
@ -100,8 +110,13 @@ export class SampleLayoutComponent implements OnDestroy {
|
||||||
|
|
||||||
protected layoutState$: Subscription;
|
protected layoutState$: Subscription;
|
||||||
protected sidebarState$: Subscription;
|
protected sidebarState$: Subscription;
|
||||||
|
protected menuClick$: Subscription;
|
||||||
|
|
||||||
constructor(protected stateService: StateService) {
|
constructor(protected stateService: StateService,
|
||||||
|
protected menuService: NbMenuService,
|
||||||
|
protected themeService: NbThemeService,
|
||||||
|
protected bpService: NbMediaBreakpointsService,
|
||||||
|
protected sidebarService: NbSidebarService) {
|
||||||
this.layoutState$ = this.stateService.onLayoutState()
|
this.layoutState$ = this.stateService.onLayoutState()
|
||||||
.subscribe((layout: string) => this.layout = layout);
|
.subscribe((layout: string) => this.layout = layout);
|
||||||
|
|
||||||
|
|
@ -109,10 +124,22 @@ export class SampleLayoutComponent implements OnDestroy {
|
||||||
.subscribe((sidebar: string) => {
|
.subscribe((sidebar: string) => {
|
||||||
this.sidebar = sidebar
|
this.sidebar = sidebar
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const isBp = this.bpService.getByName('is');
|
||||||
|
this.menuClick$ = this.menuService.onItemSelect()
|
||||||
|
.withLatestFrom(this.themeService.onMediaQueryChange())
|
||||||
|
.delay(20)
|
||||||
|
.subscribe(([item, [bpFrom, bpTo]]: [any, [NbMediaBreakpoint, NbMediaBreakpoint]]) => {
|
||||||
|
|
||||||
|
if (bpTo.width <= isBp.width) {
|
||||||
|
this.sidebarService.collapse('menu-sidebar');
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy() {
|
ngOnDestroy() {
|
||||||
this.layoutState$.unsubscribe();
|
this.layoutState$.unsubscribe();
|
||||||
this.sidebarState$.unsubscribe();
|
this.sidebarState$.unsubscribe();
|
||||||
|
this.menuClick$.unsubscribe();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,48 @@
|
||||||
@import '../../styles/themes';
|
@import '../../styles/themes';
|
||||||
|
@import '~bootstrap/scss/mixins/breakpoints';
|
||||||
|
@import '~@nebular/theme/styles/global/bootstrap/breakpoints';
|
||||||
|
|
||||||
@include nb-install-component() {
|
@include nb-install-component() {
|
||||||
|
|
||||||
nb-layout-column.small {
|
nb-layout-column.small {
|
||||||
flex: 0.15 !important;
|
flex: 0.15 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nb-sidebar.settings-sidebar {
|
||||||
|
$sidebar-width: 7.5rem;
|
||||||
|
|
||||||
|
transition: width 0.3s ease;
|
||||||
|
width: $sidebar-width;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
&.collapsed {
|
||||||
|
width: 0;
|
||||||
|
|
||||||
|
/deep/ .main-container {
|
||||||
|
width: 0;
|
||||||
|
|
||||||
|
.scrollable {
|
||||||
|
width: $sidebar-width;
|
||||||
|
padding: 1.25rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .main-container {
|
||||||
|
width: $sidebar-width;
|
||||||
|
background: nb-theme(color-bg);
|
||||||
|
transition: width 0.3s ease;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.scrollable {
|
||||||
|
width: $sidebar-width;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include nb-for-theme(cosmic) {
|
||||||
|
background: nb-theme(layout-bg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
nb-sidebar.menu-sidebar {
|
nb-sidebar.menu-sidebar {
|
||||||
|
|
||||||
margin-top: nb-theme(sidebar-header-gap);
|
margin-top: nb-theme(sidebar-header-gap);
|
||||||
|
|
@ -62,4 +99,32 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-down(xs) {
|
||||||
|
.main-content {
|
||||||
|
padding: 0.75rem !important;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-down(sm) {
|
||||||
|
|
||||||
|
nb-sidebar.menu-sidebar {
|
||||||
|
|
||||||
|
margin-top: 0;
|
||||||
|
|
||||||
|
/deep/ .main-container {
|
||||||
|
height: calc(#{nb-theme(sidebar-height)} - #{nb-theme(header-height)}) !important;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
|
||||||
|
.scrollable {
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-btn {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,48 @@
|
||||||
@import '../../styles/themes';
|
@import '../../styles/themes';
|
||||||
|
@import '~bootstrap/scss/mixins/breakpoints';
|
||||||
|
@import '~@nebular/theme/styles/global/bootstrap/breakpoints';
|
||||||
|
|
||||||
@include nb-install-component() {
|
@include nb-install-component() {
|
||||||
|
|
||||||
nb-layout-column.small {
|
nb-layout-column.small {
|
||||||
flex: 0.15 !important;
|
flex: 0.15 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nb-sidebar.settings-sidebar {
|
||||||
|
$sidebar-width: 7.5rem;
|
||||||
|
|
||||||
|
transition: width 0.3s ease;
|
||||||
|
width: $sidebar-width;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
&.collapsed {
|
||||||
|
width: 0;
|
||||||
|
|
||||||
|
/deep/ .main-container {
|
||||||
|
width: 0;
|
||||||
|
|
||||||
|
.scrollable {
|
||||||
|
width: $sidebar-width;
|
||||||
|
padding: 1.25rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .main-container {
|
||||||
|
width: $sidebar-width;
|
||||||
|
background: nb-theme(color-bg);
|
||||||
|
transition: width 0.3s ease;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.scrollable {
|
||||||
|
width: $sidebar-width;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include nb-for-theme(cosmic) {
|
||||||
|
background: nb-theme(layout-bg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
nb-sidebar.menu-sidebar {
|
nb-sidebar.menu-sidebar {
|
||||||
|
|
||||||
margin-top: nb-theme(sidebar-header-gap);
|
margin-top: nb-theme(sidebar-header-gap);
|
||||||
|
|
@ -62,4 +99,32 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-down(xs) {
|
||||||
|
.main-content {
|
||||||
|
padding: 0.75rem !important;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-down(sm) {
|
||||||
|
|
||||||
|
nb-sidebar.menu-sidebar {
|
||||||
|
|
||||||
|
margin-top: 0;
|
||||||
|
|
||||||
|
/deep/ .main-container {
|
||||||
|
height: calc(#{nb-theme(sidebar-height)} - #{nb-theme(header-height)}) !important;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
|
||||||
|
.scrollable {
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-btn {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,9 @@
|
||||||
],
|
],
|
||||||
"@nebular/*": [
|
"@nebular/*": [
|
||||||
"../node_modules/@nebular/*"
|
"../node_modules/@nebular/*"
|
||||||
|
],
|
||||||
|
"rxjs/*": [
|
||||||
|
"../node_modules/rxjs/*"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue