Commit 54d0fdc9 authored by Przemyslaw Kaminski's avatar Przemyslaw Kaminski

[graph] disable various other controls when FA2 is running

parent a54ded1c
...@@ -48,7 +48,7 @@ here = R2.here "Gargantext.Components.GraphExplorer.Toolbar.Button" ...@@ -48,7 +48,7 @@ here = R2.here "Gargantext.Components.GraphExplorer.Toolbar.Button"
------------------------------------------------------ ------------------------------------------------------
type CenterButtonProps = type CenterButtonProps =
( forceAtlasState :: SigmaxTypes.ForceAtlasState ( forceAtlasState :: T.Box SigmaxTypes.ForceAtlasState
, sigmaRef :: R.Ref Sigmax.Sigma ) , sigmaRef :: R.Ref Sigmax.Sigma )
centerButton :: R2.Leaf CenterButtonProps centerButton :: R2.Leaf CenterButtonProps
...@@ -58,11 +58,13 @@ centerButtonCpt = here.component "centerButton" cpt ...@@ -58,11 +58,13 @@ centerButtonCpt = here.component "centerButton" cpt
where where
cpt { forceAtlasState cpt { forceAtlasState
, sigmaRef } _ = do , sigmaRef } _ = do
forceAtlasState' <- R2.useLive' forceAtlasState
pure $ B.button pure $ B.button
{ callback: \_ -> do { callback: \_ -> do
Sigmax.dependOnSigma (R.readRef sigmaRef) "[centerButton] sigma: Nothing" $ \s -> Sigmax.dependOnSigma (R.readRef sigmaRef) "[centerButton] sigma: Nothing" $ \s ->
Camera.updateCamera (Camera.camera s) Camera.defaultCamera Camera.updateCamera (Camera.camera s) Camera.defaultCamera
, status: SigmaxTypes.forceAtlasComponentStatus forceAtlasState , status: SigmaxTypes.forceAtlasComponentStatus forceAtlasState'
, variant: OutlinedButtonVariant Secondary , variant: OutlinedButtonVariant Secondary
} }
[ H.text "Center" ] [ H.text "Center" ]
...@@ -72,7 +74,7 @@ centerButtonCpt = here.component "centerButton" cpt ...@@ -72,7 +74,7 @@ centerButtonCpt = here.component "centerButton" cpt
type CameraButtonProps = type CameraButtonProps =
( id :: Int ( id :: Int
, hyperdataGraph :: GET.HyperdataGraph , hyperdataGraph :: GET.HyperdataGraph
, forceAtlasState :: SigmaxTypes.ForceAtlasState , forceAtlasState :: T.Box SigmaxTypes.ForceAtlasState
, reloadForest :: T2.ReloadS , reloadForest :: T2.ReloadS
, session :: Session , session :: Session
, sigmaRef :: R.Ref Sigmax.Sigma , sigmaRef :: R.Ref Sigmax.Sigma
...@@ -96,6 +98,8 @@ cameraButtonCpt = here.component "cameraButton" cpt ...@@ -96,6 +98,8 @@ cameraButtonCpt = here.component "cameraButton" cpt
, reloadForest , reloadForest
, session , session
, sigmaRef } _ = do , sigmaRef } _ = do
forceAtlasState' <- R2.useLive' forceAtlasState
pure $ B.button pure $ B.button
{ callback: \_ -> do { callback: \_ -> do
filename <- screenshotFilename filename <- screenshotFilename
...@@ -118,7 +122,7 @@ cameraButtonCpt = here.component "cameraButton" cpt ...@@ -118,7 +122,7 @@ cameraButtonCpt = here.component "cameraButton" cpt
Left err -> liftEffect $ log2 "[cameraButton] RESTError" err Left err -> liftEffect $ log2 "[cameraButton] RESTError" err
Right _ret -> do Right _ret -> do
liftEffect $ T2.reload reloadForest liftEffect $ T2.reload reloadForest
, status: SigmaxTypes.forceAtlasComponentStatus forceAtlasState , status: SigmaxTypes.forceAtlasComponentStatus forceAtlasState'
, variant: OutlinedButtonVariant Secondary , variant: OutlinedButtonVariant Secondary
} [ H.text "Screenshot" ] } [ H.text "Screenshot" ]
...@@ -139,28 +143,23 @@ edgesToggleButtonCpt = here.component "edgesToggleButton" cpt ...@@ -139,28 +143,23 @@ edgesToggleButtonCpt = here.component "edgesToggleButton" cpt
state' <- R2.useLive' state state' <- R2.useLive' state
stateAtlas' <- R2.useLive' stateAtlas stateAtlas' <- R2.useLive' stateAtlas
-- Computed
let
cst SigmaxTypes.InitialRunning = Disabled
cst SigmaxTypes.Running = Disabled
cst _ = Enabled
-- Render -- Render
pure $ pure $
B.button B.button
{ variant: state' == SigmaxTypes.EShow ? { -- TODO: Move this to Graph.purs to the R.useEffect handler which renders nodes/edges
callback: \_ -> T.modify_ SigmaxTypes.toggleShowEdgesState state
, status: SigmaxTypes.forceAtlasComponentStatus stateAtlas'
, variant: state' == SigmaxTypes.EShow ?
ButtonVariant Secondary $ ButtonVariant Secondary $
OutlinedButtonVariant Secondary OutlinedButtonVariant Secondary
, status: cst stateAtlas'
-- TODO: Move this to Graph.purs to the R.useEffect handler which renders nodes/edges
, callback: \_ -> T.modify_ SigmaxTypes.toggleShowEdgesState state
} }
[ H.text "Edges" ] [ H.text "Edges" ]
------------------------------------------------------ ------------------------------------------------------
type LouvainToggleButtonProps = type LouvainToggleButtonProps =
( state :: T.Box Boolean ( forceAtlasState :: T.Box SigmaxTypes.ForceAtlasState
, state :: T.Box Boolean
) )
louvainToggleButton :: R2.Leaf LouvainToggleButtonProps louvainToggleButton :: R2.Leaf LouvainToggleButtonProps
...@@ -168,16 +167,17 @@ louvainToggleButton = R2.leaf louvainToggleButtonCpt ...@@ -168,16 +167,17 @@ louvainToggleButton = R2.leaf louvainToggleButtonCpt
louvainToggleButtonCpt :: R.Component LouvainToggleButtonProps louvainToggleButtonCpt :: R.Component LouvainToggleButtonProps
louvainToggleButtonCpt = here.component "louvainToggleButton" cpt louvainToggleButtonCpt = here.component "louvainToggleButton" cpt
where where
cpt { state } _ = do cpt { forceAtlasState, state } _ = do
state' <- R2.useLive' state state' <- R2.useLive' state
forceAtlasState' <- R2.useLive' forceAtlasState
pure $ pure $
B.button B.button
{ variant: state' ? { callback: \_ -> T.modify_ (not) state
, status: SigmaxTypes.forceAtlasComponentStatus forceAtlasState'
, variant: state' ?
ButtonVariant Secondary $ ButtonVariant Secondary $
OutlinedButtonVariant Secondary OutlinedButtonVariant Secondary
, callback: \_ -> T.modify_ (not) state
} }
[ H.text "Louvain" ] [ H.text "Louvain" ]
...@@ -257,7 +257,8 @@ resetForceAtlasButtonCpt = here.component "resetForceAtlasToggleButton" cpt ...@@ -257,7 +257,8 @@ resetForceAtlasButtonCpt = here.component "resetForceAtlasToggleButton" cpt
------------------------------------------------------------------ ------------------------------------------------------------------
type MultiSelectEnabledButtonProps = type MultiSelectEnabledButtonProps =
( state :: T.Box Boolean ( forceAtlasState :: T.Box SigmaxTypes.ForceAtlasState
, state :: T.Box Boolean
) )
multiSelectEnabledButton :: R2.Leaf MultiSelectEnabledButtonProps multiSelectEnabledButton :: R2.Leaf MultiSelectEnabledButtonProps
...@@ -265,29 +266,31 @@ multiSelectEnabledButton = R2.leaf multiSelectEnabledButtonCpt ...@@ -265,29 +266,31 @@ multiSelectEnabledButton = R2.leaf multiSelectEnabledButtonCpt
multiSelectEnabledButtonCpt :: R.Component MultiSelectEnabledButtonProps multiSelectEnabledButtonCpt :: R.Component MultiSelectEnabledButtonProps
multiSelectEnabledButtonCpt = here.component "multiSelectEnabledButton" cpt multiSelectEnabledButtonCpt = here.component "multiSelectEnabledButton" cpt
where where
cpt { state } _ = do cpt { forceAtlasState, state } _ = do
state' <- R2.useLive' state state' <- R2.useLive' state
forceAtlasState' <- R2.useLive' forceAtlasState
pure $ pure $
H.div H.div
{ className: "btn-group" { className: "btn-group"
, role: "group" , role: "group"
} }
[ [
B.button B.button
{ variant: state' ? { callback: \_ -> T.write_ false state
, status: SigmaxTypes.forceAtlasComponentStatus forceAtlasState'
, variant: state' ?
OutlinedButtonVariant Secondary $ OutlinedButtonVariant Secondary $
ButtonVariant Secondary ButtonVariant Secondary
, callback: \_ -> T.write_ false state
} }
[ H.text "Single" ] [ H.text "Single" ]
, ,
B.button B.button
{ variant: state' ? { callback: \_ -> T.write_ true state
, status: SigmaxTypes.forceAtlasComponentStatus forceAtlasState'
, variant: state' ?
ButtonVariant Secondary $ ButtonVariant Secondary $
OutlinedButtonVariant Secondary OutlinedButtonVariant Secondary
, callback: \_ -> T.write_ true state
} }
[ H.text "Multiple" ] [ H.text "Multiple" ]
] ]
...@@ -16,7 +16,7 @@ import Gargantext.Components.GraphExplorer.Resources as Graph ...@@ -16,7 +16,7 @@ import Gargantext.Components.GraphExplorer.Resources as Graph
import Gargantext.Components.GraphExplorer.Store as GraphStore import Gargantext.Components.GraphExplorer.Store as GraphStore
import Gargantext.Components.GraphExplorer.Toolbar.Buttons (centerButton, cameraButton, edgesToggleButton, louvainToggleButton, pauseForceAtlasButton, multiSelectEnabledButton) import Gargantext.Components.GraphExplorer.Toolbar.Buttons (centerButton, cameraButton, edgesToggleButton, louvainToggleButton, pauseForceAtlasButton, multiSelectEnabledButton)
import Gargantext.Components.GraphExplorer.Toolbar.RangeControl (edgeConfluenceControl, edgeWeightControl, nodeSizeControl) import Gargantext.Components.GraphExplorer.Toolbar.RangeControl (edgeConfluenceControl, edgeWeightControl, nodeSizeControl)
import Gargantext.Components.GraphExplorer.Toolbar.SlideButton (labelSizeButton, labelRenderedSizeThresholdButton, mouseSelectorSizeButton) import Gargantext.Components.GraphExplorer.Toolbar.SlideButton (labelSizeButton, labelRenderedSizeThresholdButton, mouseSelectorSizeSlider)
import Gargantext.Components.GraphExplorer.Types as GET import Gargantext.Components.GraphExplorer.Types as GET
import Gargantext.Hooks.Session (useSession) import Gargantext.Hooks.Session (useSession)
import Gargantext.Hooks.Sigmax.ForceAtlas2 as ForceAtlas import Gargantext.Hooks.Sigmax.ForceAtlas2 as ForceAtlas
...@@ -184,7 +184,7 @@ controlsCpt = R.memo' $ here.component "controls" cpt where ...@@ -184,7 +184,7 @@ controlsCpt = R.memo' $ here.component "controls" cpt where
, ,
cameraButton cameraButton
{ id: graphId' { id: graphId'
, forceAtlasState: forceAtlasState' , forceAtlasState
, hyperdataGraph: hyperdataGraph' , hyperdataGraph: hyperdataGraph'
, reloadForest , reloadForest
, session: session , session: session
...@@ -198,7 +198,7 @@ controlsCpt = R.memo' $ here.component "controls" cpt where ...@@ -198,7 +198,7 @@ controlsCpt = R.memo' $ here.component "controls" cpt where
, titleSlot: H.text "View settings" , titleSlot: H.text "View settings"
} }
[ [
centerButton { forceAtlasState: forceAtlasState' centerButton { forceAtlasState
, sigmaRef } , sigmaRef }
, ,
gap gap
...@@ -210,7 +210,8 @@ controlsCpt = R.memo' $ here.component "controls" cpt where ...@@ -210,7 +210,8 @@ controlsCpt = R.memo' $ here.component "controls" cpt where
, ,
gap gap
, ,
louvainToggleButton { state: showLouvain } louvainToggleButton { forceAtlasState
, state: showLouvain }
] ]
] ]
, ,
...@@ -224,13 +225,16 @@ controlsCpt = R.memo' $ here.component "controls" cpt where ...@@ -224,13 +225,16 @@ controlsCpt = R.memo' $ here.component "controls" cpt where
} }
[ [
-- zoom: 0 -100 - calculate ratio -- zoom: 0 -100 - calculate ratio
multiSelectEnabledButton { state: multiSelectEnabled } multiSelectEnabledButton { forceAtlasState
, state: multiSelectEnabled }
, ,
gap gap
, ,
-- toggle multi node selection -- toggle multi node selection
-- save button -- save button
mouseSelectorSizeButton sigmaRef mouseSelectorSize mouseSelectorSizeSlider { forceAtlasState
, sigmaRef
, state: mouseSelectorSize }
] ]
] ]
, ,
...@@ -264,7 +268,9 @@ controlsCpt = R.memo' $ here.component "controls" cpt where ...@@ -264,7 +268,9 @@ controlsCpt = R.memo' $ here.component "controls" cpt where
-- run demo -- run demo
-- search button -- search button
-- search topics -- search topics
labelSizeButton sigmaRef labelSize labelSizeButton { forceAtlasState
, sigmaRef
, state: labelSize }
, ,
-- labels size: 1-4 -- labels size: 1-4
nodeSizeControl nodeSizeControl
...@@ -281,7 +287,9 @@ controlsCpt = R.memo' $ here.component "controls" cpt where ...@@ -281,7 +287,9 @@ controlsCpt = R.memo' $ here.component "controls" cpt where
-- run demo -- run demo
-- search button -- search button
-- search topics -- search topics
labelRenderedSizeThresholdButton sigmaRef labelRenderedSizeThreshold labelRenderedSizeThresholdButton { forceAtlasState
, sigmaRef
, state: labelRenderedSizeThreshold }
-- , -- ,
-- -- labels size: 1-4 -- -- labels size: 1-4
-- nodeSizeControl -- nodeSizeControl
......
...@@ -3,7 +3,7 @@ module Gargantext.Components.GraphExplorer.Toolbar.SlideButton ...@@ -3,7 +3,7 @@ module Gargantext.Components.GraphExplorer.Toolbar.SlideButton
, sizeButton , sizeButton
, labelSizeButton , labelSizeButton
, labelRenderedSizeThresholdButton , labelRenderedSizeThresholdButton
, mouseSelectorSizeButton , mouseSelectorSizeSlider
) where ) where
import Data.Maybe (Maybe(..)) import Data.Maybe (Maybe(..))
...@@ -14,8 +14,10 @@ import Reactix as R ...@@ -14,8 +14,10 @@ import Reactix as R
import Reactix.DOM.HTML as H import Reactix.DOM.HTML as H
import Toestand as T import Toestand as T
import Gargantext.Components.Bootstrap.Types (ComponentStatus(Disabled))
import Gargantext.Hooks.Sigmax as Sigmax import Gargantext.Hooks.Sigmax as Sigmax
import Gargantext.Hooks.Sigmax.Sigma as Sigma import Gargantext.Hooks.Sigmax.Sigma as Sigma
import Gargantext.Hooks.Sigmax.Types as SigmaxTypes
import Gargantext.Utils.Reactix as R2 import Gargantext.Utils.Reactix as R2
here :: R2.Here here :: R2.Here
...@@ -23,6 +25,7 @@ here = R2.here "Gargantext.Components.GraphExplorer.Toolbar.SlideButton" ...@@ -23,6 +25,7 @@ here = R2.here "Gargantext.Components.GraphExplorer.Toolbar.SlideButton"
type Props = type Props =
( caption :: String ( caption :: String
, forceAtlasState :: T.Box SigmaxTypes.ForceAtlasState
, min :: Number , min :: Number
, max :: Number , max :: Number
, onChange :: forall e. e -> Effect Unit , onChange :: forall e. e -> Effect Unit
...@@ -33,8 +36,11 @@ sizeButton :: Record Props -> R.Element ...@@ -33,8 +36,11 @@ sizeButton :: Record Props -> R.Element
sizeButton props = R.createElement sizeButtonCpt props [] sizeButton props = R.createElement sizeButtonCpt props []
sizeButtonCpt :: R.Component Props sizeButtonCpt :: R.Component Props
sizeButtonCpt = here.component "sizeButton" cpt where sizeButtonCpt = here.component "sizeButton" cpt where
cpt { state, caption, min, max, onChange } _ = do cpt { state, caption, forceAtlasState, min, max, onChange } _ = do
defaultValue <- T.useLive T.unequal state defaultValue <- T.useLive T.unequal state
forceAtlasState' <- R2.useLive' forceAtlasState
let status = SigmaxTypes.forceAtlasComponentStatus forceAtlasState'
pure $ pure $
...@@ -55,15 +61,26 @@ sizeButtonCpt = here.component "sizeButton" cpt where ...@@ -55,15 +61,26 @@ sizeButtonCpt = here.component "sizeButton" cpt where
, defaultValue , defaultValue
, on: { input: onChange } , on: { input: onChange }
, className: "range-simple__input" , className: "range-simple__input"
, disabled: status == Disabled
} }
] ]
] ]
labelSizeButton :: R.Ref Sigmax.Sigma -> T.Box Number -> R.Element type LabelSizeButtonProps =
labelSizeButton sigmaRef state = ( forceAtlasState :: T.Box SigmaxTypes.ForceAtlasState
sizeButton { , sigmaRef :: R.Ref Sigmax.Sigma
, state :: T.Box Number)
labelSizeButton :: R2.Leaf LabelSizeButtonProps
labelSizeButton = R2.leaf labelSizeButtonCpt
labelSizeButtonCpt :: R.Component LabelSizeButtonProps
labelSizeButtonCpt = here.component "labelSizeButton" cpt
where
cpt { forceAtlasState, sigmaRef, state} _ = do
pure $ sizeButton {
state state
, caption: "Label size" , caption: "Label size"
, forceAtlasState
, min: 1.0 , min: 1.0
, max: 30.0 , max: 30.0
, onChange: \e -> do , onChange: \e -> do
...@@ -83,11 +100,21 @@ labelSizeButton sigmaRef state = ...@@ -83,11 +100,21 @@ labelSizeButton sigmaRef state =
T.write_ newValue state T.write_ newValue state
} }
labelRenderedSizeThresholdButton :: R.Ref Sigmax.Sigma -> T.Box Number -> R.Element type LabelRenderedSizeThresholdButtonProps =
labelRenderedSizeThresholdButton sigmaRef state = ( forceAtlasState :: T.Box SigmaxTypes.ForceAtlasState
sizeButton { , sigmaRef :: R.Ref Sigmax.Sigma
, state :: T.Box Number)
labelRenderedSizeThresholdButton :: R2.Leaf LabelRenderedSizeThresholdButtonProps
labelRenderedSizeThresholdButton = R2.leaf labelRenderedSizeThresholdButtonCpt
labelRenderedSizeThresholdButtonCpt :: R.Component LabelRenderedSizeThresholdButtonProps
labelRenderedSizeThresholdButtonCpt = here.component "labelRenderedSizeThresholdButton" cpt
where
cpt { forceAtlasState, sigmaRef, state} _ = do
pure $ sizeButton {
state state
, caption: "Label rendered size threshold" , caption: "Label rendered size threshold"
, forceAtlasState
, min: 0.0 , min: 0.0
, max: 10.0 , max: 10.0
, onChange: \e -> do , onChange: \e -> do
...@@ -103,11 +130,20 @@ labelRenderedSizeThresholdButton sigmaRef state = ...@@ -103,11 +130,20 @@ labelRenderedSizeThresholdButton sigmaRef state =
T.write_ newValue state T.write_ newValue state
} }
mouseSelectorSizeButton :: R.Ref Sigmax.Sigma -> T.Box Number -> R.Element type MouseSelectorSizeSliderProps =
mouseSelectorSizeButton sigmaRef state = ( forceAtlasState :: T.Box SigmaxTypes.ForceAtlasState
sizeButton { , sigmaRef :: R.Ref Sigmax.Sigma
state , state :: T.Box Number)
, caption: "Selector size (Shift + wheel)"
mouseSelectorSizeSlider :: R2.Leaf MouseSelectorSizeSliderProps
mouseSelectorSizeSlider = R2.leaf mouseSelectorSizeSliderCpt
mouseSelectorSizeSliderCpt :: R.Component MouseSelectorSizeSliderProps
mouseSelectorSizeSliderCpt = here.component "mouseSelectorSizeSlider" cpt
where
cpt { forceAtlasState, sigmaRef, state } _ = do
pure $ sizeButton {
caption: "Selector size (Shift + wheel)"
, forceAtlasState
, min: 1.0 , min: 1.0
, max: 50.0 , max: 50.0
, onChange: \e -> do , onChange: \e -> do
...@@ -121,4 +157,5 @@ mouseSelectorSizeButton sigmaRef state = ...@@ -121,4 +157,5 @@ mouseSelectorSizeButton sigmaRef state =
mouseSelectorSize: newValue mouseSelectorSize: newValue
} }
T.write_ newValue state T.write_ newValue state
, state
} }
...@@ -229,10 +229,8 @@ forceAtlasEdgeState Killed es = es ...@@ -229,10 +229,8 @@ forceAtlasEdgeState Killed es = es
-- | Return state in which labels should be depending on forceAtlasState -- | Return state in which labels should be depending on forceAtlasState
forceAtlasLabelState :: ForceAtlasState -> Boolean forceAtlasLabelState :: ForceAtlasState -> Boolean
forceAtlasLabelState InitialRunning = false forceAtlasLabelState InitialRunning = false
forceAtlasLabelState InitialStopped = true
forceAtlasLabelState Running = false forceAtlasLabelState Running = false
forceAtlasLabelState Paused = true forceAtlasLabelState _ = true
forceAtlasLabelState Killed = true
......
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