aboutsummaryrefslogtreecommitdiff
path: root/src/Page.purs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Page.purs')
-rw-r--r--src/Page.purs129
1 files changed, 0 insertions, 129 deletions
diff --git a/src/Page.purs b/src/Page.purs
deleted file mode 100644
index 40c8ddc..0000000
--- a/src/Page.purs
+++ /dev/null
@@ -1,129 +0,0 @@
-module Page
- ( component
- , Query
- , init
- ) where
-
-import Control.Monad.Aff (Aff)
-import Data.Array (sortBy, filter, reverse)
-import Data.Maybe (Maybe(..))
-import Data.String (contains, Pattern(..))
-import DOM (DOM)
-import Halogen as H
-import Halogen.HTML as HH
-import Halogen.HTML.Events as HE
-import Halogen.HTML.Properties as HP
-import Prelude
-
-import Food (Aliment)
-import Food as Food
-import Format as Format
-import Indicator as Indicator
-import Order (Order, OrderKind)
-import Order as Order
-
-data Query a =
- UpdateSearch String a
- | SelectOrder OrderKind a
-
-type State =
- { search :: String
- , order :: Order
- }
-
-init :: State
-init =
- { search: ""
- , order: Order.init
- }
-
-type Message = Unit
-
-component :: forall eff. H.Component HH.HTML Query State Message (Aff (dom :: DOM | eff))
-component =
- H.component
- { initialState: const init
- , render
- , eval
- , receiver: const Nothing
- }
- where
- render :: State -> H.ComponentHTML Query
- render state =
- HH.div
- [ HP.class_ $ HH.ClassName "page" ]
- [ renderHeader state.order.kind state.search
- , HH.div
- [ HP.class_ $ HH.ClassName "aliments" ]
- ( Food.all
- # filter (\a -> contains (Pattern $ Format.string state.search) (Format.string a.name))
- # sortBy compareAliments
- # (if state.order.direction == Order.Ascending then id else reverse)
- # map renderAliment
- )
- ]
- where
- compareAliments :: Aliment -> Aliment -> Ordering
- compareAliments a b =
- case state.order.kind of
- Order.Name -> compare (Format.string a.name) (Format.string b.name)
- Order.GlycemicIndex -> compare a.glycemicIndex b.glycemicIndex
- Order.Carbohydrates -> compare a.carbohydrates b.carbohydrates
- Order.GlycemicLoad -> compare (Food.glycemicLoad a) (Food.glycemicLoad b)
-
- eval :: Query ~> H.ComponentDSL State Query Message (Aff (dom :: DOM | eff))
- eval = case _ of
- UpdateSearch search next -> do
- state <- H.get
- H.put $ state { search = search }
- pure next
- SelectOrder kind next -> do
- state <- H.get
- H.put $ state { order = Order.select kind state.order }
- pure next
-
-renderHeader :: OrderKind -> String -> H.ComponentHTML Query
-renderHeader orderKind search =
- HH.div
- [ HP.class_ $ HH.ClassName "header" ]
- [ HH.div
- [ HP.class_ $ HH.ClassName "title line" ]
- [ button Order.Name "Aliment"
- , button Order.GlycemicIndex "Index glycémique"
- , button Order.Carbohydrates "Glucides pour 100 g"
- , button Order.GlycemicLoad "Charge glycémique"
- ]
- , HH.input
- [ HP.class_ $ HH.ClassName "search line"
- , HP.placeholder "Rechercher…"
- , HE.onValueInput (HE.input UpdateSearch)
- , HP.value search
- ]
- ]
- where
- button :: OrderKind -> String -> H.ComponentHTML Query
- button kind label =
- HH.button
- [ HE.onClick (HE.input_ (SelectOrder kind))
- , HP.class_ $ HH.ClassName (if orderKind == kind then "sorted" else "")
- ]
- [ HH.text label ]
-
-renderAliment :: Aliment -> H.ComponentHTML Query
-renderAliment aliment =
- HH.div
- [ HP.class_ $ HH.ClassName "aliment line" ]
- [ HH.div
- []
- [ HH.text aliment.name ]
- , HH.div
- [ HP.class_ $ HH.ClassName "number" ]
- [ HH.text (show aliment.glycemicIndex) ]
- , HH.div
- [ HP.class_ $ HH.ClassName "number" ]
- [ HH.text (show aliment.carbohydrates <> " g") ]
- , let glycemicLoad = Food.glycemicLoad aliment
- in HH.div
- [ HP.class_ $ HH.ClassName ("number " <> (Indicator.className $ Indicator.fromGlycemicLoad glycemicLoad)) ]
- [ HH.text (Format.number 2 glycemicLoad) ]
- ]