Feature/set up notification service (#3663)
* Set up notification service * Update changelogpull/3667/head
parent
9246a73f41
commit
2893d71377
@ -0,0 +1,27 @@
|
|||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { Component } from '@angular/core';
|
||||||
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
|
import { MatDialogModule, MatDialogRef } from '@angular/material/dialog';
|
||||||
|
|
||||||
|
import { IAlertDialogParams } from './interfaces/interfaces';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
imports: [CommonModule, MatButtonModule, MatDialogModule],
|
||||||
|
selector: 'gf-alert-dialog',
|
||||||
|
standalone: true,
|
||||||
|
styleUrls: ['./alert-dialog.scss'],
|
||||||
|
templateUrl: './alert-dialog.html'
|
||||||
|
})
|
||||||
|
export class GfAlertDialogComponent {
|
||||||
|
public discardLabel: string;
|
||||||
|
public message: string;
|
||||||
|
public title: string;
|
||||||
|
|
||||||
|
public constructor(public dialogRef: MatDialogRef<GfAlertDialogComponent>) {}
|
||||||
|
|
||||||
|
public initialize(aParams: IAlertDialogParams) {
|
||||||
|
this.discardLabel = aParams.discardLabel;
|
||||||
|
this.message = aParams.message;
|
||||||
|
this.title = aParams.title;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
@if (title) {
|
||||||
|
<div mat-dialog-title [innerHTML]="title"></div>
|
||||||
|
}
|
||||||
|
|
||||||
|
@if (message) {
|
||||||
|
<div mat-dialog-content [innerHTML]="message"></div>
|
||||||
|
}
|
||||||
|
|
||||||
|
<div align="end" mat-dialog-actions>
|
||||||
|
<button mat-button (click)="dialogRef.close()">{{ discardLabel }}</button>
|
||||||
|
</div>
|
@ -0,0 +1,2 @@
|
|||||||
|
:host {
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
export interface IAlertDialogParams {
|
||||||
|
confirmLabel?: string;
|
||||||
|
discardLabel?: string;
|
||||||
|
message?: string;
|
||||||
|
title: string;
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { Component, HostListener } from '@angular/core';
|
||||||
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
|
import { MatDialogModule, MatDialogRef } from '@angular/material/dialog';
|
||||||
|
|
||||||
|
import { ConfirmationDialogType } from './confirmation-dialog.type';
|
||||||
|
import { IConfirmDialogParams } from './interfaces/interfaces';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
imports: [CommonModule, MatButtonModule, MatDialogModule],
|
||||||
|
selector: 'gf-confirmation-dialog',
|
||||||
|
standalone: true,
|
||||||
|
styleUrls: ['./confirmation-dialog.scss'],
|
||||||
|
templateUrl: './confirmation-dialog.html'
|
||||||
|
})
|
||||||
|
export class GfConfirmationDialogComponent {
|
||||||
|
public confirmLabel: string;
|
||||||
|
public confirmType: ConfirmationDialogType;
|
||||||
|
public discardLabel: string;
|
||||||
|
public message: string;
|
||||||
|
public title: string;
|
||||||
|
|
||||||
|
public constructor(
|
||||||
|
public dialogRef: MatDialogRef<GfConfirmationDialogComponent>
|
||||||
|
) {}
|
||||||
|
|
||||||
|
@HostListener('window:keyup', ['$event'])
|
||||||
|
public keyEvent(event: KeyboardEvent) {
|
||||||
|
if (event.key === 'Enter') {
|
||||||
|
this.dialogRef.close('confirm');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public initialize(aParams: IConfirmDialogParams) {
|
||||||
|
this.confirmLabel = aParams.confirmLabel;
|
||||||
|
this.confirmType = aParams.confirmType;
|
||||||
|
this.discardLabel = aParams.discardLabel;
|
||||||
|
this.message = aParams.message;
|
||||||
|
this.title = aParams.title;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
@if (title) {
|
||||||
|
<div mat-dialog-title [innerHTML]="title"></div>
|
||||||
|
}
|
||||||
|
|
||||||
|
@if (message) {
|
||||||
|
<div mat-dialog-content [innerHTML]="message"></div>
|
||||||
|
}
|
||||||
|
|
||||||
|
<div align="end" mat-dialog-actions>
|
||||||
|
<button mat-button (click)="dialogRef.close('discard')">
|
||||||
|
{{ discardLabel }}
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
mat-flat-button
|
||||||
|
[color]="confirmType"
|
||||||
|
(click)="dialogRef.close('confirm')"
|
||||||
|
>
|
||||||
|
{{ confirmLabel }}
|
||||||
|
</button>
|
||||||
|
</div>
|
@ -0,0 +1,2 @@
|
|||||||
|
:host {
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
export enum ConfirmationDialogType {
|
||||||
|
Accent = 'accent',
|
||||||
|
Primary = 'primary',
|
||||||
|
Warn = 'warn'
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
import { ConfirmationDialogType } from '../confirmation-dialog.type';
|
||||||
|
|
||||||
|
export interface IConfirmDialogParams {
|
||||||
|
confirmLabel?: string;
|
||||||
|
confirmType: ConfirmationDialogType;
|
||||||
|
discardLabel?: string;
|
||||||
|
message?: string;
|
||||||
|
title: string;
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
import { ConfirmationDialogType } from '../confirmation-dialog/confirmation-dialog.type';
|
||||||
|
|
||||||
|
export interface IAlertParams {
|
||||||
|
discardFn?: () => void;
|
||||||
|
discardLabel?: string;
|
||||||
|
message?: string;
|
||||||
|
title: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IConfirmParams {
|
||||||
|
confirmFn: () => void;
|
||||||
|
confirmLabel?: string;
|
||||||
|
confirmType?: ConfirmationDialogType;
|
||||||
|
disableClose?: boolean;
|
||||||
|
discardFn?: () => void;
|
||||||
|
discardLabel?: string;
|
||||||
|
message?: string;
|
||||||
|
title: string;
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { MatDialogModule } from '@angular/material/dialog';
|
||||||
|
|
||||||
|
import { GfAlertDialogComponent } from './alert-dialog/alert-dialog.component';
|
||||||
|
import { GfConfirmationDialogComponent } from './confirmation-dialog/confirmation-dialog.component';
|
||||||
|
import { NotificationService } from './notification.service';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [
|
||||||
|
CommonModule,
|
||||||
|
GfAlertDialogComponent,
|
||||||
|
GfConfirmationDialogComponent,
|
||||||
|
MatDialogModule
|
||||||
|
],
|
||||||
|
providers: [NotificationService]
|
||||||
|
})
|
||||||
|
export class GfNotificationModule {}
|
@ -0,0 +1,83 @@
|
|||||||
|
import { translate } from '@ghostfolio/ui/i18n';
|
||||||
|
|
||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { MatDialog } from '@angular/material/dialog';
|
||||||
|
import { isFunction } from 'lodash';
|
||||||
|
|
||||||
|
import { GfAlertDialogComponent } from './alert-dialog/alert-dialog.component';
|
||||||
|
import { GfConfirmationDialogComponent } from './confirmation-dialog/confirmation-dialog.component';
|
||||||
|
import { ConfirmationDialogType } from './confirmation-dialog/confirmation-dialog.type';
|
||||||
|
import { IAlertParams, IConfirmParams } from './interfaces/interfaces';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class NotificationService {
|
||||||
|
private dialogMaxWidth: string;
|
||||||
|
private dialogWidth: string;
|
||||||
|
|
||||||
|
public constructor(private matDialog: MatDialog) {}
|
||||||
|
|
||||||
|
public alert(aParams: IAlertParams) {
|
||||||
|
if (!aParams.discardLabel) {
|
||||||
|
aParams.discardLabel = translate('CLOSE');
|
||||||
|
}
|
||||||
|
|
||||||
|
const dialog = this.matDialog.open(GfAlertDialogComponent, {
|
||||||
|
autoFocus: false,
|
||||||
|
maxWidth: this.dialogMaxWidth,
|
||||||
|
width: this.dialogWidth
|
||||||
|
});
|
||||||
|
|
||||||
|
dialog.componentInstance.initialize({
|
||||||
|
discardLabel: aParams.discardLabel,
|
||||||
|
message: aParams.message,
|
||||||
|
title: aParams.title
|
||||||
|
});
|
||||||
|
|
||||||
|
return dialog.afterClosed().subscribe((result) => {
|
||||||
|
if (isFunction(aParams.discardFn)) {
|
||||||
|
aParams.discardFn();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public confirm(aParams: IConfirmParams) {
|
||||||
|
if (!aParams.confirmLabel) {
|
||||||
|
aParams.confirmLabel = translate('YES');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!aParams.discardLabel) {
|
||||||
|
aParams.discardLabel = translate('CANCEL');
|
||||||
|
}
|
||||||
|
|
||||||
|
const dialog = this.matDialog.open(GfConfirmationDialogComponent, {
|
||||||
|
autoFocus: false,
|
||||||
|
disableClose: aParams.disableClose || false,
|
||||||
|
maxWidth: this.dialogMaxWidth,
|
||||||
|
width: this.dialogWidth
|
||||||
|
});
|
||||||
|
|
||||||
|
dialog.componentInstance.initialize({
|
||||||
|
confirmLabel: aParams.confirmLabel,
|
||||||
|
confirmType: aParams.confirmType || ConfirmationDialogType.Primary,
|
||||||
|
discardLabel: aParams.discardLabel,
|
||||||
|
message: aParams.message,
|
||||||
|
title: aParams.title
|
||||||
|
});
|
||||||
|
|
||||||
|
return dialog.afterClosed().subscribe((result) => {
|
||||||
|
if (result === 'confirm' && isFunction(aParams.confirmFn)) {
|
||||||
|
aParams.confirmFn();
|
||||||
|
} else if (result === 'discard' && isFunction(aParams.discardFn)) {
|
||||||
|
aParams.discardFn();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public setDialogMaxWidth(aDialogMaxWidth: string) {
|
||||||
|
this.dialogMaxWidth = aDialogMaxWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public setDialogWidth(aDialogWidth: string) {
|
||||||
|
this.dialogWidth = aDialogWidth;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue