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 | 358x 735x 735x 2532x 2532x 735x 358x 15402x 15402x 358x 263x 263x 263x 18x 18x 263x 358x 99x 99x 99x 358x 2092x 1993x 99x 99x 99x 358x 263x 263x 19x 263x 358x 263x 263x 263x 4x 4x 263x | import dayjs, { Dayjs } from "dayjs";
import { ProgramItem } from "shared/types/models/programItem";
import { getTimeNow } from "client/utils/getTimeNow";
import { getDirectSignupEndTime } from "shared/utils/signupTimes";
import {
DirectSignupWithProgramItem,
LotterySignupWithProgramItem,
} from "client/views/my-program-items/myProgramItemsSlice";
import { GroupMemberWithLotteryProgramItem } from "client/views/group/groupSlice";
import { config } from "shared/config";
export const getUpcomingProgramItems = (
programItems: readonly ProgramItem[],
): readonly ProgramItem[] => {
const timeNow = getTimeNow();
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[],
): readonly LotterySignupWithProgramItem[] => {
const timeNow = getTimeNow();
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);
Iif (!groupCreator) {
return null;
}
return groupCreator;
};
interface GetLotterySignupsParams {
lotterySignups: readonly LotterySignupWithProgramItem[];
isGroupCreator: boolean;
groupMembers: readonly GroupMemberWithLotteryProgramItem[];
isInGroup: boolean;
showAllProgramItems: boolean;
}
export const getLotterySignups = ({
lotterySignups,
isGroupCreator,
groupMembers,
isInGroup,
showAllProgramItems,
}: GetLotterySignupsParams): readonly LotterySignupWithProgramItem[] => {
// Show own lottery signups if group creator or not in group
if (isGroupCreator || !isInGroup) {
return showAllProgramItems
? lotterySignups
: getUpcomingLotterySignups(lotterySignups);
}
// Show group creator lottery signups if in group and not group creator
const groupCreator = getGroupCreator(groupMembers);
Iif (!groupCreator) {
return [];
}
return showAllProgramItems
? groupCreator.lotterySignups
: getUpcomingLotterySignups(groupCreator.lotterySignups);
};
export const getUpcomingDirectSignups = (
directSignups: readonly DirectSignupWithProgramItem[],
): readonly DirectSignupWithProgramItem[] => {
const timeNow = getTimeNow();
const upcomingProgramItems = directSignups.filter((directSignup) =>
dayjs(directSignup.programItem.startTime).add(1, "hours").isAfter(timeNow),
);
return upcomingProgramItems;
};
export const getUpcomingFavorites = (
favoriteProgramItems: readonly ProgramItem[],
): readonly ProgramItem[] => {
const timeNow = getTimeNow();
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;
};
|