Commit 266f20b1 by G

feat : Setup redux store and api for the authentication feature (for the moment)

parent 53375ad1
......@@ -2,32 +2,37 @@ import ProvideQueryClient from "@components/providers_wrappers/ProvideQueryClien
import { LOG } from "@logger";
import { NavigationContainer } from "@react-navigation/native";
import { ThemeProvider } from "@shopify/restyle";
import { SafeAreaProvider } from "react-native-safe-area-context";
import { injectStoreIntoAxiosInstance } from "@/axios";
import { ModalsManagerProvider } from "@/contexts/ModalsManagerContext";
import { UserAuthenticationContextProvider } from "@/contexts/UserAuthenticationContext";
import { AppMainStackNavigatorAuthWrapper } from "@/navigations/AppMainStackNavigator";
import theme from "@/themes/Theme";
import "react-native-gesture-handler";
import "react-native-reanimated";
import { SafeAreaProvider } from "react-native-safe-area-context";
import { Provider } from "react-redux";
import { store } from "./src/redux";
const log = LOG.extend("App");
injectStoreIntoAxiosInstance(store);
export default function App() {
log.verbose("App started...");
return (
<ThemeProvider theme={theme}>
<ModalsManagerProvider>
<SafeAreaProvider>
<ProvideQueryClient>
<UserAuthenticationContextProvider>
<NavigationContainer>
<AppMainStackNavigatorAuthWrapper />
</NavigationContainer>
</UserAuthenticationContextProvider>
</ProvideQueryClient>
</SafeAreaProvider>
</ModalsManagerProvider>
</ThemeProvider>
<Provider store={store}>
<ThemeProvider theme={theme}>
<ModalsManagerProvider>
<SafeAreaProvider>
<ProvideQueryClient>
<UserAuthenticationContextProvider>
<NavigationContainer>
<AppMainStackNavigatorAuthWrapper />
</NavigationContainer>
</UserAuthenticationContextProvider>
</ProvideQueryClient>
</SafeAreaProvider>
</ModalsManagerProvider>
</ThemeProvider>
</Provider>
);
}
import { axiosInstance } from "@/axios";
import type { LoginPayload, Token } from "./types";
export const login = (data: LoginPayload) => {
return axiosInstance.post<Token>("/login/token/", data);
};
// On this one you just provide the bear token and its should return the userData.
export const getUserData = () => {
return axiosInstance.get<Token>("/login/token/");
};
import type { PayloadAction } from "@reduxjs/toolkit";
import { createSlice } from "@reduxjs/toolkit";
import type { Token, UserData, UserDataAndToken } from "./types";
export interface AuthState {
isAuthenticated: boolean;
user: UserData;
token: Token;
}
const initialState: AuthState = {
isAuthenticated: false,
user: {} as UserData,
token: {} as Token,
};
export const authSlice = createSlice({
name: "auth",
initialState: initialState,
reducers: {
login: (state, action: PayloadAction<UserDataAndToken>) => {
state.isAuthenticated = true;
state.user = action.payload.user;
state.token = action.payload.tokens;
},
logout: (state) => {
state = initialState;
},
},
});
export const { login, logout } = authSlice.actions;
export const authReducer = authSlice.reducer;
export type UserData = {
id: number;
username: string;
email: string;
first_name: string;
last_name: string;
role: string;
marchand: number;
};
export type Token = {
access: string;
refresh: string;
};
export type LoginPayload = {
username: string;
password: string;
};
export type UserDataAndToken = {
user: UserData;
tokens: Token;
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment