diff --git a/.gitignore b/.gitignore index ca8b0ae..1e10e19 100644 --- a/.gitignore +++ b/.gitignore @@ -31,7 +31,7 @@ yarn-error.* *.pem # local env files -.env*.local +.env # typescript *.tsbuildinfo diff --git a/app.json b/app.json index 38398b6..4eea95d 100644 --- a/app.json +++ b/app.json @@ -38,7 +38,8 @@ "backgroundColor": "#000000" } } - ] + ], + "expo-sqlite" ], "experiments": { "typedRoutes": true, diff --git a/app/_layout.tsx b/app/_layout.tsx index 467bfaa..62016ea 100644 --- a/app/_layout.tsx +++ b/app/_layout.tsx @@ -3,23 +3,50 @@ import 'react-native-reanimated'; import { authClient } from '@/lib/auth-client'; import { ZeroProvider } from '@rocicorp/zero/react'; -import { zero } from '@/lib/zero'; +import { useMemo } from 'react'; +import { authDataSchema } from '@/shared/src/auth'; +import { Platform } from 'react-native'; +import type { ZeroOptions } from '@rocicorp/zero'; +import { schema, type Schema } from '@/shared/src'; +import { expoSQLiteStoreProvider } from "@rocicorp/zero/react-native"; export const unstable_settings = { - anchor: '(tabs)', + anchor: 'index', }; +const kvStore = Platform.OS === "web" ? undefined : expoSQLiteStoreProvider(); export default function RootLayout() { - const { data, isPending } = authClient.useSession(); + const { data: session, isPending } = authClient.useSession(); + + const authData = useMemo(() => { + const result = authDataSchema.safeParse(session); + return result.success ? result.data : null; + }, [session]); + + const cookie = useMemo(() => { + return Platform.OS == 'web' ? undefined : authClient.getCookie(); + }, [session, isPending]); + + const zeroProps = useMemo(() => { + return { + storageKey: 'money', + kvStore, + server: 'http://localhost:4848', + userID: authData?.user.id ?? "anon", + schema, + // mutators: createMutators(), + auth: cookie, + } as const satisfies ZeroOptions; + }, [authData, cookie]); return ( - + - + - + diff --git a/app/index.tsx b/app/index.tsx index 62db9ac..a9247cc 100644 --- a/app/index.tsx +++ b/app/index.tsx @@ -5,15 +5,15 @@ import { useQuery, useZero } from "@rocicorp/zero/react"; import { queries } from '@money/shared'; export default function HomeScreen() { - const { data } = authClient.useSession(); + const { data: session } = authClient.useSession(); const onLogout = () => { authClient.signOut(); } - const [transactions] = useQuery(queries.allTransactions()); + const [transactions] = useQuery(queries.allTransactions(session)); return ( - Hello {data?.user.name} + Hello {session?.user.name}