From ebb41dfc3993e000c6584d22acbe467f9707c08c Mon Sep 17 00:00:00 2001 From: kodaline Date: Thu, 10 Oct 2024 00:19:23 +0200 Subject: [PATCH 1/9] add: user dropdown Added a user dropdown to manage logout, theme change Current logged username is displayed as additional info refers to issue #93 --- components.d.ts | 6 ++++ src/components/Header.vue | 2 +- src/components/Logout.vue | 13 +++++++ src/components/ThemeButton.vue | 7 ++-- src/components/UserDropdown.vue | 61 +++++++++++++++++++++++++++++++++ src/stores/useMainStore.ts | 12 +++++++ 6 files changed, 96 insertions(+), 5 deletions(-) create mode 100644 src/components/Logout.vue create mode 100644 src/components/UserDropdown.vue diff --git a/components.d.ts b/components.d.ts index fc6c119..d782beb 100644 --- a/components.d.ts +++ b/components.d.ts @@ -28,18 +28,23 @@ declare module 'vue' { HeroiconsHome20Solid: typeof import('~icons/heroicons/home20-solid')['default'] HeroiconsInformationCircleSolid: typeof import('~icons/heroicons/information-circle-solid')['default'] HeroiconsLink20Solid: typeof import('~icons/heroicons/link20-solid')['default'] + HeroiconsLogout: typeof import('~icons/heroicons/logout')['default'] + HeroiconsLogoutSolid: typeof import('~icons/heroicons/logout-solid')['default'] HeroiconsMagnifyingGlass20Solid: typeof import('~icons/heroicons/magnifying-glass20-solid')['default'] HeroiconsMicrophoneSolid: typeof import('~icons/heroicons/microphone-solid')['default'] HeroiconsMoonSolid: typeof import('~icons/heroicons/moon-solid')['default'] + 'HeroiconsOutline:logout': typeof import('~icons/heroicons-outline/logout')['default'] HeroiconsPaperAirplaneSolid: typeof import('~icons/heroicons/paper-airplane-solid')['default'] HeroiconsSunSolid: typeof import('~icons/heroicons/sun-solid')['default'] HeroiconsTrashSolid: typeof import('~icons/heroicons/trash-solid')['default'] + HeroiconsUserSolid: typeof import('~icons/heroicons/user-solid')['default'] HeroiconsXMark20Solid: typeof import('~icons/heroicons/x-mark20-solid')['default'] InputBox: typeof import('./src/components/InputBox.vue')['default'] Listbox: typeof import('@headlessui/vue')['Listbox'] ListboxButton: typeof import('@headlessui/vue')['ListboxButton'] ListboxOption: typeof import('@headlessui/vue')['ListboxOption'] ListboxOptions: typeof import('@headlessui/vue')['ListboxOptions'] + Logout: typeof import('./src/components/Logout.vue')['default'] MemorySelect: typeof import('./src/components/MemorySelect.vue')['default'] Menu: typeof import('@headlessui/vue')['Menu'] MenuButton: typeof import('@headlessui/vue')['MenuButton'] @@ -80,5 +85,6 @@ declare module 'vue' { TransitionChild: typeof import('@headlessui/vue')['TransitionChild'] TransitionRoot: typeof import('@headlessui/vue')['TransitionRoot'] UseImage: typeof import('@vueuse/components')['UseImage'] + UserDropdown: typeof import('./src/components/UserDropdown.vue')['default'] } } diff --git a/src/components/Header.vue b/src/components/Header.vue index e4cf21a..8f30bb4 100644 --- a/src/components/Header.vue +++ b/src/components/Header.vue @@ -81,7 +81,7 @@ const showSettings = computed( diff --git a/src/components/Logout.vue b/src/components/Logout.vue new file mode 100644 index 0000000..03868ae --- /dev/null +++ b/src/components/Logout.vue @@ -0,0 +1,13 @@ + + + diff --git a/src/components/ThemeButton.vue b/src/components/ThemeButton.vue index 8a3dfbb..337ef79 100644 --- a/src/components/ThemeButton.vue +++ b/src/components/ThemeButton.vue @@ -4,7 +4,6 @@ import githubLight from 'highlight.js/styles/github.css?raw' import githubDark from 'highlight.js/styles/github-dark.css?raw' const store = useMainStore() -const { toggleDark } = store const { isDark } = storeToRefs(store) const { css } = useStyleTag(isDark.value ? githubDark : githubLight) @@ -15,9 +14,9 @@ watchEffect(() => { diff --git a/src/components/UserDropdown.vue b/src/components/UserDropdown.vue new file mode 100644 index 0000000..d765da4 --- /dev/null +++ b/src/components/UserDropdown.vue @@ -0,0 +1,61 @@ + + + diff --git a/src/stores/useMainStore.ts b/src/stores/useMainStore.ts index 013e86e..72609c1 100644 --- a/src/stores/useMainStore.ts +++ b/src/stores/useMainStore.ts @@ -83,12 +83,24 @@ export const useMainStore = defineStore('main', () => { }, }) + const logoutCurrentUser = () => { + const cookies = document.cookie.split(";"); + + cookies.forEach(cookie => { + const name = cookie.split("=")[0].trim(); + document.cookie = `${name}=;path=/;domain=${window.location.hostname};`; + }) + cookie.value = '' + window.location.href = window.location.origin + '/auth/login' // this is horrible coding, TODO also use parameter for /auth/login + } + return { isDark, pluginsFilters, toggleDark, cookie, jwtPayload, + logoutCurrentUser, } }) From e28cee3812ed7ac3cc2b999c0d9d4e215fc33c19 Mon Sep 17 00:00:00 2001 From: kodaline Date: Thu, 10 Oct 2024 00:30:58 +0200 Subject: [PATCH 2/9] imp: user button styling change --- src/components/UserDropdown.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/UserDropdown.vue b/src/components/UserDropdown.vue index d765da4..ee16636 100644 --- a/src/components/UserDropdown.vue +++ b/src/components/UserDropdown.vue @@ -19,7 +19,7 @@ watchEffect(() => {