From 37e654f24f1a1e8af908d1f88300f55eb6c88302 Mon Sep 17 00:00:00 2001
From: Sudhir Kumar <s@atomicits.com>
Date: Wed, 29 Aug 2018 14:01:01 +0530
Subject: [PATCH] reverted unsafeCoerce

---
 .../Components/GraphExplorer/Sigmajs.purs     |  1 +
 src/Gargantext/Components/Login.purs          | 27 ++++++-----
 src/Gargantext/Components/RandomText.purs     | 14 +++---
 src/Gargantext/Components/Tree.purs           | 22 +++++----
 src/Gargantext/Config/REST.purs               | 10 +++--
 .../Pages/Corpus/Doc/Annotation.purs          | 12 ++---
 .../Corpus/Doc/Facets/Terms/NgramsItem.purs   |  4 +-
 .../Corpus/Doc/Facets/Terms/NgramsTable.purs  | 15 ++++---
 src/Gargantext/Pages/Corpus/User/Brevets.purs |  6 +--
 .../Corpus/User/Users/Specs/Documents.purs    |  6 +--
 .../Corpus/User/Users/Specs/Renders.purs      | 10 ++---
 src/Gargantext/Pages/Folder.purs              |  5 +--
 src/Gargantext/Pages/Home/Actions.purs        | 20 +++------
 src/Gargantext/Pages/Home/Specs.purs          | 11 +++--
 .../Pages/Layout/Specs/AddCorpus/Actions.purs | 45 ++++++++++---------
 src/Gargantext/Pages/Layout/Specs/Search.purs | 28 ++++++------
 src/Gargantext/Router.purs                    | 18 +++++---
 src/Gargantext/Utils/DecodeMaybe.purs         |  5 ++-
 18 files changed, 139 insertions(+), 120 deletions(-)

diff --git a/src/Gargantext/Components/GraphExplorer/Sigmajs.purs b/src/Gargantext/Components/GraphExplorer/Sigmajs.purs
index 1a0127a23..a77fc6cd4 100644
--- a/src/Gargantext/Components/GraphExplorer/Sigmajs.purs
+++ b/src/Gargantext/Components/GraphExplorer/Sigmajs.purs
@@ -3,6 +3,7 @@ module Gargantext.Components.GraphExplorer.Sigmajs where
 import Prelude
 
 import Effect (Effect)
+import Prim.Row (class Union)
 import React (ReactClass, ReactElement, createElement)
 import Unsafe.Coerce (unsafeCoerce)
 
diff --git a/src/Gargantext/Components/Login.purs b/src/Gargantext/Components/Login.purs
index 51cf7dd4d..ea0d46e12 100644
--- a/src/Gargantext/Components/Login.purs
+++ b/src/Gargantext/Components/Login.purs
@@ -2,18 +2,27 @@ module Gargantext.Components.Login where
 
 import Prelude hiding (div)
 
-import Effect (Effect)
+import Affjax (defaultRequest, request)
+import Affjax.RequestHeader (RequestHeader(..))
 import Data.Argonaut (class DecodeJson, class EncodeJson, decodeJson, encodeJson, jsonEmptyObject, (.?), (:=), (~>))
 import Data.Either (Either(..))
 import Data.HTTP.Method (Method(..))
 import Data.Lens (over)
 import Data.Maybe (Maybe(..))
 import Data.MediaType.Common (applicationJSON)
+import Effect (Effect)
+import Effect.Aff (Aff, attempt)
+import Effect.Aff.Class (liftAff)
+import Effect.Class (liftEffect)
+import Effect.Console (log)
 import Gargantext.Components.Modals.Modal (modalHide)
 import React.DOM (a, button, div, h2, h4, h5, i, input, label, p, span, text)
 import React.DOM.Props (_data, _id, _type, aria, className, href, maxLength, name, onClick, onInput, placeholder, role, target, value)
 import Thermite (PerformAction, Render, Spec, _render, modifyState, simpleSpec)
 import Unsafe.Coerce (unsafeCoerce)
+import Web.HTML (window)
+import Web.HTML.Window (localStorage)
+import Web.Storage.Storage (getItem, setItem)
 
 --          TODO: ask for login (modal) or account creation after 15 mn when user is not logged and has made one search at least
 
@@ -44,7 +53,7 @@ data Action
 
 performAction :: forall props. PerformAction State props Action
 performAction NoOp _ _ = void do
-  modifyState id
+  modifyState identity
 
 performAction (SetUserName usr) _ _ = void do
   modifyState \(State state) -> State $ state { username = usr }
@@ -57,7 +66,7 @@ performAction (SetPassword pwd) _ _ = void do
 
 performAction Login _ (State state) = void do
   --lift $ setHash "/search"
-  liftEff $ modalHide "loginModal"
+  liftEffect $ modalHide "loginModal"
   modifyState \(State state) -> State $ state {loginC = true}
   -- res <- lift $ loginReq $ LoginReq { username : state.username, password : state.password }
   -- case res of
