All files / brand-store/slices invitesSlice.ts

12.5% Statements 2/16
0% Branches 0/2
0% Functions 0/6
12.5% Lines 2/16

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        6x                                                           6x                                    
import { createSlice } from "@reduxjs/toolkit";
import { AppDispatch } from "../store";
import { getMembersNotFound } from "./membersSlice";
 
export const slice = createSlice({
  name: "invites",
  initialState: {
    invites: [],
    loading: true,
    notFound: false,
  },
  reducers: {
    getInvitesLoading: (state) => {
      state.loading = true;
    },
    getInvitesSuccess: (state, { payload }) => {
      state.invites = payload || [];
      state.loading = false;
    },
    getInvitesNotFound: (state) => {
      state.notFound = true;
      state.loading = false;
    },
    getInvitesError: (state) => {
      state.loading = false;
    },
  },
});
 
export const {
  getInvitesLoading,
  getInvitesSuccess,
  getInvitesNotFound,
  getInvitesError,
} = slice.actions;
 
export function fetchInvites(storeId: string) {
  return async (dispatch: AppDispatch) => {
    dispatch(getInvitesLoading());
 
    try {
      const response = await fetch(`/admin/store/${storeId}/invites`);
      const data = await response.json();
      dispatch(getInvitesSuccess(data));
    } catch (error) {
      dispatch(getMembersNotFound());
      dispatch(getInvitesError());
    }
  };
}
 
export default slice.reducer;