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
153
Issues
153
List
Board
Labels
Milestones
Merge Requests
3
Merge Requests
3
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
c48714a1
Verified
Commit
c48714a1
authored
Jun 30, 2025
by
Przemyslaw Kaminski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[graph] better logic for neighbour nodes (sorted by edge weight)
parent
7d3246b8
Pipeline
#7706
passed with stages
in 23 minutes and 12 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
16 additions
and
19 deletions
+16
-19
Sidebar.purs
src/Gargantext/Components/GraphExplorer/Sidebar.purs
+3
-14
Types.purs
src/Gargantext/Hooks/Sigmax/Types.purs
+13
-5
No files found.
src/Gargantext/Components/GraphExplorer/Sidebar.purs
View file @
c48714a1
...
@@ -513,17 +513,11 @@ neighborhoodCpt = R.memo' $ here.component "neighborhood" cpt
...
@@ -513,17 +513,11 @@ neighborhoodCpt = R.memo' $ here.component "neighborhood" cpt
flip T.listen expandNeighborhood onExpandNeighborhoodChange
flip T.listen expandNeighborhood onExpandNeighborhoodChange
R.useEffect1' selectedNodeIds' do
R.useEffect1' selectedNodeIds' do
let refreshed = neighbourBadges graph' selectedNodeIds'
let neighbours' = SigmaxT.neighborsSortedByEdgeWeight graph' selectedNodeIds'
let count = Seq.length refreshed
let count = A.length neighbours'
-- let ordered = A.sortWith (\n -> -n.size) $ Seq.toUnfoldable refreshed
let neighbours' = neighbourBadges graph' selectedNodeIds'
let edges' = SigmaxT.neighboringEdges graph' selectedNodeIds'
let edgesSorted = A.sortWith (\e -> -e.weight) $ A.fromFoldable edges'
let neighboursSorted = (\e -> if Set.member e.source selectedNodeIds' then e.targetNode else e.sourceNode) <$> edgesSorted
T.write_ (count - 1) termCountBox
T.write_ (count - 1) termCountBox
T.write_ neighbours
Sorted
termListBox
T.write_ neighbours
'
termListBox
T.write_ false showMoreBox
T.write_ false showMoreBox
-- | Render
-- | Render
...
@@ -690,11 +684,6 @@ badgeSize minSize maxSize size =
...
@@ -690,11 +684,6 @@ badgeSize minSize maxSize size =
badges :: SigmaxT.SGraph -> SigmaxT.NodeIds -> Seq.Seq (Record SigmaxT.Node)
badges :: SigmaxT.SGraph -> SigmaxT.NodeIds -> Seq.Seq (Record SigmaxT.Node)
badges graph selectedNodeIds = SigmaxT.graphNodes $ SigmaxT.nodesById graph selectedNodeIds
badges graph selectedNodeIds = SigmaxT.graphNodes $ SigmaxT.nodesById graph selectedNodeIds
neighbourBadges :: SigmaxT.SGraph -> SigmaxT.NodeIds -> Seq.Seq (Record SigmaxT.Node)
neighbourBadges graph selectedNodeIds = SigmaxT.neighbors graph selectedNodes'
where
selectedNodes' = SigmaxT.graphNodes $ SigmaxT.nodesById graph selectedNodeIds
---------------------------------------------------------
---------------------------------------------------------
type SendPatches =
type SendPatches =
...
...
src/Gargantext/Hooks/Sigmax/Types.purs
View file @
c48714a1
...
@@ -18,7 +18,7 @@ import Gargantext.Data.Louvain as Louvain
...
@@ -18,7 +18,7 @@ import Gargantext.Data.Louvain as Louvain
import Gargantext.Types as GT
import Gargantext.Types as GT
import Gargantext.Utils.Range as Range
import Gargantext.Utils.Range as Range
import Partial.Unsafe (unsafePartial)
import Partial.Unsafe (unsafePartial)
import Prelude (class Eq, class Show, ($), (&&), (==), (||), (<$>), mod, not, (<=))
import Prelude (class Eq, class Show, ($), (&&), (==), (||), (<$>), mod, not, (<=)
, negate
)
import Record.Unsafe (unsafeGet, unsafeSet)
import Record.Unsafe (unsafeGet, unsafeSet)
newtype Graph n e = Graph { edges :: Seq.Seq { | e }, nodes :: Seq.Seq { | n } }
newtype Graph n e = Graph { edges :: Seq.Seq { | e }, nodes :: Seq.Seq { | n } }
...
@@ -214,11 +214,13 @@ sub graph (Graph { nodes, edges }) = newGraph
...
@@ -214,11 +214,13 @@ sub graph (Graph { nodes, edges }) = newGraph
filteredEdges = edgesFilter edgeFilterFunc graph
filteredEdges = edgesFilter edgeFilterFunc graph
newGraph = nodesFilter (\n -> not (Set.member n.id nodeIds)) filteredEdges
newGraph = nodesFilter (\n -> not (Set.member n.id nodeIds)) filteredEdges
neighbors :: SGraph -> Seq.Seq (Record Node) -> Seq.Seq (Record Node)
-- | NOTE: The logic of this function is a bit iffy. See
neighbors g nodes = Seq.fromFoldable $ Set.unions [ if Set.size sources <= 1 then targets else sources ]
-- https://gitlab.iscpif.fr/gargantext/purescript-gargantext/issues/749
neighbors :: SGraph -> NodeIds -> Set.Set (Record Node)
neighbors g nodeIds = Set.unions [ if Set.size sources <= 1 then targets else sources ]
where
where
nodeIds
= Set.fromFoldable $ Seq.map _.id node
s
nodeIds
' = Set.fromFoldable nodeId
s
selectedEdges = neighboringEdges g nodeIds
selectedEdges = neighboringEdges g nodeIds
'
sources = Set.fromFoldable $ graphNodes $ nodesById g $ Set.fromFoldable $ Seq.map _.source selectedEdges
sources = Set.fromFoldable $ graphNodes $ nodesById g $ Set.fromFoldable $ Seq.map _.source selectedEdges
targets = Set.fromFoldable $ graphNodes $ nodesById g $ Set.fromFoldable $ Seq.map _.target selectedEdges
targets = Set.fromFoldable $ graphNodes $ nodesById g $ Set.fromFoldable $ Seq.map _.target selectedEdges
...
@@ -227,6 +229,12 @@ neighboringEdges g nodeIds = Seq.filter condition $ graphEdges g
...
@@ -227,6 +229,12 @@ neighboringEdges g nodeIds = Seq.filter condition $ graphEdges g
where
where
condition { source, target } = (Set.member source nodeIds) || (Set.member target nodeIds)
condition { source, target } = (Set.member source nodeIds) || (Set.member target nodeIds)
neighborsSortedByEdgeWeight :: SGraph -> NodeIds -> Array (Record Node)
neighborsSortedByEdgeWeight g nodeIds = A.nubByEq (\n1 n2 -> n1.id == n2.id) neighbourNodes
where
neighbourNodes = (\e -> if Set.member e.source nodeIds then e.targetNode else e.sourceNode) <$> edgesSorted
edgesSorted = A.sortWith (\e -> -e.weight) $ A.fromFoldable (neighboringEdges g nodeIds)
eqGraph :: SGraph -> SGraph -> Boolean
eqGraph :: SGraph -> SGraph -> Boolean
eqGraph (Graph { nodes: n1, edges: e1 }) (Graph { nodes: n2, edges: e2 }) = (n1 == n2) && (e1 == e2)
eqGraph (Graph { nodes: n1, edges: e1 }) (Graph { nodes: n2, edges: e2 }) = (n1 == n2) && (e1 == e2)
...
...
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