@@ -133,13 +142,13 @@ renderSpec = simpleSpec performAction render
                   [ input [_type "hidden",
                            name "csrfmiddlewaretoken",
                            value "Wy52D2nor8kC1r1Y4GrsrSIxQ2eqW8UwkdiQQshMoRwobzU4uldknRUhP0j4WcEM" ]
-                    []
+
                   , div [className "form-group"]
                     [ p [] [text state.errorMessage]
-                    , input [className "form-control", _id "id_username",maxLength "254", name "username", placeholder "username", _type "text",value state.username,  onInput \e -> dispatch (SetUserName (unsafeEventValue e))] []
+                    , input [className "form-control", _id "id_username",maxLength "254", name "username", placeholder "username", _type "text",value state.username,  onInput \e -> dispatch (SetUserName (unsafeEventValue e))]
                     ]
                   , div [className "form-group"]
-                    [ input [className "form-control", _id "id_password", name "password", placeholder "password", _type "password",value state.password,onInput \e -> dispatch (SetPassword (unsafeEventValue e))] []
+                    [ input [className "form-control", _id "id_password", name "password", placeholder "password", _type "password",value state.password,onInput \e -> dispatch (SetPassword (unsafeEventValue e))]
                     , div [className "clearfix"] []
                     ]
                   , div [className "center"]
@@ -147,8 +156,6 @@ renderSpec = simpleSpec performAction render
                       label [] [
                          div [className "checkbox"]
                          [ input [_id "terms-accept", _type "checkbox", value "", className "checkbox"]
-                           [
-                           ]
                          , text "I accept the terms of uses ",
                            a [href "http://gitlab.iscpif.fr/humanities/tofu/tree/master"] [text "[Read the terms of use]"]
                          ]
@@ -243,7 +250,7 @@ loginReq encodeData =
         }
   in
     do
-      affResp <- liftAff $ attempt $ affjax setting
+      affResp <- liftAff $ attempt $ request setting
       case affResp of
         Left err -> do
           liftAff $ log $ show err
@@ -257,7 +264,7 @@ loginReq encodeData =
             Left e ->
               liftAff $ log $ "Error Decoding : " <> show e
             Right (LoginRes res1) ->
-              liftEff $ setToken res1.token
+              liftEffect $ setToken res1.token
           pure res
 
 instance decodeLoginRes :: DecodeJson LoginRes where
diff --git a/src/Gargantext/Components/RandomText.purs b/src/Gargantext/Components/RandomText.purs
index c3c073a9f..ac5706f4a 100644
--- a/src/Gargantext/Components/RandomText.purs
+++ b/src/Gargantext/Components/RandomText.purs
@@ -21,10 +21,12 @@ module Gargantext.Components.RandomText where
 
 import Prelude
 
-import Effect (Effect)
 import Data.Array (drop, dropEnd, filter, foldl, head, length, tail, take, takeEnd, (!!))
 import Data.Maybe (Maybe(Nothing, Just), fromJust)
-import Data.String (Pattern(..), fromCharArray, split, toCharArray)
+import Data.String (Pattern(..), split)
+import Data.String.CodeUnits (fromCharArray, toCharArray)
+import Effect (Effect)
+import Effect.Random (randomInt)
 import Partial (crash)
 import Partial.Unsafe (unsafePartial)
 
@@ -60,7 +62,7 @@ data RandomWheel a = RandomWheel { before :: Array a
                                  , after  :: Array a
                                  }
 
-randomPart :: forall a b. Array b -> Effect (Array b)
+randomPart :: forall b. Array b -> Effect (Array b)
 randomPart array = randomArrayPoly middle >>= \(middle') -> pure ( start <> middle' <> end)
         where
             start   = take    2          array
@@ -68,13 +70,13 @@ randomPart array = randomArrayPoly middle >>= \(middle') -> pure ( start <> midd
             end     = takeEnd 2          array
 
 
-randomArrayPoly :: forall a b. Array a -> Effect (Array a)
+randomArrayPoly :: forall a. Array a -> Effect (Array a)
 randomArrayPoly wheel = case head wheel of
                          Nothing -> pure []
                          Just wheel' -> randomWheel (RandomWheel { before:wheel, during:wheel', after:[]})
                                      >>= \(RandomWheel rand) -> (pure rand.after)
 
-randomWheel :: forall a b. RandomWheel b -> Effect (RandomWheel b)
+randomWheel :: forall b. RandomWheel b -> Effect (RandomWheel b)
 randomWheel (RandomWheel {before:[], during:d, after:a}) =
     pure   (RandomWheel {before:[], during:d, after:a})
 
@@ -83,7 +85,7 @@ randomWheel (RandomWheel {before:b, during:d, after:a}) = do
     randomWheel $ RandomWheel {before:b', during:d', after:(a <> [d'])}
 
 
-randomArray :: forall a b. Array b -> Effect (RandomWheel b)
+randomArray :: forall b. Array b -> Effect (RandomWheel b)
 randomArray array = unsafePartial $ do
     n    <- randomInt 0 (length array - 1)
 
diff --git a/src/Gargantext/Components/Tree.purs b/src/Gargantext/Components/Tree.purs
index 698a16469..6d7c68746 100644
--- a/src/Gargantext/Components/Tree.purs
+++ b/src/Gargantext/Components/Tree.purs
@@ -2,10 +2,15 @@ module Gargantext.Components.Tree where
 
 import Prelude hiding (div)
 
+import Affjax (defaultRequest, request)
 import Data.Argonaut (class DecodeJson, decodeJson, (.?))
 import Data.Either (Either(..))
 import Data.HTTP.Method (Method(..))
 import Data.Tuple (Tuple(..))
+import Effect.Aff (Aff, attempt)
+import Effect.Aff.Class (liftAff)
+import Effect.Class (liftEffect)
+import Effect.Console (log)
 import React (ReactElement)
 import React.DOM (a, div, i, li, text, ul)
 import React.DOM.Props (Props, className, href, onClick)
@@ -27,8 +32,9 @@ type State = FTree
 initialState :: State
 initialState = NLeaf (Tuple "" "")
 
-performAction :: PerformAction _ State _ Action
-performAction (ToggleFolder i) _ _ = void (cotransform (\td -> toggleNode i td))
+performAction :: PerformAction State _ Action
+performAction (ToggleFolder i) _ _ = void $
+ cotransform (\td -> toggleNode i td)
 
 toggleNode :: forall t10. Int -> NTree t10 -> NTree t10
 toggleNode sid (NNode iid open name ary) =
@@ -127,19 +133,19 @@ instance decodeJsonLNode :: DecodeJson LNode where
 
 loadDefaultNode :: Aff (Either String (Array LNode))
 loadDefaultNode = do
-  res <- liftAff $ attempt $ affjax defaultRequest
+  res <- liftAff $ attempt $ request defaultRequest
          { url = "http://localhost:8008/user"
          , method = Left GET
          }
   case res of
     Left err -> do
-      _ <- liftEff $ log $ show err
+      _ <- liftEffect $ log $ show err
       pure $ Left $ show err
     Right a -> do
-      _ <- liftEff $ log $ show a.status
-      _ <- liftEff $ log $ show a.headers
-      _ <- liftEff $ log $ show a.response
-      let resp = decodeJson a.response
+      _ <- liftEffect $ log $ show a.status
+      _ <- liftEffect $ log $ show a.headers
+      _ <- liftEffect $ log $ show a.body
+      let resp = decodeJson a.body
       pure resp
 
 
diff --git a/src/Gargantext/Config/REST.purs b/src/Gargantext/Config/REST.purs
index 3e73c66cd..8a64052a1 100644
--- a/src/Gargantext/Config/REST.purs
+++ b/src/Gargantext/Config/REST.purs
@@ -2,15 +2,19 @@ module Gargantext.Config.REST where
 
 import Prelude
 
+import Affjax (defaultRequest, request)
+import Affjax.RequestHeader (RequestHeader(..))
 import Data.Argonaut (class DecodeJson, decodeJson)
 import Data.Either (Either(..))
 import Data.HTTP.Method (Method(..))
 import Data.MediaType.Common (applicationJSON)
+import Effect.Aff (Aff, attempt)
+import Effect.Aff.Class (liftAff)
 
-get :: forall t2 t31. DecodeJson t31 => String ->
+get :: forall t31. DecodeJson t31 => String ->
                       Aff (Either String t31)
 get url = do
-  affResp <- liftAff $ attempt $ affjax defaultRequest
+  affResp <- liftAff $ attempt $ request defaultRequest
     { method  = Left GET
     , url     = url
     , headers =  [ ContentType applicationJSON
@@ -22,5 +26,5 @@ get url = do
     Left err -> do
       pure $ Left $ show err
     Right a -> do
-      let res = decodeJson a.response
+      let res = decodeJson a.body
       pure res
diff --git a/src/Gargantext/Pages/Corpus/Doc/Annotation.purs b/src/Gargantext/Pages/Corpus/Doc/Annotation.purs
index a5d4f6492..37d103a84 100644
--- a/src/Gargantext/Pages/Corpus/Doc/Annotation.purs
+++ b/src/Gargantext/Pages/Corpus/Doc/Annotation.purs
@@ -3,8 +3,8 @@ module Gargantext.Pages.Corpus.Doc.Annotation where
 import Prelude hiding (div)
 import React (ReactElement)
 import React.DOM (a, button, div, h4, h6, input, li, nav, option, p, select, span, text, ul)
-import React.DOM.Props (_data, _id, _type, aria, className, href, name, onChange, onInput, placeholder, role, selected, style, value)
-import Thermite (PerformAction, Render, Spec, cotransform, modifyState, simpleSpec)
+import React.DOM.Props (_data, _id, _type, aria, className, href, name, onChange, onInput, placeholder, role, style, value)
+import Thermite (PerformAction, Render, Spec, modifyState, simpleSpec)
 import Unsafe.Coerce (unsafeCoerce)
 
 
@@ -27,7 +27,7 @@ data Action
   | SetInput String
 
 
-performAction :: PerformAction State _ Action
+performAction :: forall props. PerformAction State props Action
 performAction NoOp _ _ = pure unit
 
 performAction (ChangeString ps) _ _ = pure unit
@@ -39,10 +39,10 @@ performAction (SetInput ps) _ _ = void do
 
 
 
-docview :: Spec State _ Action
+docview :: forall props. Spec State props Action
 docview = simpleSpec performAction render
   where
-    render :: Render State _ Action
+    render :: Render State props Action
     render dispatch _ state _ =
       [
           div [className "container1"]
@@ -76,7 +76,7 @@ docview = simpleSpec performAction render
                     [
                       h6 [] [text "Add a free term to STOPLIST"]
                     ,  div [className "form-group"]
-                       [ input [className "form-control", _id "id_password", name "password", placeholder "Any text", _type "value",value state.inputValue,onInput \e -> dispatch (SetInput (unsafeEventValue e))] []
+                       [ input [className "form-control", _id "id_password", name "password", placeholder "Any text", _type "value",value state.inputValue,onInput \e -> dispatch (SetInput (unsafeEventValue e))]
                        , div [className "clearfix"] []
                        ]
                     , button [className "btn btn-primary", _type "button"] [text "Create and Add"]
diff --git a/src/Gargantext/Pages/Corpus/Doc/Facets/Terms/NgramsItem.purs b/src/Gargantext/Pages/Corpus/Doc/Facets/Terms/NgramsItem.purs
index fbc5cd656..bf7affd54 100644
--- a/src/Gargantext/Pages/Corpus/Doc/Facets/Terms/NgramsItem.purs
+++ b/src/Gargantext/Pages/Corpus/Doc/Facets/Terms/NgramsItem.purs
@@ -60,7 +60,7 @@ ngramsItemSpec = simpleSpec performAction render
                 , checked $ getter _._type state.term == MapTerm
                 , title "Mark as completed"
                 , onChange $ dispatch <<< ( const $ SetMap $ not (getter _._type state.term == MapTerm))
-                ] []
+                ]
         checkbox_stop =
           input
           [ _type "checkbox"
@@ -68,7 +68,7 @@ ngramsItemSpec = simpleSpec performAction render
           , checked $ getter _._type state.term == StopTerm
           , title "Mark as completed"
           , onChange $ dispatch <<< ( const $ SetStop $ not (getter _._type state.term == StopTerm))
-          ] []
+          ]
 
 
 dispTerm :: String -> TermType -> ReactElement
diff --git a/src/Gargantext/Pages/Corpus/Doc/Facets/Terms/NgramsTable.purs b/src/Gargantext/Pages/Corpus/Doc/Facets/Terms/NgramsTable.purs
index a9bec000c..28073e11b 100644
--- a/src/Gargantext/Pages/Corpus/Doc/Facets/Terms/NgramsTable.purs
+++ b/src/Gargantext/Pages/Corpus/Doc/Facets/Terms/NgramsTable.purs
@@ -1,15 +1,15 @@
 module Gargantext.Pages.Corpus.Doc.Facets.Terms.NgramsTable where
 
-import CSS.TextAlign (center, textAlign)
+
 import Data.Array (filter, fold, toUnfoldable)
 import Data.Either (Either(..))
 import Data.Lens (Lens', Prism', lens, over, prism)
 import Data.List (List)
 import Data.Tuple (Tuple(..), uncurry)
 import Gargantext.Pages.Corpus.Doc.Facets.Terms.NgramsItem as NI
-import Prelude (class Eq, class Ord, class Show, Unit, bind, map, not, pure, show, void, ($), (*), (+), (-), (/), (<), (<$>), (<>), (==), (>), (>=), (>>=))
+import Prelude (class Eq, class Ord, class Show, map, show, void, ($), (*), (+), (-), (/), (<), (<>), (==), (>), (>=))
 import React (ReactElement)
-import React.DOM hiding (style)
+import React.DOM hiding (style, map)
 import React.DOM.Props (_id, _type, className, href, name, onChange, onClick, onInput, placeholder, scope, selected, style, value)
 import Thermite (PerformAction, Spec, _render, cotransform, focus, foreach, modifyState, withState)
 import Unsafe.Coerce (unsafeCoerce)
@@ -52,8 +52,6 @@ _ItemAction = prism (uncurry ItemAction) \ta ->
     _ -> Left ta
 
 performAction :: forall props. PerformAction State props Action
-performAction _ _ _ = void do
-  modifyState \(State state) -> State $ state
 
 performAction (ChangePageSize ps) _ _ = void (cotransform (\state ->  changePageSize ps state ))
 
@@ -69,7 +67,10 @@ performAction (ChangeString c) _ _ = void do
 performAction (SetInput s) _ _ = void do
   modifyState \(State state) -> State $ state { search = s }
 
-tableSpec :: forall props .Spec State props Action -> Spec eff State props Action
+performAction _ _ _ = void do
+  modifyState \(State state) -> State $ state
+
+tableSpec :: forall props .Spec State props Action -> Spec State props Action
 tableSpec = over _render \render dispatch p (State s) c ->
   [div [className "container-fluid"]
      [
@@ -97,7 +98,7 @@ tableSpec = over _render \render dispatch p (State s) c ->
                      , _type "value"
                      ,value s.search
                      ,onInput \e -> dispatch (SetInput (unsafeEventValue e))
-                     ] []
+                     ]
                  ]
 
 
diff --git a/src/Gargantext/Pages/Corpus/User/Brevets.purs b/src/Gargantext/Pages/Corpus/User/Brevets.purs
index cf4ef82cb..3472dd0bd 100644
--- a/src/Gargantext/Pages/Corpus/User/Brevets.purs
+++ b/src/Gargantext/Pages/Corpus/User/Brevets.purs
@@ -1,7 +1,6 @@
 module Gargantext.Pages.Corpus.User.Brevets where
 
-
-import Prelude (id, void)
+import Prelude
 import Thermite (PerformAction, Render, Spec, modifyState, simpleSpec)
 
 
@@ -14,8 +13,7 @@ data Action = NoOp
 
 performAction :: forall props. PerformAction State props Action
 performAction NoOp _ _ = void do
-  modifyState id
-
+  modifyState identity
 
 brevetsSpec :: forall props. Spec State props Action
 brevetsSpec = simpleSpec performAction render
diff --git a/src/Gargantext/Pages/Corpus/User/Users/Specs/Documents.purs b/src/Gargantext/Pages/Corpus/User/Users/Specs/Documents.purs
index 4e1fb0834..fc829ccba 100644
--- a/src/Gargantext/Pages/Corpus/User/Users/Specs/Documents.purs
+++ b/src/Gargantext/Pages/Corpus/User/Users/Specs/Documents.purs
@@ -1,6 +1,6 @@
 module Gargantext.Pages.Corpus.User.Users.Specs.Documents where
 
-import Prelude (id, void)
+import Prelude
 import React.DOM (table, tbody, td, text, th, thead, tr)
 import React.DOM.Props (className, scope)
 import Thermite (PerformAction, Render, Spec, modifyState, simpleSpec)
@@ -15,9 +15,7 @@ data Action = NoOp
 
 performAction :: forall props. PerformAction State props Action
 performAction NoOp _ _ = void do
-  modifyState id
-
-
+  modifyState identity
 
 publicationSpec :: forall props. Spec State props Action
 publicationSpec = simpleSpec performAction render
diff --git a/src/Gargantext/Pages/Corpus/User/Users/Specs/Renders.purs b/src/Gargantext/Pages/Corpus/User/Users/Specs/Renders.purs
index 7251c6c8d..372436d2b 100644
--- a/src/Gargantext/Pages/Corpus/User/Users/Specs/Renders.purs
+++ b/src/Gargantext/Pages/Corpus/User/Users/Specs/Renders.purs
@@ -7,7 +7,7 @@ import Data.Maybe (Maybe(..))
 import Data.Tuple (Tuple(..))
 import Prelude (($), (<<<))
 import React (ReactElement)
-import React.DOM (div, h3, h1, li, span, text, ul, img)
+import React.DOM (div, h3, img, li, span, text, ul)
 import React.DOM.Props (_id, className, src)
 import Thermite (Render)
 
@@ -21,7 +21,7 @@ render dispatch _ state _ =
             Nothing -> display "User not found" []
   ]
 
-display :: forall props. String -> Array ReactElement -> Array ReactElement
+display :: String -> Array ReactElement -> Array ReactElement
 display title elems =
   [ div [className "container-fluid"]
     [ div [className "row", _id "user-page-header"]
@@ -33,7 +33,7 @@ display title elems =
           [ div [className "col-md-12"]
             [ div [className "row"]
               [ div [className "col-md-2"]
-                    [ img [src "/images/Gargantextuel-212x300.jpg"] [] ]
+                    [ img [src "/images/Gargantextuel-212x300.jpg"] ]
               , div [className "col-md-1"] []
               , div [className "col-md-8"] elems
               ]
@@ -58,10 +58,10 @@ userInfos (HyperData user) =
     checkMaybe (Nothing) = ""
     checkMaybe (Just a) = a
 
-    listElement :: forall props. Array ReactElement -> ReactElement
+    listElement :: Array ReactElement -> ReactElement
     listElement = li [className "list-group-item justify-content-between"]
 
-    infoRender :: forall props. Tuple String String -> Array ReactElement
+    infoRender :: Tuple String String -> Array ReactElement
     infoRender (Tuple title content) =
       [ span [] [text title]
       , span [className "badge badge-default badge-pill"] [text content]
diff --git a/src/Gargantext/Pages/Folder.purs b/src/Gargantext/Pages/Folder.purs
index 8ba4cf54f..0633b83dc 100644
--- a/src/Gargantext/Pages/Folder.purs
+++ b/src/Gargantext/Pages/Folder.purs
@@ -1,6 +1,6 @@
 module Gargantext.Pages.Folder where
 
-import Prelude (id, void)
+import Prelude
 
 import Thermite (PerformAction, Render, Spec, modifyState, simpleSpec)
 
@@ -14,8 +14,7 @@ data Action = NoOp
 
 performAction :: forall props. PerformAction State props Action
 performAction NoOp _ _ = void do
-  modifyState id
-
+  modifyState identity
 
 projets :: forall props. Spec State props Action
 projets = simpleSpec performAction render
diff --git a/src/Gargantext/Pages/Home/Actions.purs b/src/Gargantext/Pages/Home/Actions.purs
index a6eed7525..30349183c 100644
--- a/src/Gargantext/Pages/Home/Actions.purs
+++ b/src/Gargantext/Pages/Home/Actions.purs
@@ -1,19 +1,11 @@
 module Gargantext.Pages.Home.Actions where
 
-
 import Prelude hiding (div)
 
-import Gargantext.Components.Lang.Landing.EnUS as En
-import Gargantext.Components.Lang.Landing.FrFR as Fr
-import Gargantext.Components.Data.Landing (BlockText(..), BlockTexts(..), Button(..), LandingData(..))
-import Gargantext.Components.Data.Lang (Lang(..))
-import Gargantext.Pages.Home.States (State(..))
-
-import React (ReactElement)
-import React.DOM (a, div, h3, i, img, p, span, text)
-import React.DOM.Props (Props, _id, aria, className, href, src, target, title)
-
-import Thermite (PerformAction, Render, Spec, modifyState, simpleSpec)
+import Effect.Class (liftEffect)
+import Gargantext.Pages.Home.States (State)
+import Routing.Hash (setHash)
+import Thermite (PerformAction, modifyState)
 
 data Action
   = NoOp
@@ -31,11 +23,11 @@ performAction Documentation _ _ = void do
   modifyState \state -> state
 
 performAction Enter _ _ = void do
-  lift $ setHash "/search"
+  liftEffect $ setHash "/search"
   modifyState \state -> state
 
 performAction Login _ _ = void do
-  lift $ setHash "/login"
+  liftEffect $ setHash "/login"
   modifyState \state -> state
 
 performAction SignUp _ _ = void do
diff --git a/src/Gargantext/Pages/Home/Specs.purs b/src/Gargantext/Pages/Home/Specs.purs
index 1e390d828..568d0ae9c 100644
--- a/src/Gargantext/Pages/Home/Specs.purs
+++ b/src/Gargantext/Pages/Home/Specs.purs
@@ -6,13 +6,13 @@ import Gargantext.Components.Lang.Landing.EnUS as En
 import Gargantext.Components.Lang.Landing.FrFR as Fr
 import Gargantext.Components.Data.Landing (BlockText(..), BlockTexts(..), Button(..), LandingData(..))
 import Gargantext.Components.Data.Lang (Lang(..))
-import Gargantext.Pages.Home.States  (State(..))
-import Gargantext.Pages.Home.Actions (Action(..), performAction)
+import Gargantext.Pages.Home.States (State)
+import Gargantext.Pages.Home.Actions (Action, performAction)
 
 import React (ReactElement)
 import React.DOM (a, div, h3, i, img, p, span, text)
 import React.DOM.Props (Props, _id, aria, className, href, src, target, title)
-import Thermite (PerformAction, Render, Spec, modifyState, simpleSpec)
+import Thermite (Render, Spec, simpleSpec)
 
 
 -- Layout |
@@ -73,7 +73,7 @@ jumboTitle (LandingData hd) b = div jumbo
                                [ div [_id "logo-designed" ]
                                  [ img [ src "images/logo.png"
                                        , title hd.logoTitle
-                                       ] []
+                                       ]
                                  ]
                                ]
                            ]
@@ -82,7 +82,7 @@ jumboTitle (LandingData hd) b = div jumbo
                                    , _id "funnyimg"
                                    , title hd.imageTitle
                                    ]
-                                   []
+
                            ]
                      ]
                    ]
@@ -99,6 +99,5 @@ imageEnter (LandingData hd) action =  div [className "row"]
                                    , title hd.imageTitle
                                    , action
                                    ]
-                                   []
                              ]
                            ]
