From 3c04667e5ecba3c06688387c4bad14dc365e8950 Mon Sep 17 00:00:00 2001 From: iamsivin Date: Fri, 23 Aug 2024 12:35:05 +0530 Subject: [PATCH] feat: Rewrite appearance mixins to a composable --- .../commands/useAppearanceHotKeys.js | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 app/javascript/dashboard/routes/dashboard/commands/useAppearanceHotKeys.js diff --git a/app/javascript/dashboard/routes/dashboard/commands/useAppearanceHotKeys.js b/app/javascript/dashboard/routes/dashboard/commands/useAppearanceHotKeys.js new file mode 100644 index 000000000..795703740 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/commands/useAppearanceHotKeys.js @@ -0,0 +1,70 @@ +import { computed } from 'vue'; +import { useI18n } from 'dashboard/composables/useI18n'; +import { + ICON_APPEARANCE, + ICON_LIGHT_MODE, + ICON_DARK_MODE, + ICON_SYSTEM_MODE, +} from './CommandBarIcons'; +import { LocalStorage } from 'shared/helpers/localStorage'; +import { LOCAL_STORAGE_KEYS } from 'dashboard/constants/localStorage'; +import { setColorTheme } from 'dashboard/helper/themeHelper.js'; + +const getThemeOptions = t => [ + { + key: 'light', + label: t('COMMAND_BAR.COMMANDS.LIGHT_MODE'), + icon: ICON_LIGHT_MODE, + }, + { + key: 'dark', + label: t('COMMAND_BAR.COMMANDS.DARK_MODE'), + icon: ICON_DARK_MODE, + }, + { + key: 'auto', + label: t('COMMAND_BAR.COMMANDS.SYSTEM_MODE'), + icon: ICON_SYSTEM_MODE, + }, +]; + +const setAppearance = theme => { + LocalStorage.set(LOCAL_STORAGE_KEYS.COLOR_SCHEME, theme); + const isOSOnDarkMode = window.matchMedia( + '(prefers-color-scheme: dark)' + ).matches; + setColorTheme(isOSOnDarkMode); +}; + +export function useAppearanceHotKeys() { + const { t } = useI18n(); + + const themeOptions = computed(() => getThemeOptions(t)); + + const goToAppearanceHotKeys = computed(() => { + const options = themeOptions.value.map(theme => ({ + id: theme.key, + title: theme.label, + parent: 'appearance_settings', + section: t('COMMAND_BAR.SECTIONS.APPEARANCE'), + icon: theme.icon, + handler: () => { + setAppearance(theme.key); + }, + })); + return [ + { + id: 'appearance_settings', + title: t('COMMAND_BAR.COMMANDS.CHANGE_APPEARANCE'), + section: t('COMMAND_BAR.SECTIONS.APPEARANCE'), + icon: ICON_APPEARANCE, + children: options.map(option => option.id), + }, + ...options, + ]; + }); + + return { + goToAppearanceHotKeys, + }; +}