Update note page (working get and update)

main
TZGyn 3 years ago
parent e3bfbec53d
commit d558cb7e99
Signed by: TZGyn
GPG Key ID: 122EAF77AE81FD4A

@ -1,110 +1,103 @@
<template> <template>
<NuxtLayout <NuxtLayout name="edit">
name="edit" <template #content>
@keydown.ctrl.s.prevent="submit(note)"> <div class="sticky top-0 flex w-full justify-between">
<template #content> <div @click="toggleComp('text')" class="bg-lightgray w-1/2 p-2 text-center text-xl"
<div class="sticky top-0 flex w-full justify-between"> :class="{ 'bg-secondary': comp === 'text' }">
<div Text
@click="toggleComp('text')" </div>
class="bg-lightgray w-1/2 p-2 text-center text-xl" <div @click="toggleComp('md')" class="bg-lightgray w-1/2 p-2 text-center text-xl"
:class="{ 'bg-secondary': comp === 'text' }"> :class="{ 'bg-secondary': comp === 'md' }">
Text Markdown
</div> </div>
<div </div>
@click="toggleComp('md')" <div class="flex h-full w-full flex-col">
class="bg-lightgray w-1/2 p-2 text-center text-xl" <textarea ref="noteTextArea" v-show="comp === 'text'"
:class="{ 'bg-secondary': comp === 'md' }"> class="bg-secondary min-h-screen w-full flex-grow resize-none border-none p-4 outline-none placeholder:text-zinc-700 focus:outline-none"
Markdown v-model="input" @change="submit()">
</div>
</div>
<div class="flex h-full w-full flex-col">
<textarea
ref="noteTextArea"
v-show="comp === 'text'"
class="bg-secondary min-h-screen w-full flex-grow resize-none border-none p-4 outline-none placeholder:text-zinc-700 focus:outline-none"
v-model="input">
</textarea> </textarea>
<CardMarkdownRenderer <CardMarkdownRenderer v-show="comp === 'md'" :content="note.description" :state="'description'" />
v-show="comp === 'md'" </div>
:content="note.description" </template>
:state="'description'" /> </NuxtLayout>
</div>
</template>
</NuxtLayout>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
definePageMeta({ definePageMeta({
middleware: ['auth'], middleware: ['auth'],
}) })
type Comp = 'text' | 'md' type Mode = 'text' | 'md'
const note = useNote() const note = useNote()
const route = useRoute() const route = useRoute()
const router = useRouter() const router = useRouter()
const isLoading = ref<Boolean>(false) const isLoading = ref<Boolean>(false)
const isSubmitting = ref<Boolean>(false) const isSubmitting = ref<Boolean>(false)
const isDeleting = ref<Boolean>(false) const isDeleting = ref<Boolean>(false)
const comp = ref<Comp>('text') const comp = ref<Mode>('text')
const description = useDescription() const { textarea: noteTextArea, input } = useTextareaAutosize()
const { textarea: noteTextArea, input } = useTextareaAutosize()
const toggleComp = (name: Comp) => { const toggleComp = (name: Mode) => {
comp.value = name comp.value = name
} }
const { refresh } = await useFetch('/api/note', { const { refresh } = await useFetch('/api/note', {
method: 'GET', method: 'GET',
query: { query: {
id: route.params.id, id: route.params.id,
}, },
onResponse({ response }) { onResponse({ response }) {
console.log('Response: ', response) console.log('Response: ', response)
if (response.status === 500) { if (response.status === 500) {
console.log(`Error: ${response._data.message}`) console.log(`Error: ${response._data.message}`)
router.push('/notes') router.push('/notes')
return return
} }
note.value.title = response._data.note.title note.value.title = response._data.note.title
note.value.description = response._data.note.description note.value.description = response._data.note.description
description.value = note.value.description input.value = note.value.description
input.value = note.value.description },
}, })
})
const submit = async (note: Note) => { const submitTimeout = ref()
isSubmitting.value = true
await submitNote(note, { id: route.params.id })
isSubmitting.value = false
}
const deleteNote = async () => { const submit = async () => {
isDeleting.value = true isSubmitting.value = true
await useFetch('/api/note', {
method: 'DELETE',
query: {
id: route.params.id,
},
onResponse({ response }) {
isDeleting.value = false
console.log('DELETE:', response._data.message)
router.push('/notes')
},
})
}
onMounted(() => { if (submitTimeout.value) clearTimeout(submitTimeout.value)
isLoading.value = true
refresh()
isLoading.value = false
})
watch( submitTimeout.value = setTimeout(async () => {
() => note.value.description, await submitNote(note.value, { id: route.params.id })
() => { isSubmitting.value = false
description.value = note.value.description }, 1000)
input.value = note.value.description }
}
) const deleteNote = async () => {
isDeleting.value = true
await useFetch('/api/note', {
method: 'DELETE',
query: {
id: route.params.id,
},
onResponse({ response }) {
isDeleting.value = false
console.log('DELETE:', response._data.message)
router.push('/notes')
},
})
}
onMounted(() => {
isLoading.value = true
refresh()
isLoading.value = false
})
watch(
() => input.value,
() => {
note.value.description = input.value
}
)
</script> </script>

@ -1,8 +1,12 @@
import { serverSupabaseUser, serverSupabaseClient } from '#supabase/server' import {
serverSupabaseUser,
serverSupabaseClient,
serverSupabaseServiceRole,
} from '#supabase/server'
export default defineEventHandler(async (event) => { export default defineEventHandler(async (event) => {
const user = await serverSupabaseUser(event) const user = await serverSupabaseUser(event)
const supabase = serverSupabaseClient(event) const supabase = serverSupabaseServiceRole(event)
const query = getQuery(event) const query = getQuery(event)
if (!user) { if (!user) {

@ -1,8 +1,8 @@
import { serverSupabaseUser, serverSupabaseClient } from '#supabase/server' import { serverSupabaseUser, serverSupabaseServiceRole } from '#supabase/server'
export default defineEventHandler(async (event): Promise<ApiResponse> => { export default defineEventHandler(async (event) => {
const user = await serverSupabaseUser(event) const user = await serverSupabaseUser(event)
const supabase = serverSupabaseClient(event) const supabase = serverSupabaseServiceRole(event)
const query = getQuery(event) const query = getQuery(event)
const body = await readBody(event) const body = await readBody(event)

@ -1,8 +1,8 @@
import { serverSupabaseUser, serverSupabaseClient } from '#supabase/server' import { serverSupabaseUser, serverSupabaseServiceRole } from '#supabase/server'
export default defineEventHandler(async (event) => { export default defineEventHandler(async (event) => {
const user = await serverSupabaseUser(event) const user = await serverSupabaseUser(event)
const supabase = serverSupabaseClient(event) const supabase = serverSupabaseServiceRole(event)
if (!user) { if (!user) {
throw createError({ statusCode: 401, message: 'Unauthorized' }) throw createError({ statusCode: 401, message: 'Unauthorized' })

Loading…
Cancel
Save