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 | 522x 994x 5843x 5843x 994x 522x 1763x 1763x 522x 360x 360x 40x 40x 360x 522x 26x 26x 1x 25x 522x 902x 876x 26x 26x 1x 25x 522x 364x 47x 364x 522x 364x 364x 6x 6x 364x | import dayjs, { Dayjs } from "dayjs";
import { config } from "shared/config";
import { ProgramItem } from "shared/types/models/programItem";
import { getDirectSignupEndTime } from "shared/utils/signupTimes";
import { GroupMemberWithLotteryProgramItem } from "client/views/group/groupSlice";
import {
DirectSignupWithProgramItem,
LotterySignupWithProgramItem,
} from "client/views/my-program-items/myProgramItemsSlice";
export const getUpcomingProgramItems = (
programItems: readonly ProgramItem[],
timeNow: Dayjs,
): readonly ProgramItem[] => {
const upcomingProgramItems = programItems.filter((programItem) => {
const directSignupEndTime = getDirectSignupEndTime(programItem);
return directSignupEndTime.isSameOrAfter(timeNow);
});
return upcomingProgramItems;
};
// Before this time only pre-convention week program is shown in the program list
export const isMainEventProgramVisible = (timeNow: Dayjs): boolean => {
const { mainEventProgramVisibleTime } = config.event();
return (
!mainEventProgramVisibleTime ||
timeNow.isSameOrAfter(dayjs(mainEventProgramVisibleTime))
);
};
const getUpcomingLotterySignups = (
lotterySignups: readonly LotterySignupWithProgramItem[],
timeNow: Dayjs,
): readonly LotterySignupWithProgramItem[] => {
const { startTimesByParentIds } = config.event();
const upcomingLotterySignups = lotterySignups.filter((lotterySignup) => {
const parentStartTime = startTimesByParentIds.get(
lotterySignup.programItem.parentId,
);
return dayjs(parentStartTime ?? lotterySignup.programItem.startTime)
.add(1, "hours")
.isAfter(timeNow);
});
return upcomingLotterySignups;
};
const getGroupCreator = (
groupMembers: readonly GroupMemberWithLotteryProgramItem[],
): GroupMemberWithLotteryProgramItem | null => {
const groupCreator = groupMembers.find((member) => member.isGroupCreator);
if (!groupCreator) {
return null;
}
return groupCreator;
};
interface GetLotterySignupsParams {
lotterySignups: readonly LotterySignupWithProgramItem[];
isGroupCreator: boolean;
groupMembers: readonly GroupMemberWithLotteryProgramItem[];
isInGroup: boolean;
showAllProgramItems: boolean;
timeNow: Dayjs;
}
export const getLotterySignups = ({
lotterySignups,
isGroupCreator,
groupMembers,
isInGroup,
showAllProgramItems,
timeNow,
}: GetLotterySignupsParams): readonly LotterySignupWithProgramItem[] => {
// Show own lottery sign-ups if group creator or not in group
if (isGroupCreator || !isInGroup) {
return showAllProgramItems
? lotterySignups
: getUpcomingLotterySignups(lotterySignups, timeNow);
}
// Show group creator lottery sign-ups if in group and not group creator
const groupCreator = getGroupCreator(groupMembers);
if (!groupCreator) {
return [];
}
return showAllProgramItems
? groupCreator.lotterySignups
: getUpcomingLotterySignups(groupCreator.lotterySignups, timeNow);
};
export const getUpcomingDirectSignups = (
directSignups: readonly DirectSignupWithProgramItem[],
timeNow: Dayjs,
): readonly DirectSignupWithProgramItem[] => {
const upcomingProgramItems = directSignups.filter((directSignup) =>
dayjs(directSignup.programItem.startTime).add(1, "hours").isAfter(timeNow),
);
return upcomingProgramItems;
};
export const getUpcomingFavorites = (
favoriteProgramItems: readonly ProgramItem[],
timeNow: Dayjs,
): readonly ProgramItem[] => {
const { startTimesByParentIds } = config.event();
const upcomingProgramItems = favoriteProgramItems.filter(
(favoriteProgramItem) => {
const parentStartTime = startTimesByParentIds.get(
favoriteProgramItem.parentId,
);
return dayjs(parentStartTime ?? favoriteProgramItem.startTime)
.add(1, "hours")
.isAfter(timeNow);
},
);
return upcomingProgramItems;
};
|