reducers/jackpot.js

import { createSlice } from '@reduxjs/toolkit';
import { aGetInitSuccess, aLocationChange, aSetFilterData } from './bonus';

/**
 * @namespace reducer/jackpotReducer
 */
const initialState = {
  jackpotsTypes: [],
  jackpotStatus: [],
  lastAssignedJackpotId: '',
  lastJackpotAssignationDate: '',
  jackpotsWon: [],
  jackpotHistory: [],
  assignedJackpotId: null,
  stakeAccumulation: null,
  jackpotAssignment: null,
  percentageCouponsForAccumulation: 0,
  enableAccumulation: 0,
  enableJackpotRelease: 0,
  thresholdJackpotPayment: 0,
  jackpotsSettings: [],
  refreshJackpotList: false,
};

const resetJackpot = (state) => {
  state.jackpotsWon = [];
  state.lastAssignedJackpotId = '';
  state.lastJackpotAssignationDate = '';
  state.jackpotHistory = [];
  state.assignedJackpotId = null;
  state.stakeAccumulation = null;
  state.jackpotAssignment = null;
  state.percentageCouponsForAccumulation = 0;
  state.enableAccumulation = 0;
  state.enableJackpotRelease = 0;
  state.thresholdJackpotPayment = 0;
  state.jackpotsSettings = [];
};

const setJackpotSettings = (state, action) => {
  const {
    stakeAccumulation,
    jackpotAssignment,
    percentageCouponsForAccumulation,
    enableAccumulation,
    enableJackpotRelease,
    thresholdJackpotPayment,
    jackpots,
  } = action.payload.jackpotSettings;

  state.stakeAccumulation = stakeAccumulation;
  state.jackpotAssignment = jackpotAssignment;
  state.percentageCouponsForAccumulation = percentageCouponsForAccumulation;
  state.enableAccumulation = enableAccumulation;
  state.enableJackpotRelease = enableJackpotRelease;
  state.thresholdJackpotPayment = thresholdJackpotPayment;
  state.jackpotsSettings = jackpots;
};

const jackpotSlice = createSlice({
  name: 'jackpot',
  initialState,
  reducers: {
    aGetJackpotWonSuccess: (state, action) => {
      state.jackpotsWon = action.payload.jackpots;
      state.lastAssignedJackpotId = action.payload.lastAssignedJackpotId;
      state.lastJackpotAssignationDate = action.payload.lastJackpotAssignationDate;
    },
    aGetJackpotHistorySuccess: (state, action) => {
      state.jackpotHistory = action.payload.jackpotHistory;
      state.assignedJackpotId = action.payload.assignedJackpotId;
    },
    aGetJackpotSettingsSuccess: setJackpotSettings,
    aSaveJackpotSettingsSuccess: setJackpotSettings,
    aPayJackpotSuccess: (state, action) => {
      state.jackpotsWon = action.payload.jackpotsWon;
      state.refreshJackpotList = action.payload.refreshJackpotList;
    },
    aRefreshJackpotList: (state) => {
      state.refreshJackpotList = false;
    },
  },
  extraReducers: (builder) => {
    builder.addCase(aGetInitSuccess, (state, action) => {
      state.jackpotsTypes = action.payload.selects.jackpots;
      state.jackpotStatus = action.payload.selects.jackpotStatus;
    });
    builder.addCase(aLocationChange, resetJackpot);
    builder.addCase(aSetFilterData, resetJackpot);
  },
});

export default jackpotSlice.reducer;

export const {
  aGetJackpotWonSuccess,
  aGetJackpotHistorySuccess,
  aGetJackpotSettingsSuccess,
  aSaveJackpotSettingsSuccess,
  aPayJackpotSuccess,
  aRefreshJackpotList,
} = jackpotSlice.actions;