Commit b55c4b1f authored by Alexandre Delanoë's avatar Alexandre Delanoë

Merge branch 'dev-demo' of...

Merge branch 'dev-demo' of ssh://gitlab.iscpif.fr:20022/gargantext/purescript-gargantext into dev-demo
parents 68812066 2a34e358
'use strict';
exports.objectCreate = function(a) { return Object.create(a); };
var dummyClass = 'DummyClass';
exports.edgeShapesClass = dummyClass;
exports.filterClass = dummyClass;
......
......@@ -3,6 +3,7 @@ module Gargantext.Components.GraphExplorer.Sigmajs where
import Prelude
import Data.Nullable (Nullable)
import DOM.Simple.Console (log, log2)
import Effect (Effect)
import Effect.Uncurried (EffectFn1, EffectFn2, mkEffectFn1, runEffectFn1)
import React (Children, ReactClass, ReactElement, ReactRef, SyntheticEventHandler, createElement, unsafeCreateElement)
......@@ -10,6 +11,7 @@ import React.SyntheticEvent (SyntheticMouseEvent)
import Record.Unsafe (unsafeGet)
import Thermite (EventHandler)
import Unsafe.Coerce (unsafeCoerce)
import FFI.Simple ((...))
import Gargantext.Types (class Optional)
foreign import edgeShapesClass :: forall props. ReactClass props
......@@ -246,6 +248,11 @@ sigmaEdge = unsafeCoerce
sigmaSettings :: forall o. Optional o SigmaSettingProps => { | o } -> SigmaSettings
sigmaSettings = unsafeCoerce
reviseSettings :: SigmaSettings -> SigmaSettings
reviseSettings = objectCreate
foreign import objectCreate :: forall a. a -> a
foreign import data SigmaStyle :: Type
type CameraProps =
......@@ -262,6 +269,12 @@ type CameraInstance = { | CameraInstance' }
foreign import setSigmaRef :: EffectFn1 (Nullable ReactRef) Unit
foreign import getSigmaRef :: Effect SigmaInstance
foreign import sigmaOnMouseMove :: {cursorSize :: Number} -> SyntheticMouseEvent -> Effect Unit
refresh :: SigmaInstance -> Effect Unit
refresh s = do
log "Force refreshing sigma instance"
pure (s ... "refresh" $ [])
cameras :: SigmaInstance -> Array CameraInstance
cameras = unsafeGet "cameras"
......@@ -436,4 +449,5 @@ type SigmaSettingProps =
, twNodesGreyOpacity :: Number
, twBorderGreyColor :: String
, twEdgeGreyColor :: String
, gargRevision :: Int
)
......@@ -16,10 +16,11 @@ import Data.Set (Set)
import Data.Set as Set
import Data.Symbol (SProxy(..))
import Data.Traversable (for_)
import DOM.Simple.Console (log2)
import Effect (Effect)
import Effect.Aff (Aff)
import Effect.Class (liftEffect)
import Gargantext.Components.GraphExplorer.Sigmajs (Color(Color), SigmaEasing, SigmaGraphData(SigmaGraphData), SigmaNode, SigmaSettings, canvas, edgeShape, edgeShapes, forceAtlas2, setSigmaRef, getSigmaRef, cameras, CameraProps, getCameraProps, goTo, pauseForceAtlas2, sStyle, sigmaOnMouseMove, sigma, sigmaEasing, sigmaEdge, sigmaEnableWebGL, sigmaNode, sigmaSettings)
import Gargantext.Components.GraphExplorer.Sigmajs (Color(Color), SigmaEasing, SigmaGraphData(SigmaGraphData), SigmaNode, SigmaSettings, canvas, edgeShape, edgeShapes, forceAtlas2, setSigmaRef, getSigmaRef, cameras, CameraProps, getCameraProps, goTo, pauseForceAtlas2, sStyle, sigmaOnMouseMove, sigma, sigmaEasing, sigmaEdge, sigmaEnableWebGL, sigmaNode, sigmaSettings, refresh, reviseSettings)
import Gargantext.Components.GraphExplorer.Types (Cluster(..), MetaData(..), Edge(..), GraphData(..), Legend(..), Node(..), getLegendData)
import Gargantext.Components.Login.Types (AuthData(..), TreeId)
import Gargantext.Components.RandomText (words)
......@@ -119,9 +120,19 @@ newtype State = State
derive instance newtypeState :: Newtype State _
initialMetadata :: MetaData
initialMetadata = MetaData { title : "", legend : [], corpusId : [] }
initialGraphData :: GraphData
initialGraphData = GraphData
{ nodes: []
, edges: []
, sides: []
, metaData : Just initialMetadata }
initialState :: State
initialState = State
{ graphData : GraphData {nodes: [], edges: [], sides: [], metaData : Just $ MetaData{title : "", legend : [], corpusId : []}}
{ graphData : initialGraphData
, filePath : ""
, sigmaGraphData : Nothing
, legendData : []
......@@ -136,6 +147,20 @@ initialState = State
, settings : mySettings
}
revise :: State -> State
revise (State s) = State $ s { settings = reviseSettings s.settings }
maybeRevise :: State -> Boolean -> State
maybeRevise s true = revise s
maybeRevise s false = s
selectNode :: SelectedNode -> State -> State
selectNode selectedNode (State s) = maybeRevise state (s.selectedNodes /= selectedNodes)
where
set = if s.multiNodeSelection then s.selectedNodes else Set.empty
selectedNodes = toggleSet selectedNode set
sigmaGraphData = Just $ convert selectedNodes s.graphData
state = State $ s { sigmaGraphData=sigmaGraphData }
-- This one is not used: specOld is the one being used.
-- TODO: code duplication
{-
......@@ -151,19 +176,26 @@ performAction (LoadGraph fp) _ _ = void do
treeResp <- liftEffect $ getAuthData
case treeResp of
Just (AuthData {token,tree_id }) ->
modifyState \(State s) -> State s {graphData = resp, sigmaGraphData = Just $ convert resp, legendData = getLegendData resp, treeId = Just tree_id}
modifyState \(State s) ->
State s
{ graphData = resp
, sigmaGraphData = Just $ convert Set.empty resp
, legendData = getLegendData resp
, treeId = Just tree_id }
Nothing ->
modifyState \(State s) -> State s { graphData = resp, sigmaGraphData = Just $ convert resp, legendData = getLegendData resp, treeId = Nothing}
modifyState \(State s) ->
State s
{ graphData = resp
, sigmaGraphData = Just $ convert Set.empty resp
, legendData = getLegendData resp
, treeId = Nothing}
-- TODO: here one might `catchError getNodes` to visually empty the
-- graph.
--modifyState \(State s) -> State s {graphData = resp, sigmaGraphData = Just $ convert resp, legendData = getLegendData resp}
performAction (SelectNode selectedNode@(SelectedNode node)) _ (State state) =
modifyState_ $ \(State s) ->
State s {selectedNodes = toggleSet selectedNode
(if s.multiNodeSelection then s.selectedNodes
else Set.empty) }
performAction (SelectNode selectedNode@(SelectedNode node)) _ (State state) = void do
modifyState_ (selectNode selectedNode)
performAction (ShowSidePanel b) _ (State state) = void do
modifyState $ \(State s) -> State s {showSidePanel = b }
......@@ -201,8 +233,11 @@ performAction (ChangeCursorSize size) _ _ =
-- modifyState_ $ \() -> do
-- State $
convert :: GraphData -> SigmaGraphData
convert (GraphData r) = SigmaGraphData {nodes, edges}
selNode :: Node -> SelectedNode
selNode (Node n) = SelectedNode { id: n.id_, label: n.label }
convert :: Set.Set SelectedNode -> GraphData -> SigmaGraphData
convert selectedNodes (GraphData r) = SigmaGraphData {nodes, edges}
where
nodes = mapWithIndex nodeFn r.nodes
nodeFn i (Node n) =
......@@ -212,12 +247,18 @@ convert (GraphData r) = SigmaGraphData {nodes, edges}
, label : n.label
, x : n.x -- cos (toNumber i)
, y : n.y -- sin (toNumber i)
, color : intColor $ cDef n.attributes
, color
-- , labelColor
}
where
isSelected = Set.member (selNode (Node n)) selectedNodes
cDef (Cluster {clustDefault}) = clustDefault
-- labelColor = if isSelected then Color "red" else intColor $ cDef n.attributes
color = if isSelected then Color "#ff0000" else intColor $ cDef n.attributes
edges = map edgeFn r.edges
edgeFn (Edge e) = sigmaEdge {id : e.id_, source : e.source, target : e.target}
{--
render :: Render State {} Action
render d p (State {sigmaGraphData, settings, legendData}) c =
......
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