All files / client/src/views/my-program-items MyProgramItemsView.tsx

79.16% Statements 19/24
66.66% Branches 4/6
75% Functions 6/8
76.19% Lines 16/21

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 121 122 123 124 125 126 127 128 129 130 131 132 133 134                                                            356x 264x   264x 264x 264x 526x 264x 526x 526x 264x   264x   264x                                                                                                                                                       1x     263x           1x   246x    
import { ReactElement, useState } from "react";
import { useTranslation } from "react-i18next";
import styled from "styled-components";
import { MyLotterySignupsList } from "client/views/my-program-items/components/MyLotterySignupsList";
import { MyFavoritesList } from "client/views/my-program-items/components/MyFavoritesList";
import { MyDirectSignupsList } from "client/views/my-program-items/components/MyDirectSignupsList";
import {
  getLotterySignups,
  getUpcomingDirectSignups,
  getUpcomingFavorites,
} from "client/utils/getUpcomingProgramItems";
 
import { useAppSelector } from "client/utils/hooks";
import { EventSignupStrategy } from "shared/config/eventConfigTypes";
import {
  selectDirectSignups,
  selectFavoriteProgramItems,
  selectLotterySignups,
} from "client/views/my-program-items/myProgramItemsSlice";
import { RadioButton } from "client/components/RadioButton";
import { RaisedCard } from "client/components/RaisedCard";
import {
  SessionStorageValue,
  getSavedShowAllProgramItems,
} from "client/utils/sessionStorage";
import { RadioButtonGroup } from "client/components/RadioButtonGroup";
import { getIsInGroup } from "client/views/group/groupUtils";
import { ScrollToTopButton } from "client/components/ScrollToTopButton";
import { selectGroupMembers } from "client/views/group/groupSlice";
 
export const MyProgramItemsView = (): ReactElement => {
  const { t } = useTranslation();
 
  const lotterySignups = useAppSelector(selectLotterySignups);
  const favoriteProgramItems = useAppSelector(selectFavoriteProgramItems);
  const directSignups = useAppSelector(selectDirectSignups);
  const isGroupCreator = useAppSelector((state) => state.group.isGroupCreator);
  const groupMembers = useAppSelector(selectGroupMembers);
  const signupStrategy = useAppSelector((state) => state.admin.signupStrategy);
  const groupCode = useAppSelector((state) => state.group.groupCode);
  const isInGroup = getIsInGroup(groupCode);
 
  const isGroupMember = groupMembers.length > 0;
 
  const [showAllProgramItems, setShowAllProgramItems] = useState<boolean>(
    getSavedShowAllProgramItems(),
  );
 
  return (
    <MyProgramItemsViewContainer>
      <RaisedCard>
        <StyledLabel htmlFor="startingTimeSelection">
          {t("startingTime")}
        </StyledLabel>
        <RadioButtonGroup>
          <RadioButton
            checked={!showAllProgramItems}
            id={"upcoming"}
            label={t("lastStartedAndUpcoming")}
            onChange={() => {
              setShowAllProgramItems(false);
              sessionStorage.setItem(
                SessionStorageValue.MY_PROGRAM_ITEMS_SHOW_ALL_PROGRAM_ITEMS,
                "false",
              );
            }}
          />
          <RadioButton
            checked={showAllProgramItems}
            id={"all"}
            label={t("all")}
            onChange={() => {
              setShowAllProgramItems(true);
              sessionStorage.setItem(
                SessionStorageValue.MY_PROGRAM_ITEMS_SHOW_ALL_PROGRAM_ITEMS,
                "true",
              );
            }}
          />
        </RadioButtonGroup>
      </RaisedCard>
 
      <MyFavoritesList
        favoriteProgramItems={
          showAllProgramItems
            ? favoriteProgramItems
            : getUpcomingFavorites(favoriteProgramItems)
        }
        showAllProgramItems={showAllProgramItems}
        setShowAllProgramItems={setShowAllProgramItems}
      />
      <MyDirectSignupsList
        directSignups={
          showAllProgramItems
            ? directSignups
            : getUpcomingDirectSignups(directSignups)
        }
        showAllProgramItems={showAllProgramItems}
        setShowAllProgramItems={setShowAllProgramItems}
      />
      {signupStrategy !== EventSignupStrategy.DIRECT && (
        <MyLotterySignupsList
          lotterySignups={getLotterySignups({
            lotterySignups,
            isGroupCreator,
            showAllProgramItems,
            isInGroup,
            groupMembers,
          })}
          isGroupCreator={isGroupCreator}
          isGroupMember={isGroupMember}
          showAllProgramItems={showAllProgramItems}
          setShowAllProgramItems={setShowAllProgramItems}
        />
      )}
      <ScrollToTopButton />
    </MyProgramItemsViewContainer>
  );
};
 
const MyProgramItemsViewContainer = styled.div`
  margin: 8px 16px 8px 16px;
 
  @media (max-width: ${(props) => props.theme.breakpointPhone}) {
    margin-left: 0;
    margin-right: 0;
  }
`;
 
const StyledLabel = styled.label`
  padding: 0 0 2px 4px;
  font-size: ${(props) => props.theme.fontSizeSmall};
`;