module Page.ListCollection ( Model, initialModel, Action, updateModel, viewModel, ) where import ACMS.API.REST.Collection qualified as API.REST.Collection import Control.Monad.Catch (SomeException, try) import Data.Aeson qualified as A import Data.Aeson.KeyMap qualified as AM import Effect (Eff) import Miso import Schema import Collection data Model = Model { collection :: Collection, input :: A.Object, schema :: Schema, posts :: [A.Object] } deriving (Show, Eq) initialModel :: Collection -> JSM (Either SomeException Model) initialModel collection = do schema' <- try (API.REST.Collection.schema collection) posts' <- try (API.REST.Collection.list collection) pure do schema <- schema' posts <- posts' pure $ Model {input = AM.empty, ..} newtype Action = Action (Model -> (Effect Action Model, [Eff])) updateModel :: Action -> Model -> (Effect Action Model, [Eff]) updateModel (Action f) m = f m viewModel :: Model -> View Action viewModel m = div_ [] $ [ h3_ [] [text "entities"], schemaTable m.collection.name m.schema m.posts, h3_ [] [text "schema"], viewSchema m.schema ]