|
|
|
|
@ -1,33 +1,33 @@
|
|
|
|
|
<template>
|
|
|
|
|
<NuxtLayout name="edit">
|
|
|
|
|
<template #content>
|
|
|
|
|
<div class="mb-2 flex w-full">
|
|
|
|
|
<input type="text" v-model="note.title" placeholder="untitled" @change="submit()" />
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sticky top-0 flex w-full justify-between">
|
|
|
|
|
<div @click="toggleComp('text')" class="w-1/2 bg-lightgray p-2 text-center text-xl"
|
|
|
|
|
:class="{ 'bg-secondary': comp === 'text' }">
|
|
|
|
|
Text
|
|
|
|
|
</div>
|
|
|
|
|
<div @click="toggleComp('md')" class="w-1/2 bg-lightgray p-2 text-center text-xl"
|
|
|
|
|
:class="{ 'bg-secondary': comp === 'md' }">
|
|
|
|
|
Markdown
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="flex h-full w-full flex-col">
|
|
|
|
|
<textarea ref="noteTextArea" v-show="comp === 'text'"
|
|
|
|
|
class="min-h-screen w-full flex-grow resize-none border-none bg-secondary p-4 outline-none placeholder:text-zinc-700 focus:outline-none"
|
|
|
|
|
v-model="input" @change="submit()">
|
|
|
|
|
</textarea>
|
|
|
|
|
<CardMarkdownRenderer v-show="comp === 'md'" :content="note.description" :state="'description'" />
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
</NuxtLayout>
|
|
|
|
|
<NuxtLayout name="edit">
|
|
|
|
|
<template #content>
|
|
|
|
|
<div class="mb-2 flex w-full">
|
|
|
|
|
<el-input
|
|
|
|
|
v-model="note.title"
|
|
|
|
|
placeholder="untitled"
|
|
|
|
|
@change="submit()" />
|
|
|
|
|
</div>
|
|
|
|
|
<el-tabs type="border-card">
|
|
|
|
|
<el-tab-pane label="Text">
|
|
|
|
|
<el-input
|
|
|
|
|
v-model="input"
|
|
|
|
|
:autosize="{ minRows: 40 }"
|
|
|
|
|
type="textarea"
|
|
|
|
|
placeholder="Please input" />
|
|
|
|
|
</el-tab-pane>
|
|
|
|
|
<el-tab-pane label="Markdown">
|
|
|
|
|
<CardMarkdownRenderer
|
|
|
|
|
:content="note.description"
|
|
|
|
|
:state="'description'" />
|
|
|
|
|
</el-tab-pane>
|
|
|
|
|
</el-tabs>
|
|
|
|
|
</template>
|
|
|
|
|
</NuxtLayout>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
|
|
definePageMeta({
|
|
|
|
|
middleware: ['auth'],
|
|
|
|
|
middleware: ['auth'],
|
|
|
|
|
})
|
|
|
|
|
import 'highlight.js/styles/github-dark-dimmed.css'
|
|
|
|
|
|
|
|
|
|
@ -43,58 +43,66 @@ const comp = ref<Mode>('text')
|
|
|
|
|
const { textarea: noteTextArea, input } = useTextareaAutosize()
|
|
|
|
|
|
|
|
|
|
const toggleComp = (name: Mode) => {
|
|
|
|
|
comp.value = name
|
|
|
|
|
comp.value = name
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const { refresh } = await useFetch('/api/note', {
|
|
|
|
|
method: 'GET',
|
|
|
|
|
query: {
|
|
|
|
|
id: route.params.id,
|
|
|
|
|
},
|
|
|
|
|
onResponse({ response }) {
|
|
|
|
|
console.log('Response: ', response)
|
|
|
|
|
if (response.status === 500) {
|
|
|
|
|
console.log(`Error: ${response._data.message}`)
|
|
|
|
|
router.push('/notes')
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
note.value.title = response._data.note.title
|
|
|
|
|
note.value.description = response._data.note.description
|
|
|
|
|
input.value = note.value.description
|
|
|
|
|
},
|
|
|
|
|
method: 'GET',
|
|
|
|
|
query: {
|
|
|
|
|
id: route.params.id,
|
|
|
|
|
},
|
|
|
|
|
onResponse({ response }) {
|
|
|
|
|
console.log('Response: ', response)
|
|
|
|
|
if (response.status === 500) {
|
|
|
|
|
console.log(`Error: ${response._data.message}`)
|
|
|
|
|
router.push('/notes')
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
note.value.title = response._data.note.title
|
|
|
|
|
note.value.description = response._data.note.description
|
|
|
|
|
input.value = note.value.description
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const submitTimeout = ref()
|
|
|
|
|
|
|
|
|
|
const submit = async () => {
|
|
|
|
|
isSubmitting.value = true
|
|
|
|
|
isSubmitting.value = true
|
|
|
|
|
|
|
|
|
|
if (submitTimeout.value) clearTimeout(submitTimeout.value)
|
|
|
|
|
if (submitTimeout.value) clearTimeout(submitTimeout.value)
|
|
|
|
|
|
|
|
|
|
submitTimeout.value = setTimeout(async () => {
|
|
|
|
|
await submitNote(note.value, route.params.id)
|
|
|
|
|
isSubmitting.value = false
|
|
|
|
|
}, 1000)
|
|
|
|
|
submitTimeout.value = setTimeout(async () => {
|
|
|
|
|
await submitNote(note.value, route.params.id)
|
|
|
|
|
isSubmitting.value = false
|
|
|
|
|
}, 1000)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const remove = async () => {
|
|
|
|
|
isDeleting.value = true
|
|
|
|
|
isDeleting.value = true
|
|
|
|
|
|
|
|
|
|
await deleteNote(route.params.id)
|
|
|
|
|
await deleteNote(route.params.id)
|
|
|
|
|
|
|
|
|
|
isDeleting.value = false
|
|
|
|
|
isDeleting.value = false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
isLoading.value = true
|
|
|
|
|
refresh()
|
|
|
|
|
isLoading.value = false
|
|
|
|
|
isLoading.value = true
|
|
|
|
|
refresh()
|
|
|
|
|
isLoading.value = false
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
watch(
|
|
|
|
|
() => input.value,
|
|
|
|
|
() => {
|
|
|
|
|
note.value.description = input.value
|
|
|
|
|
}
|
|
|
|
|
() => input.value,
|
|
|
|
|
() => {
|
|
|
|
|
note.value.description = input.value
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style scoped>
|
|
|
|
|
:deep(.el-tabs__header) {
|
|
|
|
|
position: sticky;
|
|
|
|
|
top: 0;
|
|
|
|
|
z-index: 100;
|
|
|
|
|
}
|
|
|
|
|
</style>
|
|
|
|
|
|