diff --git a/src/Gargantext/Pages/Layout/Specs/AddCorpus/Actions.purs b/src/Gargantext/Pages/Layout/Specs/AddCorpus/Actions.purs
index fdde8097a..abcdc5450 100644
--- a/src/Gargantext/Pages/Layout/Specs/AddCorpus/Actions.purs
+++ b/src/Gargantext/Pages/Layout/Specs/AddCorpus/Actions.purs
@@ -1,21 +1,24 @@
 module Gargantext.Pages.Layout.Specs.AddCorpus.Actions where
 
+import Gargantext.Pages.Layout.Specs.AddCorpus.States
 import Prelude hiding (div)
 
-import Data.Argonaut (class DecodeJson, class EncodeJson, decodeJson, encodeJson, jsonEmptyObject, (.?), (:=), (~>))
+import Affjax (defaultRequest, request)
+import Affjax.RequestBody (RequestBody(..))
+import Affjax.RequestHeader (RequestHeader(..))
+import Control.Monad.Cont.Trans (lift)
+import Data.Argonaut (class EncodeJson, decodeJson, encodeJson, jsonEmptyObject, (:=), (~>))
 import Data.Either (Either(..))
 import Data.HTTP.Method (Method(..))
-import Data.Lens (over)
 import Data.Maybe (Maybe(Just))
 import Data.MediaType.Common (applicationJSON)
