blob: 44dd0ba7c6f4459aacb3d7b183d1cc0ec78ecf19 [file] [log] [blame]
import { ChangeDetectionStrategy, Component } from '@angular/core';
import { Router } from '@angular/router';
import { SettingsService, User } from '@delon/theme';
import { LocalStorageService } from '../../../service/local-storage.service';
import { CONSTANTS } from '../../../shared/constants';
@Component({
selector: 'header-user',
template: `
<div class="alain-default__nav-item d-flex align-items-center px-sm" nz-dropdown nzPlacement="bottomRight" [nzDropdownMenu]="userMenu">
<nz-avatar [nzSrc]="user.avatar" nzSize="small" class="mr-sm"></nz-avatar>
{{ user.name }}
</div>
<nz-dropdown-menu #userMenu="nzDropdownMenu">
<div nz-menu class="width-sm">
<div nz-menu-item routerLink="/setting/settings/config">
<i nz-icon nzType="tool" class="mr-sm"></i>
{{ 'menu.extras.setting' | i18n }}
</div>
<div nz-menu-item (click)="logout()">
<i nz-icon nzType="logout" class="mr-sm"></i>
{{ 'menu.account.logout' | i18n }}
</div>
<div nz-menu-item (click)="showAboutModal()">
<i nz-icon nzType="environment" class="mr-sm"></i>
{{ 'menu.extras.about' | i18n }}
</div>
</div>
</nz-dropdown-menu>
<nz-modal
[(nzVisible)]="isAboutModalVisible"
[nzTitle]=""
[nzFooter]="null"
(nzOnCancel)="disAboutModal()"
nzClosable="false"
nzWidth="48%"
>
<div *nzModalContent class="-inner-content">
<div style="text-align: center">
<img style="height: 33px" src="./assets/brand.svg" alt="" />
</div>
<div style="margin-top: 10px; font-weight: bolder; font-size: small;">
{{ 'about.title' | i18n }}
</div>
<div style="margin-top: 10px; font-weight: normal; font-size: small;">
<nz-badge nzStatus="processing" [nzText]="'about.point.1' | i18n"></nz-badge>
<br />
<nz-badge nzStatus="processing" [nzText]="'about.point.2' | i18n"></nz-badge>
<br />
<nz-badge nzStatus="processing" [nzText]="'about.point.3' | i18n"></nz-badge>
<br />
<nz-badge nzStatus="processing" [nzText]="'about.point.4' | i18n"></nz-badge>
<br />
<nz-badge nzStatus="processing" [nzText]="'about.point.5' | i18n"></nz-badge>
<br />
<nz-badge nzStatus="processing" [nzText]="'about.point.6' | i18n"></nz-badge>
<br />
</div>
<div style="margin-top: 10px; font-weight: normal; font-size: small;">
{{ 'about.help' | i18n }}
</div>
<div style="margin-top: 10px; font-weight: bolder; font-size: medium;">
<a [href]="'https://github.com/apache/hertzbeat/releases/tag/' + version" target="_blank">
Apache HertzBeat (incubating) {{ version }}
</a>
</div>
<div style="margin-top: 10px; font-weight: normal; font-size: small;">
Copyright &copy; {{ currentYear }}
<nz-divider nzType="vertical"></nz-divider>
<a href="https://hertzbeat.apache.org" target="_blank">Apache HertzBeat (incubating)</a>
</div>
<label
style="margin-top: 16px;color:gray;font-size:13px"
(ngModelChange)="onNotShowAgainChange($event)"
nz-checkbox
[(ngModel)]="notShowAgain"
>{{ 'about.not-show-next-login' | i18n }}
</label>
<nz-divider></nz-divider>
<div style="margin-top: 10px; font-weight: bolder">
<span nz-icon nzType="github"></span>
<a href="//github.com/apache/hertzbeat" target="_blank"> {{ 'about.github' | i18n }} </a>
<nz-divider nzType="vertical"></nz-divider>
<span nz-icon nzType="bug"></span>
<a href="//github.com/apache/hertzbeat/issues" target="_blank"> {{ 'about.issue' | i18n }} </a>
<nz-divider nzType="vertical"></nz-divider>
<span nz-icon nzType="fork"></span>
<a href="//github.com/apache/hertzbeat/pulls" target="_blank"> {{ 'about.pr' | i18n }} </a>
<nz-divider nzType="vertical"></nz-divider>
<span nz-icon nzType="message"></span>
<a href="//discord.com/invite/Fb6M73htGr" target="_blank"> {{ 'about.discuss' | i18n }} </a>
<nz-divider nzType="vertical"></nz-divider>
<span nz-icon nzType="read"></span>
<a href="https://hertzbeat.apache.org/docs/" target="_blank"> {{ 'about.doc' | i18n }} </a>
<nz-divider nzType="vertical"></nz-divider>
<span nz-icon nzType="cloud-download"></span>
<a href="https://hertzbeat.apache.org/docs/start/upgrade" target="_blank"> {{ 'about.upgrade' | i18n }} </a>
<div style="float: right">
<nz-divider nzType="vertical"></nz-divider>
<span nz-icon nzType="star" nzTheme="twotone"></span>
<a href="//github.com/apache/hertzbeat" target="_blank"> {{ 'about.star' | i18n }} </a>
</div>
</div>
</div>
</nz-modal>
`,
changeDetection: ChangeDetectionStrategy.Default
})
export class HeaderUserComponent {
isAboutModalVisible = false;
notShowAgain = false;
version = CONSTANTS.VERSION;
currentYear = new Date().getFullYear();
get user(): User {
return this.settings.user;
}
private readonly notShowAgainKey = 'NOT_SHOW_ABOUT_NEXT_LOGIN';
constructor(private settings: SettingsService, private router: Router, private localStorageSvc: LocalStorageService) {
this.notShowAgain =
this.localStorageSvc.getData(this.notShowAgainKey) !== null
? JSON.parse(<string>this.localStorageSvc.getData(this.notShowAgainKey))
: false;
// @ts-ignore
if (router.getCurrentNavigation()?.previousNavigation?.finalUrl.toString() === '/passport/login' && !this.notShowAgain) {
this.showAndCloseAboutModal();
}
}
logout(): void {
this.localStorageSvc.clearAuthorization();
this.router.navigateByUrl('/passport/login');
}
showAboutModal() {
this.isAboutModalVisible = true;
}
disAboutModal() {
this.isAboutModalVisible = false;
}
showAndCloseAboutModal() {
this.isAboutModalVisible = true;
setTimeout(() => (this.isAboutModalVisible = false), 20000);
}
onNotShowAgainChange(value: boolean): void {
this.notShowAgain = value;
this.localStorageSvc.putData(this.notShowAgainKey, JSON.stringify(value));
}
}