/* * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info. * * Adapted from LiteMol * Copyright (c) 2016 - now David Sehnal, licensed under Apache 2.0, See LICENSE file for more info. */ import * as React from 'react' import { View } from '../view'; import { LogController } from '../../controller/misc/log'; import { CommonEvents } from '../../event/basic'; import { formatTime } from 'mol-util'; import { Logger } from '../../service/logger'; export class Log extends View { private wrapper: HTMLDivElement | undefined = void 0; componentWillMount() { super.componentWillMount(); this.subscribe(CommonEvents.LayoutChanged.getStream(this.controller.context), () => this.scrollToBottom()); } componentDidUpdate() { this.scrollToBottom(); } private scrollToBottom() { const log = this.wrapper; if (log) log.scrollTop = log.scrollHeight - log.clientHeight - 1; } render() { const entries = this.controller.latestState.entries; return
this.wrapper = log!}>
    {entries.map((entry, i, arr) => { let label: JSX.Element; let e = entry!; switch (e.type) { case Logger.EntryType.Error: label = Error; break; case Logger.EntryType.Warning: label = Warning; break; case Logger.EntryType.Info: label = Info; break; default: label = } let t = formatTime(e.timestamp); return
  • {label}
    {t}
    {e.message}
  • ; }) }
; } }