diff --git a/resources/js/Components/AuthenticationCard.vue b/resources/js/Components/AuthenticationCard.vue
index 3291fe9a..30ffea9b 100644
--- a/resources/js/Components/AuthenticationCard.vue
+++ b/resources/js/Components/AuthenticationCard.vue
@@ -1,13 +1,9 @@
diff --git a/resources/js/Layouts/AppLayout.vue b/resources/js/Layouts/AppLayout.vue
index 1a70d90a..f63a2933 100644
--- a/resources/js/Layouts/AppLayout.vue
+++ b/resources/js/Layouts/AppLayout.vue
@@ -20,7 +20,7 @@ import {
import NavigationSidebarItem from '@/Components/NavigationSidebarItem.vue';
import UserSettingsIcon from '@/Components/UserSettingsIcon.vue';
import MainContainer from '@/packages/ui/src/MainContainer.vue';
-import { onMounted, ref, watch } from "vue";
+import { onMounted, ref } from "vue";
import NotificationContainer from '@/Components/NotificationContainer.vue';
import { initializeStores, refreshStores } from '@/utils/init';
import {
@@ -31,13 +31,13 @@ import {
canViewProjects, canViewReport,
canViewTags,
} from '@/utils/permissions';
-import {isBillingActivated, isInvoicingActivated} from '@/utils/billing';
+import { isBillingActivated, isInvoicingActivated } from '@/utils/billing';
import type { User } from '@/types/models';
import { ArrowsRightLeftIcon } from '@heroicons/vue/16/solid';
import { fetchToken, isTokenValid } from '@/utils/session';
import UpdateSidebarNotification from '@/Components/UpdateSidebarNotification.vue';
import BillingBanner from '@/Components/Billing/BillingBanner.vue';
-import { theme } from "@/utils/theme";
+import { useTheme } from "@/utils/theme";
defineProps({
title: String,
@@ -47,12 +47,7 @@ const showSidebarMenu = ref(false);
const isUnloading = ref(false);
onMounted(async () => {
- document.documentElement.classList.add(theme.value);
- watch(theme, (newTheme, oldTheme) => {
- document.documentElement.classList.remove(oldTheme);
- document.documentElement.classList.add(newTheme);
- });
-
+ useTheme()
// make sure that the initial requests are only loaded once, this can be removed once we move away from inertia
if (window.initialDataLoaded !== true) {
window.initialDataLoaded = true;
diff --git a/resources/js/Pages/SharedReport.vue b/resources/js/Pages/SharedReport.vue
index b73d7f67..59c615ac 100644
--- a/resources/js/Pages/SharedReport.vue
+++ b/resources/js/Pages/SharedReport.vue
@@ -14,6 +14,7 @@ import { api } from '@/packages/api/src';
import { getRandomColorWithSeed } from '@/packages/ui/src/utils/color';
import { useReportingStore } from '@/utils/useReporting';
import { Head } from '@inertiajs/vue3';
+import { useTheme } from "@/utils/theme";
const sharedSecret = ref(null);
@@ -136,6 +137,10 @@ function getGroupLabel(key: string) {
return option.value === key;
})?.label;
}
+onMounted(async () => {
+ useTheme();
+})
+
diff --git a/resources/js/utils/theme.ts b/resources/js/utils/theme.ts
index 5b17a83c..8f813b13 100644
--- a/resources/js/utils/theme.ts
+++ b/resources/js/utils/theme.ts
@@ -22,4 +22,12 @@ const theme = computed(() => {
return themeSetting.value
});
-export { type themeOption, themeSetting, theme };
+function useTheme() {
+ document.documentElement.classList.add(theme.value);
+ watch(theme, (newTheme, oldTheme) => {
+ document.documentElement.classList.remove(oldTheme);
+ document.documentElement.classList.add(newTheme);
+ });
+}
+
+export { type themeOption, themeSetting, theme, useTheme };