Files

65 lines
2.0 KiB
Haskell
Raw Permalink Normal View History

2024-06-04 14:36:26 +02:00
module Page
( Page (..),
Action,
initialPage,
updatePage,
viewPage,
)
where
import Data.Bifunctor
import Data.Default
import Data.Function
import Miso
2024-06-05 10:41:02 +02:00
import Page.EditValue qualified as EditValue
2024-06-04 14:36:26 +02:00
import Page.ListCollection qualified as ListCollection
2024-06-06 23:05:41 +02:00
import Page.NewCollection qualified as NewCollection
2024-06-04 14:36:26 +02:00
import Route (Route)
import Route qualified as Route
2024-06-07 17:08:01 +02:00
import Effect (Eff)
2024-06-04 14:36:26 +02:00
data Page
= Home
| ListCollection ListCollection.Model
2024-06-05 10:41:02 +02:00
| EditValue EditValue.Model
2024-06-06 23:05:41 +02:00
| NewCollection NewCollection.Model
2024-06-04 14:36:26 +02:00
deriving (Show, Eq)
data Action
= HandleListCollection ListCollection.Action
2024-06-05 10:41:02 +02:00
| HandleEditValue EditValue.Action
2024-06-06 23:05:41 +02:00
| HandleNewCollection NewCollection.Action
2024-06-04 14:36:26 +02:00
deriving (Show, Eq)
2024-06-05 10:41:02 +02:00
instance Default Page where
def = Home
2024-06-04 14:36:26 +02:00
initialPage :: Route -> JSM (Either String Page)
initialPage Route.Home = pure (Right Home)
initialPage (Route.ListCollection c) =
fmap ListCollection <$> ListCollection.initialModel c
2024-06-05 10:41:02 +02:00
initialPage (Route.EditValue c f) =
fmap EditValue <$> EditValue.initialModel c f
2024-06-06 23:05:41 +02:00
initialPage Route.NewCollection =
fmap NewCollection <$> NewCollection.initialModel
2024-06-04 14:36:26 +02:00
2024-06-07 17:08:01 +02:00
updatePage :: Action -> Page -> (Effect Action Page, [Eff])
2024-06-04 14:36:26 +02:00
updatePage (HandleListCollection action) (ListCollection m) =
ListCollection.updateModel action m
2024-06-07 17:08:01 +02:00
& first (bimap HandleListCollection ListCollection)
updatePage (HandleListCollection _) p = (noEff p, [])
2024-06-05 10:41:02 +02:00
updatePage (HandleEditValue action) (EditValue m) =
EditValue.updateModel action m
2024-06-07 17:08:01 +02:00
& first (bimap HandleEditValue EditValue)
updatePage (HandleEditValue _) p = (noEff p, [])
2024-06-06 23:05:41 +02:00
updatePage (HandleNewCollection action) (NewCollection m) =
NewCollection.updateModel action m
2024-06-07 17:08:01 +02:00
& first (bimap HandleNewCollection NewCollection)
updatePage (HandleNewCollection _) p = (noEff p, [])
2024-06-04 14:36:26 +02:00
viewPage :: Page -> View Action
viewPage Home = text "home"
viewPage (ListCollection m) = HandleListCollection <$> ListCollection.viewModel m
2024-06-05 10:41:02 +02:00
viewPage (EditValue m) = HandleEditValue <$> EditValue.viewModel m
2024-06-06 23:05:41 +02:00
viewPage (NewCollection m) = HandleNewCollection <$> NewCollection.viewModel m