📦 EqualifyEverything / equalify

📄 useGlobalStore.ts · 54 lines
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54import { toast } from 'sonner'
import { create } from 'zustand'
import { persist } from 'zustand/middleware'

interface EqualifyState {
  loading: boolean|string
  setLoading: (val: string|boolean) => void
  darkMode: boolean
  setDarkMode: (val: boolean) => void
  auditsTableView: string
  setAuditsTableView: (val:string) => void
  authenticated: boolean
  setAuthenticated: (val: boolean) => void
  ssoAuthenticated: boolean
  setSsoAuthenticated: (val: boolean) => void
  announceMessage: string
  setAnnounceMessage: (val:string, style?:"normal"|"success"|"error", screenReaderOnly?: boolean) => void
}

export const useGlobalStore = create<EqualifyState>()(
    persist(
        (set) => ({
            loading: false,
            setLoading: (val) => set(() => ({ loading: val })),
            darkMode: false,
            setDarkMode: (val) => set(() => ({ darkMode: val })),
            auditsTableView: "cards",
            setAuditsTableView: (val) => set(()=>({ auditsTableView: val })),
            authenticated: false,
            setAuthenticated: (val) => set(() => ({ authenticated: val })),
            ssoAuthenticated: false,
            setSsoAuthenticated: (val) => set(() => ({ ssoAuthenticated: val })),
            announceMessage: "",
            setAnnounceMessage: (val, style = "normal", setScreenReaderOnly = false) => { 
                set(() => ({ announceMessage: val })); 
                if(!setScreenReaderOnly){
                    switch(style){
                        case 'success': toast.success(val);
                            return;
                        case 'error': toast.error(val);
                            return;
                        default: toast(val);
                    }
                }
            },
        }), {
        name: 'equalify-storage',
        partialize: (state) => ({
            darkMode: state.darkMode,
            authenticated: state.authenticated,
            ssoAuthenticated: state.ssoAuthenticated,
        })
    })
);