{-# LANGUAGE OverloadedStrings #-} module Clckwrks.Page.NavBarCallback where import Clckwrks (ClckT, ClckURL, NamedLink(..), query) import Clckwrks.Page.Acid (AllPublishedPages(..), PageState) import Clckwrks.Page.Types (Page(..)) import Clckwrks.Page.URL (PageURL(..)) import Data.Acid (AcidState) import Data.Acid.Advanced (query') import Data.Function (on) import Data.List (sortBy) import Data.Text (Text) navBarCallback :: AcidState PageState -> (PageURL -> [(Text, Maybe Text)] -> Text) -> ClckT ClckURL IO (String, [NamedLink]) navBarCallback acidPageState showPageURL = do pages <- query' acidPageState AllPublishedPages let blogLink = NamedLink { namedLinkTitle = "Blog", namedLinkURL = showPageURL Blog [] } pageLinks = map (\p -> NamedLink (pageTitle p) (showPageURL (ViewPage (pageId p)) [])) pages return ("Page", blogLink : (sortBy (compare `on` namedLinkTitle) pageLinks))