aboutsummaryrefslogtreecommitdiffstats
path: root/frontend/app/Page.hs
blob: 762ae90a161f6dd8dd4da2f19b78690668c7b645 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
module Page
  ( Page (..),
    Action,
    initialPage,
    updatePage,
    viewPage,
  )
where

import Data.Bifunctor
import Data.Default
import Data.Function
import Miso
import Page.EditValue qualified as EditValue
import Page.ListCollection qualified as ListCollection
import Route (Route)
import Route qualified as Route

data Page
  = Home
  | ListCollection ListCollection.Model
  | EditValue EditValue.Model
  deriving (Show, Eq)

data Action
  = HandleListCollection ListCollection.Action
  | HandleEditValue EditValue.Action
  deriving (Show, Eq)

instance Default Page where
  def = Home

initialPage :: Route -> JSM (Either String Page)
initialPage Route.Home = pure (Right Home)
initialPage (Route.ListCollection c) =
  fmap ListCollection <$> ListCollection.initialModel c
initialPage (Route.EditValue c f) =
  fmap EditValue <$> EditValue.initialModel c f

updatePage :: Action -> Page -> Effect Action Page
updatePage (HandleListCollection action) (ListCollection m) =
  ListCollection.updateModel action m
    & bimap HandleListCollection ListCollection
updatePage (HandleListCollection _) p = noEff p
updatePage (HandleEditValue action) (EditValue m) =
  EditValue.updateModel action m
    & bimap HandleEditValue EditValue
updatePage (HandleEditValue _) p = noEff p

viewPage :: Page -> View Action
viewPage Home = text "home"
viewPage (ListCollection m) = HandleListCollection <$> ListCollection.viewModel m
viewPage (EditValue m) = HandleEditValue <$> EditValue.viewModel m