import { Component, OnInit } from '@angular/core'; import { LanguageService } from '@app/core/services/language/language.service'; import { BaseComponent } from '@common/base/base.component'; import { takeUntil } from 'rxjs/operators'; import { FormGroup, FormBuilder } from '@angular/forms'; import { TranslateService } from '@ngx-translate/core'; import { UiNotificationService, SnackBarNotificationLevel } from '@app/core/services/notification/ui-notification-service'; import { Router } from '@angular/router'; @Component({ selector: 'app-language-editor', templateUrl: './language-editor.component.html', styleUrls: ['./language-editor.component.scss'] }) export class LanguageEditorComponent extends BaseComponent implements OnInit { keys = []; parseFinished = false; currentLang: string; formGroup: FormGroup; formBuilder: FormBuilder; constructor( private language: LanguageService, private uiNotificationService: UiNotificationService, private translate: TranslateService, private router: Router, ) { super(); } ngOnInit() { this.formBuilder = new FormBuilder(); this.formGroup = this.formBuilder.group({}); this.language.getCurrentLanguageJSON() .pipe(takeUntil(this._destroyed)) .subscribe(response => { const blob = new Blob([response.body], { type: 'application/json' }); this.convertBlobToJSON(blob); }); } convertBlobToJSON(blob: Blob) { const fr = new FileReader(); fr.onload = ev => { const langObj = JSON.parse(fr.result as string); this.convertObjectToForm(langObj, '', this.formGroup); this.currentLang = this.language.getCurrentLanguageName(); this.parseFinished = true; }; fr.readAsText(blob); } convertObjectToForm(obj: any, parentKey: string, form: FormGroup) { for (let prop in obj) { const key = parentKey !== '' ? `${parentKey}.${prop}` : prop; if (typeof obj[prop] === 'object') { form.addControl(prop, this.formBuilder.group({})); this.convertObjectToForm(obj[prop], key, form.get(prop) as FormGroup); continue; } else { form.addControl(prop, this.formBuilder.control(obj[prop])); this.keys.push(key); } } return; } updateLang() { const json = JSON.stringify(this.formGroup.value, null, " "); this.language.updateLanguage(json).pipe(takeUntil(this._destroyed)) .subscribe( complete => { this.onCallbackSuccess(complete); }, error => { this.onCallbackError(error); } ); } onCallbackSuccess(id?: String): void { this.uiNotificationService.snackBarNotification( this.translate.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success); this.router.navigate(['/reload']).then(() => this.router.navigate(['/language-editor'])); } onCallbackError(error: any) { this.uiNotificationService.snackBarNotification( error, SnackBarNotificationLevel.Error); //this.validateAllFormFields(this.formGroup); } }