-
+import Effect.Aff (Aff, attempt)
+import Effect.Aff.Class (liftAff)
+import Effect.Class (liftEffect)
+import Effect.Console (log)
 import Gargantext.Components.Modals.Modal (modalHide)
-import Gargantext.Pages.Layout.Specs.AddCorpus.States
-
-import React (ReactElement)
-import React.DOM (button, div, h3, h5, li, span, text, ul)
-import React.DOM.Props (_data, _id, _type, aria, className, onClick, role)
-import Thermite (PerformAction, Render, Spec, _render, cotransform, modifyState, simpleSpec)
+import Routing.Hash (setHash)
+import Thermite (PerformAction, modifyState)
 
 data Action
   = NoOp
@@ -26,7 +29,7 @@ data Action
 
 performAction :: forall props. PerformAction State props Action
 performAction NoOp _ _ = void do
-  modifyState id
+  modifyState identity
 
 performAction (SelectDatabase selected) _ _ = void do
   modifyState \( state) -> state { select_database = selected }
@@ -37,14 +40,14 @@ performAction (UnselectDatabase unselected) _ _ = void do
 performAction (LoadDatabaseDetails) _ _ = void do
   res <- lift $ getDatabaseDetails $ QueryString { query_query: "string",query_name: ["Pubmed"]}
   case res of
