Fixing logout
This commit is contained in:
parent
2ed39615a5
commit
eb1d24e807
@ -14,7 +14,7 @@ import AccountCircleIcon from "@mui/icons-material/AccountCircle";
|
|||||||
import SettingsIcon from "@mui/icons-material/Settings";
|
import SettingsIcon from "@mui/icons-material/Settings";
|
||||||
import LogoutIcon from "@mui/icons-material/Logout";
|
import LogoutIcon from "@mui/icons-material/Logout";
|
||||||
import { useDispatch, useSelector } from "react-redux";
|
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 { logout } from "@/app/redux/auth/authSlice";
|
||||||
import { AppDispatch } from "@/app/redux/types";
|
import { AppDispatch } from "@/app/redux/types";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
@ -35,7 +35,7 @@ export default function AccountMenu() {
|
|||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
// Select relevant state from your auth slice
|
// Select relevant state from your auth slice
|
||||||
// const isLoggedIn = useSelector(selectIsLoggedIn);
|
const isLoggedIn = useSelector(selectIsLoggedIn);
|
||||||
const authStatus = useSelector(selectStatus);
|
const authStatus = useSelector(selectStatus);
|
||||||
|
|
||||||
// Determine if we're currently in the process of logging out
|
// 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
|
// Only show the logout button if the user is logged in
|
||||||
// if (!isLoggedIn) {
|
if (!isLoggedIn) {
|
||||||
// return null;
|
return null;
|
||||||
// }
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
// app/redux/ReduxProvider.tsx
|
// app/redux/ReduxProvider.tsx
|
||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import React, { useEffect } from "react"; // Import useEffect
|
import React, { useEffect, useRef } from "react";
|
||||||
import { Provider } from "react-redux";
|
import { Provider } from "react-redux";
|
||||||
import { store } from "./store";
|
import { makeStore } from "./store";
|
||||||
import { initializeAuth } from "./auth/authSlice";
|
import { initializeAuth } from "./auth/authSlice";
|
||||||
|
|
||||||
export default function ReduxProvider({
|
export default function ReduxProvider({
|
||||||
@ -11,14 +11,16 @@ export default function ReduxProvider({
|
|||||||
}: {
|
}: {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
}) {
|
}) {
|
||||||
// Get the dispatch function directly from the store for initial dispatch
|
// Create a store instance for this client-side session
|
||||||
const dispatch = store.dispatch;
|
const storeRef = useRef<ReturnType<typeof makeStore>>(makeStore());
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// Dispatch initializeAuth when the ReduxProvider component mounts on the client.
|
// Dispatch initializeAuth when the ReduxProvider component mounts on the client.
|
||||||
// This ensures your Redux isLoggedIn state is synced with localStorage after a page refresh.
|
// This ensures your Redux isLoggedIn state is synced with localStorage after a page refresh.
|
||||||
dispatch(initializeAuth());
|
if (storeRef.current) {
|
||||||
}, [dispatch]); // Dependency array ensures it runs only once on mount
|
storeRef.current.dispatch(initializeAuth() as any);
|
||||||
|
}
|
||||||
return <Provider store={store}>{children}</Provider>;
|
}, []);
|
||||||
|
|
||||||
|
return <Provider store={storeRef.current}>{children}</Provider>;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,25 +1,25 @@
|
|||||||
import { createSlice } from '@reduxjs/toolkit';
|
import { createSlice } from "@reduxjs/toolkit";
|
||||||
|
|
||||||
interface AdvancedSearchState {
|
interface AdvancedSearchState {
|
||||||
keyword: string,
|
keyword: string;
|
||||||
transactionID: string,
|
transactionID: string;
|
||||||
transactionReferenceId: string,
|
transactionReferenceId: string;
|
||||||
user: string,
|
user: string;
|
||||||
currency: string,
|
currency: string;
|
||||||
state: string,
|
state: string;
|
||||||
statusDescription: string,
|
statusDescription: string;
|
||||||
transactionType: string,
|
transactionType: string;
|
||||||
paymentMethod: string,
|
paymentMethod: string;
|
||||||
psps: string,
|
psps: string;
|
||||||
initialPsps: string,
|
initialPsps: string;
|
||||||
merchants: string,
|
merchants: string;
|
||||||
startDate: null | string,
|
startDate: null | string;
|
||||||
endDate: null | string,
|
endDate: null | string;
|
||||||
lastUpdatedFrom: null | string,
|
lastUpdatedFrom: null | string;
|
||||||
lastUpdatedTo: null | string,
|
lastUpdatedTo: null | string;
|
||||||
minAmount: string,
|
minAmount: string;
|
||||||
maxAmount: string,
|
maxAmount: string;
|
||||||
channel: string,
|
channel: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const initialState: AdvancedSearchState = {
|
const initialState: AdvancedSearchState = {
|
||||||
@ -45,12 +45,9 @@ const initialState: AdvancedSearchState = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const advancedSearchSlice = createSlice({
|
const advancedSearchSlice = createSlice({
|
||||||
name: 'advancedSearch',
|
name: "advancedSearch",
|
||||||
initialState,
|
initialState,
|
||||||
reducers: {
|
reducers: {},
|
||||||
},
|
});
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
export default advancedSearchSlice.reducer;
|
export default advancedSearchSlice.reducer;
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
import { RootState } from "../types";
|
import { RootState } from "../types";
|
||||||
|
|
||||||
export const selectIsLoggedIn = (state: RootState) =>
|
export const selectIsLoggedIn = (state: RootState) => state.auth.isLoggedIn;
|
||||||
state.authSlice.isLoggedIn;
|
export const selectStatus = (state: RootState) => state.auth?.status;
|
||||||
export const selectStatus = (state: RootState) => state.authSlice?.status;
|
export const selectError = (state: RootState) => state.auth?.error;
|
||||||
export const selectError = (state: RootState) => state.authSlice?.error;
|
export const selectAuthMessage = (state: RootState) => state.auth?.authMessage;
|
||||||
export const selectAuthMessage = (state: RootState) =>
|
|
||||||
state.authSlice?.authMessage;
|
|
||||||
|
|||||||
@ -2,9 +2,22 @@ import { configureStore } from "@reduxjs/toolkit";
|
|||||||
import advancedSearchReducer from "./advanedSearch/advancedSearchSlice";
|
import advancedSearchReducer from "./advanedSearch/advancedSearchSlice";
|
||||||
import authReducer from "./auth/authSlice";
|
import authReducer from "./auth/authSlice";
|
||||||
|
|
||||||
export const store = configureStore({
|
export const makeStore = () => {
|
||||||
|
return configureStore({
|
||||||
reducer: {
|
reducer: {
|
||||||
advancedSearch: advancedSearchReducer,
|
advancedSearch: advancedSearchReducer,
|
||||||
authSlice: authReducer,
|
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"];
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user