|
|
<template lang='pug'> v-dialog(v-model='isShown', width='90vw', max-width='1200') .dialog-header span Live Console v-spacer .caption.blue--text.text--lighten-3.mr-3 Streaming... v-progress-circular( indeterminate color='blue lighten-3' :size='20' :width='2' ) .consoleTerm(ref='consoleContainer') v-toolbar(flat, color='grey darken-3', dark) v-spacer v-btn(outline, @click='clear') v-icon(left) cancel_presentation span Clear v-btn(outline, @click='close') v-icon(left) close span Close </template>
<script> import _ from 'lodash' // import { Terminal } from 'xterm'
// import * as fit from 'xterm/lib/addons/fit/fit'
import livetrailSubscription from 'gql/admin/logging/logging-subscription-livetrail.gql'
// Terminal.applyAddon(fit)
export default { term: null, props: { value: { type: Boolean, default: false } }, computed: { isShown: { get() { return this.value }, set(val) { this.$emit('input', val) } } }, watch: { value(newValue, oldValue) { if (newValue) { _.delay(() => { // this.term = new Terminal()
this.term.open(this.$refs.consoleContainer) this.term.writeln('Connecting to \x1B[1;3;31mconsole output\x1B[0m...')
this.attach() }, 100) } else { this.term.dispose() this.term = null } } }, mounted() {
}, methods: { clear() { this.term.clear() }, close() { this.isShown = false }, attach() { const self = this const observer = this.$apollo.subscribe({ query: livetrailSubscription }) observer.subscribe({ next(data) { const item = _.get(data, `data.loggingLiveTrail`, {}) console.info(item) self.term.writeln(`${item.level}: ${item.output}`) }, error(error) { self.$store.commit('showNotification', { style: 'red', message: error.message, icon: 'warning' }) } }) } } } </script>
<style lang='scss'>
.consoleTerm { background-color: #000; padding: 16px; width: 100%; height: 415px; }
</style>
|