65 lines
2.0 KiB
Haskell
65 lines
2.0 KiB
Haskell
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 Page.NewCollection qualified as NewCollection
|
|
import Route (Route)
|
|
import Route qualified as Route
|
|
import Effect (Eff)
|
|
|
|
data Page
|
|
= Home
|
|
| ListCollection ListCollection.Model
|
|
| EditValue EditValue.Model
|
|
| NewCollection NewCollection.Model
|
|
deriving (Show, Eq)
|
|
|
|
data Action
|
|
= HandleListCollection ListCollection.Action
|
|
| HandleEditValue EditValue.Action
|
|
| HandleNewCollection NewCollection.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
|
|
initialPage Route.NewCollection =
|
|
fmap NewCollection <$> NewCollection.initialModel
|
|
|
|
updatePage :: Action -> Page -> (Effect Action Page, [Eff])
|
|
updatePage (HandleListCollection action) (ListCollection m) =
|
|
ListCollection.updateModel action m
|
|
& first (bimap HandleListCollection ListCollection)
|
|
updatePage (HandleListCollection _) p = (noEff p, [])
|
|
updatePage (HandleEditValue action) (EditValue m) =
|
|
EditValue.updateModel action m
|
|
& first (bimap HandleEditValue EditValue)
|
|
updatePage (HandleEditValue _) p = (noEff p, [])
|
|
updatePage (HandleNewCollection action) (NewCollection m) =
|
|
NewCollection.updateModel action m
|
|
& first (bimap HandleNewCollection NewCollection)
|
|
updatePage (HandleNewCollection _) 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
|
|
viewPage (NewCollection m) = HandleNewCollection <$> NewCollection.viewModel m
|