useSettings.ts 1006 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import { hasKeys } from '~/helpers/obj/hasKeys'
  2. import type { TSettings } from '~/types/settings'
  3. export const useSettings = defineStore('useSettings', () => {
  4. const { public: { APP_VERSION } } = useRuntimeConfig()
  5. function getFromLS(): TSettings {
  6. const LS = localStorage.getItem('settings')
  7. if (LS) {
  8. const parsed: object = JSON.parse(LS)
  9. if (typeof parsed === 'object') {
  10. if (hasKeys(parsed, ['dark', 'dev', 'debug']))
  11. return parsed as TSettings
  12. }
  13. }
  14. const defaultSettings: TSettings = {
  15. dark: true,
  16. dev: APP_VERSION.includes('dev'),
  17. debug: false,
  18. }
  19. localStorage.setItem('settings', JSON.stringify(defaultSettings))
  20. return defaultSettings
  21. }
  22. function updateLS(val: object) {
  23. localStorage.setItem('settings', JSON.stringify(val))
  24. }
  25. const settings = ref<TSettings>(getFromLS())
  26. // Sync ref with localStorage
  27. watch(settings.value, (val) => {
  28. updateLS(val)
  29. })
  30. return {
  31. settings,
  32. }
  33. })