@@ -14,6 +14,7 @@ import Control.Concurrent
1414import Control.Applicative (liftA2, liftA3)
1515import Control.Monad (join)
1616import Control.Monad.IO.Class (MonadIO, liftIO)
17+import Data.Aeson
1718import Data.Bifunctor (first)
1819import qualified Data.ByteString.Lazy.Char8 as BL
1920import qualified Data.Map as Map
@@ -26,6 +27,8 @@ import qualified Data.Text as T
2627import qualified Data.Text.Encoding as TE
2728import Data.Traversable (forM)
2829import Language.Javascript.JSaddle.Monad (JSM, MonadJSM)
30+import qualified Language.Javascript.JSaddle as JS
31+import Language.Javascript.JSaddle.Types (JSVal)
2932import Reflex.Dom hiding (tag)
3033import Servant.Common.BaseUrl (BaseUrl, showBaseUrl,
3134 SupportsServantReflex)
@@ -347,23 +350,29 @@ bytesToPayload = TE.decodeUtf8 . BL.toStrict
347350-- , fmap (uncurry RequestFailure) badReq
348351-- ]
349352
350−
351353performRequestsCT
352− :: (SupportsServantReflex t m,
353− MimeUnrender ct a, Traversable f)
354+ :: ( SupportsServantReflex t m
355+ -- , MimeUnrender ct a
356+ , FromJSON a
357+ , Traversable f
358+ )
354359 => Proxy ct
355360 -> Text
356361 -> Dynamic t (f (Req t))
357362 -> Dynamic t BaseUrl
358363 -> Event t tag
359364 -> m (Event t (f (ReqResult tag a)))
360−performRequestsCT ct reqMeth reqs reqHost trigger = do
365+performRequestsCT _ reqMeth reqs reqHost trigger = do
361366 resps <- performRequests reqMeth reqs reqHost trigger
362− let decodeResp x = first T.pack .
363− mimeUnrender ct .
364− BL.fromStrict .
365− TE.encodeUtf8 =<< note "No body text"
366− (_xhrResponse_responseText x)
367+ -- let decodeResp x = first T.pack .
368+ -- mimeUnrender ct .
369+ -- BL.fromStrict .
370+ -- TE.encodeUtf8 =<< note "No body text"
371+ let decodeResp x = first T.pack
372+ . note "Failed to decode"
373+ . jsonDecode
374+ . JS.textToJSString
375+ =<< note "No body text" (_xhrResponse_responseText x)
367376 return $ fmap
368377 (\(t,rs) -> ffor rs $ \r -> case r of
369378 Left e -> RequestFailure t e
@@ -393,7 +402,7 @@ evalResponse
393402 :: (XhrResponse -> Either Text a)
394403 -> (tag, XhrResponse)
395404 -> ReqResult tag a
396−evalResponse decode (tag, xhr) =
405+evalResponse decodeRes (tag, xhr) =
397406 let okStatus = _xhrResponse_status xhr < 400
398407 errMsg = fromMaybe
399408 ("Empty response with error code " <>
@@ -403,7 +412,7 @@ evalResponse decode (tag, xhr) =
403412 then either
404413 (\e -> ResponseFailure tag e xhr)
405414 (\v -> ResponseSuccess tag v xhr)
406− (decode xhr)
415+ (decodeRes xhr)
407416 else ResponseFailure tag errMsg xhr
408417 in respPayld
409418