-     Left err -> cotransform $ \(state) ->  state
+     Left err -> modifyState $ \(state) ->  state
      Right resData -> do
-       cotransform $ \(state) -> state {response  = resData}
+       modifyState $ \(state) -> state {response  = resData}
 
 performAction GO _ _ = void do
   lift $ setHash "/corpus"
-  _ <- liftEff $ modalHide "addCorpus"
-  modifyState id
+  _ <- liftEffect $ modalHide "addCorpus"
+  modifyState identity
 
 
 newtype QueryString = QueryString
@@ -74,22 +77,24 @@ instance encodeJsonQueryString :: EncodeJson QueryString where
 getDatabaseDetails :: QueryString -> Aff (Either String (Array Response))
 getDatabaseDetails reqBody = do
   let token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1MTk5OTg1ODMsInVzZXJfaWQiOjUsImVtYWlsIjoiYWxleGFuZHJlLmRlbGFub2VAaXNjcGlmLmZyIiwidXNlcm5hbWUiOiJkZXZlbG9wZXIifQ.Os-3wuFNSmRIxCZi98oFNBu2zqGc0McO-dgDayozHJg"
-  affResp <- liftAff $ attempt $ affjax defaultRequest
+  affResp <- liftAff $ attempt $ request $ defaultRequest
     { method = Left POST
     , url ="http://localhost:8009/count"
     , headers =  [ ContentType applicationJSON
                 , Accept applicationJSON
               --   , RequestHeader "Authorization" $  "Bearer " <> token
             ]
-    , content = Just $ encodeJson reqBody
+    , content = Just $ Json $ encodeJson reqBody
     }
   case affResp of
     Left err -> do
