diff options
Diffstat (limited to 'frontend')
-rw-r--r-- | frontend/app/Api.hs | 10 | ||||
-rw-r--r-- | frontend/app/Page/NewCollection.hs | 17 |
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 |