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 | 363x 363x 70x 3x 34x 363x 363x 363x 1077x 351x 48x 9x 9x 9x 9x 48x | import { createSelector, createSlice, PayloadAction } from "@reduxjs/toolkit";
import { GroupState, RootState } from "client/types/reduxTypes";
import { selectProgramItems } from "client/views/all-program-items/allProgramItemsSlice";
import { LotterySignupWithProgramItem } from "client/views/my-program-items/myProgramItemsSlice";
import { GroupMember } from "shared/types/models/groups";
const initialState: GroupState = {
groupCode: "0",
isGroupCreator: false,
groupMembers: [],
};
interface GroupCodeUpdate {
groupCode: string;
isGroupCreator: boolean;
}
const groupSlice = createSlice({
name: "group",
initialState,
reducers: {
submitUpdateGroupCodeAsync(
state,
action: PayloadAction<GroupCodeUpdate>,
): GroupState {
return {
...state,
groupCode: action.payload.groupCode,
isGroupCreator: action.payload.isGroupCreator,
};
},
submitLeaveGroupAsync(state, action: PayloadAction<string>): GroupState {
return { ...state, groupCode: action.payload, groupMembers: [] };
},
submitUpdateGroupAsync(
state,
action: PayloadAction<readonly GroupMember[]>,
): GroupState {
return {
...state,
groupMembers: action.payload,
};
},
},
});
export const {
submitUpdateGroupCodeAsync,
submitLeaveGroupAsync,
submitUpdateGroupAsync,
} = groupSlice.actions;
export const groupReducer = groupSlice.reducer;
// SELECTORS
export type GroupMemberWithLotteryProgramItem = Omit<
GroupMember,
"lotterySignups"
> & {
lotterySignups: LotterySignupWithProgramItem[];
};
export const selectGroupMembers: (
state: RootState,
) => GroupMemberWithLotteryProgramItem[] = createSelector(
[selectProgramItems, (state: RootState) => state.group.groupMembers],
(programItems, groupMembers) => {
return groupMembers.map((groupMember) => {
const updatedSignups: LotterySignupWithProgramItem[] =
groupMember.lotterySignups.flatMap((lotterySignup) => {
const signedProgramItem = programItems.find(
(programItem) =>
programItem.programItemId === lotterySignup.programItemId,
);
Iif (!signedProgramItem) {
return [];
}
return { ...lotterySignup, programItem: signedProgramItem };
});
return { ...groupMember, lotterySignups: updatedSignups };
});
},
);
|