import type { ImainStackNavigator } from "@/navigations/Types"; import type { IuserInformations } from "@/utils/requests/Types"; import { type NavigationProp, useNavigation } from "@react-navigation/native"; import { createContext, useCallback, useContext, useState } from "react"; import type { IauthenticationData } from "./Types"; export interface UserAuthenticationContextProps { isAuthenticated: boolean; setIsAuthenticated: React.Dispatch>; setAuthenticationData: React.Dispatch>; userInformations: IuserInformations; setUserInformations: React.Dispatch>; logout: () => void; } export const UserAuthenticationContext = createContext({ isAuthenticated: false, setIsAuthenticated: () => {}, setAuthenticationData: () => {}, userInformations: { username: "", email: "", // biome-ignore lint/style/useNamingConvention: first_name: "", // biome-ignore lint/style/useNamingConvention: last_name: "", marchand: { // biome-ignore lint/style/useNamingConvention: marchand_id: "", nom: "", code: "", adresse: "", // biome-ignore lint/style/useNamingConvention: url_succes: "", // biome-ignore lint/style/useNamingConvention: url_echec: "", entreprise: 0, user: 0, }, }, setUserInformations: () => {}, logout: () => {}, }); export const UserAuthenticationContextProvider = ({ children }: { children: React.ReactNode }) => { const [isAuthenticated, setIsAuthenticated] = useState(false); const [authenticationData, setAuthenticationData] = useState({ access: "", refresh: "", }); const [userInformations, setUserInformations] = useState({ username: "JohnDoe", email: "JohnDoe@example.com", // biome-ignore lint/style/useNamingConvention: first_name: "John", // biome-ignore lint/style/useNamingConvention: last_name: "Doe", marchand: { // biome-ignore lint/style/useNamingConvention: marchand_id: "id123", nom: "Beasy", code: "BEASY-EXAMPLE-1", adresse: "Plateau 2, 1023, Immeuble Chardy", // biome-ignore lint/style/useNamingConvention: url_succes: "https://example.com/success", // biome-ignore lint/style/useNamingConvention: url_echec: "https://example.com/echec", entreprise: 0, user: 0, }, }); // Hoooks const navigation = useNavigation>(); const logout = useCallback(() => { setIsAuthenticated(false); setAuthenticationData({ access: "", refresh: "", }); setUserInformations({ username: "", email: "", // biome-ignore lint/style/useNamingConvention: first_name: "", // biome-ignore lint/style/useNamingConvention: last_name: "", marchand: { // biome-ignore lint/style/useNamingConvention: marchand_id: "", nom: "", code: "", adresse: "", // biome-ignore lint/style/useNamingConvention: url_succes: "", // biome-ignore lint/style/useNamingConvention: url_echec: "", entreprise: 0, user: 0, }, }); navigation.reset({ index: 0, routes: [{ name: "userLoginScreen" }], }); }, [navigation]); return ( {children} ); }; export const useUserAuthenticationContext = () => { return useContext(UserAuthenticationContext); };