From 85e5bc887f37aa501cab8145a8d32c76b8f9114d Mon Sep 17 00:00:00 2001 From: Ajay Bura <32841439+ajbura@users.noreply.github.com> Date: Sat, 31 Dec 2022 19:02:43 +0530 Subject: [PATCH] Add settings atom --- src/app/state/settings.ts | 47 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/app/state/settings.ts diff --git a/src/app/state/settings.ts b/src/app/state/settings.ts new file mode 100644 index 00000000..d9eac0aa --- /dev/null +++ b/src/app/state/settings.ts @@ -0,0 +1,47 @@ +import { atom } from 'jotai'; + +export interface Settings { + themeIndex: number; + useSystemTheme: boolean; + isMarkdown: boolean; + isPeopleDrawer: boolean; + + hideMembershipEvents: boolean; + hideNickAvatarEvents: boolean; + + showNotifications: boolean; + isNotificationSounds: boolean; +} + +const defaultSettings: Settings = { + themeIndex: 0, + useSystemTheme: true, + isMarkdown: true, + isPeopleDrawer: true, + + hideMembershipEvents: false, + hideNickAvatarEvents: true, + + showNotifications: true, + isNotificationSounds: true, +}; + +export const getSettings = () => { + const settings = localStorage.getItem('settings'); + if (settings === null) return defaultSettings; + return JSON.parse(settings) as Settings; +}; + +export const setSettings = (settings: Settings) => { + const STORAGE_KEY = 'settings'; + localStorage.setItem(STORAGE_KEY, JSON.stringify(settings)); +}; + +const baseSettings = atom(getSettings()); +export const settingsAtom = atom( + (get) => get(baseSettings), + (get, set, update) => { + set(baseSettings, update); + setSettings(update); + } +);