import {Injectable} from '@angular/core'; import {MatSnackBar, MatSnackBarRef} from '@angular/material/snack-bar'; import {TranslateService} from '@ngx-translate/core'; @Injectable() export class SnackBarService { constructor(private snackbar: MatSnackBar, private translate: TranslateService) { } private show(message: string, action?: string, duration?: number, panelClasses?: string[]): MatSnackBarRef { const config = {}; if (duration) { config['duration'] = duration; } if (action) { if (panelClasses) { panelClasses.push('snack-bar-button'); } else { panelClasses = ['snack-bar-button']; } } if (panelClasses) { config['panelClass'] = panelClasses; } return this.snackbar.open(message, action, config); } showSuccess(i18n: string) { this.translate.get(i18n).subscribe((translated) => { return this.show(translated, undefined, 2500, ['custom-snack-bar', 'label-success']); }); } showError(i18n: string, duration?: number) { this.translate.get(i18n).subscribe((translated) => { this.translate.get('generic.snackbar.error.button.okay').subscribe((translatedOkay) => { return this.show(translated, translatedOkay, duration, ['custom-snack-bar', 'label-danger']); }); }); } showUntranslatedError(message: string, duration?: number) { return this.show(message, 'OK', duration, ['custom-snack-bar', 'label-danger']); } }