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

96% Statements 24/25
66.66% Branches 4/6
100% Functions 8/8
95.45% Lines 21/22

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 135 136                                                            520x 371x   371x 371x 371x 734x 371x 734x 734x 371x 371x   371x   371x                               3x 3x                     3x 3x                                                                                               1x     368x           1x   327x    
import { ReactElement, useState } from "react";
import { useTranslation } from "react-i18next";
import styled from "styled-components";
import { EventSignupStrategy } from "shared/config/eventConfigTypes";
import { RadioButton } from "client/components/RadioButton";
import { RadioButtonGroup } from "client/components/RadioButtonGroup";
import { RaisedCard } from "client/components/RaisedCard";
import { ScrollToTopButton } from "client/components/ScrollToTopButton";
import {
  getLotterySignups,
  getUpcomingDirectSignups,
  getUpcomingFavorites,
} from "client/utils/getUpcomingProgramItems";
import { useAppSelector } from "client/utils/hooks";
import {
  SessionStorageValue,
  getSavedShowAllProgramItems,
} from "client/utils/sessionStorage";
import { useTimeNow } from "client/utils/useTimeNow";
import { selectGroupMembers } from "client/views/group/groupSlice";
import { getIsInGroup } from "client/views/group/groupUtils";
import { MyDirectSignupsList } from "client/views/my-program-items/components/MyDirectSignupsList";
import { MyFavoritesList } from "client/views/my-program-items/components/MyFavoritesList";
import { MyLotterySignupsList } from "client/views/my-program-items/components/MyLotterySignupsList";
import {
  selectDirectSignups,
  selectFavoriteProgramItems,
  selectLotterySignups,
} from "client/views/my-program-items/myProgramItemsSlice";
 
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 timeNow = useTimeNow();
  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, timeNow)
        }
        showAllProgramItems={showAllProgramItems}
        setShowAllProgramItems={setShowAllProgramItems}
      />
      <MyDirectSignupsList
        directSignups={
          showAllProgramItems
            ? directSignups
            : getUpcomingDirectSignups(directSignups, timeNow)
        }
        showAllProgramItems={showAllProgramItems}
        setShowAllProgramItems={setShowAllProgramItems}
      />
      {signupStrategy !== EventSignupStrategy.DIRECT && (
        <MyLotterySignupsList
          lotterySignups={getLotterySignups({
            lotterySignups,
            isGroupCreator,
            showAllProgramItems,
            isInGroup,
            groupMembers,
            timeNow,
          })}
          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};
`;