use jotai for all states (#19)

This commit is contained in:
Doh
2025-01-04 11:20:36 -05:00
committed by GitHub
parent 306242f2ec
commit ad05a46206
18 changed files with 212 additions and 243 deletions

View File

@@ -14,7 +14,7 @@ import {
DATA_DEFAULTS,
getDefaultSettings
} from '@/lib/types'
import { d2t, getNow, getNowInMilliseconds } from '@/lib/utils';
import { d2t, getNow } from '@/lib/utils';
function getDefaultData<T>(type: DataType): T {
return DATA_DEFAULTS[type]() as T;
@@ -65,8 +65,12 @@ async function saveData<T>(type: DataType, data: T): Promise<void> {
}
// Wishlist specific functions
export async function loadWishlistData(): Promise<WishlistData> {
return loadData<WishlistData>('wishlist')
}
export async function loadWishlistItems(): Promise<WishlistItemType[]> {
const data = await loadData<WishlistData>('wishlist')
const data = await loadWishlistData()
return data.items
}

View File

@@ -5,7 +5,7 @@ import { Toaster } from '@/components/ui/toaster'
import { JotaiProvider } from '@/components/jotai-providers'
import { Suspense } from 'react'
import { JotaiHydrate } from '@/components/jotai-hydrate'
import { loadSettings } from './actions/data'
import { loadSettings, loadHabitsData, loadCoinsData, loadWishlistData } from './actions/data'
// Inter (clean, modern, excellent readability)
const inter = Inter({
subsets: ['latin'],
@@ -32,13 +32,26 @@ export default async function RootLayout({
}: {
children: React.ReactNode
}) {
const initialSettings = await loadSettings()
const [initialSettings, initialHabits, initialCoins, initialWishlist] = await Promise.all([
loadSettings(),
loadHabitsData(),
loadCoinsData(),
loadWishlistData()
])
return (
<html lang="en">
<body className={activeFont.className}>
<JotaiProvider>
<Suspense fallback="loading">
<JotaiHydrate initialSettings={initialSettings}>
<JotaiHydrate
initialValues={{
settings: initialSettings,
habits: initialHabits,
coins: initialCoins,
wishlist: initialWishlist
}}
>
{children}
</JotaiHydrate>
</Suspense>