diff --git a/App.tsx b/App.tsx
index 545ecf6..809b222 100644
--- a/App.tsx
+++ b/App.tsx
@@ -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 (
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
);
}
diff --git a/src/features/auth/api.ts b/src/features/auth/api.ts
new file mode 100644
index 0000000..2239919
--- /dev/null
+++ b/src/features/auth/api.ts
@@ -0,0 +1,11 @@
+import { axiosInstance } from "@/axios";
+import type { LoginPayload, Token } from "./types";
+
+export const login = (data: LoginPayload) => {
+ return axiosInstance.post("/login/token/", data);
+};
+
+// On this one you just provide the bear token and its should return the userData.
+export const getUserData = () => {
+ return axiosInstance.get("/login/token/");
+};
diff --git a/src/features/auth/slice.ts b/src/features/auth/slice.ts
new file mode 100644
index 0000000..9eceeb4
--- /dev/null
+++ b/src/features/auth/slice.ts
@@ -0,0 +1,33 @@
+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) => {
+ 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;
diff --git a/src/features/auth/types.ts b/src/features/auth/types.ts
new file mode 100644
index 0000000..9aaa84f
--- /dev/null
+++ b/src/features/auth/types.ts
@@ -0,0 +1,24 @@
+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;
+};