diff options
Diffstat (limited to 'Com/InfluencedByBooks/Core.hs')
-rw-r--r-- | Com/InfluencedByBooks/Core.hs | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/Com/InfluencedByBooks/Core.hs b/Com/InfluencedByBooks/Core.hs deleted file mode 100644 index 2b98914..0000000 --- a/Com/InfluencedByBooks/Core.hs +++ /dev/null @@ -1,143 +0,0 @@ -{-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE NoImplicitPrelude #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE OverloadedStrings #-} - --- | Main app logic -module Com.InfluencedByBooks.Core where - -import Alpha -import Com.Simatime.Network -import Data.Aeson hiding ( Success ) -import Data.Data ( Data - , Typeable - ) -import Data.Text ( Text ) -import GHC.Generics ( Generic ) -import Miso -import Miso.String -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] - ] |