reducers/coupons.js

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

/**
 * @namespace reducer/couponReducer
 */
const initialState = {
  placedCoupons: null,
  placedCouponsShop: null,
  settledCoupons: null,
  settledCouponsShop: null,
  selectedCoupon: null,
  lastCouponId: '',
  lastPlacedDate: '',
  gameStatuses: null,
  shopGameStatuses: null,
  turboLastCouponId: '',
  turboLastPlacedDate: '',
  settledCouponFilters: null,
  isLoadingCoupons: false,
};

const resetCoupon = (state) => {
  state.placedCoupons = null;
  state.placedCouponsShop = null;
  state.settledCoupons = null;
  state.settledCouponsShop = null;
  state.selectedCoupon = null;
  state.lastCouponId = '';
  state.lastPlacedDate = '';
  state.turboLastCouponId = '';
  state.turboLastPlacedDate = '';
};

const couponsSlice = createSlice({
  name: 'coupons',
  initialState,
  reducers: {
    aGetPlacedCouponsSuccess: (state, action) => {
      state.placedCoupons = action.payload.coupons;
      state.lastCouponId = action.payload.lastCouponId;
      state.lastPlacedDate = action.payload.lastPlacedDate;
      state.turboLastCouponId = action.payload.turboLastCouponId;
      state.turboLastPlacedDate = action.payload.turboLastPlacedDate;
    },
    aGetPlacedCouponsShopSuccess: (state, action) => {
      state.placedCouponsShop = action.payload.coupons;
      state.lastCouponId = action.payload.lastCouponId;
      state.lastPlacedDate = action.payload.lastPlacedDate;
      state.turboLastCouponId = action.payload.turboLastCouponId;
      state.turboLastPlacedDate = action.payload.turboLastPlacedDate;
    },
    aGetSettledCouponsSuccess: (state, action) => {
      state.settledCoupons = sortSettledCoupons(
        action.payload.coupons,
        action.payload.sort.field,
        action.payload.isShop,
        action.payload.sort.direction
      );
      state.lastCouponId = action.payload.lastCouponId;
      state.lastPlacedDate = action.payload.lastPlacedDate;
      state.turboLastCouponId = action.payload.turboLastCouponId;
      state.turboLastPlacedDate = action.payload.turboLastPlacedDate;
    },
    aGetUpdatedSettledCouponsSuccess: (state, action) => {
      state.settledCoupons = action.payload.coupons;
      state.selectedCoupon = null;
    },
    aGetSettledCouponsShopSuccess: (state, action) => {
      state.settledCouponsShop = sortSettledCoupons(
        action.payload.coupons,
        action.payload.sort.field,
        action.payload.isShop,
        action.payload.sort.direction
      );
      state.lastCouponId = action.payload.lastCouponId;
      state.lastPlacedDate = action.payload.lastPlacedDate;
      state.turboLastCouponId = action.payload.turboLastCouponId;
      state.turboLastPlacedDate = action.payload.turboLastPlacedDate;
    },
    aSetSelectedCoupon: (state, action) => {
      state.selectedCoupon = action.payload.coupon;
    },
    aSortSettledCoupons: (state, action) => {
      if (action.payload.isShop) {
        state.settledCouponsShop = sortSettledCoupons(
          state.settledCouponsShop,
          action.payload.field,
          action.payload.isShop,
          action.payload.direction
        );
      } else {
        state.settledCoupons = sortSettledCoupons(
          state.settledCoupons,
          action.payload.field,
          action.payload.isShop,
          action.payload.direction
        );
      }
    },
    aSetIsLoadingCoupons: (state, action) => {
      state.isLoadingCoupons = action.payload.isLoadingCoupons;
    },
  },
  extraReducers: (builder) => {
    builder.addCase(aGetInitSuccess, (state, action) => {
      state.gameStatuses = action.payload.selects.gameTypes;
      state.settledCouponFilters = action.payload.settledCouponFilters;
      state.shopGameStatuses = action.payload.selects.shopGameTypes;
      state.couponSource = action.payload.selects.couponSource;
    });
    builder.addCase(aLocationChange, resetCoupon);
    builder.addCase(aSetFilterData, resetCoupon);
  },
});

export default couponsSlice.reducer;

export const {
  aGetPlacedCouponsSuccess,
  aGetPlacedCouponsShopSuccess,
  aGetSettledCouponsSuccess,
  aGetUpdatedSettledCouponsSuccess,
  aGetSettledCouponsShopSuccess,
  aSetSelectedCoupon,
  aSortSettledCoupons,
  aSetIsLoadingCoupons,
} = couponsSlice.actions;