Skip to content

Commit 59dd38b

Browse files
committed
separate db data from storage context provider
1 parent 37406e3 commit 59dd38b

File tree

4 files changed

+30
-23
lines changed

4 files changed

+30
-23
lines changed

src/pages/Home/Home.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
import { CurrencyMapProvider } from "@/utils/CurrencyMapProvider";
2-
import { StorageProvider } from "@/utils/StorageProvider";
32
import { CalculationView } from "./CalculationView";
43

54
export const Home = () => (
65
<CurrencyMapProvider mode='latest'>
7-
<StorageProvider>
8-
<CalculationView />
9-
</StorageProvider>
6+
<CalculationView />
107
</CurrencyMapProvider>
118
);

src/routes/layout/MainLayout.tsx

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,23 @@ import { Footer } from "./Footer";
66

77
import { AuthGuard } from "@/utils/AuthGuard";
88
import ErrorBoundary from "@/components/ErrorBoundary";
9+
import { StorageProvider } from "@/utils/StorageProvider";
910

1011
export function MainLayout() {
1112
return (
1213
<div className='flex flex-col gap-4 min-h-screen overflow-x-hidden'>
1314
<AuthGuard>
14-
<ErrorBoundary>
15-
<Header />
16-
<SideMenu />
15+
<StorageProvider>
16+
<ErrorBoundary>
17+
<Header />
18+
<SideMenu />
1719

18-
<div className='w-full flex flex-1 justify-center px-4'>
19-
<Outlet />
20-
</div>
21-
<Footer />
22-
</ErrorBoundary>
20+
<div className='w-full flex flex-1 justify-center px-4'>
21+
<Outlet />
22+
</div>
23+
<Footer />
24+
</ErrorBoundary>
25+
</StorageProvider>
2326
</AuthGuard>
2427
</div>
2528
);

src/utils/CurrencyMapProvider.tsx

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
import { useContext, useEffect, useState, type PropsWithChildren } from "react";
22
import { collection, getDocs, limit, orderBy, query, where } from "firebase/firestore";
3-
import { DatabaseContext } from "@/context/DatabaseContext";
3+
import { sub } from "date-fns";
4+
5+
import { useStorage } from "@/hooks/useStorage";
6+
47
import { CenterChild } from "@/components/CenterChild";
58
import { Alert, AlertDescription, AlertTitle } from "@/components/shadcn/Alert";
69
import { Button } from "@/components/shadcn/Button";
710
import { Gears } from "@/components/Gears";
11+
12+
import { DatabaseContext } from "@/context/DatabaseContext";
813
import { CurrencyMapContext } from "@/context/CurrencyMapContext";
9-
import { sub } from "date-fns";
1014

1115
interface CurrencyMapProviderProps extends PropsWithChildren {
1216
mode: "latest" | "monthly";
@@ -15,6 +19,7 @@ interface CurrencyMapProviderProps extends PropsWithChildren {
1519
export function CurrencyMapProvider({ mode, children }: CurrencyMapProviderProps) {
1620
const db = useContext(DatabaseContext);
1721
const [currencyMap, setCurrencyMap] = useState<RateDefinitions[] | null>(null);
22+
const storage = useStorage();
1823

1924
const [error, setError] = useState<string | null>(null);
2025
const [isLoadingDelayed, setIsLoadingDelayed] = useState(false);
@@ -82,6 +87,16 @@ export function CurrencyMapProvider({ mode, children }: CurrencyMapProviderProps
8287
return () => clearTimeout(loadingDelayTimeout);
8388
}, [db, mode]);
8489

90+
useEffect(() => {
91+
if (currencyMap?.length) {
92+
const latest = currencyMap.slice(-1)[0];
93+
94+
if (storage.cache?.meta.createdAt !== latest.meta.createdAt) {
95+
storage.setCache(latest);
96+
}
97+
}
98+
}, [currencyMap, storage.cache]);
99+
85100
if (error) {
86101
return (
87102
<CenterChild>

src/utils/StorageProvider.tsx

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
import { useEffect, useMemo, useState, type PropsWithChildren } from "react";
1+
import { useMemo, useState, type PropsWithChildren } from "react";
22

33
import { getCache, getPreferences, setCache, setPreferences } from "./storage";
44
import { StorageContext } from "../context/StorageContext";
5-
import { useCurrencyMapData } from "../hooks/useCurrencyMap";
65

76
export function StorageProvider(props: PropsWithChildren) {
8-
const currencyMap = useCurrencyMapData()![0];
97
const [cacheState, setCacheState] = useState(getCache());
108
const [preferencesState, setPreferencesState] = useState(getPreferences());
119

@@ -37,11 +35,5 @@ export function StorageProvider(props: PropsWithChildren) {
3735
[cacheState, preferencesState]
3836
);
3937

40-
useEffect(() => {
41-
if (currencyMap) {
42-
update("cache", currencyMap);
43-
}
44-
}, [currencyMap]);
45-
4638
return <StorageContext.Provider value={value}>{props.children}</StorageContext.Provider>;
4739
}

0 commit comments

Comments
 (0)