reload collections when creating
This commit is contained in:
5
frontend/app/Effect.hs
Normal file
5
frontend/app/Effect.hs
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
module Effect (Eff (..)) where
|
||||||
|
|
||||||
|
data Eff
|
||||||
|
= ReloadCollections
|
||||||
|
deriving (Show, Eq)
|
||||||
@@ -5,9 +5,12 @@ import Language.Javascript.JSaddle.Warp as JSaddle
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
import Api
|
import Api
|
||||||
|
import Control.Monad.Trans
|
||||||
import Data.Bifunctor
|
import Data.Bifunctor
|
||||||
import Data.Default
|
import Data.Default
|
||||||
import Data.Function
|
import Data.Function
|
||||||
|
import Effect (Eff)
|
||||||
|
import Effect qualified as E
|
||||||
import Miso
|
import Miso
|
||||||
import Miso.String (toMisoString)
|
import Miso.String (toMisoString)
|
||||||
import NeatInterpolation qualified as Q
|
import NeatInterpolation qualified as Q
|
||||||
@@ -41,6 +44,8 @@ data Action
|
|||||||
| HandleURI URI
|
| HandleURI URI
|
||||||
| HandlePage Page.Action
|
| HandlePage Page.Action
|
||||||
| SetPage (Either String Page)
|
| SetPage (Either String Page)
|
||||||
|
| HandleEff Eff
|
||||||
|
| SetCollections (Either String [String])
|
||||||
deriving (Show, Eq)
|
deriving (Show, Eq)
|
||||||
|
|
||||||
#ifndef ghcjs_HOST_OS
|
#ifndef ghcjs_HOST_OS
|
||||||
@@ -90,9 +95,23 @@ updateModel (HandlePage action) (Loaded s) =
|
|||||||
case s.page of
|
case s.page of
|
||||||
Just (Right page) ->
|
Just (Right page) ->
|
||||||
fmap Loaded $
|
fmap Loaded $
|
||||||
updatePage action page
|
( case updatePage action page
|
||||||
& bimap HandlePage (\page -> s {page = Just (Right page)})
|
& first (bimap HandlePage (\page -> s {page = Just (Right page)}))
|
||||||
|
& second (map HandleEff)
|
||||||
|
& second (map (\eff -> (\sink -> liftIO (sink eff)))) of
|
||||||
|
(Effect s' ss, ss') ->
|
||||||
|
Effect s' (ss ++ ss')
|
||||||
|
)
|
||||||
_ -> noEff (Loaded s)
|
_ -> noEff (Loaded s)
|
||||||
|
updateModel (HandleEff eff) (Loaded s) = Loaded s <# handleEff eff
|
||||||
|
updateModel (SetCollections (Left err)) (Loaded s) =
|
||||||
|
Loaded s <# do
|
||||||
|
pure NoOp <* consoleLog (toMisoString err)
|
||||||
|
updateModel (SetCollections (Right collections)) (Loaded s) =
|
||||||
|
noEff (Loaded s {collections})
|
||||||
|
|
||||||
|
handleEff :: Eff -> JSM Action
|
||||||
|
handleEff E.ReloadCollections = SetCollections <$> fetchCollections
|
||||||
|
|
||||||
viewModel :: Model -> View Action
|
viewModel :: Model -> View Action
|
||||||
viewModel Loading = text ".."
|
viewModel Loading = text ".."
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import Page.ListCollection qualified as ListCollection
|
|||||||
import Page.NewCollection qualified as NewCollection
|
import Page.NewCollection qualified as NewCollection
|
||||||
import Route (Route)
|
import Route (Route)
|
||||||
import Route qualified as Route
|
import Route qualified as Route
|
||||||
|
import Effect (Eff)
|
||||||
|
|
||||||
data Page
|
data Page
|
||||||
= Home
|
= Home
|
||||||
@@ -42,19 +43,19 @@ initialPage (Route.EditValue c f) =
|
|||||||
initialPage Route.NewCollection =
|
initialPage Route.NewCollection =
|
||||||
fmap NewCollection <$> NewCollection.initialModel
|
fmap NewCollection <$> NewCollection.initialModel
|
||||||
|
|
||||||
updatePage :: Action -> Page -> Effect Action Page
|
updatePage :: Action -> Page -> (Effect Action Page, [Eff])
|
||||||
updatePage (HandleListCollection action) (ListCollection m) =
|
updatePage (HandleListCollection action) (ListCollection m) =
|
||||||
ListCollection.updateModel action m
|
ListCollection.updateModel action m
|
||||||
& bimap HandleListCollection ListCollection
|
& first (bimap HandleListCollection ListCollection)
|
||||||
updatePage (HandleListCollection _) p = noEff p
|
updatePage (HandleListCollection _) p = (noEff p, [])
|
||||||
updatePage (HandleEditValue action) (EditValue m) =
|
updatePage (HandleEditValue action) (EditValue m) =
|
||||||
EditValue.updateModel action m
|
EditValue.updateModel action m
|
||||||
& bimap HandleEditValue EditValue
|
& first (bimap HandleEditValue EditValue)
|
||||||
updatePage (HandleEditValue _) p = noEff p
|
updatePage (HandleEditValue _) p = (noEff p, [])
|
||||||
updatePage (HandleNewCollection action) (NewCollection m) =
|
updatePage (HandleNewCollection action) (NewCollection m) =
|
||||||
NewCollection.updateModel action m
|
NewCollection.updateModel action m
|
||||||
& bimap HandleNewCollection NewCollection
|
& first (bimap HandleNewCollection NewCollection)
|
||||||
updatePage (HandleNewCollection _) p = noEff p
|
updatePage (HandleNewCollection _) p = (noEff p, [])
|
||||||
|
|
||||||
viewPage :: Page -> View Action
|
viewPage :: Page -> View Action
|
||||||
viewPage Home = text "home"
|
viewPage Home = text "home"
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import Data.Maybe
|
|||||||
import Form qualified as F
|
import Form qualified as F
|
||||||
import Miso
|
import Miso
|
||||||
import Miso.String (toMisoString)
|
import Miso.String (toMisoString)
|
||||||
|
import Effect (Eff)
|
||||||
import Schema
|
import Schema
|
||||||
|
|
||||||
data Model = Model
|
data Model = Model
|
||||||
@@ -41,12 +42,12 @@ data Action
|
|||||||
| EntityWritten (Either String ())
|
| EntityWritten (Either String ())
|
||||||
deriving (Eq, Show)
|
deriving (Eq, Show)
|
||||||
|
|
||||||
updateModel :: Action -> Model -> Effect Action Model
|
updateModel :: Action -> Model -> (Effect Action Model, [Eff])
|
||||||
updateModel NoOp m = noEff m
|
updateModel NoOp m = (noEff m, [])
|
||||||
updateModel (FormChanged (Just -> input)) m = noEff m {input}
|
updateModel (FormChanged (Just -> input)) m = (noEff m {input}, [])
|
||||||
updateModel (FormSubmitted output) m =
|
updateModel (FormSubmitted output) m =
|
||||||
m <# do EntityWritten <$> updatePost m.fileName output
|
(m <# do EntityWritten <$> updatePost m.fileName output, [])
|
||||||
updateModel (EntityWritten _) m = noEff m
|
updateModel (EntityWritten _) m = (noEff m, [])
|
||||||
|
|
||||||
viewModel :: Model -> View Action
|
viewModel :: Model -> View Action
|
||||||
viewModel m = do
|
viewModel m = do
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import Data.Aeson qualified as A
|
|||||||
import Data.Aeson.KeyMap qualified as AM
|
import Data.Aeson.KeyMap qualified as AM
|
||||||
import Miso
|
import Miso
|
||||||
import Schema
|
import Schema
|
||||||
|
import Effect (Eff)
|
||||||
|
|
||||||
data Model = Model
|
data Model = Model
|
||||||
{ collection :: String,
|
{ collection :: String,
|
||||||
@@ -34,8 +35,8 @@ data Action
|
|||||||
= NoOp
|
= NoOp
|
||||||
deriving (Eq, Show)
|
deriving (Eq, Show)
|
||||||
|
|
||||||
updateModel :: Action -> Model -> Effect Action Model
|
updateModel :: Action -> Model -> (Effect Action Model, [Eff])
|
||||||
updateModel NoOp m = noEff m
|
updateModel NoOp m = (noEff m, [])
|
||||||
|
|
||||||
viewModel :: Model -> View Action
|
viewModel :: Model -> View Action
|
||||||
viewModel m =
|
viewModel m =
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ where
|
|||||||
import Api
|
import Api
|
||||||
import Data.Aeson qualified as A
|
import Data.Aeson qualified as A
|
||||||
import Data.Text qualified as T
|
import Data.Text qualified as T
|
||||||
|
import Effect (Eff)
|
||||||
|
import Effect qualified as E
|
||||||
import Form qualified as F
|
import Form qualified as F
|
||||||
import Miso
|
import Miso
|
||||||
import Miso.String (toMisoString)
|
import Miso.String (toMisoString)
|
||||||
@@ -30,17 +32,20 @@ data Action
|
|||||||
| CollectionCreated (Either String ())
|
| CollectionCreated (Either String ())
|
||||||
deriving (Eq, Show)
|
deriving (Eq, Show)
|
||||||
|
|
||||||
updateModel :: Action -> Model -> Effect Action Model
|
updateModel :: Action -> Model -> (Effect Action Model, [Eff])
|
||||||
updateModel NoOp m = noEff m
|
updateModel NoOp m = (noEff m, [])
|
||||||
updateModel (FormChanged input) m = noEff m {input}
|
updateModel (FormChanged input) m = (noEff m {input}, [])
|
||||||
updateModel (FormSubmitted collection) m =
|
updateModel (FormSubmitted collection) m =
|
||||||
m <# do
|
( m <# do
|
||||||
CollectionCreated <$> createCollection (T.unpack collection)
|
CollectionCreated <$> createCollection (T.unpack collection),
|
||||||
|
[]
|
||||||
|
)
|
||||||
updateModel (CollectionCreated (Left err)) m =
|
updateModel (CollectionCreated (Left err)) m =
|
||||||
m <# do
|
( m <# do
|
||||||
pure NoOp <* consoleLog (toMisoString err)
|
pure NoOp <* consoleLog (toMisoString err),
|
||||||
-- TODO reload collections in main app
|
[]
|
||||||
updateModel (CollectionCreated (Right _)) m = noEff m
|
)
|
||||||
|
updateModel (CollectionCreated (Right _)) m = (noEff m, [E.ReloadCollections])
|
||||||
|
|
||||||
viewModel :: Model -> View Action
|
viewModel :: Model -> View Action
|
||||||
viewModel m = do
|
viewModel m = do
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ executable frontend
|
|||||||
hs-source-dirs: app
|
hs-source-dirs: app
|
||||||
other-modules:
|
other-modules:
|
||||||
Api
|
Api
|
||||||
|
Effect
|
||||||
Form
|
Form
|
||||||
Form.Input
|
Form.Input
|
||||||
Form.Internal
|
Form.Internal
|
||||||
@@ -42,6 +43,7 @@ executable frontend
|
|||||||
containers,
|
containers,
|
||||||
data-default,
|
data-default,
|
||||||
miso,
|
miso,
|
||||||
|
mtl,
|
||||||
neat-interpolation,
|
neat-interpolation,
|
||||||
safe,
|
safe,
|
||||||
split,
|
split,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"json2sql": {
|
"json2sql": {
|
||||||
"branch": "main",
|
"branch": "main",
|
||||||
"repo": "git@code.nomath.org:~/json2sql",
|
"repo": "git@code.nomath.org:~/json2sql",
|
||||||
"rev": "906d9ebba1ae08ea73acb55b536ff2f49e1b55c0",
|
"rev": "58b2ef265847d005300df4b6e908734bae1a7cb4",
|
||||||
"type": "git"
|
"type": "git"
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
|
|||||||
Reference in New Issue
Block a user