opt-cc/static/src/app/services/user-interface/snack-bar/snack-bar.service.ts

50 lines
1.5 KiB
TypeScript

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<any> {
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']);
}
}