-      liftAff $ log $ "error" <> show err
+      liftEffect $ log $ "error" <> show err
       pure $ Left $ show err
 
     Right a -> do
-      liftAff $ log $ "POST method Completed"
-      liftAff $ log $ "GET /api response: " <> show a.response
-      let res = decodeJson a.response
+      liftEffect $ log $ "POST method Completed"
+      liftEffect $ log $ "GET /api response: " <> show a.body
+      res <- case a.body of
+        Left err -> []
+        Right d -> decodeJson d
       pure res
diff --git a/src/Gargantext/Pages/Layout/Specs/Search.purs b/src/Gargantext/Pages/Layout/Specs/Search.purs
index a81e5c607..58532eda4 100644
--- a/src/Gargantext/Pages/Layout/Specs/Search.purs
+++ b/src/Gargantext/Pages/Layout/Specs/Search.purs
@@ -1,11 +1,13 @@
 module Gargantext.Pages.Layout.Specs.Search where
 
 import Prelude hiding (div)
-import React.DOM (br', button, div, h3, input, text, i, span, img)
-import React.DOM.Props (_id, _type, className, name, onClick, onInput, placeholder, value, aria, src, title)
+
+import Effect.Class (liftEffect)
+import React.DOM (br', button, div, input, text)
+import React.DOM.Props (_id, _type, className, name, onClick, onInput, placeholder, value)
+import Routing.Hash (setHash)
 import Thermite (PerformAction, Render, Spec, modifyState, simpleSpec)
 import Unsafe.Coerce (unsafeCoerce)
-import Gargantext.Pages.Home as L
 
 type State =
   {
@@ -28,7 +30,7 @@ data Action
 
 performAction :: forall props. PerformAction State props Action
 performAction NoOp _ _ = void do
-  modifyState id
+  modifyState identity
 
 
 performAction (SetQuery q) _ _ = void do
@@ -36,8 +38,8 @@ performAction (SetQuery q) _ _ = void do
 
 
 performAction GO _ _ = void do
-  lift $ setHash "/addCorpus"
-  modifyState id
+  liftEffect $ setHash "/addCorpus"
+  modifyState identity
 
 
 unsafeEventValue :: forall event. event -> String
@@ -53,8 +55,8 @@ searchSpec = simpleSpec performAction render
        [ div [className "jumbotron" ]
          [ div [className "row"       ]
            [ div [className "col-md-10" ]
-             [ br' []
-             , br' []
+             [ br'
+             , br'
              , div [ className "form-group"]
                    [ input [ className "form-control"
                            , _id "id_password"
@@ -63,16 +65,16 @@ searchSpec = simpleSpec performAction render
                            , _type "text"
                            , value state.query
                            , onInput \e -> dispatch (SetQuery (unsafeEventValue e))
-                           ] []
-                    , br'[]
+                           ]
+                    , br'
                     ]
               ]
             , div [ className "col-md-2"]
-                  [ br' []
-                  , br' []
+                  [ br'
+                  , br'
                   , button [onClick \_ -> dispatch GO] [text "GO"]
                   ]
-            , br' []
+            , br'
             ]
           ]
         ]
diff --git a/src/Gargantext/Router.purs b/src/Gargantext/Router.purs
index d5c031036..f5e8fc73c 100644
--- a/src/Gargantext/Router.purs
+++ b/src/Gargantext/Router.purs
@@ -3,11 +3,15 @@ module Gargantext.Router where
 import Prelude
 
 import Control.Alt ((<|>))
-import Effect (Effect)
-import Effect.Class (liftEffect)
 import Data.Int (floor)
 import Data.Maybe (Maybe(..))
-import Routing.Match (Match)
+import Effect (Effect)
+import Effect.Class (liftEffect)
+import Effect.Console (log)
+import Routing.Match (Match, lit, num)
+import Web.HTML (window)
+import Web.HTML.Window (localStorage)
+import Web.Storage.Storage (getItem)
 
 data Routes
   = Home
@@ -60,16 +64,16 @@ routing =
 
 routeHandler :: (Maybe Routes -> Routes -> Effect Unit) -> Maybe Routes -> Routes -> Effect Unit
 routeHandler dispatchAction old new = do
-  liftEff $ log $ "change route : " <> show new
+  liftEffect $ log $ "change route : " <> show new
   w      <- window
   ls     <- localStorage w
   token  <- getItem "accessToken" ls
   let tkn = token
-  liftEff $ log $ "JWToken : " <> show tkn
+  liftEffect $ log $ "JWToken : " <> show tkn
   case tkn of
     Nothing -> do
       dispatchAction old new
-      liftEff $ log $ "called SignIn Route :"
+      liftEffect $ log $ "called SignIn Route :"
     Just t -> do
       dispatchAction old new
-      liftEff $ log $ "called Route : " <> show new
+      liftEffect $ log $ "called Route : " <> show new
diff --git a/src/Gargantext/Utils/DecodeMaybe.purs b/src/Gargantext/Utils/DecodeMaybe.purs
index c5fb1c793..bc76900a6 100644
--- a/src/Gargantext/Utils/DecodeMaybe.purs
+++ b/src/Gargantext/Utils/DecodeMaybe.purs
@@ -2,13 +2,14 @@ module Gargantext.Utils.DecodeMaybe where
 
 import Prelude
 
-import Data.Argonaut (class DecodeJson, JObject, getFieldOptional)
+import Data.Argonaut (class DecodeJson, Json, getFieldOptional)
 import Data.Either (Either)
 import Data.Maybe (Maybe(..))
+import Foreign.Object (Object)
 
 foreign import isNull :: forall a. a -> Boolean
 
-getFieldOptional' :: forall a. DecodeJson a => JObject -> String -> Either String (Maybe a)
+getFieldOptional' :: forall t9. DecodeJson t9 => Object Json -> String -> Either String (Maybe t9)
 getFieldOptional' o s = (case _ of
     Just v -> if isNull v then Nothing else v
     Nothing -> Nothing
-- 
2.21.0