90 lines
2.3 KiB
Vue
90 lines
2.3 KiB
Vue
<template>
|
|
<div>
|
|
<b-container fluid>
|
|
<b-row>
|
|
<b-col>
|
|
<Editor :content="content" @change="updateContent"/>
|
|
</b-col>
|
|
</b-row>
|
|
<b-row>
|
|
<b-col cols="1"><label style="padding-top: 0.5em" for="tagList">Tags</label></b-col>
|
|
<b-col cols="10">
|
|
<TagList id="tagList" :tags="tags" @change="tagUpdate"/>
|
|
</b-col>
|
|
</b-row>
|
|
</b-container>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import Editor from "./Editor"
|
|
import TagList from "./TagList"
|
|
import _ from 'lodash'
|
|
|
|
export default {
|
|
name: "MainEditor",
|
|
props: {
|
|
slug: String
|
|
},
|
|
created() {
|
|
if (this.$props.slug) {
|
|
this.getFile(this.$props.slug)
|
|
}
|
|
this.save = _.debounce(this.save, 2000)
|
|
},
|
|
computed: {
|
|
tags: function () {
|
|
if (this.$store.state.file) {
|
|
return this.$store.state.file.Tags
|
|
}
|
|
return []
|
|
},
|
|
content: function () {
|
|
if (this.$store.state.file) {
|
|
return this.$store.state.file.Content
|
|
}
|
|
return "= Main Editor"
|
|
}
|
|
},
|
|
watch: {
|
|
slug: function (newValue) {
|
|
this.getFile(newValue)
|
|
}
|
|
},
|
|
methods: {
|
|
getFile: function (slug) {
|
|
this.$store.dispatch('getFile', slug)
|
|
},
|
|
tagUpdate: function(newTags) {
|
|
if (JSON.stringify(newTags) === JSON.stringify(this.$store.state.file.Tags))
|
|
return
|
|
this.$store.commit('setTags', newTags)
|
|
this.$emit('markDirty', true)
|
|
this.save()
|
|
},
|
|
updateContent: function (newContent) {
|
|
if (this.$store.state.file.Content === newContent)
|
|
return
|
|
this.$store.commit('setContent', newContent)
|
|
this.$emit('markDirty', true)
|
|
this.save()
|
|
},
|
|
save: function () {
|
|
this.$store.commit('setContent', this.content)
|
|
this.$store.dispatch('saveFile')
|
|
.then(res => {
|
|
this.$emit('markDirty', false)
|
|
this.$store.dispatch('updateSearch')
|
|
if (res.data.Slug !== this.$route.params.slug)
|
|
this.$router.replace({params: { slug: res.data.Slug }})
|
|
})
|
|
.catch(() => { })
|
|
}
|
|
},
|
|
components: {TagList, Editor}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
|
|
</style> |