All files / src/redux/slices/sweepstakes index.ts

20% Statements 6/30
0% Branches 0/8
0% Functions 0/15
21.42% Lines 6/28

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120          540x                                     540x                                                                                                                                                                           540x 540x   540x   540x        
import { RootState } from "@redux/types/store";
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
import { findIndex } from "lodash";
import { ConversionRangeType, SweepstakesState, TicketType } from "./types";
 
const initialState: SweepstakesState = {
  names: {
    type: [],
    amount: [],
    conversion: [],
    transactions: [],
    purchases: [],
    visitors: [],
    created: [],
    status: [],
  },
  minibuilder: {
    tickets: {
      globalTicketId: "1",
      list: [],
    },
  },
};
 
const sweepstakesSlice = createSlice({
  name: "fundraisers",
  initialState,
  reducers: {
    addConversionRangeFilter: (
      state: SweepstakesState,
      action: PayloadAction<ConversionRangeType>,
    ) => {
      const range = action.payload;
      state.names.conversion = range;
    },
    disableConversionRangeFilter: (state: SweepstakesState) => {
      state.names.conversion = [];
    },
    addTicket: (state: SweepstakesState, action: PayloadAction<TicketType>) => {
      state.minibuilder.tickets.list = [
        ...state.minibuilder.tickets.list,
        action.payload,
      ];
    },
    editTicket: (
      state: SweepstakesState,
      action: PayloadAction<TicketType>,
    ) => {
      const isTicketExist = (newName: string, id: string) => {
        return state.minibuilder.tickets.list.some(
          (item) => item.name === newName && id !== item.id,
        );
      };
      if (isTicketExist(action.payload.name, action.payload.id)) return;
      const updatedTickets = [...state.minibuilder.tickets.list].map((item) => {
        if (item.id === action.payload.id) {
          return action.payload;
        }
        return item;
      });
      state.minibuilder.tickets.list = [...updatedTickets];
    },
    removeTicket: (
      state: SweepstakesState,
      action: PayloadAction<{ id: string }>,
    ) => {
      state.minibuilder.tickets.list = state.minibuilder.tickets.list.filter(
        (item) => item.id !== action.payload.id,
      );
    },
    showTicket: (
      state: SweepstakesState,
      action: PayloadAction<{ id: string }>,
    ) => {
      const index = findIndex(state.minibuilder.tickets.list, {
        id: action.payload.id,
      });
 
      if (index > -1) {
        state.minibuilder.tickets.list[index] = {
          ...state.minibuilder.tickets.list[index],
          active: !state.minibuilder.tickets.list[index].active,
        };
      }
    },
    setTicketList: (
      state: SweepstakesState,
      action: PayloadAction<TicketType[]>,
    ) => {
      state.minibuilder.tickets.list = action.payload;
    },
    setIncrementGlobalTicketId: (state: SweepstakesState) => {
      state.minibuilder.tickets.globalTicketId = (
        parseInt(state.minibuilder.tickets.globalTicketId) + 1
      ).toString();
    },
  },
});
 
export const {
  // addFilter,
  // removeFilter,
  addConversionRangeFilter,
  disableConversionRangeFilter,
  addTicket,
  showTicket,
  removeTicket,
  setTicketList,
  editTicket,
  setIncrementGlobalTicketId,
} = sweepstakesSlice.actions;
export const selectFilters = (state: RootState) => state.sweepstakes.names;
 
export const selectTickets = (state: RootState) =>
  state.sweepstakes.minibuilder.tickets.list;
export const selectGlobalTicketID = (state: RootState) =>
  state.sweepstakes.minibuilder.tickets.globalTicketId;
 
export default sweepstakesSlice.reducer;