summaryrefslogtreecommitdiff
path: root/com/influencedbybooks/core.hs
diff options
context:
space:
mode:
Diffstat (limited to 'com/influencedbybooks/core.hs')
-rw-r--r--com/influencedbybooks/core.hs129
1 files changed, 0 insertions, 129 deletions
diff --git a/com/influencedbybooks/core.hs b/com/influencedbybooks/core.hs
deleted file mode 100644
index 2a616f3..0000000
--- a/com/influencedbybooks/core.hs
+++ /dev/null
@@ -1,129 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE OverloadedStrings #-}
-
--- | Main app logic
-module Com.Influencedbybooks.Core where
-
-import Com.Simatime.Alpha
-import Data.Aeson hiding (Success)
-import Data.Data (Data, Typeable)
-import Data.Text (Text)
-import GHC.Generics (Generic)
-import Miso
-import Miso.String
-import Com.Simatime.Network
-import Servant.API
-import Servant.Links
-
--- * entity data types
-
-data Person = Person
- { _name :: Text
- -- ^ Their full name.
- , _pic :: Text
- -- ^ A link to their picture.
- , _twitter :: Text
- -- ^ Their twitter handle, without the `@` prefix.
- , _website :: Text
- -- ^ Their main website, fully formed: `https://example.com`
- , _books :: [Book]
- -- ^ A short list of the books they recommend.
- , _blurb :: Text
- -- ^ A short "about" section, like you would see on the jacket flap of a book.
- } deriving (Generic, Show, Eq, Typeable, Data, Ord)
-
-instance FromJSON Person
-instance ToJSON Person
-
-data Book = Book
- { _title :: Text
- , _author :: Text
- , _amznref :: Text
- -- ^ Amazon REF number, for creating affiliate links.
- } deriving (Generic, Show, Eq, Typeable, Data, Ord)
-
-instance FromJSON Book
-instance ToJSON Book
-
--- * app data types
-
-type AppRoutes = Home
-
-type Home = View Action
-
-data Model = Model
- { uri :: URI
- , people :: WebData [Person]
- } deriving (Show, Eq)
-
-type WebData a = RemoteData MisoString a
-
-init :: URI -> Model
-init u = Model u Loading
-
-data Action
- = Nop
- | ChangeRoute URI
- | HandleRoute URI
- | FetchPeople
- | SetPeople (WebData [Person])
- 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 AppRoutes)
- (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" ] $ case people m of
- NotAsked -> [ text "Initializing..." ]
- Loading -> [ text "Loading..." ]
- Failure err -> [ text err ]
- Success ps -> seePerson /@ ps
- ]
-
-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 ]
- ]