From 8bda241416c917a508984b858705715705ca9b29 Mon Sep 17 00:00:00 2001 From: Filip Gralinski Date: Sat, 18 Mar 2017 16:04:53 +0100 Subject: [PATCH] show tags at achievements --- Handler/Achievements.hs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/Handler/Achievements.hs b/Handler/Achievements.hs index 7655fae..314acb1 100644 --- a/Handler/Achievements.hs +++ b/Handler/Achievements.hs @@ -23,7 +23,8 @@ data AchievementInfo = AchievementInfo { achievementInfoDeadline :: UTCTime, achievementInfoMaxWinners :: Maybe Int, achievementInfoWorkingOn :: [Entity User], - achievementInfoCurrentUser :: Maybe (Entity User) } + achievementInfoCurrentUser :: Maybe (Entity User), + achievementInfoTags :: [Entity Tag] } @@ -70,6 +71,8 @@ getAchievementInfo mUser (Entity achievementId achievement) = do let userIds = Import.map (workingOnUser . entityVal) es users <- mapM get404 userIds + tags <- getAchievementTags achievementId + return $ AchievementInfo { achievementInfoName = achievementName achievement, achievementInfoDescription = achievementDescription achievement, @@ -77,17 +80,28 @@ getAchievementInfo mUser (Entity achievementId achievement) = do achievementInfoDeadline = achievementDeadline achievement, achievementInfoMaxWinners = achievementMaxWinners achievement, achievementInfoWorkingOn = Import.map (\(i,v) -> Entity i v) $ Import.zip userIds users, - achievementInfoCurrentUser = mUser } + achievementInfoCurrentUser = mUser, + achievementInfoTags = tags } + +getAchievementTags achievementId = do + sts <- selectList [AchievementTagAchievement ==. achievementId] [] + let tagIds = Import.map (achievementTagTag . entityVal) sts + tags <- mapM get404 $ tagIds + return $ Import.map (\(k, v) -> Entity k v) $ Import.zip tagIds tags + achievementsTable :: Table.Table App (AchievementInfo) achievementsTable = mempty ++ Table.text "achievement" achievementInfoName - ++ Table.text "description" (fromMaybe (""::Text) . achievementInfoDescription) + ++ achievementDescriptionCell ++ Table.int "points" achievementInfoPoints ++ timestampCell "deadline" achievementInfoDeadline ++ Table.string "max submitters" (formatMaxSubmitters . achievementInfoMaxWinners) ++ Table.text "who's working on it?" (formatSubmitters . achievementInfoWorkingOn) +achievementDescriptionCell = Table.widget "description" ( + \ainfo -> fragmentWithTags (fromMaybe (""::Text) $ achievementInfoDescription ainfo) (achievementInfoTags ainfo)) + formatSubmitters userEnts = Data.Text.intercalate ", " $ Import.map (formatSubmitter . entityVal) userEnts formatMaxSubmitters :: Maybe Int -> String