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
148
Issues
148
List
Board
Labels
Milestones
Merge Requests
2
Merge Requests
2
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
gargantext
purescript-gargantext
Commits
1d9bcf4a
Commit
1d9bcf4a
authored
Feb 03, 2020
by
Przemyslaw Kaminski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[GraphExplorer] search pairing of authors with annuaire
parent
15801a80
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
87 additions
and
39 deletions
+87
-39
GraphExplorer.purs
src/Gargantext/Components/GraphExplorer.purs
+5
-4
Sidebar.purs
src/Gargantext/Components/GraphExplorer/Sidebar.purs
+77
-30
Types.purs
src/Gargantext/Components/GraphExplorer/Types.purs
+5
-5
No files found.
src/Gargantext/Components/GraphExplorer.purs
View file @
1d9bcf4a
...
@@ -2,7 +2,6 @@ module Gargantext.Components.GraphExplorer where
...
@@ -2,7 +2,6 @@ module Gargantext.Components.GraphExplorer where
import Gargantext.Prelude hiding (max,min)
import Gargantext.Prelude hiding (max,min)
import DOM.Simple.Types (Element)
import Data.Array as A
import Data.Array as A
import Data.FoldableWithIndex (foldMapWithIndex)
import Data.FoldableWithIndex (foldMapWithIndex)
import Data.Int (toNumber)
import Data.Int (toNumber)
...
@@ -13,6 +12,7 @@ import Data.Sequence as Seq
...
@@ -13,6 +12,7 @@ import Data.Sequence as Seq
import Data.Set as Set
import Data.Set as Set
import Data.Tuple (fst, snd, Tuple(..))
import Data.Tuple (fst, snd, Tuple(..))
import Data.Tuple.Nested ((/\))
import Data.Tuple.Nested ((/\))
import DOM.Simple.Types (Element)
import Effect.Aff (Aff)
import Effect.Aff (Aff)
import Gargantext.Components.Forest (forest)
import Gargantext.Components.Forest (forest)
import Gargantext.Components.Graph as Graph
import Gargantext.Components.Graph as Graph
...
@@ -70,7 +70,7 @@ explorerLayoutView graphVersion p = R.createElement el p []
...
@@ -70,7 +70,7 @@ explorerLayoutView graphVersion p = R.createElement el p []
where
where
el = R.hooksComponent "G.C.GE.explorerLayoutView" cpt
el = R.hooksComponent "G.C.GE.explorerLayoutView" cpt
cpt {frontends, graphId, mCurrentRoute, session, sessions, showLogin } _ = do
cpt {frontends, graphId, mCurrentRoute, session, sessions, showLogin } _ = do
useLoader
graphId (getNodes session graphVersion)
handler
useLoader
{graphId, graphVersion: fst graphVersion, session} getNodes
handler
where
where
handler loaded =
handler loaded =
explorer { frontends
explorer { frontends
...
@@ -280,8 +280,9 @@ modeGraphType Types.Sources = "star"
...
@@ -280,8 +280,9 @@ modeGraphType Types.Sources = "star"
modeGraphType Types.Terms = "def"
modeGraphType Types.Terms = "def"
getNodes :: Session -> R.State Int -> GraphId -> Aff GET.GraphData
getNodes :: {graphId :: GraphId, graphVersion :: Int, session :: Session} -> Aff GET.GraphData
getNodes session (graphVersion /\ _) graphId = get session $ NodeAPI Types.Graph (Just graphId) ("?version=" <> show graphVersion)
getNodes {graphId, graphVersion, session} =
get session $ NodeAPI Types.Graph (Just graphId) ("?version=" <> show graphVersion)
transformGraph :: Record Controls.Controls -> SigmaxT.SGraph -> SigmaxT.SGraph
transformGraph :: Record Controls.Controls -> SigmaxT.SGraph -> SigmaxT.SGraph
...
...
src/Gargantext/Components/GraphExplorer/Sidebar.purs
View file @
1d9bcf4a
...
@@ -5,8 +5,9 @@ module Gargantext.Components.GraphExplorer.Sidebar
...
@@ -5,8 +5,9 @@ module Gargantext.Components.GraphExplorer.Sidebar
import Prelude
import Prelude
import Control.Parallel (parTraverse)
import Control.Parallel (parTraverse)
import Data.Array (
head, last
)
import Data.Array (
last, uncons
)
import Data.Int (fromString)
import Data.Int (fromString)
import Data.List as List
import Data.Map as Map
import Data.Map as Map
import Data.Maybe (Maybe(..), fromJust)
import Data.Maybe (Maybe(..), fromJust)
import Data.Sequence as Seq
import Data.Sequence as Seq
...
@@ -26,8 +27,9 @@ import Gargantext.Components.RandomText (words)
...
@@ -26,8 +27,9 @@ import Gargantext.Components.RandomText (words)
import Gargantext.Data.Array (mapMaybe)
import Gargantext.Data.Array (mapMaybe)
import Gargantext.Ends (Frontends)
import Gargantext.Ends (Frontends)
import Gargantext.Hooks.Sigmax.Types as SigmaxT
import Gargantext.Hooks.Sigmax.Types as SigmaxT
import Gargantext.Sessions (Session)
import Gargantext.Routes (SessionRoute(..))
import Gargantext.Types (CTabNgramType, TabSubType(..), TabType(..), TermList(..), modeTabType)
import Gargantext.Sessions (Session, post)
import Gargantext.Types as GT
import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Reactix as R2
type Props =
type Props =
...
@@ -45,7 +47,7 @@ sidebar :: Record Props -> R.Element
...
@@ -45,7 +47,7 @@ sidebar :: Record Props -> R.Element
sidebar props = R.createElement sidebarCpt props []
sidebar props = R.createElement sidebarCpt props []
sidebarCpt :: R.Component Props
sidebarCpt :: R.Component Props
sidebarCpt = R.hooksComponent "
S
idebar" cpt
sidebarCpt = R.hooksComponent "
G.C.GE.S.s
idebar" cpt
where
where
cpt {showSidePanel: GET.Closed} _children = do
cpt {showSidePanel: GET.Closed} _children = do
pure $ RH.div {} []
pure $ RH.div {} []
...
@@ -66,8 +68,8 @@ sidebarCpt = R.hooksComponent "Sidebar" cpt
...
@@ -66,8 +68,8 @@ sidebarCpt = R.hooksComponent "Sidebar" cpt
]
]
, RH.div { className: "tab-content" }
, RH.div { className: "tab-content" }
[
[
removeButton "Remove candidate" CandidateTerm props nodesMap
removeButton "Remove candidate"
GT.
CandidateTerm props nodesMap
, removeButton "Remove stop" StopTerm props nodesMap
, removeButton "Remove stop"
GT.
StopTerm props nodesMap
]
]
, RH.li { className: "nav-item" }
, RH.li { className: "nav-item" }
[ RH.a { id: "home-tab"
[ RH.a { id: "home-tab"
...
@@ -96,7 +98,13 @@ sidebarCpt = R.hooksComponent "Sidebar" cpt
...
@@ -96,7 +98,13 @@ sidebarCpt = R.hooksComponent "Sidebar" cpt
-}
-}
, RH.div { className: "col-md-12", id: "query" }
, RH.div { className: "col-md-12", id: "query" }
[
[
query props.frontends props.metaData props.session nodesMap props.selectedNodeIds
query {
frontends: props.frontends
, metaData: props.metaData
, nodesMap
, selectedNodeIds: props.selectedNodeIds
, session: props.session
}
]
]
]
]
]
]
...
@@ -141,7 +149,7 @@ neighbourBadges graph (selectedNodeIds /\ _) = SigmaxT.neighbours graph selected
...
@@ -141,7 +149,7 @@ neighbourBadges graph (selectedNodeIds /\ _) = SigmaxT.neighbours graph selected
where
where
selectedNodes = SigmaxT.graphNodes $ SigmaxT.nodesById graph selectedNodeIds
selectedNodes = SigmaxT.graphNodes $ SigmaxT.nodesById graph selectedNodeIds
deleteNodes :: TermList -> Session -> GET.MetaData -> R.State Int -> Array (Record SigmaxT.Node) -> Effect Unit
deleteNodes ::
GT.
TermList -> Session -> GET.MetaData -> R.State Int -> Array (Record SigmaxT.Node) -> Effect Unit
deleteNodes termList session metaData (_ /\ setGraphVersion) nodes = do
deleteNodes termList session metaData (_ /\ setGraphVersion) nodes = do
launchAff_ do
launchAff_ do
patches <- (parTraverse (deleteNode termList session metaData) nodes) :: Aff (Array NTC.VersionedNgramsPatches)
patches <- (parTraverse (deleteNode termList session metaData) nodes) :: Aff (Array NTC.VersionedNgramsPatches)
...
@@ -151,7 +159,7 @@ deleteNodes termList session metaData (_ /\ setGraphVersion) nodes = do
...
@@ -151,7 +159,7 @@ deleteNodes termList session metaData (_ /\ setGraphVersion) nodes = do
Just (NTC.Versioned patch) -> pure unit --liftEffect do
Just (NTC.Versioned patch) -> pure unit --liftEffect do
--setGraphVersion $ const $ patch.version
--setGraphVersion $ const $ patch.version
deleteNode :: TermList -> Session -> GET.MetaData -> Record SigmaxT.Node -> Aff NTC.VersionedNgramsPatches
deleteNode ::
GT.
TermList -> Session -> GET.MetaData -> Record SigmaxT.Node -> Aff NTC.VersionedNgramsPatches
deleteNode termList session (GET.MetaData metaData) node = NTC.putNgramsPatches coreParams versioned
deleteNode termList session (GET.MetaData metaData) node = NTC.putNgramsPatches coreParams versioned
where
where
nodeId :: Int
nodeId :: Int
...
@@ -160,33 +168,72 @@ deleteNode termList session (GET.MetaData metaData) node = NTC.putNgramsPatches
...
@@ -160,33 +168,72 @@ deleteNode termList session (GET.MetaData metaData) node = NTC.putNgramsPatches
versioned = NTC.Versioned {version: metaData.list.version, data: np}
versioned = NTC.Versioned {version: metaData.list.version, data: np}
coreParams :: NTC.CoreParams ()
coreParams :: NTC.CoreParams ()
coreParams = {session, nodeId: nodeId, listIds: [metaData.list.listId], tabType}
coreParams = {session, nodeId: nodeId, listIds: [metaData.list.listId], tabType}
tabNgramType :: CTabNgramType
tabNgramType ::
GT.
CTabNgramType
tabNgramType = modeTabType node.gargType
tabNgramType =
GT.
modeTabType node.gargType
tabType :: TabType
tabType ::
GT.
TabType
tabType =
TabCorpus (
TabNgramType tabNgramType)
tabType =
GT.TabCorpus (GT.
TabNgramType tabNgramType)
term :: NTC.NgramsTerm
term :: NTC.NgramsTerm
term = NTC.normNgram tabNgramType node.label
term = NTC.normNgram tabNgramType node.label
pt :: NTC.NgramsTablePatch
pt :: NTC.NgramsTablePatch
pt = NTC.fromNgramsPatches np
pt = NTC.fromNgramsPatches np
np :: NTC.NgramsPatches
np :: NTC.NgramsPatches
np = NTC.singletonPatchMap term $ NTC.NgramsPatch { patch_children: mempty, patch_list }
np = NTC.singletonPatchMap term $ NTC.NgramsPatch { patch_children: mempty, patch_list }
patch_list :: NTC.Replace TermList
patch_list :: NTC.Replace GT.TermList
patch_list = NTC.Replace { new: termList, old: GraphTerm }
patch_list = NTC.Replace { new: termList, old: GT.GraphTerm }
type QueryProps =
(
frontends :: Frontends
, metaData :: GET.MetaData
, nodesMap :: SigmaxT.NodesMap
, selectedNodeIds :: R.State SigmaxT.NodeIds
, session :: Session
)
query :: Record QueryProps -> R.Element
query props = R.createElement queryCpt props []
query :: Frontends -> GET.MetaData -> Session -> SigmaxT.NodesMap -> R.State SigmaxT.NodeIds -> R.Element
queryCpt :: R.Component QueryProps
query _ _ _ _ (selectedNodeIds /\ _) | Set.isEmpty selectedNodeIds = RH.div {} []
queryCpt = R.hooksComponent "G.C.GE.S.query" cpt
query frontends (GET.MetaData metaData) session nodesMap (selectedNodeIds /\ _) =
where
query' (head metaData.corpusId)
cpt {selectedNodeIds: (selectedNodeIds /\ _)} _ | Set.isEmpty selectedNodeIds = pure $ RH.div {} []
cpt {frontends, metaData: (GET.MetaData metaData@{corpusId}), nodesMap, selectedNodeIds: (selectedNodeIds /\ _), session} _ = case uncons corpusId of
Nothing -> pure $ RH.div {} []
Just {head: corpusId} ->
pure $ RH.div {} [
pairing corpusId
, query' corpusId
]
where
where
query' Nothing = RH.div {} []
query' cId =
query' (Just corpusId) =
GT.tabs { frontends
GT.tabs {frontends, session, query: q <$> Set.toUnfoldable selectedNodeIds, sides: [side corpusId]}
, query: q <$> Set.toUnfoldable selectedNodeIds
, session
, sides: [side cId]}
q id = case Map.lookup id nodesMap of
q id = case Map.lookup id nodesMap of
Nothing -> []
Nothing -> []
Just n -> words n.label
Just n -> words n.label
side corpus
Id = GET.GraphSideCorpus {
side c
Id = GET.GraphSideCorpus {
corpus
Id
corpusId: c
Id
, listId: metaData.list.listId
, listId: metaData.list.listId
, corpusLabel: metaData.title
, corpusLabel: metaData.title
}
}
pairing cId =
RH.div {} [ RH.span { className: "btn btn-default"
, on: { click: onClickPair }
} [ RH.text "Pair with Annuaire" ] ]
where
onClickPair _ = do
let labels = Map.values $ Map.mapMaybe (\n -> if Set.member n.id selectedNodeIds then Just n.label else Nothing) nodesMap
launchAff_ $ do
pairWithAnnuaire { corpusId: cId
, listId: metaData.list.listId
, query: List.toUnfoldable labels
, session }
pairWithAnnuaire :: { corpusId :: Int
, listId :: Int
, query :: Array String
, session :: Session } -> Aff Unit
pairWithAnnuaire {corpusId, listId, query, session} =
post session (NodeAPI GT.Node (Just corpusId) $ "searchPair/list/" <> (show listId)) {query}
src/Gargantext/Components/GraphExplorer/Types.purs
View file @
1d9bcf4a
...
@@ -48,10 +48,10 @@ newtype GraphSideCorpus = GraphSideCorpus
...
@@ -48,10 +48,10 @@ newtype GraphSideCorpus = GraphSideCorpus
}
}
newtype GraphData = GraphData
newtype GraphData = GraphData
{ nodes :: Array Node
{ edges :: Array Edge
, edges :: Array Edge
, sides :: Array GraphSideCorpus
, metaData :: Maybe MetaData
, metaData :: Maybe MetaData
, nodes :: Array Node
, sides :: Array GraphSideCorpus
}
}
derive instance newtypeGraphData :: Newtype GraphData _
derive instance newtypeGraphData :: Newtype GraphData _
...
@@ -106,8 +106,8 @@ initialGraphData = GraphData {
...
@@ -106,8 +106,8 @@ initialGraphData = GraphData {
instance decodeJsonGraphData :: DecodeJson GraphData where
instance decodeJsonGraphData :: DecodeJson GraphData where
decodeJson json = do
decodeJson json = do
obj <- decodeJson json
obj <- decodeJson json
nodes <- obj .: "nodes"
edges <- obj .: "edges"
edges <- obj .: "edges"
nodes <- obj .: "nodes"
-- TODO: sides
-- TODO: sides
metadata <- obj .: "metadata"
metadata <- obj .: "metadata"
corpusIds <- metadata .: "corpusId"
corpusIds <- metadata .: "corpusId"
...
@@ -116,7 +116,7 @@ instance decodeJsonGraphData :: DecodeJson GraphData where
...
@@ -116,7 +116,7 @@ instance decodeJsonGraphData :: DecodeJson GraphData where
metaData <- obj .: "metadata"
metaData <- obj .: "metadata"
let side x = GraphSideCorpus { corpusId: x, corpusLabel: "Publications", listId : listId'}
let side x = GraphSideCorpus { corpusId: x, corpusLabel: "Publications", listId : listId'}
let sides = side <$> corpusIds
let sides = side <$> corpusIds
pure $ GraphData {
nodes, edges, sides, metaData
}
pure $ GraphData {
edges, metaData, nodes, sides
}
instance decodeJsonNode :: DecodeJson Node where
instance decodeJsonNode :: DecodeJson Node where
decodeJson json = do
decodeJson json = do
...
...
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