1
0
mirror of https://github.com/lana-k/sqliteviz.git synced 2025-12-07 02:28:54 +08:00

add Logs component

This commit is contained in:
lana-k
2021-04-08 19:43:15 +02:00
parent 98cc09741c
commit 2acfc75da2
3 changed files with 88 additions and 0 deletions

78
src/components/Logs.vue Normal file
View File

@@ -0,0 +1,78 @@
<template>
<div class="logs-container" ref="logsContainer">
<div v-for="(msg, index) in messages" :key="index" class="msg">
<img v-if="msg.type === 'error'" :src="require('@/assets/images/error.svg')">
<img v-if="msg.type === 'info'" :src="require('@/assets/images/info.svg')" width="20px">
<img v-if="msg.type === 'success'" :src="require('@/assets/images/success.svg')">
<loading-indicator v-if="msg.type === 'loading'" :progress="msg.progress" />
<span class="msg-text">{{ serializeMessage(msg) }}</span>
</div>
</div>
</template>
<script>
import LoadingIndicator from '@/components/LoadingIndicator'
export default {
name: 'logs',
props: ['messages'],
components: { LoadingIndicator },
watch: {
'messages.length': 'scrollToBottom'
},
mounted () {
this.scrollToBottom()
},
methods: {
async scrollToBottom () {
const container = this.$refs.logsContainer
if (container) {
await this.$nextTick()
container.scrollTop = container.scrollHeight
}
},
serializeMessage (msg) {
let result = ''
if (msg.row !== null && msg.row !== undefined) {
result += `Error in row ${msg.row}. `
}
result += msg.message
if (msg.hint) {
if (!(result[0] in ['.', '!', '?'])) {
result += '.'
}
result += ` ${msg.hint}`
}
return result
}
}
}
</script>
<style scoped>
.logs-container {
background-color: var(--color-white);
padding: 0 5px;
border-radius: 5px;
border: 1px solid var(--color-border-light);
box-sizing: border-box;
overflow-y: scroll;
}
.msg {
padding: 16px 7px;
border-bottom: 1px solid var(--color-border-light);
display: flex;
align-items: flex-start;
font-family: monospace;
}
.msg:last-child {
border-bottom: none;
}
.msg-text {
margin-left: 6px;
margin-top: 2px;
}
</style>