espial-0.0.3: purs/src/App.purs
module App where
import Prelude
import Globals (app')
import Data.Array ((:))
import Data.Either (Either(..))
import Data.FormURLEncoded (FormURLEncoded)
import Data.HTTP.Method (Method(..))
import Data.Maybe (Maybe(..))
import Data.MediaType.Common (applicationFormURLEncoded)
import Effect (Effect)
import Effect.Aff (Aff, launchAff)
import Effect.Class (liftEffect)
import Network.HTTP.Affjax (affjax, AffjaxResponse)
import Network.HTTP.Affjax (defaultRequest) as AX
import Network.HTTP.Affjax.Request as AXReq
import Network.HTTP.Affjax.Response as AXRes
import Network.HTTP.RequestHeader (RequestHeader(..))
import Web.Event.Event (Event, preventDefault)
import Web.HTML (window)
import Web.HTML.Location (reload)
import Web.HTML.Window (location)
-- import Data.Argonaut.Core as J
logoutE :: Event -> Effect Unit
logoutE e = void <<< launchAff <<< logout =<< preventDefault e
logout :: Unit -> Aff Unit
logout u = do
void $ fetchUrl POST app.authRlogoutR [] Nothing AXRes.ignore
liftEffect $ window >>= location >>= reload
where
app = app' u
fetchUrlEnc
:: forall a.
Method
-> String
-> Maybe FormURLEncoded
-> AXRes.Response a
-> Aff (AffjaxResponse a)
fetchUrlEnc method path content rt =
fetchPath method path [ContentType applicationFormURLEncoded] (AXReq.FormURLEncoded <$> content) rt
fetchPath
:: forall a.
Method
-> String
-> Array RequestHeader
-> Maybe AXReq.Request
-> AXRes.Response a
-> Aff (AffjaxResponse a)
fetchPath method path headers content rt =
fetchUrl method ((app' unit).homeR <> path) headers content rt
fetchUrl
:: forall a.
Method
-> String
-> Array RequestHeader
-> Maybe AXReq.Request
-> AXRes.Response a
-> Aff (AffjaxResponse a)
fetchUrl method url headers content rt =
affjax rt
AX.defaultRequest
{ url = url
, method = Left method
, headers = RequestHeader app.csrfHeaderName app.csrfToken : headers
, content = content
}
where
app = app' unit