aboutsummaryrefslogtreecommitdiffstats
path: root/frontend/app
diff options
context:
space:
mode:
authorLibravatar Alexander Foremny <aforemny@posteo.de>2024-06-07 16:14:52 +0200
committerLibravatar Alexander Foremny <aforemny@posteo.de>2024-06-07 17:06:17 +0200
commit8a34cc822c2c508472fe29ab2be1b74ba06e59e6 (patch)
tree74a67b93a76addabdb0fcf9e9479f4c6f7b4d113 /frontend/app
parent79dd6af899fbaf7c413d7fd864f5716cbdf544e5 (diff)
add collections
Diffstat (limited to 'frontend/app')
-rw-r--r--frontend/app/Api.hs10
-rw-r--r--frontend/app/Page/NewCollection.hs17
2 files changed, 25 insertions, 2 deletions
diff --git a/frontend/app/Api.hs b/frontend/app/Api.hs
index 2aa23c9..2b7598a 100644
--- a/frontend/app/Api.hs
+++ b/frontend/app/Api.hs
@@ -2,6 +2,7 @@
module Api
( fetchCollections,
+ createCollection,
fetchSchema,
fetchSchemaVersion,
fetchPosts,
@@ -33,6 +34,15 @@ fetchCollections :: JSM (Either String [String])
fetchCollections =
A.eitherDecode <$> fetch (fromString "http://localhost:8081/collections")
+createCollection :: String -> JSM (Either String ())
+createCollection collection =
+ A.eitherDecode
+ <$> fetch
+ ( fromString "http://localhost:8081/collections"
+ & setRequestMethod "POST"
+ & setRequestBodyLBS (A.encode (A.toJSON collection))
+ )
+
fetchSchemaVersion :: JSM (Either String Version)
fetchSchemaVersion =
A.eitherDecode <$> fetch (fromString "http://localhost:8081/schemaVersion")
diff --git a/frontend/app/Page/NewCollection.hs b/frontend/app/Page/NewCollection.hs
index b105689..282d36e 100644
--- a/frontend/app/Page/NewCollection.hs
+++ b/frontend/app/Page/NewCollection.hs
@@ -7,9 +7,12 @@ module Page.NewCollection
)
where
+import Api
+import Data.Aeson qualified as A
import Data.Text qualified as T
import Form qualified as F
import Miso
+import Miso.String (toMisoString)
data Model = Model
{ input :: T.Text
@@ -24,19 +27,29 @@ data Action
= NoOp
| FormChanged T.Text
| FormSubmitted T.Text
+ | CollectionCreated (Either String ())
deriving (Eq, Show)
updateModel :: Action -> Model -> Effect Action Model
updateModel NoOp m = noEff m
updateModel (FormChanged input) m = noEff m {input}
-updateModel (FormSubmitted _) m = noEff m
+updateModel (FormSubmitted collection) m =
+ m <# do
+ CollectionCreated <$> createCollection (T.unpack collection)
+updateModel (CollectionCreated (Left err)) m =
+ m <# do
+ pure NoOp <* consoleLog (toMisoString err)
+-- TODO reload collections in main app
+updateModel (CollectionCreated (Right _)) m = noEff m
viewModel :: Model -> View Action
viewModel m = do
div_ [] $
[ h3_ [] [text "new collection"],
either FormChanged FormSubmitted
- <$> F.runForm collectionForm m.input
+ <$> F.runForm collectionForm m.input,
+ pre_ [] [text (toMisoString (A.encode m.input))],
+ pre_ [] [text (toMisoString (A.encode (collectionForm.fill m.input)))]
]
collectionForm :: F.Form T.Text T.Text