delete account

This commit is contained in:
2023-05-29 01:48:46 +02:00
parent 21222abad4
commit 33b38774df
6 changed files with 34 additions and 28 deletions

View File

@@ -33,7 +33,6 @@ provide('firebaseAuthUI', firebaseAuthUI)
watch( watch(
[activeNotesSource, encryptionKey], [activeNotesSource, encryptionKey],
() => { () => {
console.log(activeNotesSource.value)
if (activeNotesSource.value === 'firebase') { if (activeNotesSource.value === 'firebase') {
getClientKey() getClientKey()
getEncryptionKey() getEncryptionKey()

View File

@@ -41,17 +41,17 @@ const authModalInitialStateOpen = ref<boolean>(authUI.isPendingRedirect())
<UIButton <UIButton
size="sm" size="sm"
variant="outline" variant="outline"
class="search-active-hide py-1 text-white topbar-button" class="search-active-hide topbar-button text-white"
@click="addNote('Untitled new note', '', true)" @click="addNote('Untitled new note', '', true)"
> >
<i class="fas fa-plus-circle text-[1.1rem]" /> <i class="fa-fw fa-solid fa-plus-circle scale-[115%]" />
</UIButton> </UIButton>
<UIModal v-if="initialized && !user" :open="authModalInitialStateOpen"> <UIModal v-if="initialized && !user" :open="authModalInitialStateOpen">
<template #activator="{ open }"> <template #activator="{ open }">
<UIButton <UIButton
size="sm" size="sm"
variant="outline" variant="outline"
class="search-active-hide py-1 text-white topbar-button" class="search-active-hide topbar-button py-1 text-white"
@click="open" @click="open"
> >
Sign in Sign in

View File

@@ -9,7 +9,7 @@ import { OnClickOutside } from '@vueuse/components'
:dropdown="true" :dropdown="true"
size="sm" size="sm"
variant="outline" variant="outline"
class="topbar-button py-1 text-white" class="topbar-button text-white"
> >
<i class="fa-fw fa-solid fa-user-gear" /> <i class="fa-fw fa-solid fa-user-gear" />
</UIButton> </UIButton>

View File

@@ -24,8 +24,8 @@ const exportNotes = async () => {
} }
const showDeleteAccountDialog = ref(false) const showDeleteAccountDialog = ref(false)
const deleteAccount = () => { const deleteAccount = async () => {
console.log('delete account') await user.value?.delete()
} }
const showEncryptionDialog = ref(false) const showEncryptionDialog = ref(false)
@@ -71,7 +71,7 @@ const toggleEncryption = async () => {
<div>{{ user?.email }}</div> <div>{{ user?.email }}</div>
</div> </div>
<div class="w-full flex-row sm:flex"> <div class="w-full flex-row sm:flex">
<div class="font-bold sm:w-4/12">Verified</div> <div class="font-bold sm:w-4/12">Account status</div>
<div class="col-auto"> <div class="col-auto">
<UIBadge :color="user?.emailVerified ? 'success' : 'warning'"> <UIBadge :color="user?.emailVerified ? 'success' : 'warning'">
{{ user?.emailVerified ? 'Verified' : 'Not yet verified' }} {{ user?.emailVerified ? 'Verified' : 'Not yet verified' }}

View File

@@ -40,8 +40,15 @@ const styleClass = computed(() => {
}) })
</script> </script>
<template> <template>
<label class="dui-btn duration-0" :class="styleClass" v-if="props.dropdown" tabindex="0"> <label
class="dui-btn h-auto px-3 py-2 duration-0"
:class="styleClass"
v-if="props.dropdown"
tabindex="0"
>
<slot></slot> <slot></slot>
</label> </label>
<button class="dui-btn duration-0" :class="styleClass" v-else><slot></slot></button> <button class="dui-btn h-auto px-3 py-2 duration-0" :class="styleClass" v-else>
<slot></slot>
</button>
</template> </template>

View File

@@ -1,6 +1,6 @@
import shortid from 'shortid' import shortid from 'shortid'
import { useTitle } from '@vueuse/core' import { useTitle } from '@vueuse/core'
import { doc, getDoc, updateDoc, deleteField } from 'firebase/firestore' import { doc, getDoc, setDoc } from 'firebase/firestore'
import { viewModes, activeViewMode } from '@/composables/useViewMode' import { viewModes, activeViewMode } from '@/composables/useViewMode'
import { initialized, user, db } from '@/composables/useFirebase' import { initialized, user, db } from '@/composables/useFirebase'
import { decryptNotes, encryptNotes, encryptionKey } from '@/composables/useEncryption' import { decryptNotes, encryptNotes, encryptionKey } from '@/composables/useEncryption'
@@ -45,23 +45,22 @@ const syncNotesLocal = (notes: BaseNotes) => {
localStorage.setItem('notes', JSON.stringify(notes)) localStorage.setItem('notes', JSON.stringify(notes))
} }
export const syncNotesToFirebase = async (newNotes: BaseNotes, oldNotes?: BaseNotes) => { // export const syncNotesToFirebase = async (newNotes: BaseNotes, oldNotes?: BaseNotes) => {
export const syncNotesToFirebase = async (baseNotes: BaseNotes) => {
if (!db.value) throw Error("Database undefined, can't sync to Firebase") if (!db.value) throw Error("Database undefined, can't sync to Firebase")
if (!user.value) throw Error("User undefined, can't sync to Firebase") if (!user.value) throw Error("User undefined, can't sync to Firebase")
const notes = encryptionKey.value const notes = encryptionKey.value ? encryptNotes(baseNotes, encryptionKey.value) : baseNotes
? encryptNotes(baseNotes.value, encryptionKey.value)
: baseNotes.value
try { try {
const docRef = doc(db.value, 'pages', user.value.uid) const docRef = doc(db.value, 'pages', user.value.uid)
if (oldNotes) { // if (oldNotes) {
const notesToDelete = Object.keys(oldNotes).filter((x) => !Object.keys(newNotes).includes(x)) // const notesToDelete = Object.keys(oldNotes).filter((x) => !Object.keys(newNotes).includes(x))
await Promise.all( // await Promise.all(
notesToDelete.map((noteId: string) => { // notesToDelete.map((noteId: string) => {
return updateDoc(docRef, { [noteId]: deleteField() }) // return updateDoc(docRef, { [noteId]: deleteField() })
}) // })
) // )
} // }
await updateDoc(docRef, notes) await setDoc(docRef, notes)
} catch (error: any) { } catch (error: any) {
console.error(error) console.error(error)
} }
@@ -69,12 +68,12 @@ export const syncNotesToFirebase = async (newNotes: BaseNotes, oldNotes?: BaseNo
watch( watch(
baseNotes, baseNotes,
async (newBaseNotes, oldBaseNotes) => { async () => {
if (!activeNotesSource.value || Object.keys(baseNotes.value).length === 0) return if (!activeNotesSource.value || Object.keys(baseNotes.value).length === 0) return
if (activeNotesSource.value === 'local') { if (activeNotesSource.value === 'local') {
syncNotesLocal(baseNotes.value) syncNotesLocal(baseNotes.value)
} else if (activeNotesSource.value === 'firebase') { } else if (activeNotesSource.value === 'firebase') {
syncNotesToFirebase(newBaseNotes, oldBaseNotes) syncNotesToFirebase(baseNotes.value)
} }
}, },
{ deep: true } { deep: true }
@@ -262,8 +261,9 @@ export const getNotes = async () => {
} else if (activeNotesSource.value === 'firebase') { } else if (activeNotesSource.value === 'firebase') {
if (encryptionKey.value === undefined || !user.value || !db.value) return if (encryptionKey.value === undefined || !user.value || !db.value) return
const firebaseNotes = (await getDoc(doc(db.value, 'pages', user.value.uid))).data() as BaseNotes const firebaseNotes = (await getDoc(doc(db.value, 'pages', user.value.uid))).data() as BaseNotes
notes = encryptionKey.value ? decryptNotes(firebaseNotes, encryptionKey.value) : firebaseNotes notes = encryptionKey.value
console.log(encryptionKey.value) ? decryptNotes(firebaseNotes, encryptionKey.value)
: firebaseNotes || {}
console.log('get notes from firebase', notes) console.log('get notes from firebase', notes)
} }
baseNotes.value = parseBaseNotes(notes) baseNotes.value = parseBaseNotes(notes)