@@ -7,6 +7,7 @@
77{-# LANGUAGE MultiParamTypeClasses #-}
88{-# LANGUAGE OverloadedStrings #-}
99{-# LANGUAGE PolyKinds #-}
10+{-# LANGUAGE RecordWildCards #-}
1011{-# LANGUAGE ScopedTypeVariables #-}
1112{-# LANGUAGE TupleSections #-}
1213{-# LANGUAGE TypeFamilies #-}
@@ -48,14 +49,13 @@ import GHC.TypeLits (KnownSymbol, symbolVal)
4849import Servant.API ((:<|>) (..), (:>), BasicAuth,
4950 BasicAuthData, BuildHeadersTo (..),
5051 Capture, Header, Headers (..),
51− HttpVersion, IsSecure, MimeRender (..),
52− NoContent, QueryFlag,
53− QueryParam, QueryParams, Raw,
54− ReflectMethod (..), RemoteHost,
52+ HttpVersion, IsSecure, NoContent,
53+ QueryFlag, QueryParam, QueryParams,
54+ Raw, ReflectMethod (..), RemoteHost,
5555 ReqBody, ToHttpApiData (..), Vault,
5656 Verb, contentType)
5757
58−import Reflex.Dom.Core (Dynamic, Event, Reflex,
58+import Reflex.Dom.Core (Dynamic, Event, IsXhrPayload, Reflex,
5959 XhrRequest (..),
6060 XhrResponseHeaders (..),
6161 attachPromptlyDynWith, constDyn)
@@ -63,9 +63,9 @@ import Reflex.Dom.Core (Dynamic, Event, Reflex,
6363import Servant.Common.BaseUrl (BaseUrl (..), Scheme (..),
6464 SupportsServantReflex)
6565import Servant.Common.Req (ClientOptions, MimeUnrender,
66− QParam (..), QueryPart (..), Req,
67− ReqResult (..), addHeader, authData,
68− defReq,
66+ QParam (..), QueryPart (..), Req (..),
67+ ReqResult (..), SomeXhrRequest (..),
68+ addHeader, authData, defReq,
6969 defaultClientOptions,
7070 performRequestsCT,
7171 performRequestsNoBody,
@@ -74,7 +74,8 @@ import Servant.Common.Req (ClientOptions, MimeUnrender,
7474 qParams, reqBody, reqFailure,
7575 reqMethod, reqSuccess, reqSuccess',
7676 respHeaders, response, withCredentials)
77−import Servant.Reflex (BuildHeaderKeysTo (..), toHeaders)
77+import Servant.Reflex (BuildHeaderKeysTo (..),
78+ GHCJS'MimeRender (..), toHeaders)
7879
7980
8081------------------------------------------------------------------------------
@@ -313,29 +314,31 @@ instance (SupportsServantReflex t m,
313314 clientWithRouteMulti _ _ _ _ _ _ opts rawReqs triggers = do
314315 let rawReqs' = sequence rawReqs :: Dynamic t (f (Either Text (XhrRequest ())))
315316 rawReqs'' = attachPromptlyDynWith (\fxhr t -> Compose (t, fxhr)) rawReqs' triggers
316− resps <- fmap (fmap aux . sequenceA . getCompose) <$> performSomeRequestsAsync opts rawReqs''
317+ rawReqs''' = (fmap . fmap . fmap) (SomeXhrRequest . fmap Just) rawReqs''
318+ resps <- fmap (fmap aux . sequenceA . getCompose) <$> performSomeRequestsAsync opts rawReqs'''
317319 return resps
318320 where
319321 aux (tag, Right r) = ResponseSuccess tag () r
320322 aux (tag, Left e) = RequestFailure tag e
321323
322324
323−instance (MimeRender ct a,
325+instance (GHCJS'MimeRender ct a, IsXhrPayload (ToSend ct a), Show (ToSend ct a),
324326 HasClientMulti t m sublayout f tag,
325327 Reflex t,
326328 Applicative f)
327329 => HasClientMulti t m (ReqBody (ct ': cts) a :> sublayout) f tag where
328330
329331 type ClientMulti t m (ReqBody (ct ': cts) a :> sublayout) f tag =
330− Dynamic t (f (Either Text a)) -> ClientMulti t m sublayout f tag
332+ Dynamic t (f (Either Text (ToConvert ct a))) -> ClientMulti t m sublayout f tag
331333
332334 clientWithRouteMulti Proxy q f tag reqs baseurl opts bodies =
333335 clientWithRouteMulti (Proxy :: Proxy sublayout) q f tag reqs' baseurl opts
334− where req' b r = r { reqBody = bodyBytesCT (constDyn b) }
336+ where req' b Req{..} = Req { reqBody = bodyBytesCT (constDyn b), .. }
335337 ctProxy = Proxy :: Proxy ct
338+ atProxy = Proxy :: Proxy a
336339 ctString = T.pack $ show $ contentType ctProxy
337340 bodyBytesCT b = Just $ (fmap . fmap)
338− (\b' -> (mimeRender ctProxy b', ctString))
341+ (\b' -> (ghcjsMimeRender ctProxy atProxy b', ctString))
339342 b
340343 reqs' = liftA2 req' <$> bodies <*> reqs
341344