diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 02c42926..210e93fa 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -9,8 +9,9 @@ diff --git a/frontend/src/components/Layouts/AppSidebar.vue b/frontend/src/components/Layouts/AppSidebar.vue index 3d44cb97..d4906834 100644 --- a/frontend/src/components/Layouts/AppSidebar.vue +++ b/frontend/src/components/Layouts/AppSidebar.vue @@ -115,9 +115,9 @@ import { unreadNotificationsCount, notificationsStore, } from '@/stores/notifications' -import { FeatherIcon, TrialBanner, createResource } from 'frappe-ui' +import { FeatherIcon } from 'frappe-ui' import { useStorage } from '@vueuse/core' -import { computed, h, provide } from 'vue' +import { computed, h } from 'vue' const { getPinnedViews, getPublicViews } = viewsStore() const { toggle: toggleNotificationPanel } = notificationsStore() diff --git a/frontend/src/components/UserDropdown.vue b/frontend/src/components/UserDropdown.vue index b049ba03..b659c159 100644 --- a/frontend/src/components/UserDropdown.vue +++ b/frontend/src/components/UserDropdown.vue @@ -56,8 +56,8 @@ import { usersStore } from '@/stores/users' import { getSettings } from '@/stores/settings' import { showSettings } from '@/composables/settings' import { Dropdown } from 'frappe-ui' -import { useStorage } from '@vueuse/core' -import { computed, h, markRaw, onMounted } from 'vue' +import { theme, toggleTheme } from '@/stores/theme' +import { computed, h, markRaw } from 'vue' const props = defineProps({ isCollapsed: { @@ -72,8 +72,6 @@ const { getUser } = usersStore() const user = computed(() => getUser() || {}) -const theme = useStorage('theme', 'light') - const dropdownItems = computed(() => { if (!settings.value?.dropdown_items) return [] @@ -165,16 +163,4 @@ function getStandardItem(item) { } } } - -function toggleTheme() { - const currentTheme = document.documentElement.getAttribute('data-theme') - theme.value = currentTheme === 'dark' ? 'light' : 'dark' - document.documentElement.setAttribute('data-theme', theme.value) -} - -onMounted(() => { - if (['light', 'dark'].includes(theme.value)) { - document.documentElement.setAttribute('data-theme', theme.value) - } -}) diff --git a/frontend/src/stores/theme.js b/frontend/src/stores/theme.js new file mode 100644 index 00000000..50d4e67d --- /dev/null +++ b/frontend/src/stores/theme.js @@ -0,0 +1,16 @@ +import { useStorage } from '@vueuse/core' + +export const theme = useStorage('theme', 'light') + +export function toggleTheme() { + const currentTheme = document.documentElement.getAttribute('data-theme') + theme.value = currentTheme === 'dark' ? 'light' : 'dark' + document.documentElement.setAttribute('data-theme', theme.value) +} + +export function setTheme(value) { + theme.value = value || theme.value + if (['light', 'dark'].includes(theme.value)) { + document.documentElement.setAttribute('data-theme', theme.value) + } +}