| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | <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>
 |