reactnative_mobilemk/lib/globalProvider.tsx

75 lines
1.8 KiB
TypeScript

import React, { createContext, useContext, ReactNode, useEffect } from "react";
import { saveUserToDatabase } from "./appwrite";
import { getCurrentUser } from "./appwrite";
import { useAppwrite } from "./useAppwrite";
import { Redirect } from "expo-router";
// import {replace} from "@remix-run/router";
import { config } from "./appwrite";
interface GlobalContextType {
isLoggedIn: boolean;
user: User | null;
loading: boolean;
refetch: (newParams?: Record<string, string | number>) => Promise<void>
}
interface User {
$id: string;
name: string;
email: string;
avatar: string;
}
const GlobalContext = createContext<GlobalContextType | undefined>(undefined);
interface GlobalProviderProps {
children: ReactNode;
}
export const GlobalProvider = ({ children }: {children: ReactNode}) => {
const {
data: user,
loading,
refetch,
} = useAppwrite({
fn: getCurrentUser,
});
useEffect(() => {
if (user && !loading) {
// Save user data when they first log in
saveUserToDatabase({
userId: user.$id,
name: user.name,
email: user.email,
avatar: user.avatar,
});
}
}, [user, loading]);
const isLoggedIn = !!user;
console.log(JSON.stringify(user));
return (
<GlobalContext.Provider
value={{
isLoggedIn,
user,
loading,
refetch,
}}
>
{children}
</GlobalContext.Provider>
);
};
export const useGlobalContext = (): GlobalContextType => {
const context = useContext(GlobalContext);
if (!context)
throw new Error("useGlobalContext must be used within a GlobalProvider");
return context;
};
export default GlobalProvider;