mirror of
				https://github.com/richard-loafle/fuse-angular.git
				synced 2025-10-31 15:33:33 +00:00 
			
		
		
		
	Improved the FusePerfectScrollbar directive, not directives can be controlled individually by adding a boolean value to them
This commit is contained in:
		
							parent
							
								
									27197a55dc
								
							
						
					
					
						commit
						02f305be1f
					
				| @ -1,4 +1,4 @@ | |||||||
| import { AfterViewInit, Directive, ElementRef, HostListener, OnDestroy, OnInit } from '@angular/core'; | import { AfterViewInit, Directive, ElementRef, HostListener, Input, OnDestroy } from '@angular/core'; | ||||||
| import { Platform } from '@angular/cdk/platform'; | import { Platform } from '@angular/cdk/platform'; | ||||||
| import { Subject } from 'rxjs'; | import { Subject } from 'rxjs'; | ||||||
| import { takeUntil } from 'rxjs/operators'; | import { takeUntil } from 'rxjs/operators'; | ||||||
| @ -10,14 +10,14 @@ import { FuseConfigService } from '@fuse/services/config.service'; | |||||||
| @Directive({ | @Directive({ | ||||||
|     selector: '[fusePerfectScrollbar]' |     selector: '[fusePerfectScrollbar]' | ||||||
| }) | }) | ||||||
| export class FusePerfectScrollbarDirective implements OnInit, AfterViewInit, OnDestroy | export class FusePerfectScrollbarDirective implements AfterViewInit, OnDestroy | ||||||
| { | { | ||||||
|     isDisableCustomScrollbars = false; |     isInitialized: boolean; | ||||||
|     isMobile = false; |     isMobile: boolean; | ||||||
|     isInitialized = true; |  | ||||||
|     ps: PerfectScrollbar; |     ps: PerfectScrollbar; | ||||||
| 
 | 
 | ||||||
|     // Private
 |     // Private
 | ||||||
|  |     private _enabled: boolean | ''; | ||||||
|     private _unsubscribeAll: Subject<any>; |     private _unsubscribeAll: Subject<any>; | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
| @ -33,66 +33,150 @@ export class FusePerfectScrollbarDirective implements OnInit, AfterViewInit, OnD | |||||||
|         private _platform: Platform |         private _platform: Platform | ||||||
|     ) |     ) | ||||||
|     { |     { | ||||||
|  |         // Set the defaults
 | ||||||
|  |         this.isInitialized = false; | ||||||
|  |         this.isMobile = false; | ||||||
|  | 
 | ||||||
|         // Set the private defaults
 |         // Set the private defaults
 | ||||||
|  |         this._enabled = false; | ||||||
|         this._unsubscribeAll = new Subject(); |         this._unsubscribeAll = new Subject(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     // -----------------------------------------------------------------------------------------------------
 | ||||||
|  |     // @ Accessors
 | ||||||
|  |     // -----------------------------------------------------------------------------------------------------
 | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Is enabled | ||||||
|  |      * | ||||||
|  |      * @param {boolean | ""} value | ||||||
|  |      */ | ||||||
|  |     @Input('fusePerfectScrollbar') | ||||||
|  |     set enabled(value: boolean | '') | ||||||
|  |     { | ||||||
|  |         // If nothing is provided with the directive (empty string),
 | ||||||
|  |         // we will take that as a true
 | ||||||
|  |         if ( value === '' ) | ||||||
|  |         { | ||||||
|  |             value = true; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // Return, if both values are the same
 | ||||||
|  |         if ( this.enabled === value ) | ||||||
|  |         { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // Store the value
 | ||||||
|  |         this._enabled = value; | ||||||
|  | 
 | ||||||
|  |         // If enabled...
 | ||||||
|  |         if ( this.enabled ) | ||||||
|  |         { | ||||||
|  |             // Init the directive
 | ||||||
|  |             this._init(); | ||||||
|  |         } | ||||||
|  |         else | ||||||
|  |         { | ||||||
|  |             // Otherwise destroy it
 | ||||||
|  |             this._destroy(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     get enabled(): boolean | '' | ||||||
|  |     { | ||||||
|  |         return this._enabled; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     // -----------------------------------------------------------------------------------------------------
 |     // -----------------------------------------------------------------------------------------------------
 | ||||||
|     // @ Lifecycle hooks
 |     // @ Lifecycle hooks
 | ||||||
|     // -----------------------------------------------------------------------------------------------------
 |     // -----------------------------------------------------------------------------------------------------
 | ||||||
| 
 | 
 | ||||||
|     /** |  | ||||||
|      * On init |  | ||||||
|      */ |  | ||||||
|     ngOnInit(): void |  | ||||||
|     { |  | ||||||
|         this._fuseConfigService.config |  | ||||||
|             .pipe(takeUntil(this._unsubscribeAll)) |  | ||||||
|             .subscribe( |  | ||||||
|                 (settings) => { |  | ||||||
|                     this.isDisableCustomScrollbars = !settings.customScrollbars; |  | ||||||
|                 } |  | ||||||
|             ); |  | ||||||
| 
 |  | ||||||
|         if ( this._platform.ANDROID || this._platform.IOS ) |  | ||||||
|         { |  | ||||||
|             this.isMobile = true; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |     /** | ||||||
|      * After view init |      * After view init | ||||||
|      */ |      */ | ||||||
|     ngAfterViewInit(): void |     ngAfterViewInit(): void | ||||||
|     { |     { | ||||||
|         if ( this.isMobile || this.isDisableCustomScrollbars ) |         // Check if scrollbars enabled or not from the main config
 | ||||||
|         { |         this._fuseConfigService.config | ||||||
|             this.isInitialized = false; |             .pipe(takeUntil(this._unsubscribeAll)) | ||||||
|             return; |             .subscribe( | ||||||
|         } |                 (settings) => { | ||||||
|  |                     this.enabled = settings.customScrollbars; | ||||||
|  |                 } | ||||||
|  |             ); | ||||||
| 
 | 
 | ||||||
|         // Initialize the perfect-scrollbar
 |         // this._init();
 | ||||||
|         this.ps = new PerfectScrollbar(this.elementRef.nativeElement, { |  | ||||||
|             wheelPropagation: true |  | ||||||
|         }); |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * On destroy |      * On destroy | ||||||
|      */ |      */ | ||||||
|     ngOnDestroy(): void |     ngOnDestroy(): void | ||||||
|  |     { | ||||||
|  |         this._destroy(); | ||||||
|  | 
 | ||||||
|  |         // Unsubscribe from all subscriptions
 | ||||||
|  |         this._unsubscribeAll.next(); | ||||||
|  |         this._unsubscribeAll.complete(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // -----------------------------------------------------------------------------------------------------
 | ||||||
|  |     // @ Private methods
 | ||||||
|  |     // -----------------------------------------------------------------------------------------------------
 | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Initialize | ||||||
|  |      * | ||||||
|  |      * @private | ||||||
|  |      */ | ||||||
|  |     _init(): void | ||||||
|  |     { | ||||||
|  |         // Return, if already initialized
 | ||||||
|  |         if ( this.isInitialized ) | ||||||
|  |         { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // Check if is mobile
 | ||||||
|  |         if ( this._platform.ANDROID || this._platform.IOS ) | ||||||
|  |         { | ||||||
|  |             this.isMobile = true; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // Return if it's mobile
 | ||||||
|  |         if ( this.isMobile ) | ||||||
|  |         { | ||||||
|  |             // Return...
 | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // Initialize the perfect-scrollbar
 | ||||||
|  |         this.isInitialized = true; | ||||||
|  | 
 | ||||||
|  |         this.ps = new PerfectScrollbar(this.elementRef.nativeElement, { | ||||||
|  |             wheelPropagation: true | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Destroy | ||||||
|  |      * | ||||||
|  |      * @private | ||||||
|  |      */ | ||||||
|  |     _destroy(): void | ||||||
|     { |     { | ||||||
|         if ( !this.isInitialized || !this.ps ) |         if ( !this.isInitialized || !this.ps ) | ||||||
|         { |         { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         // Unsubscribe from all subscriptions
 |  | ||||||
|         this._unsubscribeAll.next(); |  | ||||||
|         this._unsubscribeAll.complete(); |  | ||||||
| 
 |  | ||||||
|         // Destroy the perfect-scrollbar
 |         // Destroy the perfect-scrollbar
 | ||||||
|         this.ps.destroy(); |         this.ps.destroy(); | ||||||
|  | 
 | ||||||
|  |         // Clean up
 | ||||||
|  |         this.ps = null; | ||||||
|  |         this.isInitialized = false; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // -----------------------------------------------------------------------------------------------------
 |     // -----------------------------------------------------------------------------------------------------
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user