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