xref: /expo/apps/router-e2e/__e2e__/auth/ctx.tsx (revision 23bf856e)
1import { router } from 'expo-router';
2import React from 'react';
3import { useStorageState } from './useStorageState';
4
5const AuthContext = React.createContext(null);
6
7// This hook can be used to access the user info.
8export function useSession() {
9  const value = React.useContext(AuthContext);
10  if (!value && process.env.NODE_ENV !== 'production') {
11    throw new Error('`useSession` must be wrapped in a <SessionProvider />');
12  }
13
14  return value;
15}
16
17export function SessionProvider(props) {
18  const [[isLoading, session], setSession] = useStorageState('session');
19
20  return (
21    <AuthContext.Provider
22      value={{
23        signIn: () => {
24          setSession('xxx');
25          router.replace('/');
26        },
27        signOut: () => {
28          setSession(null);
29        },
30        user: session,
31        isLoading,
32      }}>
33      {props.children}
34    </AuthContext.Provider>
35  );
36}
37