All files / brand-store/slices membersSlice.ts

33.33% Statements 6/18
0% Branches 0/2
37.5% Functions 3/8
33.33% Lines 6/18

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        6x     6x             6x                                                     6x             6x                   6x      
import { createSlice, createAsyncThunk } from "@reduxjs/toolkit";
 
import type { Member } from "../types/shared";
 
export const fetchMembers = createAsyncThunk<Member[], string>(
  "members/fetchMembers",
  async (storeId: string) => {
    const response = await fetch(`/admin/store/${storeId}/members`);
    const data = await response.json();
 
    return data;
  },
);
 
export const slice = createSlice({
  name: "members",
  initialState: {
    members: [],
    loading: true,
    notFound: false,
  },
  reducers: {
    getMembersLoading: (state) => {
      state.loading = true;
      state.notFound = false;
    },
    getMembersSuccess: (state, { payload }) => {
      state.members = payload || [];
      state.loading = false;
      state.notFound = false;
    },
    getMembersNotFound: (state) => {
      state.notFound = true;
      state.loading = false;
    },
    getMembersError: (state) => {
      state.loading = false;
    },
  },
  extraReducers: {
    [fetchMembers.pending.type]: (state) => {
      state.loading = true;
    },
    [fetchMembers.fulfilled.type]: (state, { payload }) => {
      state.loading = false;
      state.members = payload;
    },
    [fetchMembers.rejected.type]: (state) => {
      state.loading = false;
    },
  },
});
 
export const {
  getMembersLoading,
  getMembersSuccess,
  getMembersNotFound,
  getMembersError,
} = slice.actions;
 
export default slice.reducer;