Commit 48b056e8 authored by Przemyslaw Kaminski's avatar Przemyslaw Kaminski

[tree] some tests for making iframe work

parent 0f8da131
module Gargantext.Components.Forest.Tree.Node.Action.Search.Frame where module Gargantext.Components.Forest.Tree.Node.Action.Search.Frame where
import DOM.Simple as DOM
import DOM.Simple.Event (MessageEvent)
import DOM.Simple.EventListener (Callback, addEventListener, callback)
import DOM.Simple.Window (window)
import Data.Generic.Rep (class Generic) import Data.Generic.Rep (class Generic)
import Data.Generic.Rep.Show (genericShow) import Data.Generic.Rep.Show (genericShow)
import Data.Maybe (Maybe(..)) import Data.Maybe (Maybe(..))
...@@ -11,15 +7,23 @@ import Data.Nullable (Nullable) ...@@ -11,15 +7,23 @@ import Data.Nullable (Nullable)
import Data.String (toLower) import Data.String (toLower)
import Data.Tuple (Tuple(..)) import Data.Tuple (Tuple(..))
import Data.Tuple.Nested ((/\)) import Data.Tuple.Nested ((/\))
import DOM.Simple as DOM
import DOM.Simple.Console (log, log2)
import DOM.Simple.Event (MessageEvent)
import DOM.Simple.EventListener (Callback, addEventListener, callback)
import DOM.Simple.Window (window)
import Effect (Effect)
import Reactix as R import Reactix as R
import Reactix.DOM.HTML as H import Reactix.DOM.HTML as H
import URI.Extra.QueryPairs as NQP import URI.Extra.QueryPairs as NQP
import URI.Query as Query import URI.Query as Query
import Gargantext.Prelude
import Gargantext.Components.Forest.Tree.Node.Action.Search.Types (DataField(..), Search, isIsTex_Advanced) import Gargantext.Components.Forest.Tree.Node.Action.Search.Types (DataField(..), Search, isIsTex_Advanced)
import Gargantext.Prelude (discard, identity, pure, unit, ($), (<>), (==), class Show, show)
import Gargantext.Utils.Reactix as R2 import Gargantext.Utils.Reactix as R2
thisModule :: String
thisModule = "Gargantext.Components.Forest.Tree.Node.Action.Search.Frame" thisModule = "Gargantext.Components.Forest.Tree.Node.Action.Search.Frame"
-------------------- --------------------
...@@ -82,26 +86,31 @@ iframeWithCpt :: R.Component IFrameProps ...@@ -82,26 +86,31 @@ iframeWithCpt :: R.Component IFrameProps
iframeWithCpt = R2.hooksComponent thisModule "iframeWith" cpt iframeWithCpt = R2.hooksComponent thisModule "iframeWith" cpt
where where
cpt { frameSource, iframeRef, search: (search /\ setSearch) } _ = cpt { frameSource, iframeRef, search: (search /\ setSearch) } _ =
pure $ H.iframe { src: src frameSource search.term pure $ H.iframe { height: "100%"
, width: "100%"
, height: "100%"
, ref: iframeRef
, on: { load: \_ -> do , on: { load: \_ -> do
addEventListener window "message" (changeSearchOnMessage url) log "[iframeWith] iframe loaded"
R2.postMessage iframeRef search.term R2.addEventListener window "message" (changeSearchOnMessage url)
R2.postMessage iframeRef search.term
} }
, ref: iframeRef
, src: src frameSource search.term
, width: "100%"
} [] } []
where where
url :: String url :: String
url = frameUrl frameSource url = frameUrl frameSource
changeSearchOnMessage :: String -> Callback MessageEvent --changeSearchOnMessage :: String -> Callback MessageEvent
changeSearchOnMessage :: String -> (MessageEvent -> Effect Unit)
changeSearchOnMessage url' = changeSearchOnMessage url' =
callback $ \m -> if R2.getMessageOrigin m == url' then do --callback $ \m -> do
let {url'', term} = R2.getMessageData m \m -> do
setSearch $ _ {url = url'', term = term} log2 "[iframeWith] callback url'" url'
else if R2.getMessageOrigin m == url' then do
pure unit let {url'', term} = R2.getMessageData m
setSearch $ _ {url = url'', term = term}
else
pure unit
isTexTermUrl :: String -> String isTexTermUrl :: String -> String
isTexTermUrl term = url <> query isTexTermUrl term = url <> query
......
...@@ -7,7 +7,8 @@ import DOM.Simple.Console (log2) ...@@ -7,7 +7,8 @@ import DOM.Simple.Console (log2)
import DOM.Simple.Document (document) import DOM.Simple.Document (document)
import DOM.Simple.Element as Element import DOM.Simple.Element as Element
import DOM.Simple.Event as DE import DOM.Simple.Event as DE
import DOM.Simple.Types (class IsNode) import DOM.Simple.EventListener (Callback, addEventListener, callback)
import DOM.Simple.Types (class IsNode, class IsEventListener)
import Data.Argonaut as Argonaut import Data.Argonaut as Argonaut
import Data.Argonaut as Json import Data.Argonaut as Json
import Data.Argonaut.Core (Json) import Data.Argonaut.Core (Json)
...@@ -345,3 +346,14 @@ focus nEl = case toMaybe nEl of ...@@ -345,3 +346,14 @@ focus nEl = case toMaybe nEl of
setIndeterminateCheckbox :: R.Element -> Boolean -> Effect R.Element setIndeterminateCheckbox :: R.Element -> Boolean -> Effect R.Element
setIndeterminateCheckbox el val = pure $ (el .= "indeterminate") val setIndeterminateCheckbox el val = pure $ (el .= "indeterminate") val
addEventListener
:: forall listener event
. IsEventListener listener
-- => DE.IsEvent event
=> listener
-> String
-> event
-> Effect Unit
addEventListener obj name cb =
delay unit $ \_ -> pure $ obj ... "addEventListener" $ args2 name cb
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