import { Injectable } from "@angular/core"; import { TranslateService } from "@ngx-translate/core"; import { BehaviorSubject, Observable } from "rxjs"; import { MESSAGEKEY } from "../utils/enums"; import { NotificationService } from "../shared/services/notification.service"; @Injectable( { providedIn: 'root' } ) export class I18NService { public translationsMerge: BehaviorSubject = new BehaviorSubject(false); constructor(private translate: TranslateService, private notificationService: NotificationService) { } success(code: string, customMessage: any[], defaultText?: string): any { let params = this.keyValueParamter(customMessage); this.getMessageTranslate(MESSAGEKEY.SUCCESS, code, params).subscribe((res) => { this.notificationService.success((res[code] == code && defaultText != undefined) ? defaultText : res[code]); }); } error(code: string, customMessage: any[], defaultText?: string): any { let params = this.keyValueParamter(customMessage); this.getMessageTranslate(MESSAGEKEY.ERROR, code, params).subscribe((res) => { this.notificationService.error((res[code] == code && defaultText != undefined) ? defaultText : res[code]); }); } info(code: string, customMessage: any[]): any { let params = this.keyValueParamter(customMessage); this.getMessageTranslate(MESSAGEKEY.INFO, code, params).subscribe((res) => { this.notificationService.info(res[code]); }); } warn(code: string, customMessage: any[]): any { let params = this.keyValueParamter(customMessage); this.getMessageTranslate(MESSAGEKEY.WARN, code, params).subscribe((res) => { this.notificationService.warning(res[code]); }); } notification(code: string, customMessage: any[]): string { let params = this.keyValueParamter(customMessage); let notification: string = ""; this.getMessageTranslate(MESSAGEKEY.NOTIFICATION, code, params).subscribe((res) => { notification = res[code] as string; }); return notification; } keyValueParamter(params: object[]): Object { // Create an object to hold the key-value pairs const keyValueObject: { [key: string]: string } = {}; // Populate the object for (let i = 0; i < params?.length; i++) { keyValueObject[`value${i + 1}`] = String(params[i]); } return keyValueObject; } getMessageTranslate(type: string, code: string, params: any): Observable { if (type == MESSAGEKEY.SUCCESS) { return this.translate.get([code, "SUC_APP_F_SUM"], params) } else if (type == MESSAGEKEY.ERROR) { return this.translate.get([code, "ERR_APP_F_SUM"], params) } else if (type == MESSAGEKEY.WARN) { return this.translate.get([code, "WRN_APP_F_SUM"], params) } else if (type == MESSAGEKEY.INFO) { return this.translate.get([code, "INF_APP_F_SUM"], params) } else if (type == MESSAGEKEY.NOTIFICATION) { return this.translate.get([code, "NTF_APP_F_SUM"], params) } else { return this.translate.get([code, code], params) } } }