diff options
Diffstat (limited to 'lore/Biz/Ibb/Core.hs')
-rw-r--r-- | lore/Biz/Ibb/Core.hs | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/lore/Biz/Ibb/Core.hs b/lore/Biz/Ibb/Core.hs new file mode 100644 index 0000000..8fd0068 --- /dev/null +++ b/lore/Biz/Ibb/Core.hs @@ -0,0 +1,80 @@ +{-# LANGUAGE OverloadedStrings #-} +{-# OPTIONS_GHC -Wall #-} + +-- | Main app logic +module Biz.Ibb.Core where + +import Alpha +import Biz.Ibb.Influencers +import Data.Proxy +import Miso +import Miso.String +import Servant.API +import Servant.Links + +type Routes = Home + +type Home = View Action + +data Model = Model + { modelUri :: URI + , people :: [Person] + } deriving (Show, Eq) + +data Action + = Nop + | ChangeRoute URI + | HandleRoute URI + deriving (Show, Eq) + +home :: Model -> View Action +home m = see m + +handlers :: Model -> View Action +handlers = home + +notfound :: View Action +notfound = div_ [] [ text "404" ] + +goHome :: URI +goHome = linkURI $ safeLink + (Proxy :: Proxy Routes) + (Proxy :: Proxy Home) + +see :: Model -> View Action +see m = div_ [ class_ "container mt-5" ] + [ div_ [ class_ "jumbotron" ] + [ h1_ [ class_ "display-4" ] [ text "Influenced by books" ] + , p_ [ class_ "lead" ] [ text "Influential people and the books that made them." ] + , p_ [ class_ "lead" ] + [ a_ [ href_ "http://eepurl.com/ghBFjv" ] + [ text "Get new book recommendations from the world's influencers in your email." ] + ] + ] + , div_ [ class_ "card-columns" ] $ seePerson /@ people m + ] + +seePerson :: Person -> View Action +seePerson person = div_ [ class_ "card" ] + [ div_ [ class_ "card-img" ] + [ img_ [ class_ "card-img img-fluid", src_ $ ms $ _pic person ]] + , div_ [ class_ "card-body" ] + [ h4_ [ class_ "card-title" ] [ text $ ms $ _name person ] + , h6_ [] [ a_ [ class_ "fab fa-twitter" + , href_ $ "https://twitter.com/" <> (ms $ _twitter person) ] [] + , a_ [ class_ "fas fa-globe", href_ $ ms $ _website person ] [] + ] + , p_ [ class_ "card-text" ] + [ text $ ms $ _blurb person + , ul_ [] $ seeBook /@ _books person + ] + ] + ] + +seeBook :: Book -> View Action +seeBook book = li_ [] + [ a_ [ class_ "text-dark" + , href_ $ "https://www.amazon.com/dp/" <> (ms $ _amznref book) + ] + [ text $ ms $ _title book ] + ] |