From 57ba84107c24168890510e099c6b5ea0cf5f8606 Mon Sep 17 00:00:00 2001 From: Jai A Date: Thu, 25 Jul 2024 17:38:37 -0700 Subject: [PATCH] Revert "Rewrite cosmetics and theme preferences (#1292)" This reverts commit 8704d3acb35e8a0c5c5a53c4f5c4f5532aae749a. --- apps/frontend/nuxt.config.ts | 8 -- .../src/components/ui/charts/ChartDisplay.vue | 2 +- apps/frontend/src/composables/cosmetics.js | 52 +++++++ .../src/composables/nuxt-accessors.ts | 7 - apps/frontend/src/composables/theme.js | 58 ++++++++ apps/frontend/src/composables/vue.ts | 14 -- apps/frontend/src/layouts/default.vue | 18 ++- apps/frontend/src/pages/app.vue | 2 +- .../src/pages/auth/reset-password.vue | 2 +- apps/frontend/src/pages/auth/sign-in.vue | 2 +- apps/frontend/src/pages/auth/sign-up.vue | 2 +- apps/frontend/src/pages/collection/[id].vue | 1 + apps/frontend/src/pages/index.vue | 4 +- .../src/pages/search/[searchProjectType].vue | 1 + apps/frontend/src/pages/settings/index.vue | 69 ++++++---- apps/frontend/src/pages/user/[id].vue | 1 + apps/frontend/src/plugins/1.theme.js | 27 ++++ apps/frontend/src/plugins/cosmetics.ts | 57 -------- apps/frontend/src/plugins/theme.ts | 130 ------------------ apps/frontend/src/server/plugins/theme.js | 38 +++++ apps/frontend/src/utils/analytics.js | 21 ++- 21 files changed, 248 insertions(+), 268 deletions(-) create mode 100644 apps/frontend/src/composables/cosmetics.js delete mode 100644 apps/frontend/src/composables/nuxt-accessors.ts create mode 100644 apps/frontend/src/composables/theme.js delete mode 100644 apps/frontend/src/composables/vue.ts create mode 100644 apps/frontend/src/plugins/1.theme.js delete mode 100644 apps/frontend/src/plugins/cosmetics.ts delete mode 100644 apps/frontend/src/plugins/theme.ts create mode 100644 apps/frontend/src/server/plugins/theme.js diff --git a/apps/frontend/nuxt.config.ts b/apps/frontend/nuxt.config.ts index 513fd5e93..e8de813c9 100644 --- a/apps/frontend/nuxt.config.ts +++ b/apps/frontend/nuxt.config.ts @@ -392,14 +392,6 @@ export default defineNuxtConfig({ autoprefixer: {}, }, }, - routeRules: { - "/**": { - headers: { - "Accept-CH": "Sec-CH-Prefers-Color-Scheme", - "Critical-CH": "Sec-CH-Prefers-Color-Scheme", - }, - }, - }, compatibilityDate: "2024-07-03", }); diff --git a/apps/frontend/src/components/ui/charts/ChartDisplay.vue b/apps/frontend/src/components/ui/charts/ChartDisplay.vue index 36a603f58..852c687de 100644 --- a/apps/frontend/src/components/ui/charts/ChartDisplay.vue +++ b/apps/frontend/src/components/ui/charts/ChartDisplay.vue @@ -162,7 +162,7 @@
+ useState("cosmetics", () => { + const cosmetics = useCookie("cosmetics", { + maxAge: 60 * 60 * 24 * 365 * 10, + sameSite: "lax", + secure: true, + httpOnly: false, + path: "/", + }); + + if (!cosmetics.value) { + cosmetics.value = { + searchLayout: false, + projectLayout: false, + advancedRendering: true, + externalLinksNewTab: true, + notUsingBlockers: false, + hideModrinthAppPromos: false, + preferredDarkTheme: "dark", + searchDisplayMode: { + mod: "list", + plugin: "list", + resourcepack: "gallery", + modpack: "list", + shader: "gallery", + datapack: "list", + user: "list", + collection: "list", + }, + hideStagingBanner: false, + }; + } + + return cosmetics.value; + }); + +export const saveCosmetics = () => { + const cosmetics = useCosmetics(); + + console.log("SAVING COSMETICS:"); + console.log(cosmetics); + + const cosmeticsCookie = useCookie("cosmetics", { + maxAge: 60 * 60 * 24 * 365 * 10, + sameSite: "lax", + secure: true, + httpOnly: false, + path: "/", + }); + + cosmeticsCookie.value = cosmetics.value; +}; diff --git a/apps/frontend/src/composables/nuxt-accessors.ts b/apps/frontend/src/composables/nuxt-accessors.ts deleted file mode 100644 index 5130f6268..000000000 --- a/apps/frontend/src/composables/nuxt-accessors.ts +++ /dev/null @@ -1,7 +0,0 @@ -export function useTheme() { - return useNuxtApp().$theme; -} - -export function useCosmetics() { - return useNuxtApp().$cosmetics; -} diff --git a/apps/frontend/src/composables/theme.js b/apps/frontend/src/composables/theme.js new file mode 100644 index 000000000..460ebdf1f --- /dev/null +++ b/apps/frontend/src/composables/theme.js @@ -0,0 +1,58 @@ +export const useTheme = () => + useState("theme", () => { + const colorMode = useCookie("color-mode", { + maxAge: 60 * 60 * 24 * 365 * 10, + sameSite: "lax", + secure: true, + httpOnly: false, + path: "/", + }); + + if (!colorMode.value) { + colorMode.value = { + value: "dark", + preference: "system", + }; + } + + if (colorMode.value.preference !== "system") { + colorMode.value.value = colorMode.value.preference; + } + + return colorMode.value; + }); + +export const updateTheme = (value, updatePreference = false) => { + const theme = useTheme(); + const cosmetics = useCosmetics(); + + const themeCookie = useCookie("color-mode", { + maxAge: 60 * 60 * 24 * 365 * 10, + sameSite: "lax", + secure: true, + httpOnly: false, + path: "/", + }); + + if (value === "system") { + theme.value.preference = "system"; + + const colorSchemeQueryList = window.matchMedia("(prefers-color-scheme: light)"); + if (colorSchemeQueryList.matches) { + theme.value.value = "light"; + } else { + theme.value.value = cosmetics.value.preferredDarkTheme; + } + } else { + theme.value.value = value; + if (updatePreference) theme.value.preference = value; + } + + if (import.meta.client) { + document.documentElement.className = `${theme.value.value}-mode`; + } + + themeCookie.value = theme.value; +}; + +export const DARK_THEMES = ["dark", "oled", "retro"]; diff --git a/apps/frontend/src/composables/vue.ts b/apps/frontend/src/composables/vue.ts deleted file mode 100644 index cf49bc462..000000000 --- a/apps/frontend/src/composables/vue.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Creates a computed reference that uses a provide getter function called with an argument representing the current mount state of the component. - * @param getter A getter function that will run with `mounted` argument representing whether or not the component is mounted. - * @returns A computed reference that changes when component becomes mounted or unmounted. - */ -export function useMountedValue(getter: (isMounted: boolean) => T) { - const mounted = ref(getCurrentInstance()?.isMounted ?? false); - - onMounted(() => (mounted.value = true)); - - onUnmounted(() => (mounted.value = false)); - - return computed(() => getter(mounted.value)); -} diff --git a/apps/frontend/src/layouts/default.vue b/apps/frontend/src/layouts/default.vue index 863ad8b31..4be98be2a 100644 --- a/apps/frontend/src/layouts/default.vue +++ b/apps/frontend/src/layouts/default.vue @@ -62,7 +62,7 @@ :title="formatMessage(messages.changeTheme)" @click="changeTheme" > -