Commit 1d9bcf4a authored by Przemyslaw Kaminski's avatar Przemyslaw Kaminski

[GraphExplorer] search pairing of authors with annuaire

parent 15801a80
...@@ -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
......
...@@ -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 "Sidebar" cpt sidebarCpt = R.hooksComponent "G.C.GE.S.sidebar" 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 /\ _) =
query' (head metaData.corpusId)
where where
query' Nothing = RH.div {} [] cpt {selectedNodeIds: (selectedNodeIds /\ _)} _ | Set.isEmpty selectedNodeIds = pure $ RH.div {} []
query' (Just corpusId) = cpt {frontends, metaData: (GET.MetaData metaData@{corpusId}), nodesMap, selectedNodeIds: (selectedNodeIds /\ _), session} _ = case uncons corpusId of
GT.tabs {frontends, session, query: q <$> Set.toUnfoldable selectedNodeIds, sides: [side corpusId]} Nothing -> pure $ RH.div {} []
q id = case Map.lookup id nodesMap of Just {head: corpusId} ->
Nothing -> [] pure $ RH.div {} [
Just n -> words n.label pairing corpusId
side corpusId = GET.GraphSideCorpus { , query' corpusId
corpusId ]
, listId: metaData.list.listId where
, corpusLabel: metaData.title query' cId =
} GT.tabs { frontends
, query: q <$> Set.toUnfoldable selectedNodeIds
, session
, sides: [side cId]}
q id = case Map.lookup id nodesMap of
Nothing -> []
Just n -> words n.label
side cId = GET.GraphSideCorpus {
corpusId: cId
, listId: metaData.list.listId
, 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}
...@@ -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
......
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