Files
supabase/examples/ReactNativeTodoList/native/components/UserContext.js
2021-12-29 23:51:51 +05:30

45 lines
1.1 KiB
JavaScript

import React, {useEffect, useState, createContext, useContext} from 'react';
import {supabaseClient} from '../lib/initSupabase';
export const UserContext = createContext({
user: null,
session: null,
});
export const UserContextProvider = props => {
const [session, setSession] = useState(null);
const [user, setUser] = useState(null);
useEffect(() => {
const session = supabaseClient.auth.session();
setSession(session);
setUser(session?.user ?? null);
const {data: authListener} = supabaseClient.auth.onAuthStateChange(
async (event, session) => {
console.log(`Supabase auth event: ${event}`);
setSession(session);
setUser(session?.user ?? null);
},
);
return () => {
authListener.unsubscribe();
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const value = {
session,
user,
};
return <UserContext.Provider value={value} {...props} />;
};
export const useUser = () => {
const context = useContext(UserContext);
if (context === undefined) {
throw new Error('useUser must be used within a UserContextProvider.');
}
return context;
};