(Sidebar) Fixed the folded issue

This commit is contained in:
Sercan Yemen 2018-06-17 14:24:10 +03:00
parent 29f8ddda9e
commit 147525d16a

View File

@ -2,11 +2,11 @@ import { ChangeDetectorRef, Component, ElementRef, HostBinding, HostListener, In
import { animate, AnimationBuilder, AnimationPlayer, style } from '@angular/animations'; import { animate, AnimationBuilder, AnimationPlayer, style } from '@angular/animations';
import { ObservableMedia } from '@angular/flex-layout'; import { ObservableMedia } from '@angular/flex-layout';
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/internal/operators';
import { FuseSidebarService } from './sidebar.service'; import { FuseSidebarService } from './sidebar.service';
import { FuseMatchMediaService } from '@fuse/services/match-media.service'; import { FuseMatchMediaService } from '@fuse/services/match-media.service';
import { FuseConfigService } from '@fuse/services/config.service'; import { FuseConfigService } from '@fuse/services/config.service';
import { takeUntil } from 'rxjs/internal/operators';
@Component({ @Component({
selector : 'fuse-sidebar', selector : 'fuse-sidebar',
@ -20,6 +20,10 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
@Input() @Input()
name: string; name: string;
// Key
@Input()
key: string;
// Position // Position
@Input() @Input()
position: 'left' | 'right'; position: 'left' | 'right';
@ -48,6 +52,7 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
private _folded: boolean; private _folded: boolean;
private _fuseConfig: any; private _fuseConfig: any;
private _wasActive: boolean; private _wasActive: boolean;
private _wasFolded: boolean;
private _backdrop: HTMLElement | null = null; private _backdrop: HTMLElement | null = null;
private _player: AnimationPlayer; private _player: AnimationPlayer;
private _unsubscribeAll: Subject<any>; private _unsubscribeAll: Subject<any>;
@ -79,13 +84,14 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
) )
{ {
// Set the defaults // Set the defaults
this.folded = false;
this.opened = false; this.opened = false;
// this.folded = false;
this.position = 'left'; this.position = 'left';
this.invisibleOverlay = false; this.invisibleOverlay = false;
// Set the private defaults // Set the private defaults
this._animationsEnabled = false; this._animationsEnabled = false;
this._folded = false;
this._unsubscribeAll = new Subject(); this._unsubscribeAll = new Subject();
} }
@ -94,19 +100,18 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
// ----------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------
// Folded // Folded
@HostBinding('class.folded')
@Input() @Input()
set folded(value: boolean) set folded(value: boolean)
{ {
// Only work if the sidebar is not closed // Set the folded
this._folded = value;
// Return if the sidebar is closed
if ( !this.opened ) if ( !this.opened )
{ {
return; return;
} }
// Set the folded
this._folded = value;
// Programmatically add/remove margin to the element // Programmatically add/remove margin to the element
// that comes after or before based on the position // that comes after or before based on the position
let sibling, let sibling,
@ -135,14 +140,22 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
// If folded... // If folded...
if ( value ) if ( value )
{ {
// Set the style // Fold the sidebar
this.fold();
// Set the style and class
this._renderer.setStyle(sibling, styleRule, styleValue, RendererStyleFlags2.Important + RendererStyleFlags2.DashCase); this._renderer.setStyle(sibling, styleRule, styleValue, RendererStyleFlags2.Important + RendererStyleFlags2.DashCase);
this._renderer.addClass(this._elementRef.nativeElement, 'folded');
} }
// If unfolded... // If unfolded...
else else
{ {
// Remove the style // Unfold the sidebar
this.unfold();
// Remove the style and class
this._renderer.removeStyle(sibling, styleRule); this._renderer.removeStyle(sibling, styleRule);
this._renderer.removeClass(this._elementRef.nativeElement, 'folded');
} }
} }
@ -178,6 +191,9 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
// Setup lockedOpen // Setup lockedOpen
this._setupLockedOpen(); this._setupLockedOpen();
// Setup folded
this._setupFolded();
} }
/** /**
@ -253,6 +269,9 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
// Set the wasActive for the first time // Set the wasActive for the first time
this._wasActive = false; this._wasActive = false;
// Set the wasFolded
this._wasFolded = this.folded;
// Show the sidebar // Show the sidebar
this._showSidebar(); this._showSidebar();
@ -282,11 +301,17 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
// Force the the opened status to true // Force the the opened status to true
this.opened = true; this.opened = true;
// Read the folded setting from the config // If the sidebar was folded, forcefully fold it again
// and fold the sidebar if it's true if ( this._wasFolded )
if ( this._fuseConfig.layout.navbar.folded )
{ {
this.fold(); // Enable the animations
this._enableAnimations();
// Fold
this.folded = true;
// Mark for check
this._changeDetectorRef.markForCheck();
} }
// Hide the backdrop if any exists // Hide the backdrop if any exists
@ -313,6 +338,58 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
}); });
} }
/**
* Setup the initial folded status
*
* @private
*/
private _setupFolded(): void
{
// Return, if sidebar is not folded
if ( !this.folded )
{
return;
}
// Return if the sidebar is closed
if ( !this.opened )
{
return;
}
// Programmatically add/remove margin to the element
// that comes after or before based on the position
let sibling,
styleRule;
const styleValue = '64px';
// Get the sibling and set the style rule
if ( this.position === 'left' )
{
sibling = this._elementRef.nativeElement.nextElementSibling;
styleRule = 'margin-left';
}
else
{
sibling = this._elementRef.nativeElement.previousElementSibling;
styleRule = 'margin-right';
}
// If there is no sibling, return...
if ( !sibling )
{
return;
}
// Fold the sidebar
this.fold();
// Set the style and class
this._renderer.setStyle(sibling, styleRule, styleValue, RendererStyleFlags2.Important + RendererStyleFlags2.DashCase);
this._renderer.addClass(this._elementRef.nativeElement, 'folded');
}
/** /**
* Show the backdrop * Show the backdrop
* *