UNPKG

amos-ionic-logging

Version:
179 lines (151 loc) 4.53 kB
import { Component, OnInit, Input } from "@angular/core"; import { ModalController, Platform, AlertController } from "@ionic/angular"; import { Logger, LoggingService } from "ionic-logging-service"; import { LoggingViewerTranslation } from "../logging-viewer-translation.model"; /** * Ionic modal containing [LoggingViewerComponent](LoggingViewerComponent.html), * [LoggingViewerLevelsComponent](LoggingViewerLevelsComponent.html) and * [LoggingViewerSearchComponent](LoggingViewerSearchComponent.html). */ @Component({ selector: "ionic-logging-viewer-modal", templateUrl: "./logging-viewer-modal.component.html", styleUrls: ["./logging-viewer-modal.component.scss"] }) export class LoggingViewerModalComponent implements OnInit { private static languageEn = "en"; private static languageDe = "de"; /** * Language to be used for the modal. * Currently supported: en, de */ @Input() public language: string; /** * Translation to be used for the modal. * If specified, the language is ignored. */ @Input() public translation: LoggingViewerTranslation; /** * Comma-separated list of localStorageKeys. If set, the logs get loaded from localStorage instead of memory. */ @Input() public localStorageKeys: string; /** * Flag showing a delete button, which removes all existing log messages. */ @Input() public allowClearLogs: boolean; /** * Flag controlling which close button will be shown. */ public isAndroid: boolean; private logger: Logger; private translations: { [language: string]: LoggingViewerTranslation }; /** * Creates a new instance of the component. */ constructor( platform: Platform, private alertController: AlertController, private modalController: ModalController, private loggingService: LoggingService) { this.logger = loggingService.getLogger("Ionic.Logging.Viewer.Modal.Component"); const methodName = "ctor"; this.logger.entry(methodName); this.isAndroid = platform.is("android"); this.logger.exit(methodName); } /** * Initializes the LoggingViewerModalComponent. * It configures the supported translations. */ public ngOnInit(): void { // prepare translations this.translations = {}; this.translations[LoggingViewerModalComponent.languageEn] = { cancel: "Cancel", confirmDelete: "Delete all log messages?", ok: "Ok", searchPlaceholder: "Search", title: "Logging", }; this.translations[LoggingViewerModalComponent.languageDe] = { cancel: "Abbrechen", confirmDelete: "Alle Logs löschen?", ok: "Ok", searchPlaceholder: "Suchen", title: "Logging", }; } /** * Eventhandler called by Ionic when the modal is opened. */ public ionViewDidEnter(): void { const methodName = "ionViewDidEnter"; this.logger.entry(methodName); this.logger.exit(methodName); } /** * Eventhandler called when the cancel button is clicked. */ public async onClose(): Promise<void> { const methodName = "onClose"; this.logger.entry(methodName); await this.modalController.dismiss(); this.logger.exit(methodName); } /** * Eventhandler called when the clear button is clicked. */ public async onClearLogs(): Promise<void> { const methodName = "onClearLogs"; this.logger.entry(methodName); const alert = await this.alertController.create({ header: this.getTranslation().confirmDelete, buttons: [ { text: this.getTranslation().cancel, role: "cancel", cssClass: "secondary" }, { text: this.getTranslation().ok, handler: () => { this.clearLogs(); } }, ] }); await alert.present(); this.logger.exit(methodName); } /** * Clear logs. */ public clearLogs(): void { if (this.localStorageKeys) { for (const localStorageKey of this.localStorageKeys.split(",")) { this.loggingService.removeLogMessagesFromLocalStorage(localStorageKey); } } else { this.loggingService.removeLogMessages(); } } /** * Helper method returning the current translation: * - the property translation if defined * - the translation according property language if valid * - English translation, otherwise */ public getTranslation(): LoggingViewerTranslation { if (typeof this.translation !== "undefined") { return this.translation; } else if (typeof this.language !== "undefined" && typeof this.translations[this.language] === "object") { return this.translations[this.language]; } else { return this.translations[LoggingViewerModalComponent.languageEn]; } } }