mirror of
https://github.com/richard-loafle/fuse-angular.git
synced 2026-01-08 07:07:08 +00:00
(layouts) Common components of layouts now requests their data directly from their service rather than getting it from route data (core) New navigation service to request and store the navigation data
100 lines
2.7 KiB
TypeScript
100 lines
2.7 KiB
TypeScript
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';
|
|
import { Router } from '@angular/router';
|
|
import { BooleanInput } from '@angular/cdk/coercion';
|
|
import { Subject } from 'rxjs';
|
|
import { takeUntil } from 'rxjs/operators';
|
|
import { User } from 'app/core/user/user.types';
|
|
import { UserService } from 'app/core/user/user.service';
|
|
|
|
@Component({
|
|
selector : 'user',
|
|
templateUrl : './user.component.html',
|
|
encapsulation : ViewEncapsulation.None,
|
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
exportAs : 'user'
|
|
})
|
|
export class UserComponent implements OnInit, OnDestroy
|
|
{
|
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
static ngAcceptInputType_showAvatar: BooleanInput;
|
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
|
|
@Input() showAvatar: boolean = true;
|
|
user: User;
|
|
|
|
private _unsubscribeAll: Subject<any> = new Subject<any>();
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
constructor(
|
|
private _changeDetectorRef: ChangeDetectorRef,
|
|
private _router: Router,
|
|
private _userService: UserService
|
|
)
|
|
{
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------------------------------
|
|
// @ Lifecycle hooks
|
|
// -----------------------------------------------------------------------------------------------------
|
|
|
|
/**
|
|
* On init
|
|
*/
|
|
ngOnInit(): void
|
|
{
|
|
// Subscribe to user changes
|
|
this._userService.user$
|
|
.pipe(takeUntil(this._unsubscribeAll))
|
|
.subscribe((user: User) => {
|
|
this.user = user;
|
|
|
|
// Mark for check
|
|
this._changeDetectorRef.markForCheck();
|
|
});
|
|
}
|
|
|
|
/**
|
|
* On destroy
|
|
*/
|
|
ngOnDestroy(): void
|
|
{
|
|
// Unsubscribe from all subscriptions
|
|
this._unsubscribeAll.next();
|
|
this._unsubscribeAll.complete();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------------------------------
|
|
// @ Public methods
|
|
// -----------------------------------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Update the user status
|
|
*
|
|
* @param status
|
|
*/
|
|
updateUserStatus(status: string): void
|
|
{
|
|
// Return if user is not available
|
|
if ( !this.user )
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Update the user
|
|
this._userService.update({
|
|
...this.user,
|
|
status
|
|
}).subscribe();
|
|
}
|
|
|
|
/**
|
|
* Sign out
|
|
*/
|
|
signOut(): void
|
|
{
|
|
this._router.navigate(['/sign-out']);
|
|
}
|
|
}
|