Fixing logout

This commit is contained in:
Mitchell Magro 2025-07-25 19:52:11 +02:00
parent 2ed39615a5
commit eb1d24e807
5 changed files with 62 additions and 50 deletions

View File

@ -14,7 +14,7 @@ import AccountCircleIcon from "@mui/icons-material/AccountCircle";
import SettingsIcon from "@mui/icons-material/Settings";
import LogoutIcon from "@mui/icons-material/Logout";
import { useDispatch, useSelector } from "react-redux";
import { selectStatus } from "@/app/redux/auth/selectors";
import { selectIsLoggedIn, selectStatus } from "@/app/redux/auth/selectors";
import { logout } from "@/app/redux/auth/authSlice";
import { AppDispatch } from "@/app/redux/types";
import { useRouter } from "next/navigation";
@ -35,7 +35,7 @@ export default function AccountMenu() {
const router = useRouter();
// Select relevant state from your auth slice
// const isLoggedIn = useSelector(selectIsLoggedIn);
const isLoggedIn = useSelector(selectIsLoggedIn);
const authStatus = useSelector(selectStatus);
// Determine if we're currently in the process of logging out
@ -56,10 +56,12 @@ export default function AccountMenu() {
}
};
console.log("[isLoggedin]", isLoggedIn);
// Only show the logout button if the user is logged in
// if (!isLoggedIn) {
// return null;
// }
if (!isLoggedIn) {
return null;
}
return (
<>

View File

@ -1,9 +1,9 @@
// app/redux/ReduxProvider.tsx
"use client";
import React, { useEffect } from "react"; // Import useEffect
import React, { useEffect, useRef } from "react";
import { Provider } from "react-redux";
import { store } from "./store";
import { makeStore } from "./store";
import { initializeAuth } from "./auth/authSlice";
export default function ReduxProvider({
@ -11,14 +11,16 @@ export default function ReduxProvider({
}: {
children: React.ReactNode;
}) {
// Get the dispatch function directly from the store for initial dispatch
const dispatch = store.dispatch;
// Create a store instance for this client-side session
const storeRef = useRef<ReturnType<typeof makeStore>>(makeStore());
useEffect(() => {
// Dispatch initializeAuth when the ReduxProvider component mounts on the client.
// This ensures your Redux isLoggedIn state is synced with localStorage after a page refresh.
dispatch(initializeAuth());
}, [dispatch]); // Dependency array ensures it runs only once on mount
if (storeRef.current) {
storeRef.current.dispatch(initializeAuth() as any);
}
}, []);
return <Provider store={store}>{children}</Provider>;
return <Provider store={storeRef.current}>{children}</Provider>;
}

View File

@ -1,25 +1,25 @@
import { createSlice } from '@reduxjs/toolkit';
import { createSlice } from "@reduxjs/toolkit";
interface AdvancedSearchState {
keyword: string,
transactionID: string,
transactionReferenceId: string,
user: string,
currency: string,
state: string,
statusDescription: string,
transactionType: string,
paymentMethod: string,
psps: string,
initialPsps: string,
merchants: string,
startDate: null | string,
endDate: null | string,
lastUpdatedFrom: null | string,
lastUpdatedTo: null | string,
minAmount: string,
maxAmount: string,
channel: string,
keyword: string;
transactionID: string;
transactionReferenceId: string;
user: string;
currency: string;
state: string;
statusDescription: string;
transactionType: string;
paymentMethod: string;
psps: string;
initialPsps: string;
merchants: string;
startDate: null | string;
endDate: null | string;
lastUpdatedFrom: null | string;
lastUpdatedTo: null | string;
minAmount: string;
maxAmount: string;
channel: string;
}
const initialState: AdvancedSearchState = {
@ -45,12 +45,9 @@ const initialState: AdvancedSearchState = {
};
const advancedSearchSlice = createSlice({
name: 'advancedSearch',
name: "advancedSearch",
initialState,
reducers: {
},
},
);
reducers: {},
});
export default advancedSearchSlice.reducer;

View File

@ -1,8 +1,6 @@
import { RootState } from "../types";
export const selectIsLoggedIn = (state: RootState) =>
state.authSlice.isLoggedIn;
export const selectStatus = (state: RootState) => state.authSlice?.status;
export const selectError = (state: RootState) => state.authSlice?.error;
export const selectAuthMessage = (state: RootState) =>
state.authSlice?.authMessage;
export const selectIsLoggedIn = (state: RootState) => state.auth.isLoggedIn;
export const selectStatus = (state: RootState) => state.auth?.status;
export const selectError = (state: RootState) => state.auth?.error;
export const selectAuthMessage = (state: RootState) => state.auth?.authMessage;

View File

@ -2,9 +2,22 @@ import { configureStore } from "@reduxjs/toolkit";
import advancedSearchReducer from "./advanedSearch/advancedSearchSlice";
import authReducer from "./auth/authSlice";
export const store = configureStore({
reducer: {
advancedSearch: advancedSearchReducer,
authSlice: authReducer,
},
});
export const makeStore = () => {
return configureStore({
reducer: {
advancedSearch: advancedSearchReducer,
auth: authReducer,
},
// Enable Redux DevTools
devTools: process.env.NODE_ENV !== "production",
});
};
// Create the store instance
export const store = makeStore();
// Infer the type of makeStore
export type AppStore = ReturnType<typeof makeStore>;
// Infer the `RootState` and `AppDispatch` types from the store itself
export type RootState = ReturnType<AppStore["getState"]>;
export type AppDispatch = AppStore["dispatch"];