From 61545cade06eaa418800ebaabb6879c538491d73 Mon Sep 17 00:00:00 2001 From: Sarah Vaupel <> Date: Tue, 3 Nov 2020 23:10:30 +0100 Subject: [PATCH] feat(schedule-week): account for weekdays to hide --- src/Utils/Schedule/Week.hs | 15 ++++++++++----- templates/schedule/week.hamlet | 13 +++++++------ 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/Utils/Schedule/Week.hs b/src/Utils/Schedule/Week.hs index 9d9bd5007..0eaeaf368 100644 --- a/src/Utils/Schedule/Week.hs +++ b/src/Utils/Schedule/Week.hs @@ -81,8 +81,8 @@ weekSchedule (Entity uid User{userScheduleWeekDays=ScheduleWeekDays userSchedule seoEnd = examOccurrenceEnd occ -- so taking the timestamps of the first occurrence suffices in ScheduleExamOccurrence{..} - events' :: Map Day (Map TimeSlot [ScheduleEntry]) - events' = Map.fromList $ week <&> \d -> + events'' :: Map Day (Map TimeSlot [ScheduleEntry]) + events'' = Map.fromList $ week <&> \d -> ( d , Map.fromList $ allTimeSlots <&> \slot -> ( slot @@ -93,8 +93,8 @@ weekSchedule (Entity uid User{userScheduleWeekDays=ScheduleWeekDays userSchedule <> (tutorialToScheduleEntries <$> tutorials) <> pure (examOccurrenceToScheduleEntry <$> (joinParallelExamOccurrences examOccurrences)) - events :: Map Day (Map TimeSlot [ScheduleEntry]) - events = events' <&> \slotsPerDay -> slotsPerDay <&> \occurrencesInSlot -> + events' :: Map Day (Map TimeSlot [ScheduleEntry]) + events' = events'' <&> \slotsPerDay -> slotsPerDay <&> \occurrencesInSlot -> let isRegularWithoutException :: ScheduleEntry -> Bool isRegularWithoutException = @@ -112,10 +112,15 @@ weekSchedule (Entity uid User{userScheduleWeekDays=ScheduleWeekDays userSchedule _ -> True in filter isRegularWithoutException occurrencesInSlot + -- TODO: perform this filtering asap, in DB fetch if possible + events :: Map Day (Map TimeSlot [ScheduleEntry]) + events = Map.filterWithKey shouldBeDisplayedOrHasEvents events' where + shouldBeDisplayedOrHasEvents d entries = dayOfWeek d `elem` userScheduleWeekDays || any (not . null) entries + week :: [Day] week = go dayNowOffset where go d - | dayOfWeek d == firstDay = filter (flip elem userScheduleWeekDays . dayOfWeek) [d .. toEnum (fromEnum d + 6)] + | dayOfWeek d == firstDay = [d .. toEnum (fromEnum d + 6)] | otherwise = go $ pred d firstDay = toEnum $ fromEnum userWeekStart + dayOffset diff --git a/templates/schedule/week.hamlet b/templates/schedule/week.hamlet index 477c40ad3..2f8b5ddd4 100644 --- a/templates/schedule/week.hamlet +++ b/templates/schedule/week.hamlet @@ -6,8 +6,9 @@ $newline never