foxygit / FORTIS Log in
commits tags

/fortis/src/store/useProfileStore.ts · 1.06 KB

raw
import { create } from 'zustand'
import { Profile, MacroGoals } from '../constants/types'
import { storageGet, storageSet, STORAGE_KEYS } from '../lib/storage'

interface ProfileStore {
  profile: Profile | null
  macroGoals: MacroGoals
  hasLoaded: boolean
  setProfile: (p: Profile) => Promise<void>
  setMacroGoals: (m: MacroGoals) => Promise<void>
  loadProfile: () => Promise<void>
}

const DEFAULT_MACROS: MacroGoals = { calories: 2200, proteinG: 165, carbsG: 220, fatG: 73 }

export const useProfileStore = create<ProfileStore>((set) => ({
  profile: null,
  macroGoals: DEFAULT_MACROS,
  hasLoaded: false,

  setProfile: async (p) => {
    set({ profile: p })
    await storageSet(STORAGE_KEYS.profile, p)
  },

  setMacroGoals: async (m) => {
    set({ macroGoals: m })
    await storageSet('fortis_macrogoals', m)
  },

  loadProfile: async () => {
    const profile = await storageGet<Profile | null>(STORAGE_KEYS.profile, null)
    const macroGoals = await storageGet<MacroGoals>('fortis_macrogoals', DEFAULT_MACROS)
    set({ profile, macroGoals, hasLoaded: true })
  },
}))