import { useMemo } from "react"; import { create } from "zustand"; import { createJSONStorage, persist } from "zustand/middleware"; import { type CurrencyCode, convertFromUsd, formatMoneyFromUsd, isCurrencyCode, } from "@/lib/currency"; type CurrencyState = { currency: CurrencyCode; setCurrency: (c: CurrencyCode) => void; }; export const useCurrencyStore = create()( persist( (set) => ({ currency: "USD", setCurrency: (currency) => set({ currency: isCurrencyCode(currency) ? currency : "USD" }), }), { name: "shitaye-currency", storage: createJSONStorage(() => localStorage), partialize: (s) => ({ currency: s.currency }), skipHydration: true, }, ), ); export function useCurrency() { const currency = useCurrencyStore((s) => s.currency); const setCurrency = useCurrencyStore((s) => s.setCurrency); return useMemo( () => ({ currency, setCurrency, formatUsd: (amountUsd: number, maximumFractionDigits: 0 | 1 | 2 = 2) => formatMoneyFromUsd(amountUsd, currency, maximumFractionDigits), convertUsd: (amountUsd: number) => convertFromUsd(amountUsd, currency), }), [currency, setCurrency], ); }