/* eslint-disable sonarjs/cognitive-complexity */
import { createSlice } from '@reduxjs/toolkit';
import { parseRoute, getFilterUTCDate } from '../utils/common';
import { aRolesListSuccess, aSetUserList } from './admin';
import { aGetInitSuccess, aLocationChange } from './bonus';
import { aClearFilterData } from './cashier';
/**
* @namespace reducer/commonReducer
*/
const initialState = {
selectedMenu: '',
selectedMenuItem: '',
destinations: null,
user: null,
filterData: null,
currency: '',
pagination: null,
activeModal: '',
roles: null,
permissions: null,
roleCreateCallback: false,
isLoading: true,
isFetched: true,
toggleMenu: false,
errorMessage: null,
modalData: null,
cnt: null,
profileInfo: null,
isLastRecord: false,
loginError: '',
hasRecord: true,
clearFilters: false,
redirect: false,
heading: '',
nextNavigationLink: '',
hasFieldDataModified: false,
selectedTimezone: '',
weekDays: [],
firebaseMessagingToken: null,
errorMessageFromApi: null,
betStatus: [],
};
const commonSlice = createSlice({
name: 'common',
initialState,
reducers: {
aLoginError: (state, action) => {
state.loginError = action.payload.loginError;
state.isLoading = false;
},
aLogoutSuccess: (state) => {
state.user = null;
state.profileInfo = null;
},
aSetIsLoading: (state, action) => {
state.isLoading = action.payload.isLoading;
},
aSetSelectedMenu: (state, action) => {
state.selectedMenu = action.payload.menu || '';
},
aSetOpenModal: (state, action) => {
state.activeModal = action.payload.modal;
state.modalData = action.payload.modalData ? action.payload.modalData : null;
state.errorMessage = action.payload.errorMessage;
state.isLoading = false;
state.isFetched = true;
state.errorMessageFromApi = null;
},
aLoginSuccess: (state, action) => {
state.user = action.payload.user;
state.sessionId = action.payload.sessionId;
state.errorMessage = null;
state.loginError = '';
},
aSetFilters: (state, action) => {
const filter = getFilterUTCDate(action.payload);
// eslint-disable-next-line no-param-reassign
action.payload.filter = filter;
state.filterData = filter;
state.pagination = null;
state.isLastRecord = false;
state.hasRecord = true;
},
aShowFilteredRound: (state, action) => {
state.filterData = action.payload.filter;
state.pagination = null;
state.redirect = true;
},
aSetPaginationData: (state, action) => {
const pagination = state.pagination;
pagination.page = action.payload.page;
state.pagination = pagination;
},
aSetIsFetched: (state, action) => {
state.isFetched = action.payload.isFetched;
},
aGetProfileInfoSuccess: (state, action) => {
state.profileInfo = action.payload.profileInfo;
},
aSetLastRecord: (state, action) => {
state.isLastRecord = action.payload;
},
aSetHasRecord: (state, action) => {
state.hasRecord = action.payload.hasRecord;
},
aSetClearFilters: (state, action) => {
state.clearFilters = action.payload.filterState;
},
aSetUserData: (state, action) => {
state.user = action.payload.user;
},
aSetNavigationInfo: (state, action) => {
state.hasFieldDataModified = action.payload.hasFieldDataModified;
state.nextNavigationLink = action.payload.nextNavigationLink;
},
aClearLoginError: (state) => {
state.loginError = '';
},
aSetSelectedTimezone: (state, action) => {
state.selectedTimezone = action.payload;
},
aSaveToken: (state, action) => {
state.firebaseMessagingToken = action.payload.token;
},
aModalErrorMessageFromApi: (state, action) => {
state.errorMessageFromApi = action.payload.message;
state.isLoading = false;
state.isFetched = true;
},
aClearErrorMessageFromApi: (state) => {
state.errorMessageFromApi = null;
},
},
extraReducers: (builder) => {
builder.addCase(aSetUserList, (state, action) => {
state.pagination = action.payload ? action.payload.meta : null;
});
builder.addCase(aRolesListSuccess, (state, action) => {
state.pagination = action.payload ? action.payload.meta : null;
});
builder.addCase(aGetInitSuccess, (state, action) => {
state.user = action.payload.user;
state.sessionId = action.payload.sessionId;
state.currency = action.payload.currency;
state.cnt = action.payload.cnt;
state.weekDays = action.payload.selects.weekDays;
state.selectedMenu = action.payload.menu || '';
state.selectedMenuItem = action.payload.selectedMenuItem || '';
state.heading = action.payload.heading || '';
state.filterData = action.payload.filters ? action.payload.filters : null;
state.isLoading = false;
state.betStatus = action.payload.selects.betStatus;
});
builder.addCase(aLocationChange, (state, action) => {
const { selectedMenu, selectedMenuItem, heading } = parseRoute(action.payload.pathname);
const redirect = state.redirect;
const filterData = state.selectedMenuItem !== selectedMenuItem && !redirect ? null : state.filterData;
const pagination = state.selectedMenuItem !== selectedMenuItem ? null : state.pagination;
state.selectedMenu = selectedMenu || '';
state.selectedMenuItem = selectedMenuItem || '';
state.pagination = pagination;
state.filterData = filterData;
state.heading = heading || '';
state.isLastRecord = false;
state.hasRecord = true;
state.redirect = false;
state.toggleMenu = !state.toggleMenu;
});
builder.addCase(aClearFilterData, (state) => {
state.filterData = null;
});
},
});
export default commonSlice.reducer;
export const {
aLoginError,
aLogoutSuccess,
aSetIsLoading,
aSetSelectedMenu,
aSetOpenModal,
aLoginSuccess,
aSetFilters,
aShowFilteredRound,
aSetPaginationData,
aSetIsFetched,
aGetProfileInfoSuccess,
aSetLastRecord,
aSetHasRecord,
aSetClearFilters,
aSetUserData,
aSetNavigationInfo,
aClearLoginError,
aSetSelectedTimezone,
aSaveToken,
aModalErrorMessageFromApi,
aClearErrorMessageFromApi,
} = commonSlice.actions;