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
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
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
Grégoire Locqueville
purescript-gargantext
Commits
dfd1a8db
Commit
dfd1a8db
authored
May 21, 2021
by
Przemyslaw Kaminski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[forest] graph link not clickable when graph not ready - first version
parent
e2f0f80b
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
117 additions
and
60 deletions
+117
-60
Node.purs
src/Gargantext/Components/Forest/Tree/Node.purs
+29
-38
Tools.purs
src/Gargantext/Components/Forest/Tree/Node/Tools.purs
+88
-22
No files found.
src/Gargantext/Components/Forest/Tree/Node.purs
View file @
dfd1a8db
...
@@ -5,8 +5,6 @@ import Gargantext.Prelude
...
@@ -5,8 +5,6 @@ import Gargantext.Prelude
import Data.Maybe (Maybe(..))
import Data.Maybe (Maybe(..))
import Data.Nullable (null)
import Data.Nullable (null)
import Data.Symbol (SProxy(..))
import Data.Symbol (SProxy(..))
import Data.Tuple (fst, snd)
import Data.Tuple.Nested ((/\))
import Effect (Effect)
import Effect (Effect)
import Effect.Aff (Aff, launchAff)
import Effect.Aff (Aff, launchAff)
import Effect.Class (liftEffect)
import Effect.Class (liftEffect)
...
@@ -64,7 +62,6 @@ type IsLeaf = Boolean
...
@@ -64,7 +62,6 @@ type IsLeaf = Boolean
nodeSpan :: R2.Component NodeMainSpanProps
nodeSpan :: R2.Component NodeMainSpanProps
nodeSpan = R.createElement nodeSpanCpt
nodeSpan = R.createElement nodeSpanCpt
nodeSpanCpt :: R.Component NodeMainSpanProps
nodeSpanCpt :: R.Component NodeMainSpanProps
nodeSpanCpt = here.component "nodeSpan" cpt
nodeSpanCpt = here.component "nodeSpan" cpt
where
where
...
@@ -77,7 +74,6 @@ nodeSpanCpt = here.component "nodeSpan" cpt
...
@@ -77,7 +74,6 @@ nodeSpanCpt = here.component "nodeSpan" cpt
nodeMainSpan :: R2.Component NodeMainSpanProps
nodeMainSpan :: R2.Component NodeMainSpanProps
nodeMainSpan = R.createElement nodeMainSpanCpt
nodeMainSpan = R.createElement nodeMainSpanCpt
nodeMainSpanCpt :: R.Component NodeMainSpanProps
nodeMainSpanCpt :: R.Component NodeMainSpanProps
nodeMainSpanCpt = here.component "nodeMainSpan" cpt
nodeMainSpanCpt = here.component "nodeMainSpan" cpt
where
where
...
@@ -127,35 +123,35 @@ nodeMainSpanCpt = here.component "nodeMainSpan" cpt
...
@@ -127,35 +123,35 @@ nodeMainSpanCpt = here.component "nodeMainSpan" cpt
, nodeType
, nodeType
, session } []
, session } []
, fileTypeView { dispatch, droppedFile, id, isDragOver, nodeType }
, fileTypeView { dispatch, droppedFile, id, isDragOver, nodeType }
, H.div {} (map (\t -> asyncProgressBar { asyncTask: t
, H.div {} (map (\t -> asyncProgressBar { asyncTask: t
, barType: Pie
, barType: Pie
, nodeId: id
, nodeId: id
, onFinish: onTaskFinish id t
, onFinish: onTaskFinish id t
, session } []
, session } []
) currentTasks'
) currentTasks'
)
)
, if nodeType == GT.NodeUser
, if nodeType == GT.NodeUser
then GV.versionView { session } []
then GV.versionView { session } []
else H.div {} []
else H.div {} []
, if showBox then
, if showBox then
Popover.popover { arrow: false
Popover.popover { arrow: false
, open: false
, open: false
, onClose: \_ -> pure unit
, onClose: \_ -> pure unit
, onOpen: \_ -> pure unit
, onOpen: \_ -> pure unit
, ref: popoverRef } [
, ref: popoverRef } [
popOverIcon
popOverIcon
, mNodePopupView props (onPopoverClose popoverRef)
, mNodePopupView props (onPopoverClose popoverRef)
]
]
else H.div {} []
else H.div {} []
, nodeActions { id
, nodeActions { id
, nodeType
, nodeType
, refresh: const $ dispatch RefreshTree
, refresh: const $ dispatch RefreshTree
, session
, session
} []
} []
]
]
where
where
onTaskFinish id' t _ = do
onTaskFinish id' t _ = do
GAT.finish id' t tasks
GAT.finish id' t tasks
...
@@ -234,7 +230,6 @@ type FolderIconProps = (
...
@@ -234,7 +230,6 @@ type FolderIconProps = (
folderIcon :: R2.Component FolderIconProps
folderIcon :: R2.Component FolderIconProps
folderIcon = R.createElement folderIconCpt
folderIcon = R.createElement folderIconCpt
folderIconCpt :: R.Component FolderIconProps
folderIconCpt :: R.Component FolderIconProps
folderIconCpt = here.component "folderIcon" cpt
folderIconCpt = here.component "folderIcon" cpt
where
where
...
@@ -252,7 +247,6 @@ type ChevronIconProps = (
...
@@ -252,7 +247,6 @@ type ChevronIconProps = (
chevronIcon :: R2.Component ChevronIconProps
chevronIcon :: R2.Component ChevronIconProps
chevronIcon = R.createElement chevronIconCpt
chevronIcon = R.createElement chevronIconCpt
chevronIconCpt :: R.Component ChevronIconProps
chevronIconCpt :: R.Component ChevronIconProps
chevronIconCpt = here.component "chevronIcon" cpt
chevronIconCpt = here.component "chevronIcon" cpt
where
where
...
@@ -295,7 +289,6 @@ type NodeActionsProps = ( nodeType :: GT.NodeType | NodeActionsCommon )
...
@@ -295,7 +289,6 @@ type NodeActionsProps = ( nodeType :: GT.NodeType | NodeActionsCommon )
nodeActions :: R2.Component NodeActionsProps
nodeActions :: R2.Component NodeActionsProps
nodeActions = R.createElement nodeActionsCpt
nodeActions = R.createElement nodeActionsCpt
nodeActionsCpt :: R.Component NodeActionsProps
nodeActionsCpt :: R.Component NodeActionsProps
nodeActionsCpt = here.component "nodeActions" cpt where
nodeActionsCpt = here.component "nodeActions" cpt where
cpt props _ = pure (child props.nodeType) where
cpt props _ = pure (child props.nodeType) where
...
@@ -307,7 +300,6 @@ nodeActionsCpt = here.component "nodeActions" cpt where
...
@@ -307,7 +300,6 @@ nodeActionsCpt = here.component "nodeActions" cpt where
graphNodeActions :: R2.Leaf NodeActionsCommon
graphNodeActions :: R2.Leaf NodeActionsCommon
graphNodeActions props = R.createElement graphNodeActionsCpt props []
graphNodeActions props = R.createElement graphNodeActionsCpt props []
graphNodeActionsCpt :: R.Component NodeActionsCommon
graphNodeActionsCpt :: R.Component NodeActionsCommon
graphNodeActionsCpt = here.component "graphNodeActions" cpt where
graphNodeActionsCpt = here.component "graphNodeActions" cpt where
cpt { id, session, refresh } _ =
cpt { id, session, refresh } _ =
...
@@ -317,7 +309,6 @@ graphNodeActionsCpt = here.component "graphNodeActions" cpt where
...
@@ -317,7 +309,6 @@ graphNodeActionsCpt = here.component "graphNodeActions" cpt where
listNodeActions :: R2.Leaf NodeActionsCommon
listNodeActions :: R2.Leaf NodeActionsCommon
listNodeActions props = R.createElement listNodeActionsCpt props []
listNodeActions props = R.createElement listNodeActionsCpt props []
listNodeActionsCpt :: R.Component NodeActionsCommon
listNodeActionsCpt :: R.Component NodeActionsCommon
listNodeActionsCpt = here.component "listNodeActions" cpt where
listNodeActionsCpt = here.component "listNodeActions" cpt where
cpt { id, session, refresh } _ =
cpt { id, session, refresh } _ =
...
...
src/Gargantext/Components/Forest/Tree/Node/Tools.purs
View file @
dfd1a8db
...
@@ -10,12 +10,11 @@ import Data.Set (Set)
...
@@ -10,12 +10,11 @@ import Data.Set (Set)
import Data.Set as Set
import Data.Set as Set
import Data.String as S
import Data.String as S
import Data.String.CodeUnits as DSCU
import Data.String.CodeUnits as DSCU
import Data.Tuple.Nested ((/\))
import DOM.Simple.Console (log2)
import Effect (Effect)
import Effect (Effect)
import Effect.Aff (Aff, launchAff, launchAff_)
import Effect.Aff (Aff, launchAff, launchAff_)
import Reactix as R
import Reactix as R
import Reactix.DOM.HTML as H
import Reactix.DOM.HTML as H
import Record as Record
import Toestand as T
import Toestand as T
import Gargantext.Components.Forest.Tree.Node.Action (Action, icon, text)
import Gargantext.Components.Forest.Tree.Node.Action (Action, icon, text)
...
@@ -251,7 +250,7 @@ type NodeLinkProps = (
...
@@ -251,7 +250,7 @@ type NodeLinkProps = (
frontends :: Frontends
frontends :: Frontends
, folderOpen :: T.Box Boolean
, folderOpen :: T.Box Boolean
, handed :: GT.Handed
, handed :: GT.Handed
, id ::
Int
, id ::
GT.ID
, isSelected :: Boolean
, isSelected :: Boolean
, name :: GT.Name
, name :: GT.Name
, nodeType :: GT.NodeType
, nodeType :: GT.NodeType
...
@@ -260,12 +259,27 @@ type NodeLinkProps = (
...
@@ -260,12 +259,27 @@ type NodeLinkProps = (
nodeLink :: R2.Component NodeLinkProps
nodeLink :: R2.Component NodeLinkProps
nodeLink = R.createElement nodeLinkCpt
nodeLink = R.createElement nodeLinkCpt
nodeLinkCpt :: R.Component NodeLinkProps
nodeLinkCpt :: R.Component NodeLinkProps
nodeLinkCpt = here.component "nodeLink" cpt
nodeLinkCpt = here.component "nodeLink" cpt
where
cpt props@{ id, nodeType, session } _ = do
case nodeType of
GT.Graph -> useLoader { graphId: id, session } GraphAPI.graphVersions $ \graphVersions ->
nodeLinkGraphLoaded (Record.merge { graphVersions } props) []
_ -> pure $ nodeLinkLoaded props []
type NodeLinkGraphLoadedProps =
( graphVersions :: Record GraphAPI.GraphVersions
| NodeLinkProps )
nodeLinkGraphLoaded :: R2.Component NodeLinkGraphLoadedProps
nodeLinkGraphLoaded = R.createElement nodeLinkGraphLoadedCpt
nodeLinkGraphLoadedCpt :: R.Component NodeLinkGraphLoadedProps
nodeLinkGraphLoadedCpt = here.component "nodeLinkGraphLoaded" cpt
where
where
cpt { folderOpen
cpt { folderOpen
, frontends
, frontends
, graphVersions: { gv_graph }
, handed
, handed
, id
, id
, isSelected
, isSelected
...
@@ -273,31 +287,63 @@ nodeLinkCpt = here.component "nodeLink" cpt
...
@@ -273,31 +287,63 @@ nodeLinkCpt = here.component "nodeLink" cpt
, nodeType
, nodeType
, session
, session
} _ = do
} _ = do
popoverRef <- R.useRef null
let link = case gv_graph of
Nothing -> H.span (linkData id)
Just gv -> H.a (Record.merge { href: nodeLinkHref { frontends, id, nodeType, session } } (linkData id))
pure $
pure $
H.div { className: "node-link"
H.div { className: "node-link"
, on: { click } }
, on: { click
: nodeLinkClick { folderOpen, isSelected }
} }
[
H.a { href, data: { for: tooltipId id, tip: true } }
[
link
[ nodeText { handed, isSelected, name } []
[ nodeText { handed, isSelected, name } []
, ReactTooltip.reactTooltip { effect: "float", id: tooltipId id, type: "dark" }
, nodeLinkTooltip { id, name, nodeType } []
[ R2.row
[ H.h4 {className: GT.fldr nodeType true}
[ H.text $ GT.prettyNodeType nodeType ]
]
, R2.row [ H.span {} [ H.text $ name ]]
]
]
]
]
]
where
type NodeLinkLoadedProps =
-- NOTE Don't toggle tree if it is not selected
(
-- click on closed -> open
| NodeLinkProps )
-- click on open -> ?
click _ = when (not isSelected) (T.write_ true folderOpen)
nodeLinkLoaded :: R2.Component NodeLinkLoadedProps
href = url frontends $ GT.NodePath (sessionId session) nodeType (Just id)
nodeLinkLoaded = R.createElement nodeLinkLoadedCpt
nodeLinkLoadedCpt :: R.Component NodeLinkLoadedProps
nodeLinkLoadedCpt = here.component "nodeLinkLoaded" cpt
where
cpt { folderOpen
, frontends
, handed
, id
, isSelected
, name
, nodeType
, session
} _ = do
pure $
H.div { className: "node-link"
, on: { click: nodeLinkClick { folderOpen, isSelected } } }
[H.a (Record.merge { href: nodeLinkHref { frontends, id, nodeType, session } } (linkData id))
[ nodeText { handed, isSelected, name } []
, nodeLinkTooltip { id, name, nodeType } []
]
]
-- END node link
-- END node link
linkData :: GT.ID -> { data :: { for :: String, tip :: Boolean } }
linkData id = { data: { for: tooltipId id, tip: true } }
nodeLinkClick :: forall e. { folderOpen :: T.Box Boolean
, isSelected :: Boolean } -> e -> Effect Unit
-- NOTE Don't toggle tree if it is not selected
-- click on closed -> open
-- click on open -> ?
nodeLinkClick { folderOpen, isSelected } _ = when (not isSelected) (T.write_ true folderOpen)
nodeLinkHref :: { frontends :: Frontends
, id :: GT.ID
, nodeType :: GT.NodeType
, session :: Session } -> String
nodeLinkHref { frontends, id, nodeType, session } = url frontends $ GT.NodePath (sessionId session) nodeType (Just id)
type NodeTextProps =
type NodeTextProps =
( isSelected :: Boolean
( isSelected :: Boolean
, handed :: GT.Handed
, handed :: GT.Handed
...
@@ -306,7 +352,6 @@ type NodeTextProps =
...
@@ -306,7 +352,6 @@ type NodeTextProps =
nodeText :: R2.Component NodeTextProps
nodeText :: R2.Component NodeTextProps
nodeText = R.createElement nodeTextCpt
nodeText = R.createElement nodeTextCpt
nodeTextCpt :: R.Component NodeTextProps
nodeTextCpt :: R.Component NodeTextProps
nodeTextCpt = here.component "nodeText" cpt where
nodeTextCpt = here.component "nodeText" cpt where
cpt { isSelected, handed, name } _ =
cpt { isSelected, handed, name } _ =
...
@@ -326,3 +371,24 @@ nodeTextCpt = here.component "nodeText" cpt where
...
@@ -326,3 +371,24 @@ nodeTextCpt = here.component "nodeText" cpt where
Just s -> s <> "..."
Just s -> s <> "..."
name15 = name_ 15
name15 = name_ 15
className = "node-text"
className = "node-text"
type NodeLinkTooltipProps =
(
id :: GT.ID
, name :: GT.Name
, nodeType :: GT.NodeType
)
nodeLinkTooltip :: R2.Component NodeLinkTooltipProps
nodeLinkTooltip = R.createElement nodeLinkTooltipCpt
nodeLinkTooltipCpt :: R.Component NodeLinkTooltipProps
nodeLinkTooltipCpt = here.component "nodeLinkTooltip" cpt
where
cpt { id, name, nodeType } _ = do
pure $ ReactTooltip.reactTooltip { effect: "float", id: tooltipId id, type: "dark" }
[ R2.row
[ H.h4 {className: GT.fldr nodeType true}
[ H.text $ GT.prettyNodeType nodeType ]
]
, R2.row [ H.span {} [ H.text $ name ]]
]
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