Commit b82e5d28 authored by Mudada's avatar Mudada

Need to find a way to not re render at every change

parent 5d5d668f
...@@ -3,6 +3,7 @@ module Gargantext.Components.Forest.Tree.Node.Box where ...@@ -3,6 +3,7 @@ module Gargantext.Components.Forest.Tree.Node.Box where
import Data.Maybe (Maybe(..)) import Data.Maybe (Maybe(..))
import Data.Tuple (Tuple(..)) import Data.Tuple (Tuple(..))
import Data.Tuple.Nested ((/\)) import Data.Tuple.Nested ((/\))
import Data.Nullable (Nullable, null)
import Effect (Effect) import Effect (Effect)
import Effect.Aff (Aff, launchAff) import Effect.Aff (Aff, launchAff)
import Effect.Class (liftEffect) import Effect.Class (liftEffect)
...@@ -34,10 +35,10 @@ import Gargantext.Types (AsyncTask, NodePath(..), NodeType(..), fldr) ...@@ -34,10 +35,10 @@ import Gargantext.Types (AsyncTask, NodePath(..), NodeType(..), fldr)
import Gargantext.Utils (glyphicon, glyphiconActive) import Gargantext.Utils (glyphicon, glyphiconActive)
import Gargantext.Utils.Reactix as R2 import Gargantext.Utils.Reactix as R2
import DOM.Simple.Types import DOM.Simple.Types
import DOM.Simple.Window import DOM.Simple.Window
import DOM.Simple.EventListener import DOM.Simple.EventListener
import DOM.Simple.Event
import Effect.Console import Effect.Console
-- Main Node -- Main Node
...@@ -162,7 +163,7 @@ fldr nt open = if open ...@@ -162,7 +163,7 @@ fldr nt open = if open
-- START node text -- START node text
type NodeTextProps = type NodeTextProps =
( isSelected :: Boolean ( isSelected :: Boolean
, name :: Name , name :: Name
) )
nodeText :: Record NodeTextProps -> R.Element nodeText :: Record NodeTextProps -> R.Element
...@@ -206,6 +207,7 @@ nodePopupView d p mPop@(Just NodePopup /\ setPopupOpen) = R.createElement el p [ ...@@ -206,6 +207,7 @@ nodePopupView d p mPop@(Just NodePopup /\ setPopupOpen) = R.createElement el p [
el = R.hooksComponent "NodePopupView" cpt el = R.hooksComponent "NodePopupView" cpt
cpt {id, action, name, nodeType, position, session} _ = do cpt {id, action, name, nodeType, position, session} _ = do
renameBoxOpen <- R.useState' false renameBoxOpen <- R.useState' false
iframeRef <- R.useRef null
nodePopupState@(nodePopup /\ setNodePopup) <- R.useState' {id, name, nodeType, action} nodePopupState@(nodePopup /\ setNodePopup) <- R.useState' {id, name, nodeType, action}
search <- R.useState' $ defaultSearch { node_id = Just id } search <- R.useState' $ defaultSearch { node_id = Just id }
pure $ H.div (tooltipProps position) $ pure $ H.div (tooltipProps position) $
...@@ -225,7 +227,7 @@ nodePopupView d p mPop@(Just NodePopup /\ setPopupOpen) = R.createElement el p [ ...@@ -225,7 +227,7 @@ nodePopupView d p mPop@(Just NodePopup /\ setPopupOpen) = R.createElement el p [
, if nodePopup.action == Just SearchBox then , if nodePopup.action == Just SearchBox then
H.div {} H.div {}
[ [
searchIsTexIframe id session search searchIsTexIframe id session search iframeRef
] ]
else else
H.div {} [] H.div {} []
...@@ -288,19 +290,36 @@ nodePopupView d p mPop@(Just NodePopup /\ setPopupOpen) = R.createElement el p [ ...@@ -288,19 +290,36 @@ nodePopupView d p mPop@(Just NodePopup /\ setPopupOpen) = R.createElement el p [
$ map (buttonClick nodePopupState d') buttons $ map (buttonClick nodePopupState d') buttons
] ]
searchIsTexIframe _id _session search@(search' /\ _) = searchIsTexIframe _id _session search@(search' /\ _) iframeRef =
if isIsTex search'.datafield then if isIsTex search'.datafield then
H.div { className: "istex-search panel panel-default" } H.div { className: "istex-search panel panel-default" }
[ [
H.h3 { className: fldr nodeType true} [] H.h3 { className: fldr nodeType true} []
, componentIsTex search , componentIsTex search iframeRef
] ]
else else
H.div {} [] H.div {} []
componentIsTex (search /\ setSearch) = componentIsTex (search /\ setSearch) iframeRef =
H.iframe { src: isTexTermUrl search.term , width: "100%", height: "100%"} [] H.iframe { src: isTexTermUrl search.term
isTexUrl = "http://0.0.0.0:8080/"--"https://istex.gargantext.org" ,width: "100%"
,height: "100%"
,ref: iframeRef
,on: {
load: \_ -> do
addEventListener window "message" changeSearchOnMessage
R2.postMessage iframeRef search.term
}
} []
where
changeSearchOnMessage :: Callback MessageEvent
changeSearchOnMessage = callback $ \m -> if R2.getMessageOrigin m == isTexUrl
then do
let {url, term} = R2.getMessageData m
setSearch $ _ {url = url, term = term}
else
pure unit
isTexUrl = "http://0.0.0.0:8080"--"https://istex.gargantext.org"
isTexLocalUrl = "http://localhost:8083" isTexLocalUrl = "http://localhost:8083"
isTexTermUrl term = isTexUrl <> query isTexTermUrl term = isTexUrl <> query
where where
...@@ -406,5 +425,3 @@ reallyDelete d = H.div {className: "panel-footer"} ...@@ -406,5 +425,3 @@ reallyDelete d = H.div {className: "panel-footer"}
, onClick: mkEffectFn1 $ \_ -> launchAff $ d $ DeleteNode} , onClick: mkEffectFn1 $ \_ -> launchAff $ d $ DeleteNode}
[H.text " Yes, delete!"] [H.text " Yes, delete!"]
] ]
windowCallBack = addEventListener window "message" (callback errorShow)
...@@ -4,6 +4,7 @@ module Gargantext.Components.Search.SearchBar ...@@ -4,6 +4,7 @@ module Gargantext.Components.Search.SearchBar
import Prelude (pure, ($)) import Prelude (pure, ($))
import Data.Tuple.Nested ((/\)) import Data.Tuple.Nested ((/\))
import Data.Nullable (Nullable)
import Reactix as R import Reactix as R
import Reactix.DOM.HTML as H import Reactix.DOM.HTML as H
......
...@@ -2,12 +2,14 @@ module Gargantext.Components.Search.SearchField ...@@ -2,12 +2,14 @@ module Gargantext.Components.Search.SearchField
( Search, Props, defaultSearch, searchField, searchFieldComponent, isIsTex) where ( Search, Props, defaultSearch, searchField, searchFieldComponent, isIsTex) where
import Prelude (const, map, pure, show, discard, ($), (&&), (<), (<$>), (<>), (==), (<<<), Unit, bind) import Prelude (const, map, pure, show, discard, ($), (&&), (<), (<$>), (<>), (==), (<<<), Unit, bind)
import Data.Maybe (Maybe(..), maybe) import Data.Maybe (Maybe(..), maybe, isJust)
import Data.Newtype (over) import Data.Newtype (over)
import Data.String (length) import Data.String (length)
import Data.Set as Set import Data.Set as Set
import Data.Tuple (fst) import Data.Tuple (fst)
import Data.Tuple.Nested ((/\)) import Data.Tuple.Nested ((/\))
import Data.Nullable (Nullable, toMaybe)
import Effect.Console (logShow)
import DOM.Simple.Console (log2) import DOM.Simple.Console (log2)
import Effect.Aff (Aff, launchAff_) import Effect.Aff (Aff, launchAff_)
import Effect.Class (liftEffect) import Effect.Class (liftEffect)
...@@ -29,6 +31,7 @@ select = R.createElement "select" ...@@ -29,6 +31,7 @@ select = R.createElement "select"
type Search = { datafield :: Maybe DataField type Search = { datafield :: Maybe DataField
, term :: String , term :: String
, url :: String
, lang :: Maybe Lang , lang :: Maybe Lang
, node_id :: Maybe Int , node_id :: Maybe Int
} }
...@@ -42,6 +45,7 @@ eqSearch s s' = (s.datafield == s'.datafield) ...@@ -42,6 +45,7 @@ eqSearch s s' = (s.datafield == s'.datafield)
defaultSearch :: Search defaultSearch :: Search
defaultSearch = { datafield: Nothing defaultSearch = { datafield: Nothing
, term: "" , term: ""
, url: ""
, lang: Nothing , lang: Nothing
, node_id: Nothing , node_id: Nothing
} }
...@@ -318,6 +322,7 @@ searchInputComponent = R.hooksComponent "G.C.S.SearchInput" cpt ...@@ -318,6 +322,7 @@ searchInputComponent = R.hooksComponent "G.C.S.SearchInput" cpt
pure $ pure $
H.div { className : "" } H.div { className : "" }
[ H.input { defaultValue: search.term [ H.input { defaultValue: search.term
, value: search.term
, className: "form-control" , className: "form-control"
, type: "text" , type: "text"
, on: { change : onChange setSearch } , on: { change : onChange setSearch }
......
...@@ -15,6 +15,12 @@ function stringify(j, indent) { ...@@ -15,6 +15,12 @@ function stringify(j, indent) {
return JSON.stringify(j, null, indent); return JSON.stringify(j, null, indent);
} }
function postMessage(obj, msg, src) {
obj.contentWindow.postMessage(msg, src);
}
exports._addRootElement = addRootElement; exports._addRootElement = addRootElement;
exports._getSelection = getSelection; exports._getSelection = getSelection;
exports._stringify = stringify; exports._stringify = stringify;
exports._postMessage = postMessage;
...@@ -13,15 +13,16 @@ import Data.Argonaut as Json ...@@ -13,15 +13,16 @@ import Data.Argonaut as Json
import Data.Argonaut.Core (Json) import Data.Argonaut.Core (Json)
import Data.Either (hush) import Data.Either (hush)
import Data.Function.Uncurried (Fn2, runFn2) import Data.Function.Uncurried (Fn2, runFn2)
import Data.Maybe (Maybe(..), fromJust, fromMaybe) import Data.Maybe (Maybe(..), fromJust, fromMaybe, isJust)
import Data.Nullable (Nullable, null, toMaybe) import Data.Nullable (Nullable, null, toMaybe)
import Data.Tuple (Tuple(..)) import Data.Tuple (Tuple(..))
import Data.Tuple.Nested ((/\)) import Data.Tuple.Nested ((/\))
import Effect (Effect) import Effect (Effect)
import Effect.Console (logShow)
import Effect.Aff (Aff, launchAff, launchAff_, killFiber) import Effect.Aff (Aff, launchAff, launchAff_, killFiber)
import Effect.Class (liftEffect) import Effect.Class (liftEffect)
import Effect.Exception (error) import Effect.Exception (error)
import Effect.Uncurried (EffectFn1, mkEffectFn1, mkEffectFn2, runEffectFn1) import Effect.Uncurried (EffectFn1, EffectFn3, mkEffectFn1, mkEffectFn2, runEffectFn1, runEffectFn3)
import Effect.Unsafe (unsafePerformEffect) import Effect.Unsafe (unsafePerformEffect)
import FFI.Simple ((..), (...), defineProperty, delay, args2, args3) import FFI.Simple ((..), (...), defineProperty, delay, args2, args3)
import Partial.Unsafe (unsafePartial) import Partial.Unsafe (unsafePartial)
...@@ -283,3 +284,22 @@ useLocalStorageState key s = do ...@@ -283,3 +284,22 @@ useLocalStorageState key s = do
setItem key json storage setItem key json storage
pure (Tuple state setState) pure (Tuple state setState)
getMessageDataStr :: DE.MessageEvent -> String
getMessageDataStr = getMessageData
getMessageOrigin :: DE.MessageEvent -> String
getMessageOrigin me = me .. "origin"
getMessageData :: forall o. DE.MessageEvent -> o
getMessageData me = me .. "data"
foreign import _postMessage
:: forall r. EffectFn3 r String String Unit
postMessage :: forall r. R.Ref (Nullable r) -> String -> Effect Unit
postMessage ref msg = do
case (R.readNullableRef ref) of
(Just ifr) -> do
runEffectFn3 _postMessage ifr msg (ifr .. "src")
(Nothing) -> pure unit
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment