135 lines
3.7 KiB
JavaScript
135 lines
3.7 KiB
JavaScript
import { createSelector, createSlice } from "@reduxjs/toolkit";
|
|
import { store } from "../store";
|
|
|
|
const initialState = {
|
|
IsLoginModalOpen: false,
|
|
IsVisitedLandingPage: false,
|
|
IsShowBankDetails: false,
|
|
Notification: null,
|
|
IsUnauthorized: false,
|
|
selectedLocation: null,
|
|
// Add blocked users state
|
|
blockedUsersList: [],
|
|
blockedUsersLoading: false,
|
|
};
|
|
|
|
export const globalStateSlice = createSlice({
|
|
name: "GlobalState",
|
|
initialState,
|
|
reducers: {
|
|
setIsLoginModalOpen: (state, action) => {
|
|
state.IsLoginModalOpen = action.payload;
|
|
},
|
|
setIsVisitedLandingPage: (state, action) => {
|
|
state.IsVisitedLandingPage = action.payload;
|
|
},
|
|
setIsShowBankDetails: (state, action) => {
|
|
state.IsShowBankDetails = action.payload;
|
|
},
|
|
setNotification: (state, action) => {
|
|
state.Notification = action.payload;
|
|
},
|
|
setIsUnauthorized: (state, action) => {
|
|
state.IsUnauthorized = action.payload;
|
|
},
|
|
setSelectedLocation: (state, action) => {
|
|
state.selectedLocation = action.payload;
|
|
},
|
|
// Add blocked users reducers
|
|
setBlockedUsersList: (state, action) => {
|
|
state.blockedUsersList = action.payload;
|
|
},
|
|
setBlockedUsersLoading: (state, action) => {
|
|
state.blockedUsersLoading = action.payload;
|
|
},
|
|
addBlockedUser: (state, action) => {
|
|
const userId = action.payload;
|
|
if (!state.blockedUsersList.some(user => user.id === userId)) {
|
|
state.blockedUsersList.push({ id: userId });
|
|
}
|
|
},
|
|
removeBlockedUser: (state, action) => {
|
|
const userId = action.payload;
|
|
state.blockedUsersList = state.blockedUsersList.filter(user => user.id !== userId);
|
|
},
|
|
},
|
|
});
|
|
|
|
export default globalStateSlice.reducer;
|
|
export const {
|
|
setIsLoginModalOpen,
|
|
setIsVisitedLandingPage,
|
|
setIsShowBankDetails,
|
|
setNotification,
|
|
setIsUnauthorized,
|
|
setSelectedLocation,
|
|
// Export blocked users actions
|
|
setBlockedUsersList,
|
|
setBlockedUsersLoading,
|
|
addBlockedUser,
|
|
removeBlockedUser,
|
|
} = globalStateSlice.actions;
|
|
|
|
export const getIsVisitedLandingPage = createSelector(
|
|
(state) => state.GlobalState,
|
|
(GlobalState) => GlobalState.IsVisitedLandingPage
|
|
);
|
|
|
|
export const getIsLoginModalOpen = createSelector(
|
|
(state) => state.GlobalState,
|
|
(GlobalState) => GlobalState.IsLoginModalOpen
|
|
);
|
|
|
|
export const getIsShowBankDetails = createSelector(
|
|
(state) => state.GlobalState,
|
|
(GlobalState) => GlobalState.IsShowBankDetails
|
|
);
|
|
|
|
export const setIsLoginOpen = (value) => {
|
|
store.dispatch(setIsLoginModalOpen(value));
|
|
};
|
|
|
|
export const showBankDetails = () => {
|
|
store.dispatch(setIsShowBankDetails(true));
|
|
};
|
|
|
|
export const hideBankDetails = () => {
|
|
store.dispatch(setIsShowBankDetails(false));
|
|
};
|
|
|
|
export const getNotification = createSelector(
|
|
(state) => state.GlobalState,
|
|
(GlobalState) => GlobalState.Notification
|
|
);
|
|
|
|
export const getIsUnauthorized = createSelector(
|
|
(state) => state.GlobalState,
|
|
(GlobalState) => GlobalState.IsUnauthorized
|
|
);
|
|
|
|
export const getSelectedLocation = createSelector(
|
|
(state) => state.GlobalState,
|
|
(GlobalState) => GlobalState.selectedLocation
|
|
);
|
|
|
|
// Add blocked users selectors with fallbacks
|
|
export const getBlockedUsersList = createSelector(
|
|
(state) => state.GlobalState,
|
|
(GlobalState) => GlobalState?.blockedUsersList || []
|
|
);
|
|
|
|
export const getBlockedUsersLoading = createSelector(
|
|
(state) => state.GlobalState,
|
|
(GlobalState) => GlobalState?.blockedUsersLoading || false
|
|
);
|
|
|
|
export const getIsUserBlocked = createSelector(
|
|
[getBlockedUsersList, (state, userId) => userId],
|
|
(blockedUsersList, userId) => {
|
|
if (!blockedUsersList || !Array.isArray(blockedUsersList)) {
|
|
return false;
|
|
}
|
|
return blockedUsersList.some(user => user.id === userId);
|
|
}
|
|
);
|