Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
purescript-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Grégoire Locqueville
purescript-gargantext
Commits
0ebcd871
Commit
0ebcd871
authored
Mar 22, 2021
by
Przemyslaw Kaminski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[toestand] refactor node action search
parent
b60d2351
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
266 additions
and
190 deletions
+266
-190
Action.purs
src/Gargantext/Components/Forest/Tree/Node/Action.purs
+6
-3
Merge.purs
src/Gargantext/Components/Forest/Tree/Node/Action/Merge.purs
+4
-3
Search.purs
...Gargantext/Components/Forest/Tree/Node/Action/Search.purs
+40
-28
Frame.purs
...text/Components/Forest/Tree/Node/Action/Search/Frame.purs
+25
-19
SearchBar.purs
.../Components/Forest/Tree/Node/Action/Search/SearchBar.purs
+6
-5
SearchField.purs
...omponents/Forest/Tree/Node/Action/Search/SearchField.purs
+178
-124
Types.purs
...text/Components/Forest/Tree/Node/Action/Upload/Types.purs
+1
-4
Box.purs
src/Gargantext/Components/Forest/Tree/Node/Box.purs
+1
-1
SubTree.purs
...Gargantext/Components/Forest/Tree/Node/Tools/SubTree.purs
+1
-0
SidePanelToggleButton.purs
...gantext/Components/Nodes/Texts/SidePanelToggleButton.purs
+4
-3
No files found.
src/Gargantext/Components/Forest/Tree/Node/Action.purs
View file @
0ebcd871
module Gargantext.Components.Forest.Tree.Node.Action where
module Gargantext.Components.Forest.Tree.Node.Action where
import Data.Generic.Rep (class Generic)
import Data.Generic.Rep.Eq (genericEq)
import Data.Maybe (Maybe(..))
import Data.Maybe (Maybe(..))
import Effect.Aff (Aff)
import Effect.Aff (Aff)
import Gargantext.Prelude (class Show, Unit)
import Gargantext.Prelude
import Gargantext.Sessions (Session)
import Gargantext.Types as GT
import Gargantext.Components.Forest.Tree.Node.Tools.SubTree.Types (SubTreeOut, SubTreeParams(..))
import Gargantext.Components.Forest.Tree.Node.Tools.SubTree.Types (SubTreeOut, SubTreeParams(..))
import Gargantext.Components.Forest.Tree.Node.Settings (NodeAction(..), glyphiconNodeAction)
import Gargantext.Components.Forest.Tree.Node.Settings (NodeAction(..), glyphiconNodeAction)
import Gargantext.Components.Forest.Tree.Node.Action.Upload.Types (FileType, UploadFileBlob)
import Gargantext.Components.Forest.Tree.Node.Action.Upload.Types (FileType, UploadFileBlob)
import Gargantext.Components.Forest.Tree.Node.Action.Update.Types (UpdateNodeParams)
import Gargantext.Components.Forest.Tree.Node.Action.Update.Types (UpdateNodeParams)
import Gargantext.Components.Forest.Tree.Node.Action.Contact.Types (AddContactParams)
import Gargantext.Components.Forest.Tree.Node.Action.Contact.Types (AddContactParams)
import Gargantext.Sessions (Session)
import Gargantext.Types as GT
type Props =
type Props =
( dispatch :: Action -> Aff Unit
( dispatch :: Action -> Aff Unit
...
...
src/Gargantext/Components/Forest/Tree/Node/Action/Merge.purs
View file @
0ebcd871
...
@@ -31,18 +31,19 @@ mergeNodeCpt :: R.Component SubTreeParamsIn
...
@@ -31,18 +31,19 @@ mergeNodeCpt :: R.Component SubTreeParamsIn
mergeNodeCpt = here.component "mergeNode" cpt
mergeNodeCpt = here.component "mergeNode" cpt
where
where
cpt p@{dispatch, subTreeParams, id, nodeType, session, handed} _ = do
cpt p@{dispatch, subTreeParams, id, nodeType, session, handed} _ = do
action@(
valAction /\ setAction
) :: R.State Action <- R.useState' (MergeNode {params:Nothing})
action@(
action' /\ _
) :: R.State Action <- R.useState' (MergeNode {params:Nothing})
merge <- T.useBox false
merge <- T.useBox false
options <- T.useBox (Set.singleton GT.MapTerm)
options <- T.useBox (Set.singleton GT.MapTerm)
let button = case
valAction
of
let button = case
action'
of
MergeNode {params} -> case params of
MergeNode {params} -> case params of
Just val -> submitButton (MergeNode {params: Just val}) dispatch
Just val -> submitButton (MergeNode {params: Just val}) dispatch
Nothing -> H.div {} []
Nothing -> H.div {} []
_ -> H.div {} []
_ -> H.div {} []
pure $ panel [ subTreeView { action
pure $ panel
[ subTreeView { action
, dispatch
, dispatch
, id
, id
, nodeType
, nodeType
...
...
src/Gargantext/Components/Forest/Tree/Node/Action/Search.purs
View file @
0ebcd871
...
@@ -5,6 +5,7 @@ import Effect (Effect)
...
@@ -5,6 +5,7 @@ import Effect (Effect)
import Effect.Aff (Aff, launchAff)
import Effect.Aff (Aff, launchAff)
import Reactix as R
import Reactix as R
import Reactix.DOM.HTML as H
import Reactix.DOM.HTML as H
import Toestand as T
import Gargantext.Prelude
import Gargantext.Prelude
...
@@ -16,16 +17,27 @@ import Gargantext.Components.Lang (allLangs)
...
@@ -16,16 +17,27 @@ import Gargantext.Components.Lang (allLangs)
import Gargantext.Sessions (Session)
import Gargantext.Sessions (Session)
import Gargantext.Types (ID)
import Gargantext.Types (ID)
import Gargantext.Types as GT
import Gargantext.Types as GT
import Gargantext.Utils.Reactix as R2
here :: R2.Here
here = R2.here "Gargantext.Components.Forest.Tree.Node.Action.Search"
type Props =
( dispatch :: Action -> Aff Unit
, id :: Maybe ID
, nodePopup :: Maybe NodePopup
, session :: Session )
-- | Action : Search
-- | Action : Search
actionSearch :: Session
actionSearch :: R2.Component Props
-> Maybe ID
actionSearch = R.createElement actionSearchCpt
-> (Action -> Aff Unit)
-> Maybe NodePopup
actionSearchCpt :: R.Component Props
-> R.Hooks R.Element
actionSearchCpt = here.component "actionSearch" cpt
actionSearch session id dispatch nodePopup = do
where
search <- R.useState' $ defaultSearch { node_id = id }
cpt { dispatch, id, nodePopup, session } _ = do
search <- T.useBox $ defaultSearch { node_id = id }
pure $ R.fragment [ H.p { className: "action-search" }
pure $ R.fragment [ H.p { className: "action-search" }
[ H.text $ "Search and create a private "
[ H.text $ "Search and create a private "
<> "corpus with the search query as corpus name." ]
<> "corpus with the search query as corpus name." ]
...
@@ -33,7 +45,7 @@ actionSearch session id dispatch nodePopup = do
...
@@ -33,7 +45,7 @@ actionSearch session id dispatch nodePopup = do
, onSearch: searchOn dispatch nodePopup
, onSearch: searchOn dispatch nodePopup
, search
, search
, session
, session
}
} []
]
]
where
where
searchOn :: (Action -> Aff Unit)
searchOn :: (Action -> Aff Unit)
...
...
src/Gargantext/Components/Forest/Tree/Node/Action/Search/Frame.purs
View file @
0ebcd871
module Gargantext.Components.Forest.Tree.Node.Action.Search.Frame where
module Gargantext.Components.Forest.Tree.Node.Action.Search.Frame where
import Gargantext.Prelude (discard, identity, pure, unit, ($), (<>), (==), class Show)
import DOM.Simple as DOM
import DOM.Simple as DOM
import DOM.Simple.Event (MessageEvent)
import DOM.Simple.Event (MessageEvent)
import DOM.Simple.EventListener (Callback, addEventListener, callback)
import DOM.Simple.EventListener (Callback, addEventListener, callback)
...
@@ -13,9 +12,12 @@ import Data.Tuple (Tuple(..))
...
@@ -13,9 +12,12 @@ import Data.Tuple (Tuple(..))
import Data.Tuple.Nested ((/\))
import Data.Tuple.Nested ((/\))
import Reactix as R
import Reactix as R
import Reactix.DOM.HTML as H
import Reactix.DOM.HTML as H
import Toestand as T
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
import Gargantext.Components.Forest.Tree.Node.Action.Search.Types
( DataField(..), Search, isIsTex_Advanced )
( DataField(..), Search, isIsTex_Advanced )
import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Reactix as R2
...
@@ -37,59 +39,63 @@ instance showFrameSource :: Show FrameSource where
...
@@ -37,59 +39,63 @@ instance showFrameSource :: Show FrameSource where
type SearchIFramesProps = (
type SearchIFramesProps = (
iframeRef :: R.Ref (Nullable DOM.Element)
iframeRef :: R.Ref (Nullable DOM.Element)
, search
:: R.State
Search
, search
:: T.Box
Search
)
)
searchIframes :: R
ecord SearchIFramesProps -> R.Element
searchIframes :: R
2.Component SearchIFramesProps
searchIframes
props = R.createElement searchIframesCpt props []
searchIframes
= R.createElement searchIframesCpt
searchIframesCpt :: R.Component SearchIFramesProps
searchIframesCpt :: R.Component SearchIFramesProps
searchIframesCpt = here.component "searchIframes" cpt
searchIframesCpt = here.component "searchIframes" cpt
where
where
cpt { iframeRef, search: search@(search' /\ _) } _ = do
cpt { iframeRef, search } _ = do
search' <- T.useLive T.unequal search
pure $ if isIsTex_Advanced search'.datafield
pure $ if isIsTex_Advanced search'.datafield
then divIframe { frameSource: Istex, iframeRef, search }
then divIframe { frameSource: Istex, iframeRef, search }
[]
else
else
if Just Web == search'.datafield
if Just Web == search'.datafield
then divIframe { frameSource: Searx, iframeRef, search }
then divIframe { frameSource: Searx, iframeRef, search }
[]
else H.div {} []
else H.div {} []
type IFrameProps = (
type IFrameProps = (
frameSource :: FrameSource
frameSource :: FrameSource
, iframeRef :: R.Ref (Nullable DOM.Element)
, iframeRef :: R.Ref (Nullable DOM.Element)
, search
:: R.State
Search
, search
:: T.Box
Search
)
)
divIframe :: R
ecord IFrameProps -> R.Element
divIframe :: R
2.Component IFrameProps
divIframe
props = R.createElement divIframeCpt props []
divIframe
= R.createElement divIframeCpt
divIframeCpt :: R.Component IFrameProps
divIframeCpt :: R.Component IFrameProps
divIframeCpt = here.component "divIframe" cpt
divIframeCpt = here.component "divIframe" cpt
where
where
cpt
{ frameSource, iframeRef, search: search@(search' /\ _) }
_ = do
cpt
props
_ = do
pure $ H.div { className: "frame-search card" }
pure $ H.div { className: "frame-search card" }
[ iframeWith
{ frameSource, iframeRef, search }
]
[ iframeWith
props []
]
frameUrl :: FrameSource -> String
frameUrl :: FrameSource -> String
frameUrl Istex = "https://istex.frame.gargantext.org"
frameUrl Istex = "https://istex.frame.gargantext.org"
frameUrl Searx = "https://searx.frame.gargantext.org" -- 192.168.1.4:8080"
frameUrl Searx = "https://searx.frame.gargantext.org" -- 192.168.1.4:8080"
iframeWith :: R
ecord IFrameProps -> R.Element
iframeWith :: R
2.Component IFrameProps
iframeWith
props = R.createElement iframeWithCpt props []
iframeWith
= R.createElement iframeWithCpt
iframeWithCpt :: R.Component IFrameProps
iframeWithCpt :: R.Component IFrameProps
iframeWithCpt = here.component "iframeWith" cpt
iframeWithCpt = here.component "iframeWith" cpt
where
where
cpt { frameSource, iframeRef, search: (search /\ setSearch) } _ =
cpt { frameSource, iframeRef, search } _ = do
pure $ H.iframe { src: src frameSource search.term
search' <- T.useLive T.unequal search
pure $ H.iframe { src: src frameSource search'.term
, width: "100%"
, width: "100%"
, height: "100%"
, height: "100%"
, ref: iframeRef
, ref: iframeRef
, on: { load: \_ -> do
, on: { load: \_ -> do
addEventListener window "message" (changeSearchOnMessage url)
addEventListener window "message" (changeSearchOnMessage url)
R2.postMessage iframeRef search.term
R2.postMessage iframeRef search
'
.term
}
}
} []
} []
where
where
...
@@ -100,7 +106,7 @@ iframeWithCpt = here.component "iframeWith" cpt
...
@@ -100,7 +106,7 @@ iframeWithCpt = here.component "iframeWith" cpt
changeSearchOnMessage url' =
changeSearchOnMessage url' =
callback $ \m -> if R2.getMessageOrigin m == url' then do
callback $ \m -> if R2.getMessageOrigin m == url' then do
let {url'', term} = R2.getMessageData m
let {url'', term} = R2.getMessageData m
setSearch $ _ {url = url'', term = term}
T.modify_ (_ {url = url'', term = term}) search
else
else
pure unit
pure unit
...
...
src/Gargantext/Components/Forest/Tree/Node/Action/Search/SearchBar.purs
View file @
0ebcd871
...
@@ -7,6 +7,7 @@ import Data.Tuple.Nested ((/\))
...
@@ -7,6 +7,7 @@ import Data.Tuple.Nested ((/\))
import Effect (Effect)
import Effect (Effect)
import Reactix as R
import Reactix as R
import Reactix.DOM.HTML as H
import Reactix.DOM.HTML as H
import Toestand as T
import Gargantext.Components.Forest.Tree.Node.Action.Search.SearchField (searchField)
import Gargantext.Components.Forest.Tree.Node.Action.Search.SearchField (searchField)
import Gargantext.Components.Forest.Tree.Node.Action.Search.Types -- (Database, SearchQuery(..), defaultSearchQuery, performSearch, Lang(..))
import Gargantext.Components.Forest.Tree.Node.Action.Search.Types -- (Database, SearchQuery(..), defaultSearchQuery, performSearch, Lang(..))
...
@@ -21,17 +22,17 @@ here = R2.here "Gargantext.Components.Forest.Tree.Node.Action.Search.SearchBar"
...
@@ -21,17 +22,17 @@ here = R2.here "Gargantext.Components.Forest.Tree.Node.Action.Search.SearchBar"
type Props = ( langs :: Array Lang
type Props = ( langs :: Array Lang
, onSearch :: GT.AsyncTaskWithType -> Effect Unit
, onSearch :: GT.AsyncTaskWithType -> Effect Unit
, search ::
R.State
Search
, search ::
T.Box
Search
, session :: Session
, session :: Session
)
)
searchBar :: R
ecord Props -> R.Element
searchBar :: R
2.Component Props
searchBar
props = R.createElement searchBarCpt props []
searchBar
= R.createElement searchBarCpt
searchBarCpt :: R.Component Props
searchBarCpt :: R.Component Props
searchBarCpt = here.component "searchBar" cpt
searchBarCpt = here.component "searchBar" cpt
where
where
cpt {
langs, onSearch, search: search@(s /\ _), session
} _ = do
cpt {
langs, onSearch, search, session
} _ = do
--onSearchChange session s
--onSearchChange session s
pure $ H.div { className: "search-bar" }
pure $ H.div { className: "search-bar" }
[ searchField { databases:allDatabases
[ searchField { databases:allDatabases
...
@@ -39,5 +40,5 @@ searchBarCpt = here.component "searchBar" cpt
...
@@ -39,5 +40,5 @@ searchBarCpt = here.component "searchBar" cpt
, onSearch
, onSearch
, search
, search
, session
, session
}
}
[]
]
]
src/Gargantext/Components/Forest/Tree/Node/Action/Search/SearchField.purs
View file @
0ebcd871
...
@@ -11,6 +11,7 @@ import Effect.Aff (launchAff_)
...
@@ -11,6 +11,7 @@ import Effect.Aff (launchAff_)
import Effect.Class (liftEffect)
import Effect.Class (liftEffect)
import Reactix as R
import Reactix as R
import Reactix.DOM.HTML as H
import Reactix.DOM.HTML as H
import Toestand as T
import Gargantext.Prelude
import Gargantext.Prelude
...
@@ -40,53 +41,52 @@ type Props =
...
@@ -40,53 +41,52 @@ type Props =
, langs :: Array Lang
, langs :: Array Lang
-- State hook for a search, how we get data in and out
-- State hook for a search, how we get data in and out
, onSearch :: GT.AsyncTaskWithType -> Effect Unit
, onSearch :: GT.AsyncTaskWithType -> Effect Unit
, search ::
R.State
Search
, search ::
T.Box
Search
, session :: Session
, session :: Session
)
)
searchField :: Record Props -> R.Element
searchField :: R2.Component Props
searchField p = R.createElement searchFieldComponent p []
searchField = R.createElement searchFieldCpt
where
--searchFieldComponent :: R.Memo Props
--searchFieldComponent = R.memo (here.component "searchField" cpt) eqProps
searchFieldComponent :: R.Component Props
searchFieldComponent = here.component "searchField" cpt
cpt props@{onSearch, search: search@(s /\ _)} _ = do
searchFieldCpt :: R.Component Props
searchFieldCpt = here.component "searchField" cpt
where
cpt props@{ onSearch, search } _ = do
search' <- T.useLive T.unequal search
iframeRef <- R.useRef null
iframeRef <- R.useRef null
let params =
let params =
[ searchInput {
search}
[ searchInput {
search } []
-- , if length s.term < 3 -- search with love : <3
-- , if length s.term < 3 -- search with love : <3
-- then
-- then
-- H.div {}[]
-- H.div {}[]
-- else
-- else
, H.div {} [ dataFieldNav
search dataFields
, H.div {} [ dataFieldNav
{ datafields: dataFields, search } []
, if isExternal s.datafield
, if isExternal s
earch'
.datafield
then databaseInput { databases: props.databases, search } []
then databaseInput { databases: props.databases, search } []
else H.div {} []
else H.div {} []
, if isHAL s.datafield
, if isHAL s
earch'
.datafield
then orgInput
search allOrgs
then orgInput
{ orgs: allOrgs, search } []
else H.div {} []
else H.div {} []
, if isIMT s.datafield
, if isIMT s
earch'
.datafield
then componentIMT
search
then componentIMT
{ search } []
else H.div {} []
else H.div {} []
, if isCNRS s.datafield
, if isCNRS s
earch'
.datafield
then componentCNRS
search
then componentCNRS
{ search } []
else H.div {} []
else H.div {} []
, if needsLang s.datafield
, if needsLang s
earch'
.datafield
then langNav
search props.langs
then langNav
{ langs: props.langs, search } []
else H.div {} []
else H.div {} []
, H.div {} [ searchIframes { iframeRef, search } ]
, H.div {} [ searchIframes { iframeRef, search }
[]
]
]
]
]
]
let button = submitButton {onSearch, search, session: props.session}
let button = submitButton {onSearch, search, session: props.session}
[]
pure $ H.div { className: "search-field" }
pure $ H.div { className: "search-field" }
[ H.div { className: "row" }
[ H.div { className: "row" }
...
@@ -96,18 +96,22 @@ searchField p = R.createElement searchFieldComponent p []
...
@@ -96,18 +96,22 @@ searchField p = R.createElement searchFieldComponent p []
]
]
--pure $ panel params button
--pure $ panel params button
type ComponentProps =
( search :: T.Box Search )
componentIMT
(search /\ setSearch) =
componentIMT
:: R2.Component ComponentProps
R.fragmen
t
componentIMT = R.createElement componentIMTCp
t
[ H.ul {} $ map liCpt allIMTorgs
--, filterInput fi
componentIMTCpt :: R.Component ComponentProps
]
componentIMTCpt = here.component "componentIMT" cpt
where
where
liCpt org =
cpt { search } _ = do
H.li {}
search' <- T.useLive T.unequal search
let liCpt org = H.li {}
[ H.input { type: "checkbox"
[ H.input { type: "checkbox"
, checked: isIn org search
.datafield
, checked: isIn org search'
.datafield
, on: { change: \_ -> ( setSearch $ _ { datafield = updateFilter org search.datafield }
)
, on: { change: \_ -> ( T.modify_ (_ { datafield = updateFilter org search'.datafield }) search
)
}
}
}
}
, if org == All_IMT
, if org == All_IMT
...
@@ -115,8 +119,19 @@ componentIMT (search /\ setSearch) =
...
@@ -115,8 +119,19 @@ componentIMT (search /\ setSearch) =
else H.text $ " " <> show org
else H.text $ " " <> show org
]
]
componentCNRS (search /\ setSearch) =
pure $ R.fragment
R.fragment [
[ H.ul {} $ map liCpt allIMTorgs
--, filterInput fi
]
componentCNRS :: R2.Component ComponentProps
componentCNRS = R.createElement componentCNRSCpt
componentCNRSCpt :: R.Component ComponentProps
componentCNRSCpt = here.component "componentCNRS" cpt
where
cpt { search } _ = do
pure $ R.fragment [
H.div {} []
H.div {} []
--, filterInput fi
--, filterInput fi
]
]
...
@@ -218,37 +233,61 @@ updateFilter org _ = (Just (External (Just (HAL (Just (IMT imtOrgs'))))))
...
@@ -218,37 +233,61 @@ updateFilter org _ = (Just (External (Just (HAL (Just (IMT imtOrgs'))))))
else Set.fromFoldable [org]
else Set.fromFoldable [org]
------------------------------------------------------------------------
------------------------------------------------------------------------
langNav :: R.State Search -> Array Lang -> R.Element
langNav ({lang} /\ setSearch) langs =
type LangNavProps =
R.fragment [ H.div {className: "text-primary center"} [H.text "with lang"]
( langs :: Array Lang
, H.div {className: "nav nav-tabs"} (liItem <$> langs)
, search :: T.Box Search )
langNav :: R2.Component LangNavProps
langNav = R.createElement langNavCpt
langNavCpt :: R.Component LangNavProps
langNavCpt = here.component "langNav" cpt
where
cpt { langs, search } _ = do
search' <- T.useLive T.unequal search
pure $ R.fragment [ H.div {className: "text-primary center"} [H.text "with lang"]
, H.div {className: "nav nav-tabs"} ((liItem search') <$> langs)
]
]
where
where
liItem ::
Lang -> R.Element
liItem :: Search ->
Lang -> R.Element
liItem
lang' =
liItem { lang }
lang' =
H.div { className : "nav-item nav-link" <> if (Just lang') == lang then " active" else ""
H.div { className : "nav-item nav-link" <> if (Just lang') == lang then " active" else ""
, on: { click: \_ -> setSearch $ _ { lang = Just lang' }
}
, on: { click: \_ -> T.modify_ (_ { lang = Just lang' }) search
}
} [ H.text (show lang') ]
} [ H.text (show lang') ]
------------------------------------------------------------------------
------------------------------------------------------------------------
dataFieldNav :: R.State Search -> Array DataField -> R.Element
dataFieldNav ({datafield} /\ setSearch) datafields =
type DataFieldNavProps =
R.fragment [ H.div { className: "text-primary center"} [H.text "with DataField"]
( datafields :: Array DataField
, H.div {className: "nav nav-tabs"} (liItem <$> dataFields)
, search :: T.Box Search )
dataFieldNav :: R2.Component DataFieldNavProps
dataFieldNav = R.createElement dataFieldNavCpt
dataFieldNavCpt :: R.Component DataFieldNavProps
dataFieldNavCpt = here.component "dataFieldNav" cpt
where
cpt { datafields, search } _ = do
search'@{ datafield } <- T.useLive T.unequal search
pure $ R.fragment [ H.div { className: "text-primary center"} [H.text "with DataField"]
, H.div {className: "nav nav-tabs"} ((liItem search') <$> dataFields)
, H.div {className: "center"} [ H.text
, H.div {className: "center"} [ H.text
$ maybe "TODO: add Doc Instance" doc datafield
$ maybe "TODO: add Doc Instance" doc datafield
]
]
]
]
where
where
liItem ::
DataField -> R.Element
liItem :: Search ->
DataField -> R.Element
liItem
df' =
liItem { datafield }
df' =
H.div { className : "nav-item nav-link"
H.div { className : "nav-item nav-link"
<> if isActive --(Just df') == datafield
<> if isActive --(Just df') == datafield
then " active"
then " active"
else ""
else ""
, on: { click: \_ -> setSearch $
_ { datafield = Just df'
, on: { click: \_ -> T.modify_ (
_ { datafield = Just df'
, databases = datafield2database df'
, databases = datafield2database df'
}
}) search
}
}
-- just one database query for now
-- just one database query for now
-- a list a selected database needs more ergonomy
-- a list a selected database needs more ergonomy
...
@@ -260,7 +299,7 @@ dataFieldNav ({datafield} /\ setSearch) datafields =
...
@@ -260,7 +299,7 @@ dataFieldNav ({datafield} /\ setSearch) datafields =
type DatabaseInputProps = (
type DatabaseInputProps = (
databases :: Array Database
databases :: Array Database
, search ::
R.State
Search
, search ::
T.Box
Search
)
)
databaseInput :: R2.Component DatabaseInputProps
databaseInput :: R2.Component DatabaseInputProps
...
@@ -270,48 +309,60 @@ databaseInputCpt :: R.Component DatabaseInputProps
...
@@ -270,48 +309,60 @@ databaseInputCpt :: R.Component DatabaseInputProps
databaseInputCpt = here.component "databaseInput" cpt
databaseInputCpt = here.component "databaseInput" cpt
where
where
cpt { databases
cpt { databases
, search: (search /\ setSearch) } _ = do
, search } _ = do
search' <- T.useLive T.unequal search
let db = case search'.datafield of
(Just (External (Just x))) -> Just x
_ -> Nothing
liItem :: Database -> R.Element
liItem db' = H.option { className : "text-primary center"
, value: show db' } [ H.text (show db') ]
change e = do
let value = read $ R.unsafeEventValue e
T.modify_ (_ { datafield = Just $ External value
, databases = fromMaybe Empty value
}) search
pure $
pure $
H.div { className: "form-group" } [
H.div { className: "form-group" } [
H.div {className: "text-primary center"} [ H.text "in database" ]
H.div {className: "text-primary center"} [ H.text "in database" ]
, R2.select { className: "form-control"
, R2.select { className: "form-control"
, defaultValue: defaultValue search.datafield
, defaultValue: defaultValue search
'
.datafield
, on: { change
: onChange
}
, on: { change }
} (liItem <$> databases)
} (liItem <$> databases)
, H.div {className:"center"} [ H.text $ maybe "" doc db ]
, H.div {className:"center"} [ H.text $ maybe "" doc db ]
]
]
where
defaultValue datafield = show $ maybe Empty datafield2database datafield
defaultValue datafield = show $ maybe Empty datafield2database datafield
db = case search.datafield of
(Just (External (Just x))) -> Just x
_ -> Nothing
liItem :: Database -> R.Element
type OrgInputProps =
liItem db' = H.option { className : "text-primary center"
( orgs :: Array Org
, value: show db' } [ H.text (show db') ]
| ComponentProps)
onChange e = do
orgInput :: R2.Component OrgInputProps
let value = read $ R.unsafeEventValue e
orgInput = R.createElement orgInputCpt
setSearch $ _ { datafield = Just $ External value
, databases = fromMaybe Empty value
}
orgInputCpt :: R.Component OrgInputProps
orgInputCpt = here.component "orgInput" cpt
where
cpt { orgs, search } _ = do
let change e = do
let value = R.unsafeEventValue e
T.modify_ (_ { datafield = Just $ External $ Just $ HAL $ read value }) search
orgInput :: R.State Search -> Array Org -> R.Element
pure $ H.div { className: "form-group" }
orgInput ({datafield} /\ setSearch) orgs =
H.div { className: "form-group" }
[ H.div {className: "text-primary center"} [H.text "filter with organization: "]
[ H.div {className: "text-primary center"} [H.text "filter with organization: "]
, R2.select { className: "form-control"
, R2.select { className: "form-control"
, on: { change: onC
hange }
, on: { c
hange }
} (liItem <$> orgs)
} (liItem <$> orgs)
]
]
where
liItem :: Org -> R.Element
liItem :: Org -> R.Element
liItem org = H.option {className : "text-primary center"} [ H.text (show org) ]
liItem org = H.option {className : "text-primary center"} [ H.text (show org) ]
onChange e = do
let value = R.unsafeEventValue e
setSearch $ _ { datafield = Just $ External $ Just $ HAL $ read value }
{-
{-
filterInput :: R.State String -> R.Element
filterInput :: R.State String -> R.Element
...
@@ -332,21 +383,22 @@ filterInput (term /\ setTerm) =
...
@@ -332,21 +383,22 @@ filterInput (term /\ setTerm) =
type SearchInputProps =
type SearchInputProps =
(
(
search ::
R.State
Search
search ::
T.Box
Search
)
)
searchInput :: R
ecord SearchInputProps -> R.Element
searchInput :: R
2.Component SearchInputProps
searchInput
p = R.createElement searchInputCpt p []
searchInput
= R.createElement searchInputCpt
searchInputCpt :: R.Component SearchInputProps
searchInputCpt :: R.Component SearchInputProps
searchInputCpt = here.component "searchInput" cpt
searchInputCpt = here.component "searchInput" cpt
where
where
cpt {search: (search@{ term } /\ setSearch)} _ = do
cpt { search } _ = do
{ term } <- T.useLive T.unequal search
valueRef <- R.useRef term
valueRef <- R.useRef term
pure $ H.div { className: "" } [
pure $ H.div { className: "" } [
inputWithEnter { onBlur: onBlur valueRef se
tSe
arch
inputWithEnter { onBlur: onBlur valueRef search
, onEnter: onEnter valueRef se
tSe
arch
, onEnter: onEnter valueRef search
, onValueChanged: onValueChanged valueRef
, onValueChanged: onValueChanged valueRef
, autoFocus: false
, autoFocus: false
, className: "form-control"
, className: "form-control"
...
@@ -364,11 +416,11 @@ searchInputCpt = here.component "searchInput" cpt
...
@@ -364,11 +416,11 @@ searchInputCpt = here.component "searchInput" cpt
-- , type: "text"
-- , type: "text"
-- }
-- }
-- ]
-- ]
onBlur valueRef se
tSe
arch value = do
onBlur valueRef search value = do
R.setRef valueRef value
R.setRef valueRef value
setSearch $ _ { term = value }
T.modify_ (_ { term = value }) search
onEnter valueRef se
tSe
arch _ = do
onEnter valueRef search _ = do
setSearch $ _ { term = R.readRef valueRef }
T.modify_ (_ { term = R.readRef valueRef }) search
onValueChanged valueRef value = do
onValueChanged valueRef value = do
R.setRef valueRef value
R.setRef valueRef value
...
@@ -376,21 +428,23 @@ searchInputCpt = here.component "searchInput" cpt
...
@@ -376,21 +428,23 @@ searchInputCpt = here.component "searchInput" cpt
type SubmitButtonProps =
type SubmitButtonProps =
( onSearch :: GT.AsyncTaskWithType -> Effect Unit
( onSearch :: GT.AsyncTaskWithType -> Effect Unit
, search ::
R.State
Search
, search ::
T.Box
Search
, session :: Session
, session :: Session
)
)
submitButton :: R
ecord SubmitButtonProps -> R.Element
submitButton :: R
2.Component SubmitButtonProps
submitButton
p = R.createElement submitButtonComponent p []
submitButton
= R.createElement submitButtonComponent
submitButtonComponent :: R.Component SubmitButtonProps
submitButtonComponent :: R.Component SubmitButtonProps
submitButtonComponent = here.component "submitButton" cpt
submitButtonComponent = here.component "submitButton" cpt
where
where
cpt {onSearch, search: (mySearch /\ _), session} _ =
cpt { onSearch, search, session } _ = do
search' <- T.useLive T.unequal search
pure $
pure $
H.button { className: "btn btn-primary"
H.button { className: "btn btn-primary"
, "type" : "button"
, "type" : "button"
, on : { click: doSearch onSearch session
mySearch
}
, on : { click: doSearch onSearch session
search'
}
, style : { width: "100%" }
, style : { width: "100%" }
} [ H.text "Launch Search" ]
} [ H.text "Launch Search" ]
...
...
src/Gargantext/Components/Forest/Tree/Node/Action/Upload/Types.purs
View file @
0ebcd871
...
@@ -12,20 +12,17 @@ import Gargantext.Prelude (class Read, class Show, class Eq)
...
@@ -12,20 +12,17 @@ import Gargantext.Prelude (class Read, class Show, class Eq)
data FileType = CSV | CSV_HAL | WOS | PresseRIS | Arbitrary
data FileType = CSV | CSV_HAL | WOS | PresseRIS | Arbitrary
derive instance genericFileType :: Generic FileType _
derive instance genericFileType :: Generic FileType _
instance eqFileType :: Eq FileType where
instance eqFileType :: Eq FileType where
eq = genericEq
eq = genericEq
instance showFileType :: Show FileType where
instance showFileType :: Show FileType where
show = genericShow
show = genericShow
instance readFileType :: Read FileType where
instance readFileType :: Read FileType where
read :: String -> Maybe FileType
read :: String -> Maybe FileType
read "Arbitrary" = Just Arbitrary
read "CSV" = Just CSV
read "CSV" = Just CSV
read "CSV_HAL" = Just CSV_HAL
read "CSV_HAL" = Just CSV_HAL
read "PresseRIS" = Just PresseRIS
read "PresseRIS" = Just PresseRIS
read "WOS" = Just WOS
read "WOS" = Just WOS
read "Arbitrary" = Just Arbitrary
read _ = Nothing
read _ = Nothing
...
...
src/Gargantext/Components/Forest/Tree/Node/Box.purs
View file @
0ebcd871
...
@@ -203,5 +203,5 @@ panelActionCpt = here.component "panelAction" cpt
...
@@ -203,5 +203,5 @@ panelActionCpt = here.component "panelAction" cpt
cpt {action : Publish {subTreeParams}, dispatch, id, nodeType, session, handed} _ =
cpt {action : Publish {subTreeParams}, dispatch, id, nodeType, session, handed} _ =
pure $ Share.shareNode {dispatch, id, nodeType, session, subTreeParams, handed}
pure $ Share.shareNode {dispatch, id, nodeType, session, subTreeParams, handed}
cpt props@{action: SearchBox, id, session, dispatch, nodePopup} _ =
cpt props@{action: SearchBox, id, session, dispatch, nodePopup} _ =
actionSearch session (Just id) dispatch nodePopup
pure $ actionSearch { dispatch, id: (Just id), nodePopup, session } []
cpt _ _ = pure $ H.div {} []
cpt _ _ = pure $ H.div {} []
src/Gargantext/Components/Forest/Tree/Node/Tools/SubTree.purs
View file @
0ebcd871
...
@@ -7,6 +7,7 @@ import Effect.Aff (Aff)
...
@@ -7,6 +7,7 @@ import Effect.Aff (Aff)
import React.SyntheticEvent as E
import React.SyntheticEvent as E
import Reactix as R
import Reactix as R
import Reactix.DOM.HTML as H
import Reactix.DOM.HTML as H
import Toestand as T
import Gargantext.Prelude
import Gargantext.Prelude
...
...
src/Gargantext/Components/Nodes/Texts/SidePanelToggleButton.purs
View file @
0ebcd871
...
@@ -6,6 +6,7 @@ import Data.Tuple.Nested ((/\))
...
@@ -6,6 +6,7 @@ import Data.Tuple.Nested ((/\))
import Prelude
import Prelude
import Reactix as R
import Reactix as R
import Reactix.DOM.HTML as H
import Reactix.DOM.HTML as H
import Toestand as T
import Gargantext.Components.Nodes.Texts.Types
import Gargantext.Components.Nodes.Texts.Types
import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Reactix as R2
...
@@ -13,7 +14,7 @@ import Gargantext.Utils.Reactix as R2
...
@@ -13,7 +14,7 @@ import Gargantext.Utils.Reactix as R2
here :: R2.Here
here :: R2.Here
here = R2.here "Gargantext.Components.Nodes.Texts.SidePanelToggleButton"
here = R2.here "Gargantext.Components.Nodes.Texts.SidePanelToggleButton"
type Props = ( state ::
R.State
SidePanelState )
type Props = ( state ::
T.Box
SidePanelState )
sidePanelToggleButton :: R2.Component Props
sidePanelToggleButton :: R2.Component Props
sidePanelToggleButton = R.createElement sidePanelToggleButtonCpt
sidePanelToggleButton = R.createElement sidePanelToggleButtonCpt
...
@@ -22,11 +23,11 @@ sidePanelToggleButtonCpt :: R.Component Props
...
@@ -22,11 +23,11 @@ sidePanelToggleButtonCpt :: R.Component Props
sidePanelToggleButtonCpt = here.component "sidePanelToggleButton" cpt
sidePanelToggleButtonCpt = here.component "sidePanelToggleButton" cpt
where
where
cpt { state } _ = do
cpt { state } _ = do
let (open /\ setOpen) =
state
open' <- T.useLive T.unequal
state
pure $
pure $
H.button { className: "btn btn-primary"
H.button { className: "btn btn-primary"
, on: { click: \_ ->
setOpen $ toggleSidePanelState } } [ H.text (text open
) ]
, on: { click: \_ ->
T.modify_ toggleSidePanelState state } } [ H.text (text open'
) ]
text InitialClosed = "Show Side Panel"
text InitialClosed = "Show Side Panel"
text Opened = "Hide Side Panel"
text Opened = "Hide Side Panel"
text Closed = "Show Side Panel"
text Closed = "Show Side Panel"
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment