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
Christian Merten
purescript-gargantext
Commits
12910a76
Commit
12910a76
authored
Apr 16, 2021
by
Przemyslaw Kaminski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[forest] rewrite graph explorer to new forest/sidebar/topbar layout
NOTE: This still doesn't work fully
parent
ee654ac1
Changes
25
Show whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
921 additions
and
683 deletions
+921
-683
Data.purs
src/Gargantext/Components/App/Data.purs
+52
-31
DocsTable.purs
src/Gargantext/Components/DocsTable.purs
+68
-50
GraphExplorer.purs
src/Gargantext/Components/GraphExplorer.purs
+125
-74
Controls.purs
src/Gargantext/Components/GraphExplorer/Controls.purs
+21
-13
Sidebar.purs
src/Gargantext/Components/GraphExplorer/Sidebar.purs
+26
-33
Types.purs
src/Gargantext/Components/GraphExplorer/Sidebar/Types.purs
+66
-0
ToggleButton.purs
src/Gargantext/Components/GraphExplorer/ToggleButton.purs
+12
-11
Types.purs
src/Gargantext/Components/GraphExplorer/Types.purs
+1
-5
NgramsTable.purs
src/Gargantext/Components/NgramsTable.purs
+1
-14
Components.purs
src/Gargantext/Components/NgramsTable/Components.purs
+3
-4
Tabs.purs
src/Gargantext/Components/Nodes/Annuaire/Tabs.purs
+26
-26
User.purs
src/Gargantext/Components/Nodes/Annuaire/User.purs
+29
-11
Contact.purs
src/Gargantext/Components/Nodes/Annuaire/User/Contact.purs
+31
-9
Tabs.purs
...gantext/Components/Nodes/Annuaire/User/Contacts/Tabs.purs
+31
-35
Lists.purs
src/Gargantext/Components/Nodes/Lists.purs
+70
-83
Tabs.purs
src/Gargantext/Components/Nodes/Lists/Tabs.purs
+0
-3
Types.purs
src/Gargantext/Components/Nodes/Lists/Types.purs
+5
-44
Texts.purs
src/Gargantext/Components/Nodes/Texts.purs
+137
-141
Types.purs
src/Gargantext/Components/Nodes/Texts/Types.purs
+12
-1
Router.purs
src/Gargantext/Components/Router.purs
+184
-85
Tab.purs
src/Gargantext/Components/Tab.purs
+2
-2
Table.purs
src/Gargantext/Components/Table.purs
+2
-2
TopBar.purs
src/Gargantext/Components/TopBar.purs
+4
-4
Types.purs
src/Gargantext/Hooks/Sigmax/Types.purs
+4
-1
Types.purs
src/Gargantext/Types.purs
+9
-1
No files found.
src/Gargantext/Components/App/Data.purs
View file @
12910a76
...
@@ -5,16 +5,20 @@ import Data.Maybe (Maybe(..))
...
@@ -5,16 +5,20 @@ import Data.Maybe (Maybe(..))
import Toestand as T
import Toestand as T
import Gargantext.AsyncTasks as GAT
import Gargantext.AsyncTasks as GAT
import Gargantext.Components.GraphExplorer.Sidebar.Types as GEST
import Gargantext.Components.Nodes.Lists.Types as ListsT
import Gargantext.Components.Nodes.Texts.Types as TextsT
import Gargantext.Ends (Backend)
import Gargantext.Ends (Backend)
import Gargantext.Routes (AppRoute(Home))
import Gargantext.Routes (AppRoute(Home))
import Gargantext.Sessions as Sessions
import Gargantext.Sessions as Sessions
import Gargantext.Sessions (OpenNodes, Sessions)
import Gargantext.Sessions (OpenNodes, Sessions)
import Gargantext.Types (Handed(RightHanded))
import Gargantext.Types (Handed(RightHanded)
, SidePanelState(..)
)
import Gargantext.Utils.Toestand as T2
import Gargantext.Utils.Toestand as T2
type App =
type App =
{ backend :: Maybe Backend
{ backend :: Maybe Backend
, forestOpen :: OpenNodes
, forestOpen :: OpenNodes
, graphVersion :: T2.Reload
, handed :: Handed
, handed :: Handed
, reloadForest :: Int
, reloadForest :: Int
, reloadRoot :: Int
, reloadRoot :: Int
...
@@ -22,26 +26,38 @@ type App =
...
@@ -22,26 +26,38 @@ type App =
, sessions :: Sessions
, sessions :: Sessions
, showCorpus :: Boolean
, showCorpus :: Boolean
, showLogin :: Boolean
, showLogin :: Boolean
, showTree :: Boolean
, sidePanelGraph :: Maybe (Record GEST.SidePanel)
, sidePanelLists :: Maybe (Record ListsT.SidePanel)
, sidePanelTexts :: Maybe (Record TextsT.SidePanel)
, sidePanelState :: SidePanelState
, tasks :: GAT.Storage
, tasks :: GAT.Storage
}
}
emptyApp :: App
emptyApp :: App
emptyApp =
emptyApp =
{ backend: Nothing
{ backend : Nothing
, forestOpen: Set.empty
, forestOpen : Set.empty
, handed: RightHanded
, graphVersion : T2.newReload
, reloadForest: T2.newReload
, handed : RightHanded
, reloadRoot: T2.newReload
, reloadForest : T2.newReload
, route: Home
, reloadRoot : T2.newReload
, sessions: Sessions.empty
, route : Home
, showCorpus: false
, sessions : Sessions.empty
, showLogin: false
, showCorpus : false
, tasks: GAT.empty
, showLogin : false
, showTree : true
, sidePanelGraph : GEST.initialSidePanel
, sidePanelLists : ListsT.initialSidePanel
, sidePanelTexts : TextsT.initialSidePanel
, sidePanelState : InitialClosed
, tasks : GAT.empty
}
}
type Boxes =
type Boxes =
{ backend :: T.Box (Maybe Backend)
{ backend :: T.Box (Maybe Backend)
, forestOpen :: T.Box OpenNodes
, forestOpen :: T.Box OpenNodes
, graphVersion :: T2.ReloadS
, handed :: T.Box Handed
, handed :: T.Box Handed
, reloadForest :: T.Box T2.Reload
, reloadForest :: T.Box T2.Reload
, reloadRoot :: T.Box T2.Reload
, reloadRoot :: T.Box T2.Reload
...
@@ -49,5 +65,10 @@ type Boxes =
...
@@ -49,5 +65,10 @@ type Boxes =
, sessions :: T.Box Sessions
, sessions :: T.Box Sessions
, showCorpus :: T.Box Boolean
, showCorpus :: T.Box Boolean
, showLogin :: T.Box Boolean
, showLogin :: T.Box Boolean
, showTree :: T.Box Boolean
, sidePanelGraph :: T.Box (Maybe (Record GEST.SidePanel))
, sidePanelLists :: T.Box (Maybe (Record ListsT.SidePanel))
, sidePanelTexts :: T.Box (Maybe (Record TextsT.SidePanel))
, sidePanelState :: T.Box SidePanelState
, tasks :: T.Box GAT.Storage
, tasks :: T.Box GAT.Storage
}
}
src/Gargantext/Components/DocsTable.purs
View file @
12910a76
...
@@ -15,11 +15,11 @@ import Data.Set (Set)
...
@@ -15,11 +15,11 @@ import Data.Set (Set)
import Data.Set as Set
import Data.Set as Set
import Data.String as Str
import Data.String as Str
import Data.Symbol (SProxy(..))
import Data.Symbol (SProxy(..))
import Data.Tuple (Tuple(..)
, fst
)
import Data.Tuple (Tuple(..))
import D
ata.Tuple.Nested ((/\)
)
import D
OM.Simple.Console (log2
)
import DOM.Simple.Event as DE
import DOM.Simple.Event as DE
import Effect (Effect)
import Effect (Effect)
import Effect.Aff (Aff)
import Effect.Aff (Aff
, launchAff_
)
import Effect.Class (liftEffect)
import Effect.Class (liftEffect)
import Reactix as R
import Reactix as R
import Reactix.DOM.HTML as H
import Reactix.DOM.HTML as H
...
@@ -31,14 +31,14 @@ import Gargantext.Components.DocsTable.Types
...
@@ -31,14 +31,14 @@ import Gargantext.Components.DocsTable.Types
( DocumentsView(..), Hyperdata(..), LocalUserScore, Query, Response(..), sampleData )
( DocumentsView(..), Hyperdata(..), LocalUserScore, Query, Response(..), sampleData )
import Gargantext.Components.Table.Types as TT
import Gargantext.Components.Table.Types as TT
import Gargantext.Components.Nodes.Lists.Types as NT
import Gargantext.Components.Nodes.Lists.Types as NT
import Gargantext.Components.Nodes.Texts.Types
(SidePanelTriggers)
import Gargantext.Components.Nodes.Texts.Types
as TextsT
import Gargantext.Components.Table as TT
import Gargantext.Components.Table as TT
import Gargantext.Ends (Frontends, url)
import Gargantext.Ends (Frontends, url)
import Gargantext.Hooks.Loader (useLoader, useLoaderWithCacheAPI, HashedResponse(..))
import Gargantext.Hooks.Loader (useLoader, useLoaderWithCacheAPI, HashedResponse(..))
import Gargantext.Routes as Routes
import Gargantext.Routes as Routes
import Gargantext.Routes (SessionRoute(NodeAPI))
import Gargantext.Routes (SessionRoute(NodeAPI))
import Gargantext.Sessions (Session, sessionId, get, delete)
import Gargantext.Sessions (Session, sessionId, get, delete)
import Gargantext.Types (ListId, NodeID, NodeType(..), OrderBy(..), TableResult, TabSubType, TabType, showTabType')
import Gargantext.Types (ListId, NodeID, NodeType(..), OrderBy(..),
SidePanelState(..),
TableResult, TabSubType, TabType, showTabType')
import Gargantext.Utils (sortWith)
import Gargantext.Utils (sortWith)
import Gargantext.Utils.CacheAPI as GUC
import Gargantext.Utils.CacheAPI as GUC
import Gargantext.Utils.QueryString (joinQueryStrings, mQueryParamS, queryParam, queryParamS)
import Gargantext.Utils.QueryString (joinQueryStrings, mQueryParamS, queryParam, queryParamS)
...
@@ -58,36 +58,35 @@ type Path a =
...
@@ -58,36 +58,35 @@ type Path a =
, tabType :: TabSubType a
, tabType :: TabSubType a
)
)
type
Layout
Props =
type
Common
Props =
( cacheState :: T.Box NT.CacheState
( cacheState :: T.Box NT.CacheState
, frontends :: Frontends
, frontends :: Frontends
, chart :: R.Element
, listId :: Int
, listId :: Int
, mCorpusId :: Maybe Int
, mCorpusId :: Maybe Int
, nodeId :: Int
, nodeId :: Int
-- , path :: Record (Path a)
, session :: Session
, session :: Session
, s
howSearch :: Boolean
, s
idePanel :: T.Box (Maybe (Record TextsT.SidePanel))
, sidePanel
Triggers :: Record SidePanelTriggers
, sidePanel
State :: T.Box SidePanelState
, tabType :: TabType
, tabType :: TabType
-- ^ tabType is not ideal here since it is too much entangled with tabs and
-- ^ tabType is not ideal here since it is too much entangled with tabs and
-- ngramtable. Let's see how this evolves. )
-- ngramtable. Let's see how this evolves. )
, totalRecords :: Int
, totalRecords :: Int
)
)
type LayoutProps =
(
chart :: R.Element
, showSearch :: Boolean
| CommonProps
-- , path :: Record (Path a)
)
type PageLayoutProps =
type PageLayoutProps =
( cacheState :: T.Box NT.CacheState
(
, frontends :: Frontends
key :: String -- NOTE Necessary to clear the component when cache state changes
, key :: String -- NOTE Necessary to clear the component when cache state changes
, listId :: Int
, mCorpusId :: Maybe Int
, nodeId :: Int
, params :: TT.Params
, params :: TT.Params
, query :: Query
, query :: Query
, session :: Session
| CommonProps
, sidePanelTriggers :: Record SidePanelTriggers
, tabType :: TabType
, totalRecords :: Int
)
)
_documentIdsDeleted = prop (SProxy :: SProxy "documentIdsDeleted")
_documentIdsDeleted = prop (SProxy :: SProxy "documentIdsDeleted")
...
@@ -123,7 +122,8 @@ docViewCpt = here.component "docView" cpt where
...
@@ -123,7 +122,8 @@ docViewCpt = here.component "docView" cpt where
, nodeId
, nodeId
, session
, session
, showSearch
, showSearch
, sidePanelTriggers
, sidePanel
, sidePanelState
, tabType
, tabType
, totalRecords
, totalRecords
}
}
...
@@ -147,7 +147,8 @@ docViewCpt = here.component "docView" cpt where
...
@@ -147,7 +147,8 @@ docViewCpt = here.component "docView" cpt where
, params
, params
, query: query'
, query: query'
, session
, session
, sidePanelTriggers
, sidePanel
, sidePanelState
, tabType
, tabType
, totalRecords
, totalRecords
} ] ] ]
} ] ] ]
...
@@ -259,7 +260,7 @@ pageLayoutCpt = here.component "pageLayout" cpt where
...
@@ -259,7 +260,7 @@ pageLayoutCpt = here.component "pageLayout" cpt where
, params
, params
, query
, query
, session
, session
, sidePanel
Triggers
, sidePanel
, tabType } _ = do
, tabType } _ = do
cacheState' <- T.useLive T.unequal cacheState
cacheState' <- T.useLive T.unequal cacheState
...
@@ -373,7 +374,8 @@ pagePaintRawCpt = here.component "pagePaintRawCpt" cpt where
...
@@ -373,7 +374,8 @@ pagePaintRawCpt = here.component "pagePaintRawCpt" cpt where
, mCorpusId
, mCorpusId
, nodeId
, nodeId
, session
, session
, sidePanelTriggers: sidePanelTriggers@{ currentDocIdRef }
, sidePanel
, sidePanelState
, totalRecords }
, totalRecords }
, localCategories
, localCategories
, params } _ = do
, params } _ = do
...
@@ -381,13 +383,15 @@ pagePaintRawCpt = here.component "pagePaintRawCpt" cpt where
...
@@ -381,13 +383,15 @@ pagePaintRawCpt = here.component "pagePaintRawCpt" cpt where
reload <- T.useBox T2.newReload
reload <- T.useBox T2.newReload
localCategories' <- T.useLive T.unequal localCategories
localCategories' <- T.useLive T.unequal localCategories
sidePanel' <- T.useLive T.unequal sidePanel
let mCurrentDocId = maybe Nothing (_.mCurrentDocId) sidePanel'
pure $ TT.table
pure $ TT.table
{ syncResetButton : [ H.div {} [] ]
{ colNames
, colNames
, container: TT.defaultContainer { title: "Documents" }
, container: TT.defaultContainer { title: "Documents" }
, params
, params
, rows: rows reload localCategories'
, rows: rows reload localCategories' mCurrentDocId
, syncResetButton : [ H.div {} [] ]
, totalRecords
, totalRecords
, wrapColElts
, wrapColElts
}
}
...
@@ -403,13 +407,19 @@ pagePaintRawCpt = here.component "pagePaintRawCpt" cpt where
...
@@ -403,13 +407,19 @@ pagePaintRawCpt = here.component "pagePaintRawCpt" cpt where
| otherwise = Routes.Document sid listId
| otherwise = Routes.Document sid listId
colNames = TT.ColumnName <$> [ "Show", "Tag", "Date", "Title", "Source", "Score" ]
colNames = TT.ColumnName <$> [ "Show", "Tag", "Date", "Title", "Source", "Score" ]
wrapColElts = const identity
wrapColElts = const identity
rows reload localCategories' = row <$> A.toUnfoldable documents
rows reload localCategories'
mCurrentDocId
= row <$> A.toUnfoldable documents
where
where
row dv@(DocumentsView r@{ _id, category }) =
row dv@(DocumentsView r@{ _id, category }) =
{ row:
{ row:
TT.makeRow [ -- H.div {} [ H.a { className, style, on: {click: click Favorite} } [] ]
TT.makeRow [ -- H.div {} [ H.a { className, style, on: {click: click Favorite} } [] ]
H.div { className: "" }
H.div { className: "" }
[ docChooser { listId, mCorpusId, nodeId: r._id, selected, sidePanelTriggers, tableReload: reload } []
[ docChooser { listId
, mCorpusId
, nodeId: r._id
, selected
, sidePanel
, sidePanelState
, tableReload: reload } []
]
]
--, H.div { className: "column-tag flex" } [ caroussel { category: cat, nodeId, row: dv, session, setLocalCategories } [] ]
--, H.div { className: "column-tag flex" } [ caroussel { category: cat, nodeId, row: dv, session, setLocalCategories } [] ]
, H.div { className: "column-tag flex" }
, H.div { className: "column-tag flex" }
...
@@ -434,14 +444,15 @@ pagePaintRawCpt = here.component "pagePaintRawCpt" cpt where
...
@@ -434,14 +444,15 @@ pagePaintRawCpt = here.component "pagePaintRawCpt" cpt where
-- checked = Star_1 == cat
-- checked = Star_1 == cat
tClassName = trashClassName cat selected
tClassName = trashClassName cat selected
className = gi cat
className = gi cat
selected
= R.readRef currentDocIdRef
== Just r._id
selected
= mCurrentDocId
== Just r._id
type DocChooser = (
type DocChooser = (
listId :: ListId
listId :: ListId
, mCorpusId :: Maybe NodeID
, mCorpusId :: Maybe NodeID
, nodeId :: NodeID
, nodeId :: NodeID
, selected :: Boolean
, selected :: Boolean
, sidePanelTriggers :: Record SidePanelTriggers
, sidePanel :: T.Box (Maybe (Record TextsT.SidePanel))
, sidePanelState :: T.Box SidePanelState
, tableReload :: T2.ReloadS
, tableReload :: T2.ReloadS
)
)
...
@@ -458,7 +469,8 @@ docChooserCpt = here.component "docChooser" cpt
...
@@ -458,7 +469,8 @@ docChooserCpt = here.component "docChooser" cpt
, mCorpusId: Just corpusId
, mCorpusId: Just corpusId
, nodeId
, nodeId
, selected
, selected
, sidePanelTriggers: { triggerAnnotatedDocIdChange }
, sidePanel
, sidePanelState
, tableReload } _ = do
, tableReload } _ = do
let eyeClass = if selected then "fa-eye" else "fa-eye-slash"
let eyeClass = if selected then "fa-eye" else "fa-eye-slash"
...
@@ -472,8 +484,14 @@ docChooserCpt = here.component "docChooser" cpt
...
@@ -472,8 +484,14 @@ docChooserCpt = here.component "docChooser" cpt
-- log2 "[docChooser] onClick, listId" listId
-- log2 "[docChooser] onClick, listId" listId
-- log2 "[docChooser] onClick, corpusId" corpusId
-- log2 "[docChooser] onClick, corpusId" corpusId
-- log2 "[docChooser] onClick, nodeId" nodeId
-- log2 "[docChooser] onClick, nodeId" nodeId
R2.callTrigger triggerAnnotatedDocIdChange { corpusId, listId, nodeId }
-- R2.callTrigger triggerAnnotatedDocIdChange { corpusId, listId, nodeId }
T2.reload tableReload
-- T2.reload tableReload
T.write_ (Just { corpusId: corpusId
, listId: listId
, mCurrentDocId: Nothing
, nodeId: nodeId }) sidePanel
T.write_ Opened sidePanelState
log2 "[docChooser] sidePanel opened" sidePanelState
newtype SearchQuery = SearchQuery {
newtype SearchQuery = SearchQuery {
...
...
src/Gargantext/Components/GraphExplorer.purs
View file @
12910a76
...
@@ -14,20 +14,14 @@ import Data.Set as Set
...
@@ -14,20 +14,14 @@ import Data.Set as Set
import Data.Tuple (Tuple(..))
import Data.Tuple (Tuple(..))
import Data.Tuple.Nested ((/\))
import Data.Tuple.Nested ((/\))
import Effect.Aff (Aff)
import Effect.Aff (Aff)
import Math (log)
import Partial.Unsafe (unsafePartial)
import Reactix as R
import Reactix.DOM.HTML as RH
import Record as Record
import Record.Extra as RX
import Toestand as T
import Gargantext.AsyncTasks as GAT
import Gargantext.AsyncTasks as GAT
import Gargantext.Components.App.Data (Boxes)
import Gargantext.Components.Forest (forest)
import Gargantext.Components.Forest (forest)
import Gargantext.Components.Graph as Graph
import Gargantext.Components.Graph as Graph
import Gargantext.Components.GraphExplorer.Controls as Controls
import Gargantext.Components.GraphExplorer.Controls as Controls
import Gargantext.Components.GraphExplorer.Search (nodeSearchControl)
import Gargantext.Components.GraphExplorer.Search (nodeSearchControl)
import Gargantext.Components.GraphExplorer.Sidebar as Sidebar
import Gargantext.Components.GraphExplorer.Sidebar as Sidebar
import Gargantext.Components.GraphExplorer.Sidebar.Types as GEST
import Gargantext.Components.GraphExplorer.ToggleButton as Toggle
import Gargantext.Components.GraphExplorer.ToggleButton as Toggle
import Gargantext.Components.GraphExplorer.Types as GET
import Gargantext.Components.GraphExplorer.Types as GET
import Gargantext.Data.Louvain as Louvain
import Gargantext.Data.Louvain as Louvain
...
@@ -41,32 +35,40 @@ import Gargantext.Types as Types
...
@@ -41,32 +35,40 @@ import Gargantext.Types as Types
import Gargantext.Utils.Range as Range
import Gargantext.Utils.Range as Range
import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Toestand as T2
import Gargantext.Utils.Toestand as T2
import Math (log)
import Partial.Unsafe (unsafePartial)
import Reactix as R
import Reactix.DOM.HTML as RH
import Record as Record
import Record.Extra as RX
import Toestand as T
here :: R2.Here
here :: R2.Here
here = R2.here "Gargantext.Components.GraphExplorer"
here = R2.here "Gargantext.Components.GraphExplorer"
type BaseProps =
type BaseProps =
( backend :: T.Box (Maybe Backend)
( backend :: T.Box (Maybe Backend)
, boxes :: Boxes
, frontends :: Frontends
, frontends :: Frontends
, graphId :: GET.GraphId
, graphId :: GET.GraphId
, handed :: T.Box Types.Handed
, handed :: T.Box Types.Handed
, mMetaData' :: Maybe GET.MetaData
, route :: T.Box AppRoute
, route :: T.Box AppRoute
, sessions :: T.Box Sessions
, sessions :: T.Box Sessions
, showLogin :: T.Box Boolean
, showLogin :: T.Box Boolean
, sidePanelState :: T.Box Types.SidePanelState
, tasks :: T.Box GAT.Storage
, tasks :: T.Box GAT.Storage
)
)
type LayoutLoaderProps = ( session :: R.Context Session | BaseProps )
type LayoutLoaderProps = ( session :: R.Context Session | BaseProps )
type LayoutProps =
type LayoutProps =
( graphVersion :: T2.ReloadS
( session :: Session
, session :: Session
| BaseProps )
| BaseProps )
type Props =
type Props =
( graph :: SigmaxT.SGraph
( graph :: SigmaxT.SGraph
, hyperdataGraph :: GET.HyperdataGraph
, hyperdataGraph :: GET.HyperdataGraph
, mMetaData :: Maybe GET.MetaData
| LayoutProps
| LayoutProps
)
)
...
@@ -77,10 +79,9 @@ explorerLayoutLoader = R.createElement explorerLayoutLoaderCpt
...
@@ -77,10 +79,9 @@ explorerLayoutLoader = R.createElement explorerLayoutLoaderCpt
explorerLayoutLoaderCpt :: R.Component LayoutLoaderProps
explorerLayoutLoaderCpt :: R.Component LayoutLoaderProps
explorerLayoutLoaderCpt = here.component "explorerLayoutLoader" cpt where
explorerLayoutLoaderCpt = here.component "explorerLayoutLoader" cpt where
cpt props _ = do
cpt props _ = do
graphVersion <- T.useBox T2.newReload
session <- R.useContext props.session -- TODO: ugh, props fiddling
session <- R.useContext props.session -- todo: ugh, props fiddling
let base = RX.pick props :: Record BaseProps
let base = RX.pick props :: Record BaseProps
let props' = Record.merge base {
graphVersion,
session }
let props' = Record.merge base { session }
pure $ explorerLayout props' []
pure $ explorerLayout props' []
explorerLayout :: R2.Component LayoutProps
explorerLayout :: R2.Component LayoutProps
...
@@ -88,16 +89,16 @@ explorerLayout = R.createElement explorerLayoutCpt
...
@@ -88,16 +89,16 @@ explorerLayout = R.createElement explorerLayoutCpt
explorerLayoutCpt :: R.Component LayoutProps
explorerLayoutCpt :: R.Component LayoutProps
explorerLayoutCpt = here.component "explorerLayout" cpt where
explorerLayoutCpt = here.component "explorerLayout" cpt where
cpt props@{ backend,
graphId, graphVersion
, session } _ = do
cpt props@{ backend,
boxes: { graphVersion }, graphId
, session } _ = do
graphVersion' <- T.useLive T.unequal graphVersion
graphVersion' <- T.useLive T.unequal graphVersion
useLoader graphId (getNodes session graphVersion') handler
useLoader graphId (getNodes session graphVersion') handler
where
where
handler loaded = explorer (Record.merge props { graph, hyperdataGraph: loaded, mMetaData }) []
handler loaded = explorer (Record.merge props { graph, hyperdataGraph: loaded, mMetaData
'
}) []
-- explorer (Record.merge props { graph, graphVersion, hyperdataGraph: loaded, mMetaData })
-- explorer (Record.merge props { graph, graphVersion, hyperdataGraph: loaded, mMetaData })
where
where
GET.HyperdataGraph { graph: hyperdataGraph } = loaded
GET.HyperdataGraph { graph: hyperdataGraph } = loaded
Tuple mMetaData graph = convert hyperdataGraph
Tuple mMetaData
'
graph = convert hyperdataGraph
--------------------------------------------------------------
--------------------------------------------------------------
explorer :: R2.Component Props
explorer :: R2.Component Props
...
@@ -107,24 +108,27 @@ explorerCpt :: R.Component Props
...
@@ -107,24 +108,27 @@ explorerCpt :: R.Component Props
explorerCpt = here.component "explorer" cpt
explorerCpt = here.component "explorer" cpt
where
where
cpt props@{ backend
cpt props@{ backend
, boxes: boxes@{ graphVersion, sidePanelGraph }
, frontends
, frontends
, graph
, graph
, graphId
, graphId
, graphVersion
, handed
, handed
, hyperdataGraph
, hyperdataGraph
, mMetaData
, mMetaData
'
, route
, route
, session
, session
, sessions
, sessions
, showLogin
, showLogin
, sidePanelState
, tasks
, tasks
} _ = do
} _ = do
handed' <- T.useLive T.unequal handed
handed' <- T.useLive T.unequal handed
graphVersion' <- T.useLive T.unequal graphVersion
graphVersion' <- T.useLive T.unequal graphVersion
graphVersionRef <- R.useRef graphVersion'
graphVersionRef <- R.useRef graphVersion'
sidePanel <- T.useLive T.unequal sidePanelGraph
-- sideTab <- T.useBox GET.SideTabLegend
let startForceAtlas = maybe true (\(GET.MetaData { startForceAtlas: sfa }) -> sfa) mMetaData
let startForceAtlas = maybe true (\(GET.MetaData { startForceAtlas: sfa }) -> sfa) mMetaData
'
let forceAtlasS = if startForceAtlas
let forceAtlasS = if startForceAtlas
then SigmaxT.InitialRunning
then SigmaxT.InitialRunning
...
@@ -139,10 +143,17 @@ explorerCpt = here.component "explorer" cpt
...
@@ -139,10 +143,17 @@ explorerCpt = here.component "explorer" cpt
, hyperdataGraph
, hyperdataGraph
, reloadForest: \_ -> T2.reload reloadForest
, reloadForest: \_ -> T2.reload reloadForest
, session
, session
, sidePanel: sidePanelGraph
, sidePanelState
}
}
multiSelectEnabled' <- T.useLive T.unequal controls.multiSelectEnabled
multiSelectEnabled' <- T.useLive T.unequal controls.multiSelectEnabled
showTree' <- T.useLive T.unequal controls.showTree
showTree' <- T.useLive T.unequal controls.showTree
multiSelectEnabledRef <- R.useRef multiSelectEnabled'
multiSelectEnabledRef <- R.useRef multiSelectEnabled'
sidePanel@{ mGraph, mMetaData, sideTab } <- GEST.focusedSidePanel sidePanelGraph
R.useEffectOnce' $ do
T.write_ (Just graph) mGraph
T.write_ mMetaData' mMetaData
forestOpen <- T.useBox $ Set.empty
forestOpen <- T.useBox $ Set.empty
R.useEffectOnce' $ do
R.useEffectOnce' $ do
...
@@ -166,22 +177,14 @@ explorerCpt = here.component "explorer" cpt
...
@@ -166,22 +177,14 @@ explorerCpt = here.component "explorer" cpt
T.write_ SigmaxT.EShow controls.showEdges
T.write_ SigmaxT.EShow controls.showEdges
T.write_ forceAtlasS controls.forceAtlasState
T.write_ forceAtlasS controls.forceAtlasState
T.write_ Graph.Init controls.graphStage
T.write_ Graph.Init controls.graphStage
T.write_
GET.InitialClosed controls.showSidePanel
T.write_
Types.InitialClosed controls.sidePanelState
pure $
pure $
RH.div { className: "graph-meta-container" } [
RH.div { className: "graph-meta-container" } [
RH.div { className: "fixed-top navbar navbar-expand-lg"
-- RH.div { className: "fixed-top navbar navbar-expand-lg"
, id: "graph-explorer" }
-- , id: "graph-explorer" }
[ rowToggle
-- [ topBar { controls, graph } [] ]
[ col [ spaces [ Toggle.treeToggleButton { state: controls.showTree } [] ]]
RH.div { className: "graph-container" } [
, col [ spaces [ Toggle.controlsToggleButton { state: controls.showControls } [] ]]
, col [ spaces [ Toggle.sidebarToggleButton { state: controls.showSidePanel } [] ]]
, col [ spaces [ nodeSearchControl { graph
, multiSelectEnabled: controls.multiSelectEnabled
, selectedNodeIds: controls.selectedNodeIds } [] ] ]
]
]
, RH.div { className: "graph-container" } [
inner handed' [
inner handed' [
rowControls [ Controls.controls controls ]
rowControls [ Controls.controls controls ]
, RH.div { className: "row graph-row" } $ mainLayout handed' $
, RH.div { className: "row graph-row" } $ mainLayout handed' $
...
@@ -207,18 +210,17 @@ explorerCpt = here.component "explorer" cpt
...
@@ -207,18 +210,17 @@ explorerCpt = here.component "explorer" cpt
, hyperdataGraph
, hyperdataGraph
, mMetaData
, mMetaData
, multiSelectEnabledRef
, multiSelectEnabledRef
}
}
[]
/\
/\
mSidebar
mMetaData
{ frontends
mSidebar
(Record.merge sidePanel
{ frontends
, graph
, graph
, graphId
, graphId
, graphVersion
, graphVersion
, reloadForest
, removedNodeIds : controls.removedNodeIds
, removedNodeIds : controls.removedNodeIds
, session
, session
, selectedNodeIds: controls.selectedNodeIds
, sideTab
, showSidePanel : controls.showSidePanel
}) []
, reloadForest
}
]
]
]
]
]
]
...
@@ -232,15 +234,9 @@ explorerCpt = here.component "explorer" cpt
...
@@ -232,15 +234,9 @@ explorerCpt = here.component "explorer" cpt
hClass = case h of
hClass = case h of
Types.LeftHanded -> "lefthanded"
Types.LeftHanded -> "lefthanded"
Types.RightHanded -> "righthanded"
Types.RightHanded -> "righthanded"
-- rowToggle = RH.div { id: "toggle-container" }
rowToggle = RH.ul { className: "navbar-nav ml-auto mr-auto" }
rowControls = RH.div { id: "controls-container" }
rowControls = RH.div { id: "controls-container" }
-- col = RH.div { className: "col-md-4" }
col = RH.li { className: "nav-item" }
pullLeft = RH.div { className: "pull-left" }
pullLeft = RH.div { className: "pull-left" }
pullRight = RH.div { className: "pull-right" }
pullRight = RH.div { className: "pull-right" }
-- spaces = RH.div { className: "flex-space-between" }
spaces = RH.a { className: "nav-link" }
tree :: Record TreeProps -> R.Element
tree :: Record TreeProps -> R.Element
...
@@ -259,12 +255,66 @@ explorerCpt = here.component "explorer" cpt
...
@@ -259,12 +255,66 @@ explorerCpt = here.component "explorer" cpt
, tasks } []
, tasks } []
]
]
mSidebar :: Maybe GET.MetaData
type MSideBar =
-> Record MSidebarProps
(
-> R.Element
mGraph :: T.Box (Maybe SigmaxT.SGraph)
mSidebar Nothing _ = RH.div {} []
, mMetaData :: T.Box (Maybe GET.MetaData)
mSidebar (Just metaData) props =
, multiSelectEnabled :: T.Box Boolean
Sidebar.sidebar (Record.merge props { metaData })
-- , selectedNodeIds :: T.Box SigmaxT.NodeIds
, showControls :: T.Box Boolean
| MSidebarProps
)
mSidebar :: R2.Component MSideBar
mSidebar = R.createElement mSidebarCpt
mSidebarCpt :: R.Component MSideBar
mSidebarCpt = here.component "mSidebar" cpt where
cpt props@{ mMetaData } _ = do
mMetaData' <- T.useLive T.unequal mMetaData
case mMetaData' of
Nothing -> pure $ RH.div {} []
Just metaData -> do
pure $ Sidebar.sidebar (Record.merge (RX.pick props :: Record MSidebarProps) { metaData }) []
type TopBar =
(
boxes :: Boxes
)
topBar :: R2.Component TopBar
topBar = R.createElement topBarCpt
topBarCpt :: R.Component TopBar
topBarCpt = here.component "topBar" cpt where
cpt { boxes: { showTree
, sidePanelGraph
, sidePanelState } } _ = do
sidePanelGraph' <- T.useLive T.unequal sidePanelGraph
let mGraph = maybe Nothing (_.mGraph) sidePanelGraph'
{ multiSelectEnabled, selectedNodeIds, showControls } <- GEST.focusedSidePanel sidePanelGraph
let search = case mGraph of
Just graph -> nodeSearchControl { graph
, multiSelectEnabled
, selectedNodeIds } []
Nothing -> RH.div {} []
pure $ rowToggle
[ col [ spaces [ Toggle.treeToggleButton { state: showTree } [] ]]
, col [ spaces [ Toggle.controlsToggleButton { state: showControls } [] ]]
, col [ spaces [ Toggle.sidebarToggleButton { state: sidePanelState } [] ]]
, col [ spaces [ search ] ]
]
where
-- rowToggle = RH.div { id: "toggle-container" }
rowToggle = RH.ul { className: "navbar-nav ml-auto mr-auto" }
-- col = RH.div { className: "col-md-4" }
col = RH.li { className: "nav-item" }
-- spaces = RH.div { className: "flex-space-between" }
spaces = RH.a { className: "nav-link" }
type TreeProps = (
type TreeProps = (
backend :: T.Box (Maybe Backend)
backend :: T.Box (Maybe Backend)
...
@@ -289,7 +339,7 @@ type MSidebarProps =
...
@@ -289,7 +339,7 @@ type MSidebarProps =
, removedNodeIds :: T.Box SigmaxT.NodeIds
, removedNodeIds :: T.Box SigmaxT.NodeIds
, selectedNodeIds :: T.Box SigmaxT.NodeIds
, selectedNodeIds :: T.Box SigmaxT.NodeIds
, session :: Session
, session :: Session
, s
howSidePanel :: T.Box GET.SidePanelState
, s
ideTab :: T.Box GET.SideTab
)
)
type GraphProps = (
type GraphProps = (
...
@@ -298,13 +348,13 @@ type GraphProps = (
...
@@ -298,13 +348,13 @@ type GraphProps = (
, graphId :: GET.GraphId
, graphId :: GET.GraphId
, graph :: SigmaxT.SGraph
, graph :: SigmaxT.SGraph
, hyperdataGraph :: GET.HyperdataGraph
, hyperdataGraph :: GET.HyperdataGraph
, mMetaData ::
Maybe GET.MetaData
, mMetaData ::
T.Box (Maybe GET.MetaData)
, multiSelectEnabledRef :: R.Ref Boolean
, multiSelectEnabledRef :: R.Ref Boolean
)
)
graphView :: R
ecord GraphProps -> R.Element
graphView :: R
2.Component GraphProps
--graphView sigmaRef props = R.createElement (R.memo el memoCmp) props []
--graphView sigmaRef props = R.createElement (R.memo el memoCmp) props []
graphView
props = R.createElement graphViewCpt props []
graphView
= R.createElement graphViewCpt
graphViewCpt :: R.Component GraphProps
graphViewCpt :: R.Component GraphProps
graphViewCpt = here.component "graphView" cpt
graphViewCpt = here.component "graphView" cpt
...
@@ -318,6 +368,7 @@ graphViewCpt = here.component "graphView" cpt
...
@@ -318,6 +368,7 @@ graphViewCpt = here.component "graphView" cpt
, multiSelectEnabledRef } _children = do
, multiSelectEnabledRef } _children = do
edgeConfluence' <- T.useLive T.unequal controls.edgeConfluence
edgeConfluence' <- T.useLive T.unequal controls.edgeConfluence
edgeWeight' <- T.useLive T.unequal controls.edgeWeight
edgeWeight' <- T.useLive T.unequal controls.edgeWeight
mMetaData' <- T.useLive T.unequal mMetaData
multiSelectEnabled' <- T.useLive T.unequal controls.multiSelectEnabled
multiSelectEnabled' <- T.useLive T.unequal controls.multiSelectEnabled
nodeSize' <- T.useLive T.unequal controls.nodeSize
nodeSize' <- T.useLive T.unequal controls.nodeSize
removedNodeIds' <- T.useLive T.unequal controls.removedNodeIds
removedNodeIds' <- T.useLive T.unequal controls.removedNodeIds
...
@@ -339,7 +390,7 @@ graphViewCpt = here.component "graphView" cpt
...
@@ -339,7 +390,7 @@ graphViewCpt = here.component "graphView" cpt
, removedNodeIds'
, removedNodeIds'
, selectedNodeIds'
, selectedNodeIds'
, showEdges' }
, showEdges' }
let startForceAtlas = maybe true (\(GET.MetaData { startForceAtlas: sfa }) -> sfa) mMetaData
let startForceAtlas = maybe true (\(GET.MetaData { startForceAtlas: sfa }) -> sfa) mMetaData
'
R.useEffect1' multiSelectEnabled' $ do
R.useEffect1' multiSelectEnabled' $ do
R.setRef multiSelectEnabledRef multiSelectEnabled'
R.setRef multiSelectEnabledRef multiSelectEnabled'
...
...
src/Gargantext/Components/GraphExplorer/Controls.purs
View file @
12910a76
...
@@ -24,10 +24,12 @@ import Gargantext.Components.GraphExplorer.Button (centerButton, cameraButton)
...
@@ -24,10 +24,12 @@ import Gargantext.Components.GraphExplorer.Button (centerButton, cameraButton)
import Gargantext.Components.GraphExplorer.RangeControl (edgeConfluenceControl, edgeWeightControl, nodeSizeControl)
import Gargantext.Components.GraphExplorer.RangeControl (edgeConfluenceControl, edgeWeightControl, nodeSizeControl)
import Gargantext.Components.GraphExplorer.SlideButton (labelSizeButton, mouseSelectorSizeButton)
import Gargantext.Components.GraphExplorer.SlideButton (labelSizeButton, mouseSelectorSizeButton)
import Gargantext.Components.GraphExplorer.ToggleButton (multiSelectEnabledButton, edgesToggleButton, louvainToggleButton, pauseForceAtlasButton)
import Gargantext.Components.GraphExplorer.ToggleButton (multiSelectEnabledButton, edgesToggleButton, louvainToggleButton, pauseForceAtlasButton)
import Gargantext.Components.GraphExplorer.Sidebar.Types as GEST
import Gargantext.Components.GraphExplorer.Types as GET
import Gargantext.Components.GraphExplorer.Types as GET
import Gargantext.Hooks.Sigmax as Sigmax
import Gargantext.Hooks.Sigmax as Sigmax
import Gargantext.Hooks.Sigmax.Types as SigmaxT
import Gargantext.Hooks.Sigmax.Types as SigmaxT
import Gargantext.Sessions (Session)
import Gargantext.Sessions (Session)
import Gargantext.Types as GT
import Gargantext.Utils.Range as Range
import Gargantext.Utils.Range as Range
import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Reactix as R2
...
@@ -51,7 +53,7 @@ type Controls =
...
@@ -51,7 +53,7 @@ type Controls =
, showControls :: T.Box Boolean
, showControls :: T.Box Boolean
, showEdges :: T.Box SigmaxT.ShowEdgesState
, showEdges :: T.Box SigmaxT.ShowEdgesState
, showLouvain :: T.Box Boolean
, showLouvain :: T.Box Boolean
, s
howSidePanel :: T.Box GE
T.SidePanelState
, s
idePanelState :: T.Box G
T.SidePanelState
, showTree :: T.Box Boolean
, showTree :: T.Box Boolean
, sigmaRef :: R.Ref Sigmax.Sigma
, sigmaRef :: R.Ref Sigmax.Sigma
)
)
...
@@ -85,14 +87,14 @@ controlsCpt = here.component "controls" cpt
...
@@ -85,14 +87,14 @@ controlsCpt = here.component "controls" cpt
, showControls
, showControls
, showEdges
, showEdges
, showLouvain
, showLouvain
, showSidePanel
, showTree
, showTree
, sidePanelState
, sigmaRef } _ = do
, sigmaRef } _ = do
forceAtlasState' <- T.useLive T.unequal forceAtlasState
forceAtlasState' <- T.useLive T.unequal forceAtlasState
graphStage' <- T.useLive T.unequal graphStage
graphStage' <- T.useLive T.unequal graphStage
selectedNodeIds' <- T.useLive T.unequal selectedNodeIds
selectedNodeIds' <- T.useLive T.unequal selectedNodeIds
showControls' <- T.useLive T.unequal showControls
showControls' <- T.useLive T.unequal showControls
s
howSidePanel' <- T.useLive T.unequal showSidePanel
s
idePanelState' <- T.useLive T.unequal sidePanelState
localControls <- initialLocalControls
localControls <- initialLocalControls
-- ref to track automatic FA pausing
-- ref to track automatic FA pausing
...
@@ -115,8 +117,8 @@ controlsCpt = here.component "controls" cpt
...
@@ -115,8 +117,8 @@ controlsCpt = here.component "controls" cpt
-- Automatic opening of sidebar when a node is selected (but only first time).
-- Automatic opening of sidebar when a node is selected (but only first time).
R.useEffect' $ do
R.useEffect' $ do
if s
howSidePanel' == GE
T.InitialClosed && (not Set.isEmpty selectedNodeIds') then
if s
idePanelState' == G
T.InitialClosed && (not Set.isEmpty selectedNodeIds') then
T.write_
(GET.Opened GET.SideTabData) showSidePanel
T.write_
GT.Opened sidePanelState
else
else
pure unit
pure unit
...
@@ -221,15 +223,19 @@ useGraphControls :: { forceAtlasS :: SigmaxT.ForceAtlasState
...
@@ -221,15 +223,19 @@ useGraphControls :: { forceAtlasS :: SigmaxT.ForceAtlasState
, graph :: SigmaxT.SGraph
, graph :: SigmaxT.SGraph
, graphId :: GET.GraphId
, graphId :: GET.GraphId
, hyperdataGraph :: GET.HyperdataGraph
, hyperdataGraph :: GET.HyperdataGraph
, reloadForest :: Unit -> Effect Unit
, session :: Session
, session :: Session
, reloadForest :: Unit -> Effect Unit }
, sidePanel :: T.Box (Maybe (Record GEST.SidePanel))
, sidePanelState :: T.Box GT.SidePanelState }
-> R.Hooks (Record Controls)
-> R.Hooks (Record Controls)
useGraphControls { forceAtlasS
useGraphControls { forceAtlasS
, graph
, graph
, graphId
, graphId
, hyperdataGraph
, hyperdataGraph
, reloadForest
, session
, session
, reloadForest } = do
, sidePanel
, sidePanelState } = do
edgeConfluence <- T.useBox $ Range.Closed { min: 0.0, max: 1.0 }
edgeConfluence <- T.useBox $ Range.Closed { min: 0.0, max: 1.0 }
edgeWeight <- T.useBox $ Range.Closed {
edgeWeight <- T.useBox $ Range.Closed {
min: 0.0
min: 0.0
...
@@ -237,18 +243,20 @@ useGraphControls { forceAtlasS
...
@@ -237,18 +243,20 @@ useGraphControls { forceAtlasS
}
}
forceAtlasState <- T.useBox forceAtlasS
forceAtlasState <- T.useBox forceAtlasS
graphStage <- T.useBox Graph.Init
graphStage <- T.useBox Graph.Init
multiSelectEnabled <- T.useBox false
--
multiSelectEnabled <- T.useBox false
nodeSize <- T.useBox $ Range.Closed { min: 0.0, max: 100.0 }
nodeSize <- T.useBox $ Range.Closed { min: 0.0, max: 100.0 }
removedNodeIds <- T.useBox SigmaxT.emptyNodeIds
--
removedNodeIds <- T.useBox SigmaxT.emptyNodeIds
selectedNodeIds <- T.useBox SigmaxT.emptyNodeIds
--
selectedNodeIds <- T.useBox SigmaxT.emptyNodeIds
showControls <- T.useBox false
--
showControls <- T.useBox false
showEdges <- T.useBox SigmaxT.EShow
showEdges <- T.useBox SigmaxT.EShow
showLouvain <- T.useBox false
showLouvain <- T.useBox false
showSidePanel <- T.useBox GE
T.InitialClosed
-- sidePanelState <- T.useBox G
T.InitialClosed
showTree <- T.useBox false
showTree <- T.useBox false
sigma <- Sigmax.initSigma
sigma <- Sigmax.initSigma
sigmaRef <- R.useRef sigma
sigmaRef <- R.useRef sigma
{ multiSelectEnabled, removedNodeIds, selectedNodeIds, showControls } <- GEST.focusedSidePanel sidePanel
pure { edgeConfluence
pure { edgeConfluence
, edgeWeight
, edgeWeight
, forceAtlasState
, forceAtlasState
...
@@ -264,7 +272,7 @@ useGraphControls { forceAtlasS
...
@@ -264,7 +272,7 @@ useGraphControls { forceAtlasS
, showControls
, showControls
, showEdges
, showEdges
, showLouvain
, showLouvain
, s
howSidePanel
, s
idePanelState
, showTree
, showTree
, sigmaRef
, sigmaRef
, reloadForest
, reloadForest
...
...
src/Gargantext/Components/GraphExplorer/Sidebar.purs
View file @
12910a76
...
@@ -23,13 +23,12 @@ import Toestand as T
...
@@ -23,13 +23,12 @@ import Toestand as T
import Gargantext.Prelude
import Gargantext.Prelude
import Gargantext.Components.Lang (Lang(..))
import Gargantext.Components.Lang (Lang(..))
import Gargantext.Components.Search (SearchType(..), SearchQuery(..))
import Gargantext.Components.GraphExplorer.Types as GET
import Gargantext.Components.GraphExplorer.Types as GET
import Gargantext.Components.GraphExplorer.Types (SidePanelState(..), SideTab(..))
import Gargantext.Components.GraphExplorer.Legend as Legend
import Gargantext.Components.GraphExplorer.Legend as Legend
import Gargantext.Components.NgramsTable.Core as NTC
import Gargantext.Components.NgramsTable.Core as NTC
import Gargantext.Components.Nodes.Corpus.Graph.Tabs (tabs) as CGT
import Gargantext.Components.Nodes.Corpus.Graph.Tabs (tabs) as CGT
import Gargantext.Components.RandomText (words)
import Gargantext.Components.RandomText (words)
import Gargantext.Components.Search (SearchType(..), SearchQuery(..))
import Gargantext.Data.Array (mapMaybe)
import Gargantext.Data.Array (mapMaybe)
import Gargantext.Ends (Frontends)
import Gargantext.Ends (Frontends)
import Gargantext.Hooks.Sigmax.Types as SigmaxT
import Gargantext.Hooks.Sigmax.Types as SigmaxT
...
@@ -54,38 +53,34 @@ type Props = (
...
@@ -54,38 +53,34 @@ type Props = (
frontends :: Frontends
frontends :: Frontends
, graph :: SigmaxT.SGraph
, graph :: SigmaxT.SGraph
, graphVersion :: T2.ReloadS
, graphVersion :: T2.ReloadS
, s
howSidePanel :: T.Box GET.SidePanelState
, s
ideTab :: T.Box GET.SideTab
| Common
| Common
)
)
sidebar :: R
ecord Props -> R.Element
sidebar :: R
2.Component Props
sidebar
props = R.createElement sidebarCpt props []
sidebar
= R.createElement sidebarCpt
sidebarCpt :: R.Component Props
sidebarCpt :: R.Component Props
sidebarCpt = here.component "sidebar" cpt
sidebarCpt = here.component "sidebar" cpt
where
where
cpt props@{ metaData, showSidePanel } _ = do
cpt props@{ metaData, sideTab } _ = do
showSidePanel' <- T.useLive T.unequal showSidePanel
sideTab' <- T.useLive T.unequal sideTab
case showSidePanel' of
let sideTabLegend' = case sideTab' of
GET.Closed -> pure $ RH.div {} []
GET.SideTabLegend -> sideTabLegend sideTabProps []
GET.InitialClosed -> pure $ RH.div {} []
GET.SideTabData -> sideTabData sideTabProps []
GET.Opened sideTabT -> do
GET.SideTabCommunity -> sideTabCommunity sideTabProps []
let sideTab' = case sideTabT of
SideTabLegend -> sideTabLegend sideTabProps []
SideTabData -> sideTabData sideTabProps []
SideTabCommunity -> sideTabCommunity sideTabProps []
pure $ RH.div { id: "sp-container" }
pure $ RH.div { id: "sp-container" }
[ sideTabNav { sidePanel: showSidePanel
[ sideTabNav { sideTab
, sideTabs: [SideTabLegend, SideTabData,
SideTabCommunity] } []
, sideTabs: [GET.SideTabLegend, GET.SideTabData, GET.
SideTabCommunity] } []
, sideTab
'
, sideTabLegend
'
]
]
where
where
sideTabProps = RX.pick props :: Record SideTabProps
sideTabProps = RX.pick props :: Record SideTabProps
type SideTabNavProps = (
type SideTabNavProps = (
side
Panel :: T.Box GET.SidePanelState
side
Tab :: T.Box GET.SideTab
, sideTabs :: Array SideTab
, sideTabs :: Array
GET.
SideTab
)
)
sideTabNav :: R2.Component SideTabNavProps
sideTabNav :: R2.Component SideTabNavProps
...
@@ -94,23 +89,21 @@ sideTabNav = R.createElement sideTabNavCpt
...
@@ -94,23 +89,21 @@ sideTabNav = R.createElement sideTabNavCpt
sideTabNavCpt :: R.Component SideTabNavProps
sideTabNavCpt :: R.Component SideTabNavProps
sideTabNavCpt = here.component "sideTabNav" cpt
sideTabNavCpt = here.component "sideTabNav" cpt
where
where
cpt { sidePanel
cpt { sideTab, sideTabs } _ = do
, sideTabs } _ = do
sideTab' <- T.useLive T.unequal sideTab
sidePanel' <- T.useLive T.unequal sidePanel
pure $ R.fragment [ H.div { className: "text-primary center"} [H.text ""]
pure $ R.fragment [ H.div { className: "text-primary center"} [H.text ""]
, H.div { className: "nav nav-tabs"} (liItem side
Panel
' <$> sideTabs)
, H.div { className: "nav nav-tabs"} (liItem side
Tab
' <$> sideTabs)
-- , H.div {className: "center"} [ H.text "Doc sideTabs"]
-- , H.div {className: "center"} [ H.text "Doc sideTabs"]
]
]
where
where
liItem :: GET.Side
PanelState ->
SideTab -> R.Element
liItem :: GET.Side
Tab -> GET.
SideTab -> R.Element
liItem side
Panel
' tab =
liItem side
Tab
' tab =
H.div { className : "nav-item nav-link"
H.div { className : "nav-item nav-link"
<> if
(Opened tab) == sidePanel
'
<> if
tab == sideTab
'
then " active"
then " active"
else ""
else ""
, on: { click: \_ -> T.write (Opened tab) sidePanel
, on: { click: \_ -> T.write_ tab sideTab }
}
} [ H.text $ show tab ]
} [ H.text $ show tab ]
type SideTabProps = Props
type SideTabProps = Props
...
...
src/Gargantext/Components/GraphExplorer/Sidebar/Types.purs
0 → 100644
View file @
12910a76
module Gargantext.Components.GraphExplorer.Sidebar.Types where
import Data.Maybe (Maybe(..), maybe)
import Data.Set as Set
import Reactix as R
import Toestand as T
import Gargantext.Prelude
import Gargantext.Components.GraphExplorer.Types as GET
import Gargantext.Hooks.Sigmax.Types as SigmaxT
type SidePanel =
(
mGraph :: Maybe SigmaxT.SGraph
, mMetaData :: Maybe GET.MetaData
, multiSelectEnabled :: Boolean
, removedNodeIds :: SigmaxT.NodeIds
, selectedNodeIds :: SigmaxT.NodeIds
, showControls :: Boolean
, sideTab :: GET.SideTab
)
initialSidePanel :: Maybe (Record SidePanel)
initialSidePanel = Nothing
focusedSidePanel :: T.Box (Maybe (Record SidePanel))
-> R.Hooks { mGraph :: T.Box (Maybe SigmaxT.SGraph)
, mMetaData :: T.Box (Maybe GET.MetaData)
, multiSelectEnabled :: T.Box Boolean
, removedNodeIds :: T.Box SigmaxT.NodeIds
, selectedNodeIds :: T.Box SigmaxT.NodeIds
, showControls :: T.Box Boolean
, sideTab :: T.Box GET.SideTab }
focusedSidePanel sidePanel = do
mGraph <- T.useFocused
(maybe Nothing (_.mGraph))
(\val -> maybe Nothing (\sp -> Just $ sp { mGraph = val })) sidePanel
mMetaData <- T.useFocused
(maybe Nothing (_.mMetaData))
(\val -> maybe Nothing (\sp -> Just $ sp { mMetaData = val })) sidePanel
multiSelectEnabled <- T.useFocused
(maybe false (_.multiSelectEnabled))
(\val -> maybe Nothing (\sp -> Just $ sp { multiSelectEnabled = val })) sidePanel
removedNodeIds <- T.useFocused
(maybe Set.empty (_.removedNodeIds))
(\val -> maybe Nothing (\sp -> Just $ sp { removedNodeIds = val })) sidePanel
selectedNodeIds <- T.useFocused
(maybe Set.empty (_.selectedNodeIds))
(\val -> maybe Nothing (\sp -> Just $ sp { selectedNodeIds = val })) sidePanel
showControls <- T.useFocused
(maybe false (_.showControls))
(\val -> maybe Nothing (\sp -> Just $ sp { showControls = val })) sidePanel
sideTab <- T.useFocused
(maybe GET.SideTabLegend (_.sideTab))
(\val -> maybe Nothing (\sp -> Just $ sp { sideTab = val })) sidePanel
pure $ {
mGraph
, mMetaData
, multiSelectEnabled
, removedNodeIds
, selectedNodeIds
, showControls
, sideTab
}
src/Gargantext/Components/GraphExplorer/ToggleButton.purs
View file @
12910a76
...
@@ -18,8 +18,8 @@ import Reactix as R
...
@@ -18,8 +18,8 @@ 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.GraphExplorer.Types as GET
import Gargantext.Hooks.Sigmax.Types as SigmaxTypes
import Gargantext.Hooks.Sigmax.Types as SigmaxTypes
import Gargantext.Types as GT
import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Reactix as R2
here :: R2.Here
here :: R2.Here
...
@@ -185,7 +185,7 @@ treeToggleButtonCpt = here.component "treeToggleButton" cpt
...
@@ -185,7 +185,7 @@ treeToggleButtonCpt = here.component "treeToggleButton" cpt
} []
} []
type SidebarToggleButtonProps = (
type SidebarToggleButtonProps = (
state :: T.Box G
E
T.SidePanelState
state :: T.Box GT.SidePanelState
)
)
sidebarToggleButton :: R2.Component SidebarToggleButtonProps
sidebarToggleButton :: R2.Component SidebarToggleButtonProps
...
@@ -201,17 +201,18 @@ sidebarToggleButtonCpt = here.component "sidebarToggleButton" cpt
...
@@ -201,17 +201,18 @@ sidebarToggleButtonCpt = here.component "sidebarToggleButton" cpt
, on: { click: onClick state }
, on: { click: onClick state }
} [ R2.small {} [ H.text (text onMessage offMessage state') ] ]
} [ R2.small {} [ H.text (text onMessage offMessage state') ] ]
cls
(GET.Opened _)
= "active"
cls
GT.Opened
= "active"
cls _ = ""
cls _ = ""
onMessage = "Hide Sidebar"
onMessage = "Hide Sidebar"
offMessage = "Show Sidebar"
offMessage = "Show Sidebar"
text on _off
(GET.Opened _)
= on
text on _off
GT.Opened
= on
text _on off G
E
T.InitialClosed = off
text _on off GT.InitialClosed = off
text _on off G
E
T.Closed = off
text _on off GT.Closed = off
onClick state = \_ ->
onClick state = \_ ->
T.modify_ (\s -> case s of
T.modify_ GT.toggleSidePanelState state
GET.InitialClosed -> GET.Opened GET.SideTabLegend
-- case s of
GET.Closed -> GET.Opened GET.SideTabLegend
-- GET.InitialClosed -> GET.Opened GET.SideTabLegend
(GET.Opened _) -> GET.Closed) state
-- GET.Closed -> GET.Opened GET.SideTabLegend
-- (GET.Opened _) -> GET.Closed) state
src/Gargantext/Components/GraphExplorer/Types.purs
View file @
12910a76
...
@@ -114,9 +114,9 @@ type State = (
...
@@ -114,9 +114,9 @@ type State = (
--, legendData :: R.State (Array Legend)
--, legendData :: R.State (Array Legend)
--, multiNodeSelection :: R.State Boolean
--, multiNodeSelection :: R.State Boolean
--, selectedNodes :: R.State (Set SelectedNode)
--, selectedNodes :: R.State (Set SelectedNode)
--, showSidePanel :: R.State Boolean
--, showControls :: T.Box Boolean
--, showControls :: T.Box Boolean
--, showTree :: R.State Boolean
--, showTree :: R.State Boolean
--, sidePanelState :: R.State Boolean
--, sigmaGraphData :: R.State (Maybe SigmaxTypes.SGraph)
--, sigmaGraphData :: R.State (Maybe SigmaxTypes.SGraph)
--, sigmaSettings :: R.State ({|Graph.SigmaSettings})
--, sigmaSettings :: R.State ({|Graph.SigmaSettings})
--treeId :: R.State (Maybe TreeId)
--treeId :: R.State (Maybe TreeId)
...
@@ -281,10 +281,6 @@ defaultPalette = ["#5fa571","#ab9ba2","#da876d","#bdd3ff","#b399df","#ffdfed","#
...
@@ -281,10 +281,6 @@ defaultPalette = ["#5fa571","#ab9ba2","#da876d","#bdd3ff","#b399df","#ffdfed","#
intColor :: Int -> String
intColor :: Int -> String
intColor i = unsafePartial $ fromJust $ defaultPalette !! (i `mod` length defaultPalette)
intColor i = unsafePartial $ fromJust $ defaultPalette !! (i `mod` length defaultPalette)
data SidePanelState = InitialClosed | Opened SideTab | Closed
derive instance eqSidePanelState :: Eq SidePanelState
data SideTab = SideTabLegend | SideTabData | SideTabCommunity
data SideTab = SideTabLegend | SideTabData | SideTabCommunity
derive instance eqSideTab :: Eq SideTab
derive instance eqSideTab :: Eq SideTab
...
...
src/Gargantext/Components/NgramsTable.purs
View file @
12910a76
...
@@ -261,7 +261,6 @@ type CommonProps = (
...
@@ -261,7 +261,6 @@ type CommonProps = (
afterSync :: Unit -> Aff Unit
afterSync :: Unit -> Aff Unit
, reloadForest :: T.Box T2.Reload
, reloadForest :: T.Box T2.Reload
, reloadRoot :: T.Box T2.Reload
, reloadRoot :: T.Box T2.Reload
, sidePanelTriggers :: Record NT.SidePanelTriggers
, tabNgramType :: CTabNgramType
, tabNgramType :: CTabNgramType
, tasks :: T.Box GAT.Storage
, tasks :: T.Box GAT.Storage
, withAutoUpdate :: Boolean
, withAutoUpdate :: Boolean
...
@@ -287,7 +286,6 @@ loadedNgramsTableCpt = here.component "loadedNgramsTable" cpt where
...
@@ -287,7 +286,6 @@ loadedNgramsTableCpt = here.component "loadedNgramsTable" cpt where
, path
, path
, reloadForest
, reloadForest
, reloadRoot
, reloadRoot
, sidePanelTriggers
, state
, state
, tabNgramType
, tabNgramType
, tasks
, tasks
...
@@ -300,9 +298,6 @@ loadedNgramsTableCpt = here.component "loadedNgramsTable" cpt where
...
@@ -300,9 +298,6 @@ loadedNgramsTableCpt = here.component "loadedNgramsTable" cpt where
searchQuery <- T.useFocused (_.searchQuery) (\a b -> b { searchQuery = a }) path
searchQuery <- T.useFocused (_.searchQuery) (\a b -> b { searchQuery = a }) path
searchQuery' <- T.useLive T.unequal searchQuery
searchQuery' <- T.useLive T.unequal searchQuery
-- R.useEffectOnce' $ do
-- T.listen (\_ -> TT.changePage 1 params) searchQuery
let ngramsTable = applyNgramsPatches state' initTable
let ngramsTable = applyNgramsPatches state' initTable
roots = rootsOf ngramsTable
roots = rootsOf ngramsTable
...
@@ -351,8 +346,7 @@ loadedNgramsTableCpt = here.component "loadedNgramsTable" cpt where
...
@@ -351,8 +346,7 @@ loadedNgramsTableCpt = here.component "loadedNgramsTable" cpt where
, ngramsLocalPatch
, ngramsLocalPatch
, ngramsParent
, ngramsParent
, ngramsSelection
, ngramsSelection
, ngramsTable
, ngramsTable } []
, sidePanelTriggers } []
, delete: false
, delete: false
}
}
...
@@ -550,7 +544,6 @@ mainNgramsTableCpt = here.component "mainNgramsTable" cpt
...
@@ -550,7 +544,6 @@ mainNgramsTableCpt = here.component "mainNgramsTable" cpt
, path
, path
, reloadForest
, reloadForest
, reloadRoot
, reloadRoot
, sidePanelTriggers
, tabNgramType
, tabNgramType
, tasks
, tasks
, withAutoUpdate } _ = do
, withAutoUpdate } _ = do
...
@@ -566,7 +559,6 @@ mainNgramsTableCpt = here.component "mainNgramsTable" cpt
...
@@ -566,7 +559,6 @@ mainNgramsTableCpt = here.component "mainNgramsTable" cpt
, path
, path
, reloadForest
, reloadForest
, reloadRoot
, reloadRoot
, sidePanelTriggers
, tabNgramType
, tabNgramType
, tasks
, tasks
, versioned
, versioned
...
@@ -585,7 +577,6 @@ mainNgramsTableCpt = here.component "mainNgramsTable" cpt
...
@@ -585,7 +577,6 @@ mainNgramsTableCpt = here.component "mainNgramsTable" cpt
, path
, path
, reloadForest
, reloadForest
, reloadRoot
, reloadRoot
, sidePanelTriggers
, tabNgramType
, tabNgramType
, tasks
, tasks
, versionedWithCount
, versionedWithCount
...
@@ -655,7 +646,6 @@ mainNgramsTablePaintCpt = here.component "mainNgramsTablePaint" cpt
...
@@ -655,7 +646,6 @@ mainNgramsTablePaintCpt = here.component "mainNgramsTablePaint" cpt
, path
, path
, reloadForest
, reloadForest
, reloadRoot
, reloadRoot
, sidePanelTriggers
, tabNgramType
, tabNgramType
, tasks
, tasks
, versioned
, versioned
...
@@ -668,7 +658,6 @@ mainNgramsTablePaintCpt = here.component "mainNgramsTablePaint" cpt
...
@@ -668,7 +658,6 @@ mainNgramsTablePaintCpt = here.component "mainNgramsTablePaint" cpt
, path
, path
, reloadForest
, reloadForest
, reloadRoot
, reloadRoot
, sidePanelTriggers
, state
, state
, tabNgramType
, tabNgramType
, tasks
, tasks
...
@@ -694,7 +683,6 @@ mainNgramsTablePaintNoCacheCpt = here.component "mainNgramsTablePaintNoCache" cp
...
@@ -694,7 +683,6 @@ mainNgramsTablePaintNoCacheCpt = here.component "mainNgramsTablePaintNoCache" cp
, path
, path
, reloadForest
, reloadForest
, reloadRoot
, reloadRoot
, sidePanelTriggers
, tabNgramType
, tabNgramType
, tasks
, tasks
, versionedWithCount
, versionedWithCount
...
@@ -710,7 +698,6 @@ mainNgramsTablePaintNoCacheCpt = here.component "mainNgramsTablePaintNoCache" cp
...
@@ -710,7 +698,6 @@ mainNgramsTablePaintNoCacheCpt = here.component "mainNgramsTablePaintNoCache" cp
, path: path
, path: path
, reloadForest
, reloadForest
, reloadRoot
, reloadRoot
, sidePanelTriggers
, state
, state
, tabNgramType
, tabNgramType
, tasks
, tasks
...
...
src/Gargantext/Components/NgramsTable/Components.purs
View file @
12910a76
...
@@ -211,7 +211,6 @@ type RenderNgramsItem = (
...
@@ -211,7 +211,6 @@ type RenderNgramsItem = (
, ngramsParent :: Maybe NgramsTerm
, ngramsParent :: Maybe NgramsTerm
, ngramsSelection :: Set NgramsTerm
, ngramsSelection :: Set NgramsTerm
, ngramsTable :: NgramsTable
, ngramsTable :: NgramsTable
, sidePanelTriggers :: Record NT.SidePanelTriggers
)
)
renderNgramsItem :: R2.Component RenderNgramsItem
renderNgramsItem :: R2.Component RenderNgramsItem
...
@@ -227,7 +226,6 @@ renderNgramsItemCpt = here.component "renderNgramsItem" cpt
...
@@ -227,7 +226,6 @@ renderNgramsItemCpt = here.component "renderNgramsItem" cpt
, ngramsParent
, ngramsParent
, ngramsSelection
, ngramsSelection
, ngramsTable
, ngramsTable
, sidePanelTriggers: { toggleSidePanel }
} _ = do
} _ = do
pure $ Tbl.makeRow [
pure $ Tbl.makeRow [
H.div { className: "ngrams-selector" } [
H.div { className: "ngrams-selector" } [
...
@@ -254,8 +252,9 @@ renderNgramsItemCpt = here.component "renderNgramsItem" cpt
...
@@ -254,8 +252,9 @@ renderNgramsItemCpt = here.component "renderNgramsItem" cpt
a (ngramsStyle <> [DOM.onClick $ const effect])
a (ngramsStyle <> [DOM.onClick $ const effect])
Nothing ->
Nothing ->
span ngramsStyle
span ngramsStyle
onClick _ = do
onClick _ = pure unit :: Effect Unit
R2.callTrigger toggleSidePanel unit
-- onClick _ = do
-- R2.callTrigger toggleSidePanel unit
termList = ngramsElement ^. _NgramsElement <<< _list
termList = ngramsElement ^. _NgramsElement <<< _list
ngramsStyle = [termStyle termList ngramsOpacity]
ngramsStyle = [termStyle termList ngramsOpacity]
ngramsEdit = Just <<< dispatch <<< SetParentResetChildren <<< Just <<< view _ngrams
ngramsEdit = Just <<< dispatch <<< SetParentResetChildren <<< Just <<< view _ngrams
...
...
src/Gargantext/Components/Nodes/Annuaire/Tabs.purs
View file @
12910a76
...
@@ -17,13 +17,14 @@ import Gargantext.AsyncTasks as GAT
...
@@ -17,13 +17,14 @@ import Gargantext.AsyncTasks as GAT
import Gargantext.Components.DocsTable as DT
import Gargantext.Components.DocsTable as DT
import Gargantext.Components.NgramsTable as NT
import Gargantext.Components.NgramsTable as NT
import Gargantext.Components.NgramsTable.Core as NTC
import Gargantext.Components.NgramsTable.Core as NTC
import Gargantext.Components.Nodes.Texts.Types as TextsT
import Gargantext.Components.Tab as Tab
import Gargantext.Components.Tab as Tab
import Gargantext.Components.Nodes.Annuaire.User.Contacts.Types (ContactData)
import Gargantext.Components.Nodes.Annuaire.User.Contacts.Types (ContactData)
import Gargantext.Components.Nodes.Lists.Types as LTypes
import Gargantext.Components.Nodes.Lists.Types as LTypes
import Gargantext.Components.Nodes.Texts.Types as TTypes
import Gargantext.Components.Nodes.Texts.Types as TTypes
import Gargantext.Ends (Frontends)
import Gargantext.Ends (Frontends)
import Gargantext.Sessions (Session)
import Gargantext.Sessions (Session)
import Gargantext.Types (CTabNgramType(..), PTabNgramType(..), TabType(..), TabSubType(..))
import Gargantext.Types (CTabNgramType(..), PTabNgramType(..),
SidePanelState,
TabType(..), TabSubType(..))
import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Toestand as T2
import Gargantext.Utils.Toestand as T2
...
@@ -58,7 +59,8 @@ type TabsProps =
...
@@ -58,7 +59,8 @@ type TabsProps =
, reloadForest :: T.Box T2.Reload
, reloadForest :: T.Box T2.Reload
, reloadRoot :: T.Box T2.Reload
, reloadRoot :: T.Box T2.Reload
, session :: Session
, session :: Session
, sidePanelTriggers :: Record LTypes.SidePanelTriggers
, sidePanel :: T.Box (Maybe (Record TextsT.SidePanel))
, sidePanelState :: T.Box SidePanelState
, tasks :: T.Box GAT.Storage
, tasks :: T.Box GAT.Storage
)
)
...
@@ -69,19 +71,18 @@ tabsCpt :: R.Component TabsProps
...
@@ -69,19 +71,18 @@ tabsCpt :: R.Component TabsProps
tabsCpt = here.component "tabs" cpt where
tabsCpt = here.component "tabs" cpt where
cpt props _ = do
cpt props _ = do
active <- R.useState' 0
active <- R.useState' 0
triggers <- TTypes.emptySidePanelTriggers
pure $ Tab.tabs { selected: fst active, tabs: tabs' props }
pure $ Tab.tabs { selected: fst active, tabs: tabs' props triggers }
tabs' props@{ sidePanel, sidePanelState } =
tabs' props trg =
[ "Documents" /\ docs
[ "Documents" /\ docs trg
, "Patents" /\ ngramsView (viewProps Patents)
, "Patents" /\ ngramsView (viewProps Patents)
, "Books" /\ ngramsView (viewProps Books)
, "Books" /\ ngramsView (viewProps Books)
, "Communication" /\ ngramsView (viewProps Communication)
, "Communication" /\ ngramsView (viewProps Communication)
, "Trash" /\ docs
trg
-- TODO pass-in trash mode
, "Trash" /\ docs -- TODO pass-in trash mode
] where
] where
viewProps mode = Record.merge props { defaultListId: props.contactData.defaultListId
viewProps mode = Record.merge props { defaultListId: props.contactData.defaultListId
, mode }
, mode }
totalRecords = 4736 -- TODO lol
totalRecords = 4736 -- TODO lol
docs
sidePanelTriggers = DT.docViewLayout (Record.merge { sidePanelTriggers
} $ Record.merge dtCommon dtExtra)
docs
= DT.docViewLayout (Record.merge { sidePanel, sidePanelState
} $ Record.merge dtCommon dtExtra)
dtCommon = RX.pick props :: Record DTCommon
dtCommon = RX.pick props :: Record DTCommon
dtExtra =
dtExtra =
{ chart: mempty
{ chart: mempty
...
@@ -98,7 +99,7 @@ type DTCommon =
...
@@ -98,7 +99,7 @@ type DTCommon =
, frontends :: Frontends
, frontends :: Frontends
, nodeId :: Int
, nodeId :: Int
, session :: Session
, session :: Session
-- , sidePanel
Triggers :: Record LTypes.SidePanelTriggers
-- , sidePanel
:: T.Box (Record SidePanel)
)
)
type NgramsViewTabsProps =
type NgramsViewTabsProps =
...
@@ -119,12 +120,12 @@ ngramsViewCpt = here.component "ngramsView" cpt where
...
@@ -119,12 +120,12 @@ ngramsViewCpt = here.component "ngramsView" cpt where
pure $ NT.mainNgramsTable (props' path) [] where
pure $ NT.mainNgramsTable (props' path) [] where
most = RX.pick props :: Record NTCommon
most = RX.pick props :: Record NTCommon
props' path =
props' path =
Record.merge most
(
Record.merge most
{ afterSync
{ afterSync
, path
, path
, tabType: TabPairing (TabNgramType $ modeTabType mode)
, tabType: TabPairing (TabNgramType $ modeTabType mode)
, tabNgramType: modeTabType' mode
, tabNgramType: modeTabType' mode
, withAutoUpdate: false }
, withAutoUpdate: false }
) :: Record NT.MainNgramsTableProps
where
where
afterSync :: Unit -> Aff Unit
afterSync :: Unit -> Aff Unit
afterSync _ = pure unit
afterSync _ = pure unit
...
@@ -135,6 +136,5 @@ type NTCommon =
...
@@ -135,6 +136,5 @@ type NTCommon =
, reloadForest :: T.Box T2.Reload
, reloadForest :: T.Box T2.Reload
, reloadRoot :: T.Box T2.Reload
, reloadRoot :: T.Box T2.Reload
, session :: Session
, session :: Session
, sidePanelTriggers :: Record LTypes.SidePanelTriggers
, tasks :: T.Box GAT.Storage
, tasks :: T.Box GAT.Storage
)
)
src/Gargantext/Components/Nodes/Annuaire/User.purs
View file @
12910a76
...
@@ -23,11 +23,12 @@ import Gargantext.Components.InputWithEnter (inputWithEnter)
...
@@ -23,11 +23,12 @@ import Gargantext.Components.InputWithEnter (inputWithEnter)
import Gargantext.Components.Nodes.Annuaire.User.Contacts.Types (Contact(..), ContactData, ContactTouch(..), ContactWhere(..), ContactWho(..), HyperdataContact(..), HyperdataUser(..), _city, _country, _firstName, _labTeamDeptsJoinComma, _lastName, _mail, _office, _organizationJoinComma, _ouFirst, _phone, _role, _shared, _touch, _who, defaultContactTouch, defaultContactWhere, defaultContactWho, defaultHyperdataContact, defaultHyperdataUser)
import Gargantext.Components.Nodes.Annuaire.User.Contacts.Types (Contact(..), ContactData, ContactTouch(..), ContactWhere(..), ContactWho(..), HyperdataContact(..), HyperdataUser(..), _city, _country, _firstName, _labTeamDeptsJoinComma, _lastName, _mail, _office, _organizationJoinComma, _ouFirst, _phone, _role, _shared, _touch, _who, defaultContactTouch, defaultContactWhere, defaultContactWho, defaultHyperdataContact, defaultHyperdataUser)
import Gargantext.Components.Nodes.Annuaire.Tabs as Tabs
import Gargantext.Components.Nodes.Annuaire.Tabs as Tabs
import Gargantext.Components.Nodes.Lists.Types as LT
import Gargantext.Components.Nodes.Lists.Types as LT
import Gargantext.Components.Nodes.Texts.Types as TT
import Gargantext.Ends (Frontends)
import Gargantext.Ends (Frontends)
import Gargantext.Hooks.Loader (useLoader)
import Gargantext.Hooks.Loader (useLoader)
import Gargantext.Routes as Routes
import Gargantext.Routes as Routes
import Gargantext.Sessions (WithSession, WithSessionContext, Session, get, put, sessionId)
import Gargantext.Sessions (WithSession, WithSessionContext, Session, get, put, sessionId)
import Gargantext.Types (NodeType(..))
import Gargantext.Types (NodeType(..)
, SidePanelState
)
import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Toestand as T2
import Gargantext.Utils.Toestand as T2
...
@@ -155,6 +156,8 @@ type LayoutNoSessionProps =
...
@@ -155,6 +156,8 @@ type LayoutNoSessionProps =
, nodeId :: Int
, nodeId :: Int
, reloadForest :: T.Box T2.Reload
, reloadForest :: T.Box T2.Reload
, reloadRoot :: T.Box T2.Reload
, reloadRoot :: T.Box T2.Reload
, sidePanel :: T.Box (Maybe (Record TT.SidePanel))
, sidePanelState :: T.Box SidePanelState
, tasks :: T.Box GAT.Storage
, tasks :: T.Box GAT.Storage
)
)
...
@@ -184,7 +187,14 @@ userLayout = R.createElement userLayoutCpt
...
@@ -184,7 +187,14 @@ userLayout = R.createElement userLayoutCpt
userLayoutCpt :: R.Component LayoutProps
userLayoutCpt :: R.Component LayoutProps
userLayoutCpt = here.component "userLayout" cpt
userLayoutCpt = here.component "userLayout" cpt
where
where
cpt { frontends, nodeId, reloadForest, reloadRoot, session, tasks } _ = do
cpt { frontends
, nodeId
, reloadForest
, reloadRoot
, session
, sidePanel
, sidePanelState
, tasks } _ = do
let sid = sessionId session
let sid = sessionId session
pure $ userLayoutWithKey {
pure $ userLayoutWithKey {
...
@@ -194,6 +204,8 @@ userLayoutCpt = here.component "userLayout" cpt
...
@@ -194,6 +204,8 @@ userLayoutCpt = here.component "userLayout" cpt
, reloadForest
, reloadForest
, reloadRoot
, reloadRoot
, session
, session
, sidePanel
, sidePanelState
, tasks
, tasks
}
}
...
@@ -203,14 +215,19 @@ userLayoutWithKey props = R.createElement userLayoutWithKeyCpt props []
...
@@ -203,14 +215,19 @@ userLayoutWithKey props = R.createElement userLayoutWithKeyCpt props []
userLayoutWithKeyCpt :: R.Component KeyLayoutProps
userLayoutWithKeyCpt :: R.Component KeyLayoutProps
userLayoutWithKeyCpt = here.component "userLayoutWithKey" cpt
userLayoutWithKeyCpt = here.component "userLayoutWithKey" cpt
where
where
cpt { frontends, nodeId, reloadForest, reloadRoot, session, tasks } _ = do
cpt { frontends
, nodeId
, reloadForest
, reloadRoot
, session
, sidePanel
, sidePanelState
, tasks } _ = do
reload <- T.useBox T2.newReload
reload <- T.useBox T2.newReload
reload' <- T.useLive T.unequal reload
reload' <- T.useLive T.unequal reload
cacheState <- T.useBox LT.CacheOn
cacheState <- T.useBox LT.CacheOn
sidePanelTriggers <- LT.emptySidePanelTriggers
useLoader {nodeId, reload: reload', session} getUserWithReload $
useLoader {nodeId, reload: reload', session} getUserWithReload $
\contactData@{contactNode: Contact {name, hyperdata}} ->
\contactData@{contactNode: Contact {name, hyperdata}} ->
H.ul { className: "col-md-12 list-group" } [
H.ul { className: "col-md-12 list-group" } [
...
@@ -224,7 +241,8 @@ userLayoutWithKeyCpt = here.component "userLayoutWithKey" cpt
...
@@ -224,7 +241,8 @@ userLayoutWithKeyCpt = here.component "userLayoutWithKey" cpt
, reloadForest
, reloadForest
, reloadRoot
, reloadRoot
, session
, session
, sidePanelTriggers
, sidePanel
, sidePanelState
, tasks
, tasks
}
}
]
]
...
...
src/Gargantext/Components/Nodes/Annuaire/User/Contact.purs
View file @
12910a76
...
@@ -26,11 +26,12 @@ import Gargantext.Components.Nodes.Annuaire.User.Contacts.Types
...
@@ -26,11 +26,12 @@ import Gargantext.Components.Nodes.Annuaire.User.Contacts.Types
, _shared, _touch, _who, defaultContactTouch, defaultContactWhere
, _shared, _touch, _who, defaultContactTouch, defaultContactWhere
, defaultContactWho, defaultHyperdataContact, defaultHyperdataUser )
, defaultContactWho, defaultHyperdataContact, defaultHyperdataUser )
import Gargantext.Components.Nodes.Lists.Types as LT
import Gargantext.Components.Nodes.Lists.Types as LT
import Gargantext.Components.Nodes.Texts.Types as TT
import Gargantext.Ends (Frontends)
import Gargantext.Ends (Frontends)
import Gargantext.Hooks.Loader (useLoader)
import Gargantext.Hooks.Loader (useLoader)
import Gargantext.Routes as Routes
import Gargantext.Routes as Routes
import Gargantext.Sessions (Session, get, put, sessionId)
import Gargantext.Sessions (Session, get, put, sessionId)
import Gargantext.Types (NodeType(..))
import Gargantext.Types (NodeType(..)
, SidePanelState
)
import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Toestand as T2
import Gargantext.Utils.Toestand as T2
...
@@ -141,6 +142,8 @@ listElement = H.li { className: "list-group-item justify-content-between" }
...
@@ -141,6 +142,8 @@ listElement = H.li { className: "list-group-item justify-content-between" }
type BasicProps =
type BasicProps =
( frontends :: Frontends
( frontends :: Frontends
, nodeId :: Int
, nodeId :: Int
, sidePanelState :: T.Box SidePanelState
, sidePanel :: T.Box (Maybe (Record TT.SidePanel))
, tasks :: T.Box GAT.Storage
, tasks :: T.Box GAT.Storage
)
)
...
@@ -166,13 +169,30 @@ contactLayout = R.createElement contactLayoutCpt
...
@@ -166,13 +169,30 @@ contactLayout = R.createElement contactLayoutCpt
contactLayoutCpt :: R.Component AnnuaireLayoutProps
contactLayoutCpt :: R.Component AnnuaireLayoutProps
contactLayoutCpt = here.component "contactLayout" cpt where
contactLayoutCpt = here.component "contactLayout" cpt where
cpt { annuaireId, frontends, nodeId, reloadForest, reloadRoot, session, tasks } _ = do
cpt { annuaireId
, frontends
, nodeId
, reloadForest
, reloadRoot
, session
, sidePanel
, sidePanelState
, tasks } _ = do
s <- R.useContext session
s <- R.useContext session
let key = show (sessionId s) <> "-" <> show nodeId
let key = show (sessionId s) <> "-" <> show nodeId
pure $
pure $
contactLayoutWithKey
contactLayoutWithKey
{ annuaireId, tasks, frontends, key, nodeId
{ annuaireId
, session: s, reloadForest, reloadRoot }
, frontends
, key
, nodeId
, reloadForest
, reloadRoot
, session: s
, sidePanel
, sidePanelState
, tasks
}
contactLayoutWithKey :: R2.Leaf AnnuaireKeyLayoutProps
contactLayoutWithKey :: R2.Leaf AnnuaireKeyLayoutProps
contactLayoutWithKey props = R.createElement contactLayoutWithKeyCpt props []
contactLayoutWithKey props = R.createElement contactLayoutWithKeyCpt props []
...
@@ -185,11 +205,12 @@ contactLayoutWithKeyCpt = here.component "contactLayoutWithKey" cpt where
...
@@ -185,11 +205,12 @@ contactLayoutWithKeyCpt = here.component "contactLayoutWithKey" cpt where
, reloadRoot
, reloadRoot
, nodeId
, nodeId
, session
, session
, sidePanel
, sidePanelState
, tasks } _ = do
, tasks } _ = do
reload <- T.useBox T2.newReload
reload <- T.useBox T2.newReload
_ <- T.useLive T.unequal reload
_ <- T.useLive T.unequal reload
cacheState <- T.useBox LT.CacheOn
cacheState <- T.useBox LT.CacheOn
sidePanelTriggers <- LT.emptySidePanelTriggers
useLoader nodeId (getAnnuaireContact session annuaireId) $
useLoader nodeId (getAnnuaireContact session annuaireId) $
\contactData@{contactNode: Contact' {name, hyperdata}} ->
\contactData@{contactNode: Contact' {name, hyperdata}} ->
H.ul { className: "col-md-12 list-group" }
H.ul { className: "col-md-12 list-group" }
...
@@ -201,7 +222,8 @@ contactLayoutWithKeyCpt = here.component "contactLayoutWithKey" cpt where
...
@@ -201,7 +222,8 @@ contactLayoutWithKeyCpt = here.component "contactLayoutWithKey" cpt where
, frontends
, frontends
, nodeId
, nodeId
, session
, session
, sidePanelTriggers
, sidePanel
, sidePanelState
, reloadForest
, reloadForest
, reloadRoot
, reloadRoot
, tasks } ]
, tasks } ]
...
...
src/Gargantext/Components/Nodes/Annuaire/User/Contacts/Tabs.purs
View file @
12910a76
...
@@ -20,7 +20,7 @@ import Gargantext.Components.Nodes.Lists.Types as LTypes
...
@@ -20,7 +20,7 @@ import Gargantext.Components.Nodes.Lists.Types as LTypes
import Gargantext.Components.Nodes.Texts.Types as TTypes
import Gargantext.Components.Nodes.Texts.Types as TTypes
import Gargantext.Ends (Frontends)
import Gargantext.Ends (Frontends)
import Gargantext.Sessions (Session)
import Gargantext.Sessions (Session)
import Gargantext.Types (CTabNgramType(..), PTabNgramType(..), TabType(..), TabSubType(..))
import Gargantext.Types (CTabNgramType(..), PTabNgramType(..),
SidePanelState,
TabType(..), TabSubType(..))
import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Toestand as T2
import Gargantext.Utils.Toestand as T2
...
@@ -56,7 +56,8 @@ type TabsProps = (
...
@@ -56,7 +56,8 @@ type TabsProps = (
, reloadForest :: T.Box T2.Reload
, reloadForest :: T.Box T2.Reload
, reloadRoot :: T.Box T2.Reload
, reloadRoot :: T.Box T2.Reload
, session :: Session
, session :: Session
, sidePanelTriggers :: Record LTypes.SidePanelTriggers
, sidePanel :: T.Box (Maybe (Record TTypes.SidePanel))
, sidePanelState :: T.Box SidePanelState
, tasks :: T.Box GAT.Storage
, tasks :: T.Box GAT.Storage
)
)
...
@@ -73,13 +74,13 @@ tabsCpt = here.component "tabs" cpt
...
@@ -73,13 +74,13 @@ tabsCpt = here.component "tabs" cpt
, frontends
, frontends
, nodeId
, nodeId
, session
, session
, sidePanelTriggers
, sidePanel
, sidePanelState
, reloadForest } _ = do
, reloadForest } _ = do
active <- R.useState' 0
active <- R.useState' 0
textsSidePanelTriggers <- TTypes.emptySidePanelTriggers
pure $ Tab.tabs { selected: fst active, tabs: tabs' }
pure $ Tab.tabs { selected: fst active, tabs: tabs' textsSidePanelTriggers }
where
where
tabs'
trg
=
tabs' =
[ "Documents" /\ docs
[ "Documents" /\ docs
, "Patents" /\ ngramsView patentsView []
, "Patents" /\ ngramsView patentsView []
, "Books" /\ ngramsView booksView []
, "Books" /\ ngramsView booksView []
...
@@ -93,26 +94,23 @@ tabsCpt = here.component "tabs" cpt
...
@@ -93,26 +94,23 @@ tabsCpt = here.component "tabs" cpt
, defaultListId
, defaultListId
, mode: Patents
, mode: Patents
, nodeId
, nodeId
, session
, reloadForest
, sidePanelTriggers
, session }
, reloadForest }
booksView = { reloadRoot
booksView = { reloadRoot
, tasks
, tasks
, cacheState
, cacheState
, defaultListId
, defaultListId
, mode: Books
, mode: Books
, nodeId
, nodeId
, session
, reloadForest
, sidePanelTriggers
, session }
, reloadForest }
commView = { reloadRoot, tasks
commView = { reloadRoot, tasks
, cacheState
, cacheState
, defaultListId
, defaultListId
, mode: Communication
, mode: Communication
, nodeId
, nodeId
, session
, reloadForest
, sidePanelTriggers
, session }
, reloadForest }
chart = mempty
chart = mempty
totalRecords = 4736 -- TODO
totalRecords = 4736 -- TODO
docs = DT.docViewLayout
docs = DT.docViewLayout
...
@@ -124,7 +122,8 @@ tabsCpt = here.component "tabs" cpt
...
@@ -124,7 +122,8 @@ tabsCpt = here.component "tabs" cpt
, nodeId
, nodeId
, session
, session
, showSearch: true
, showSearch: true
, sidePanelTriggers: trg
, sidePanel
, sidePanelState
, tabType: TabPairing TabDocs
, tabType: TabPairing TabDocs
, totalRecords
, totalRecords
}
}
...
@@ -138,7 +137,6 @@ type NgramsViewTabsProps = (
...
@@ -138,7 +137,6 @@ type NgramsViewTabsProps = (
, reloadForest :: T.Box T2.Reload
, reloadForest :: T.Box T2.Reload
, reloadRoot :: T.Box T2.Reload
, reloadRoot :: T.Box T2.Reload
, session :: Session
, session :: Session
, sidePanelTriggers :: Record LTypes.SidePanelTriggers
, tasks :: T.Box GAT.Storage
, tasks :: T.Box GAT.Storage
)
)
...
@@ -155,7 +153,6 @@ ngramsViewCpt = here.component "ngramsView" cpt
...
@@ -155,7 +153,6 @@ ngramsViewCpt = here.component "ngramsView" cpt
, mode
, mode
, nodeId
, nodeId
, session
, session
, sidePanelTriggers
, tasks } _ = do
, tasks } _ = do
path <- T.useBox $ NTC.initialPageParams session nodeId [defaultListId] (TabDocument TabDocs)
path <- T.useBox $ NTC.initialPageParams session nodeId [defaultListId] (TabDocument TabDocs)
...
@@ -167,7 +164,6 @@ ngramsViewCpt = here.component "ngramsView" cpt
...
@@ -167,7 +164,6 @@ ngramsViewCpt = here.component "ngramsView" cpt
, reloadForest
, reloadForest
, reloadRoot
, reloadRoot
, session
, session
, sidePanelTriggers
, tabNgramType
, tabNgramType
, tabType
, tabType
, tasks
, tasks
...
...
src/Gargantext/Components/Nodes/Lists.purs
View file @
12910a76
module Gargantext.Components.Nodes.Lists where
module Gargantext.Components.Nodes.Lists where
import DOM.Simple.Console (log, log2)
import Data.Maybe (Maybe(..))
import Data.Maybe (Maybe(..))
import Data.Tuple (fst, snd)
import Data.Tuple (fst, snd)
import Data.Tuple.Nested ((/\))
import Data.Tuple.Nested ((/\))
import Effect (Effect)
import Effect (Effect)
import Effect.Aff (launchAff_)
import Effect.Aff (launchAff_)
import Gargantext.AsyncTasks as GAT
import Gargantext.AsyncTasks as GAT
import Gargantext.Components.Forest as Forest
import Gargantext.Components.NgramsTable.Loader (clearCache)
import Gargantext.Components.NgramsTable.Loader (clearCache)
import Gargantext.Components.Node (NodePoly(..))
import Gargantext.Components.Node (NodePoly(..))
import Gargantext.Components.Nodes.Corpus (loadCorpusWithChild)
import Gargantext.Components.Nodes.Corpus (loadCorpusWithChild)
import Gargantext.Components.Nodes.Corpus.Types (getCorpusInfo, CorpusInfo(..), Hyperdata(..))
import Gargantext.Components.Nodes.Corpus.Types (getCorpusInfo, CorpusInfo(..), Hyperdata(..))
import Gargantext.Components.Nodes.Lists.Tabs as Tabs
import Gargantext.Components.Nodes.Lists.Tabs as Tabs
import Gargantext.Components.Nodes.Lists.Types (CacheState(..),
ListsLayoutControls, SidePanelState(..), initialControls, toggleSidePanelState
)
import Gargantext.Components.Nodes.Lists.Types (CacheState(..),
SidePanel
)
import Gargantext.Components.Table as Table
import Gargantext.Components.Table as Table
import Gargantext.Hooks.Loader (useLoader)
import Gargantext.Hooks.Loader (useLoader)
import Gargantext.Prelude (Unit, bind, const, discard, pure, show, unit, ($), (<>))
import Gargantext.Prelude (Unit, bind, const, discard, pure, show, unit, ($), (<>))
...
@@ -24,7 +22,6 @@ import Gargantext.Utils.Toestand as T2
...
@@ -24,7 +22,6 @@ import Gargantext.Utils.Toestand as T2
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 Record as Record
import Record.Extra as REX
import Toestand as T
import Toestand as T
here :: R2.Here
here :: R2.Here
...
@@ -35,15 +32,10 @@ listsWithSessionContext = R.createElement listsWithSessionContextCpt
...
@@ -35,15 +32,10 @@ listsWithSessionContext = R.createElement listsWithSessionContextCpt
listsWithSessionContextCpt :: R.Component CommonPropsSessionContext
listsWithSessionContextCpt :: R.Component CommonPropsSessionContext
listsWithSessionContextCpt = here.component "listsWithSessionContext" cpt where
listsWithSessionContextCpt = here.component "listsWithSessionContext" cpt where
cpt props@{ session } _ = do
cpt props@{ session
, sidePanel, sidePanelState
} _ = do
session' <- R.useContext session
session' <- R.useContext session
controls <- initialControls
pure $ R.fragment [
pure $ listsLayout (Record.merge { session: session', sidePanel, sidePanelState } props) []
-- topBar { controls } []
listsLayout (Record.merge { controls, session: session' } props) []
, H.div { className: "side-panel" } [ sidePanel { controls, session: session' } [] ]
]
--------------------------------------------------------
--------------------------------------------------------
type CommonPropsNoSession =
type CommonPropsNoSession =
...
@@ -51,15 +43,15 @@ type CommonPropsNoSession =
...
@@ -51,15 +43,15 @@ type CommonPropsNoSession =
, reloadForest :: T.Box T2.Reload
, reloadForest :: T.Box T2.Reload
, reloadRoot :: T.Box T2.Reload
, reloadRoot :: T.Box T2.Reload
, sessionUpdate :: Session -> Effect Unit
, sessionUpdate :: Session -> Effect Unit
, sidePanel :: T.Box (Maybe (Record SidePanel))
, sidePanelState :: T.Box GT.SidePanelState
, tasks :: T.Box GAT.Storage
, tasks :: T.Box GAT.Storage
)
)
type
Common
Props = WithSession CommonPropsNoSession
type Props = WithSession CommonPropsNoSession
type CommonPropsSessionContext = WithSessionContext CommonPropsNoSession
type CommonPropsSessionContext = WithSessionContext CommonPropsNoSession
type Props = ( controls :: Record ListsLayoutControls | CommonProps )
type WithTreeProps = ( handed :: GT.Handed | Props )
type WithTreeProps = ( handed :: GT.Handed | Props )
listsLayout :: R2.Component Props
listsLayout :: R2.Component Props
...
@@ -69,16 +61,23 @@ listsLayoutCpt :: R.Component Props
...
@@ -69,16 +61,23 @@ listsLayoutCpt :: R.Component Props
listsLayoutCpt = here.component "listsLayout" cpt where
listsLayoutCpt = here.component "listsLayout" cpt where
cpt props@{ nodeId, session } _ = do
cpt props@{ nodeId, session } _ = do
let sid = sessionId session
let sid = sessionId session
pure $ listsLayoutWithKey
$ Record.merge props { key: show sid <> "-" <> show nodeId }
pure $ listsLayoutWithKey
(Record.merge props { key: show sid <> "-" <> show nodeId }) []
type KeyProps = ( key :: String | Props )
type KeyProps = ( key :: String | Props )
listsLayoutWithKey :: R
ecord KeyProps -> R.Element
listsLayoutWithKey :: R
2.Component KeyProps
listsLayoutWithKey
props = R.createElement listsLayoutWithKeyCpt props []
listsLayoutWithKey
= R.createElement listsLayoutWithKeyCpt
listsLayoutWithKeyCpt :: R.Component KeyProps
listsLayoutWithKeyCpt :: R.Component KeyProps
listsLayoutWithKeyCpt = here.component "listsLayoutWithKey" cpt where
listsLayoutWithKeyCpt = here.component "listsLayoutWithKey" cpt where
cpt { controls, nodeId, reloadForest, reloadRoot, session, sessionUpdate, tasks } _ = do
cpt { nodeId
, reloadForest
, reloadRoot
, session
, sessionUpdate
, sidePanel
, sidePanelState
, tasks } _ = do
let path = { nodeId, session }
let path = { nodeId, session }
cacheState <- T.useBox $ getCacheState CacheOn session nodeId
cacheState <- T.useBox $ getCacheState CacheOn session nodeId
...
@@ -109,7 +108,6 @@ listsLayoutWithKeyCpt = here.component "listsLayoutWithKey" cpt where
...
@@ -109,7 +108,6 @@ listsLayoutWithKeyCpt = here.component "listsLayoutWithKey" cpt where
, reloadForest
, reloadForest
, reloadRoot
, reloadRoot
, session
, session
, sidePanelTriggers: controls.triggers
, tasks
, tasks
}
}
]
]
...
@@ -119,8 +117,9 @@ listsLayoutWithKeyCpt = here.component "listsLayoutWithKey" cpt where
...
@@ -119,8 +117,9 @@ listsLayoutWithKeyCpt = here.component "listsLayoutWithKey" cpt where
sessionUpdate $ setCacheState session nodeId cacheState
sessionUpdate $ setCacheState session nodeId cacheState
type SidePanelProps =
type SidePanelProps =
( controls :: Record ListsLayoutControls
( session :: Session
, session :: Session
, sidePanel :: T.Box (Maybe (Record SidePanel))
, sidePanelState :: T.Box GT.SidePanelState
)
)
sidePanel :: R2.Component SidePanelProps
sidePanel :: R2.Component SidePanelProps
...
@@ -129,29 +128,17 @@ sidePanel = R.createElement sidePanelCpt
...
@@ -129,29 +128,17 @@ sidePanel = R.createElement sidePanelCpt
sidePanelCpt :: R.Component SidePanelProps
sidePanelCpt :: R.Component SidePanelProps
sidePanelCpt = here.component "sidePanel" cpt
sidePanelCpt = here.component "sidePanel" cpt
where
where
cpt { controls: { triggers: { toggleSidePanel
cpt { session
, triggerSidePanel
, sidePanel
} }
, sidePanelState } _ = do
, session } _ = do
showSidePanel <- R.useState' InitialClosed
R.useEffect' $ do
let toggleSidePanel' _ = snd showSidePanel toggleSidePanelState
triggerSidePanel' _ = snd showSidePanel $ const Opened
R2.setTrigger toggleSidePanel toggleSidePanel'
R2.setTrigger triggerSidePanel triggerSidePanel'
(mCorpusId /\ setMCorpusId) <- R.useState' Nothing
sidePanelState' <- T.useLive T.unequal sidePanelState
(mListId /\ setMListId ) <- R.useState' Nothing
(mNodeId /\ setMNodeId ) <- R.useState' Nothing
let mainStyle = case
fst showSidePanel
of
let mainStyle = case
sidePanelState'
of
Opened -> { display: "block" }
GT.
Opened -> { display: "block" }
_ -> { display: "none" }
_ -> { display: "none" }
let closeSidePanel _ = do
let closeSidePanel _ = T.write_ GT.Closed sidePanelState
snd showSidePanel $ const Closed
pure $ H.div { style: mainStyle } [
pure $ H.div { style: mainStyle } [
H.div { className: "header" } [
H.div { className: "header" } [
...
...
src/Gargantext/Components/Nodes/Lists/Tabs.purs
View file @
12910a76
...
@@ -40,7 +40,6 @@ type Props = (
...
@@ -40,7 +40,6 @@ type Props = (
, reloadForest :: T.Box T2.Reload
, reloadForest :: T.Box T2.Reload
, reloadRoot :: T.Box T2.Reload
, reloadRoot :: T.Box T2.Reload
, session :: Session
, session :: Session
, sidePanelTriggers :: Record SidePanelTriggers
, tasks :: T.Box GAT.Storage
, tasks :: T.Box GAT.Storage
)
)
...
@@ -76,7 +75,6 @@ ngramsViewCpt = here.component "ngramsView" cpt where
...
@@ -76,7 +75,6 @@ ngramsViewCpt = here.component "ngramsView" cpt where
, reloadRoot
, reloadRoot
, mode
, mode
, session
, session
, sidePanelTriggers
, tasks } _ = do
, tasks } _ = do
chartsReload <- T.useBox T2.newReload
chartsReload <- T.useBox T2.newReload
...
@@ -104,7 +102,6 @@ ngramsViewCpt = here.component "ngramsView" cpt where
...
@@ -104,7 +102,6 @@ ngramsViewCpt = here.component "ngramsView" cpt where
, reloadForest
, reloadForest
, reloadRoot
, reloadRoot
, session
, session
, sidePanelTriggers
, tabNgramType
, tabNgramType
, tabType
, tabType
, tasks
, tasks
...
...
src/Gargantext/Components/Nodes/Lists/Types.purs
View file @
12910a76
module Gargantext.Components.Nodes.Lists.Types where
module Gargantext.Components.Nodes.Lists.Types where
import Data.Argonaut (class DecodeJson,
decodeJson, class EncodeJson, encodeJson, (~>), (:=)
)
import Data.Argonaut (class DecodeJson,
class EncodeJson, decodeJson, encodeJson
)
import Data.Argonaut.Decode.Error (JsonDecodeError(..))
import Data.Argonaut.Decode.Error (JsonDecodeError(..))
import Data.Maybe (Maybe(..))
import Data.Either (Either(..))
import Data.Either (Either(..))
import Data.Generic.Rep (class Generic)
import Data.Generic.Rep (class Generic)
import Data.Generic.Rep.Eq (genericEq)
import Data.Generic.Rep.Eq (genericEq)
import Data.Generic.Rep.Show (genericShow)
import Data.Generic.Rep.Show (genericShow)
import Data.Maybe (Maybe(..))
import Reactix as R
import Gargantext.Prelude
import Gargantext.Prelude
import Gargantext.Types (ListId, NodeID)
import Gargantext.Types (ListId, NodeID)
...
@@ -34,45 +33,7 @@ instance encodeJsonCacheState :: EncodeJson CacheState where
...
@@ -34,45 +33,7 @@ instance encodeJsonCacheState :: EncodeJson CacheState where
instance showCacheState :: Show CacheState where
instance showCacheState :: Show CacheState where
show = genericShow
show = genericShow
type SidePanel = ()
data SidePanelState = InitialClosed | Opened | Closed
initialSidePanel :: Maybe (Record SidePanel)
derive instance eqSidePanelState :: Eq SidePanelState
initialSidePanel = Nothing
toggleSidePanelState :: SidePanelState -> SidePanelState
toggleSidePanelState InitialClosed = Opened
toggleSidePanelState Closed = Opened
toggleSidePanelState Opened = Closed
type TriggerAnnotatedDocIdChangeParams = (
corpusId :: NodeID
, listId :: ListId
, nodeId :: NodeID
)
type SidePanelTriggers = (
toggleSidePanel :: R2.Trigger Unit -- toggles side panel
, triggerSidePanel :: R2.Trigger Unit -- opens side panel
)
emptySidePanelTriggers :: R.Hooks (Record SidePanelTriggers)
emptySidePanelTriggers = do
toggleSidePanel <- R.useRef Nothing
triggerSidePanel <- R.useRef Nothing
pure $ {
toggleSidePanel
, triggerSidePanel
}
type ListsLayoutControls = (
triggers :: Record SidePanelTriggers
)
initialControls :: R.Hooks (Record ListsLayoutControls)
initialControls = do
triggers <- emptySidePanelTriggers
pure $ {
triggers
}
src/Gargantext/Components/Nodes/Texts.purs
View file @
12910a76
module Gargantext.Components.Nodes.Texts where
module Gargantext.Components.Nodes.Texts where
import Prelude
( class Eq, class Show, Unit, bind, const, discard
, pure, show, unit, ($), (&&), (<>), (==) )
import Data.Generic.Rep (class Generic)
import Data.Generic.Rep (class Generic)
import Data.Generic.Rep.Show (genericShow)
import Data.Generic.Rep.Show (genericShow)
import Data.Maybe (Maybe(..))
import Data.Maybe (Maybe(..))
import Data.Tuple (fst, snd)
import Data.Tuple.Nested ((/\))
import Data.Tuple.Nested ((/\))
import Effect (Effect)
import Effect.Aff (launchAff_)
import Effect.Aff (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 Record as Record
import Record.Extra as REX
import Toestand as T
import Toestand as T
import Gargantext.Prelude
import Gargantext.Components.DocsTable as DT
import Gargantext.Components.DocsTable as DT
import Gargantext.Components.Forest as Forest
import Gargantext.Hooks.Loader (useLoader)
import Gargantext.Components.NgramsTable.Loader (clearCache)
import Gargantext.Components.NgramsTable.Loader (clearCache)
import Gargantext.Components.Node (NodePoly(..))
import Gargantext.Components.Node (NodePoly(..))
import Gargantext.Components.Nodes.Corpus (loadCorpusWithChild)
import Gargantext.Components.Nodes.Corpus (loadCorpusWithChild)
import Gargantext.Components.Nodes.Corpus.Chart.Histo (histo)
import Gargantext.Components.Nodes.Corpus.Chart.Histo (histo)
import Gargantext.Components.Nodes.Corpus.Document as D
import Gargantext.Components.Nodes.Corpus.Document as D
import Gargantext.Components.Nodes.Corpus.Types
import Gargantext.Components.Nodes.Corpus.Types (CorpusData, Hyperdata(..), getCorpusInfo, CorpusInfo(..))
( CorpusData, Hyperdata(..), getCorpusInfo, CorpusInfo(..) )
import Gargantext.Components.Nodes.Lists.Types as LT
import Gargantext.Components.Nodes.Lists.Types as NT
import Gargantext.Components.Nodes.Texts.Types as TT
import Gargantext.Components.Nodes.Texts.Types
( SidePanelState(..), SidePanelTriggers, TextsLayoutControls
, TriggerAnnotatedDocIdChangeParams, initialControls, toggleSidePanelState )
import Gargantext.Components.Tab as Tab
import Gargantext.Components.Tab as Tab
import Gargantext.Components.Table as Table
import Gargantext.Components.Table as Table
import Gargantext.Ends (Frontends)
import Gargantext.Ends (Frontends)
import Gargantext.Hooks.Loader (useLoader)
import Gargantext.Sessions (WithSession, WithSessionContext, Session, sessionId, getCacheState)
import Gargantext.Sessions (WithSession, WithSessionContext, Session, sessionId, getCacheState)
import Gargantext.Types (CTabNgramType(..), ListId, NodeID, TabSubType(..), TabType(..))
import Gargantext.Types (CTabNgramType(..), ListId, NodeID,
SidePanelState(..),
TabSubType(..), TabType(..))
import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Reactix as R2
here :: R2.Here
here :: R2.Here
...
@@ -48,68 +39,52 @@ textsWithSessionContext = R.createElement textsWithSessionContextCpt
...
@@ -48,68 +39,52 @@ textsWithSessionContext = R.createElement textsWithSessionContextCpt
textsWithSessionContextCpt :: R.Component CommonPropsSessionContext
textsWithSessionContextCpt :: R.Component CommonPropsSessionContext
textsWithSessionContextCpt = here.component "textsWithSessionContext" cpt
textsWithSessionContextCpt = here.component "textsWithSessionContext" cpt
where
where
cpt props@{ session } _ = do
cpt props@{ session
, sidePanel, sidePanelState
} _ = do
session' <- R.useContext session
session' <- R.useContext session
controls <- initialControls
pure $ R.fragment
pure $ R.fragment
[
-- topBar { controls } []
[
textsLayout (Record.merge {
controls, session: session'
} props) []
textsLayout (Record.merge {
session: session', sidePanel, sidePanelState
} props) []
, H.div { className: "side-panel" } [ sidePanel { controls, session: session'
} [] ]
-- , H.div { className: "side-panel" } [ sidePanelC { session: session', sidePanel
} [] ]
]
]
type TopBarProps = ( controls :: Record TextsLayoutControls )
topBar :: R2.Component TopBarProps
topBar = R.createElement topBarCpt
topBarCpt :: R.Component TopBarProps
topBarCpt = here.component "topBar" cpt
where
cpt { controls } _ = do
-- empty for now because the button is moved to the side panel
pure $ H.div {} []
-- H.ul { className: "nav navbar-nav" } [
-- H.li {} [
-- sidePanelToggleButton { state: controls.showSidePanel } []
-- ]
-- ] -- head (goes to top bar)
type CommonPropsNoSession = (
type CommonPropsNoSession = (
frontends :: Frontends
frontends :: Frontends
, nodeId :: NodeID
, nodeId :: NodeID
, sidePanel :: T.Box (Maybe (Record TT.SidePanel))
, sidePanelState :: T.Box SidePanelState
)
)
type
Common
Props = WithSession CommonPropsNoSession
type Props = WithSession CommonPropsNoSession
type CommonPropsSessionContext = WithSessionContext CommonPropsNoSession
type CommonPropsSessionContext = WithSessionContext CommonPropsNoSession
type Props = ( controls :: Record TextsLayoutControls | CommonProps )
textsLayout :: R2.Component Props
textsLayout :: R2.Component Props
textsLayout = R.createElement textsLayoutCpt
textsLayout = R.createElement textsLayoutCpt
textsLayoutCpt :: R.Component Props
textsLayoutCpt :: R.Component Props
textsLayoutCpt = here.component "textsLayout" cpt where
textsLayoutCpt = here.component "textsLayout" cpt where
cpt { controls, frontends, nodeId, session } children = do
cpt { frontends, nodeId, session, sidePanel, sidePanelState } children = do
pure $ textsLayoutWithKey { controls
pure $ textsLayoutWithKey { frontends
, frontends
, key
, key
, nodeId
, nodeId
, session
} children
, session
where
, sidePanel
key = show sid <> "-" <> show nodeId
, sidePanelState } children
where
where
sid = sessionId session
key = show nodeId
-- key = show sid <> "-" <> show nodeId
-- where
-- sid = sessionId session
type KeyProps = (
type KeyProps = (
key :: String
key :: String
, controls :: Record TextsLayoutControls
, frontends :: Frontends
, frontends :: Frontends
, nodeId :: NodeID
, nodeId :: NodeID
, session :: Session
, session :: Session
, sidePanel :: T.Box (Maybe (Record TT.SidePanel))
, sidePanelState :: T.Box SidePanelState
)
)
textsLayoutWithKey :: R2.Component KeyProps
textsLayoutWithKey :: R2.Component KeyProps
...
@@ -118,8 +93,8 @@ textsLayoutWithKey = R.createElement textsLayoutWithKeyCpt
...
@@ -118,8 +93,8 @@ textsLayoutWithKey = R.createElement textsLayoutWithKeyCpt
textsLayoutWithKeyCpt :: R.Component KeyProps
textsLayoutWithKeyCpt :: R.Component KeyProps
textsLayoutWithKeyCpt = here.component "textsLayoutWithKey" cpt
textsLayoutWithKeyCpt = here.component "textsLayoutWithKey" cpt
where
where
cpt {
controls, frontends, nodeId, session
} _children = do
cpt {
frontends, nodeId, session, sidePanel, sidePanelState
} _children = do
cacheState <- T.useBox $ getCacheState
N
T.CacheOff session nodeId
cacheState <- T.useBox $ getCacheState
L
T.CacheOff session nodeId
cacheState' <- T.useLive T.unequal cacheState
cacheState' <- T.useLive T.unequal cacheState
R.useEffectOnce' $ do
R.useEffectOnce' $ do
...
@@ -143,7 +118,8 @@ textsLayoutWithKeyCpt = here.component "textsLayoutWithKey" cpt
...
@@ -143,7 +118,8 @@ textsLayoutWithKeyCpt = here.component "textsLayoutWithKey" cpt
, corpusId
, corpusId
, frontends
, frontends
, session
, session
, sidePanelTriggers: controls.triggers }
, sidePanel
, sidePanelState }
]
]
where
where
afterCacheStateChange cacheState = do
afterCacheStateChange cacheState = do
...
@@ -166,12 +142,13 @@ modeTabType MoreLikeFav = CTabAuthors -- TODO
...
@@ -166,12 +142,13 @@ modeTabType MoreLikeFav = CTabAuthors -- TODO
modeTabType MoreLikeTrash = CTabSources -- TODO
modeTabType MoreLikeTrash = CTabSources -- TODO
type TabsProps =
type TabsProps =
( cacheState
:: T.Box N
T.CacheState
( cacheState
:: T.Box L
T.CacheState
, corpusData :: CorpusData
, corpusData :: CorpusData
, corpusId :: NodeID
, corpusId :: NodeID
, frontends :: Frontends
, frontends :: Frontends
, session :: Session
, session :: Session
, sidePanelTriggers :: Record SidePanelTriggers
, sidePanel :: T.Box (Maybe (Record TT.SidePanel))
, sidePanelState :: T.Box SidePanelState
)
)
tabs :: Record TabsProps -> R.Element
tabs :: Record TabsProps -> R.Element
...
@@ -180,13 +157,11 @@ tabs props = R.createElement tabsCpt props []
...
@@ -180,13 +157,11 @@ tabs props = R.createElement tabsCpt props []
tabsCpt :: R.Component TabsProps
tabsCpt :: R.Component TabsProps
tabsCpt = here.component "tabs" cpt
tabsCpt = here.component "tabs" cpt
where
where
cpt { cacheState, corpusId, corpusData, frontends, session, sidePanelTriggers } _ = do
cpt { cacheState, corpusId, corpusData, frontends, session, sidePanel, sidePanelState } _ = do
(selected /\ setSelected) <- R.useState' 0
let path = initialPath
let path = initialPath
pure $ Tab.tabs {
pure $ Tab.tabs {
selected
selected
: 0
, tabs: [
, tabs: [
"Documents" /\ R.fragment [
"Documents" /\ R.fragment [
histo { path, session }
histo { path, session }
...
@@ -211,10 +186,11 @@ tabsCpt = here.component "tabs" cpt
...
@@ -211,10 +186,11 @@ tabsCpt = here.component "tabs" cpt
-- , path
-- , path
, session
, session
, tabType
, tabType
, sidePanelTriggers } []
, sidePanel
, sidePanelState } []
type DocViewProps a = (
type DocViewProps a = (
cacheState
:: T.Box N
T.CacheState
cacheState
:: T.Box L
T.CacheState
, corpusData :: CorpusData
, corpusData :: CorpusData
, corpusId :: NodeID
, corpusId :: NodeID
, frontends :: Frontends
, frontends :: Frontends
...
@@ -222,7 +198,8 @@ type DocViewProps a = (
...
@@ -222,7 +198,8 @@ type DocViewProps a = (
-- , path :: Record DT.Path
-- , path :: Record DT.Path
, session :: Session
, session :: Session
, tabType :: TabSubType a
, tabType :: TabSubType a
, sidePanelTriggers :: Record SidePanelTriggers
, sidePanel :: T.Box (Maybe (Record TT.SidePanel))
, sidePanelState :: T.Box SidePanelState
)
)
docView :: forall a. R2.Component (DocViewProps a)
docView :: forall a. R2.Component (DocViewProps a)
...
@@ -241,7 +218,8 @@ docViewLayoutRec { cacheState
...
@@ -241,7 +218,8 @@ docViewLayoutRec { cacheState
, listId
, listId
, session
, session
, tabType: TabDocs
, tabType: TabDocs
, sidePanelTriggers } =
, sidePanel
, sidePanelState } =
{ cacheState
{ cacheState
, chart : H.div {} []
, chart : H.div {} []
, frontends
, frontends
...
@@ -251,7 +229,8 @@ docViewLayoutRec { cacheState
...
@@ -251,7 +229,8 @@ docViewLayoutRec { cacheState
-- ^ TODO merge nodeId and corpusId in DT
-- ^ TODO merge nodeId and corpusId in DT
, session
, session
, showSearch: true
, showSearch: true
, sidePanelTriggers
, sidePanel
, sidePanelState
, tabType: TabCorpus TabDocs
, tabType: TabCorpus TabDocs
, totalRecords: 4737
, totalRecords: 4737
}
}
...
@@ -261,7 +240,8 @@ docViewLayoutRec { cacheState
...
@@ -261,7 +240,8 @@ docViewLayoutRec { cacheState
, listId
, listId
, session
, session
, tabType: TabMoreLikeFav
, tabType: TabMoreLikeFav
, sidePanelTriggers } =
, sidePanel
, sidePanelState } =
{ cacheState
{ cacheState
, chart : H.div {} []
, chart : H.div {} []
, frontends
, frontends
...
@@ -271,7 +251,8 @@ docViewLayoutRec { cacheState
...
@@ -271,7 +251,8 @@ docViewLayoutRec { cacheState
-- ^ TODO merge nodeId and corpusId in DT
-- ^ TODO merge nodeId and corpusId in DT
, session
, session
, showSearch: false
, showSearch: false
, sidePanelTriggers
, sidePanel
, sidePanelState
, tabType: TabCorpus TabMoreLikeFav
, tabType: TabCorpus TabMoreLikeFav
, totalRecords: 4737
, totalRecords: 4737
}
}
...
@@ -281,7 +262,8 @@ docViewLayoutRec { cacheState
...
@@ -281,7 +262,8 @@ docViewLayoutRec { cacheState
, listId
, listId
, session
, session
, tabType: TabMoreLikeTrash
, tabType: TabMoreLikeTrash
, sidePanelTriggers } =
, sidePanel
, sidePanelState } =
{ cacheState
{ cacheState
, chart : H.div {} []
, chart : H.div {} []
, frontends
, frontends
...
@@ -291,7 +273,8 @@ docViewLayoutRec { cacheState
...
@@ -291,7 +273,8 @@ docViewLayoutRec { cacheState
-- ^ TODO merge nodeId and corpusId in DT
-- ^ TODO merge nodeId and corpusId in DT
, session
, session
, showSearch: false
, showSearch: false
, sidePanelTriggers
, sidePanel
, sidePanelState
, tabType: TabCorpus TabMoreLikeTrash
, tabType: TabCorpus TabMoreLikeTrash
, totalRecords: 4737
, totalRecords: 4737
}
}
...
@@ -301,7 +284,8 @@ docViewLayoutRec { cacheState
...
@@ -301,7 +284,8 @@ docViewLayoutRec { cacheState
, listId
, listId
, session
, session
, tabType: TabTrash
, tabType: TabTrash
, sidePanelTriggers } =
, sidePanel
, sidePanelState } =
{ cacheState
{ cacheState
, chart : H.div {} []
, chart : H.div {} []
, frontends
, frontends
...
@@ -311,7 +295,8 @@ docViewLayoutRec { cacheState
...
@@ -311,7 +295,8 @@ docViewLayoutRec { cacheState
-- ^ TODO merge nodeId and corpusId in DT
-- ^ TODO merge nodeId and corpusId in DT
, session
, session
, showSearch: true
, showSearch: true
, sidePanelTriggers
, sidePanel
, sidePanelState
, tabType: TabCorpus TabTrash
, tabType: TabCorpus TabTrash
, totalRecords: 4737
, totalRecords: 4737
}
}
...
@@ -322,7 +307,8 @@ docViewLayoutRec { cacheState
...
@@ -322,7 +307,8 @@ docViewLayoutRec { cacheState
, listId
, listId
, session
, session
, tabType
, tabType
, sidePanelTriggers } =
, sidePanel
, sidePanelState } =
{ cacheState
{ cacheState
, chart : H.div {} []
, chart : H.div {} []
, frontends
, frontends
...
@@ -332,7 +318,8 @@ docViewLayoutRec { cacheState
...
@@ -332,7 +318,8 @@ docViewLayoutRec { cacheState
-- ^ TODO merge nodeId and corpusId in DT
-- ^ TODO merge nodeId and corpusId in DT
, session
, session
, showSearch: true
, showSearch: true
, sidePanelTriggers
, sidePanel
, sidePanelState
, tabType: TabCorpus TabTrash
, tabType: TabCorpus TabTrash
, totalRecords: 4737
, totalRecords: 4737
}
}
...
@@ -340,8 +327,9 @@ docViewLayoutRec { cacheState
...
@@ -340,8 +327,9 @@ docViewLayoutRec { cacheState
--------------------------------------------------------
--------------------------------------------------------
type SidePanelProps = (
type SidePanelProps = (
controls :: Record TextsLayoutControls
session :: Session
, session :: Session
, sidePanel :: T.Box (Maybe (Record TT.SidePanel))
, sidePanelState :: T.Box SidePanelState
)
)
sidePanel :: R2.Component SidePanelProps
sidePanel :: R2.Component SidePanelProps
...
@@ -350,54 +338,67 @@ sidePanel = R.createElement sidePanelCpt
...
@@ -350,54 +338,67 @@ sidePanel = R.createElement sidePanelCpt
sidePanelCpt :: R.Component SidePanelProps
sidePanelCpt :: R.Component SidePanelProps
sidePanelCpt = here.component "sidePanel" cpt
sidePanelCpt = here.component "sidePanel" cpt
where
where
cpt { controls: { triggers: { currentDocIdRef
cpt { session
, toggleSidePanel
, sidePanel
, triggerAnnotatedDocIdChange
, sidePanelState } _ = do
, triggerSidePanel
} }
sidePanelState' <- T.useLive T.unequal sidePanelState
, session } _ = do
sidePanel' <- T.useLive T.unequal sidePanel
showSidePanel <- R.useState' InitialClosed
-- R.useEffect' $ do
-- let toggleSidePanel' _ = snd sidePanelState toggleSidePanelState
R.useEffect' $ do
-- triggerSidePanel' _ = snd sidePanelState $ const Opened
let toggleSidePanel' _ = snd showSidePanel toggleSidePanelState
-- R2.setTrigger toggleSidePanel toggleSidePanel'
triggerSidePanel' _ = snd showSidePanel $ const Opened
-- R2.setTrigger triggerSidePanel triggerSidePanel'
R2.setTrigger toggleSidePanel toggleSidePanel'
R2.setTrigger triggerSidePanel triggerSidePanel'
-- (mCorpusId /\ setMCorpusId) <- R.useState' Nothing
-- (mListId /\ setMListId) <- R.useState' Nothing
(mCorpusId /\ setMCorpusId) <- R.useState' Nothing
-- (mNodeId /\ setMNodeId) <- R.useState' Nothing
(mListId /\ setMListId) <- R.useState' Nothing
(mNodeId /\ setMNodeId) <- R.useState' Nothing
-- R.useEffect3 mCorpusId mListId mNodeId $ do
-- if mCorpusId == Just corpusId && mListId == Just listId && mNodeId == Just nodeId && mCurrentDocId == Just nodeId then do
R.useEffect3 mCorpusId mListId mNodeId $ do
-- T.modify_ (\sp -> sp { mCurrentDocId = Nothing }) sidePanel
let trigger :: Record TriggerAnnotatedDocIdChangeParams -> Effect Unit
-- else do
trigger { corpusId, listId, nodeId } = do
-- T.modify_ (\sp -> sp { mCorpusId = Just corpusId
-- , mCurrentDocId = Just nodeId
-- , mListId = Just listId
-- , mNodeId = Just nodeId }) sidePanel
-- let trigger :: Record TriggerAnnotatedDocIdChangeParams -> Effect Unit
-- trigger { corpusId, listId, nodeId } = do
-- log2 "[sidePanel trigger] trigger corpusId change" corpusId
-- log2 "[sidePanel trigger] trigger corpusId change" corpusId
-- log2 "[sidePanel trigger] trigger listId change" listId
-- log2 "[sidePanel trigger] trigger listId change" listId
-- log2 "[sidePanel trigger] trigger nodeId change" nodeId
-- log2 "[sidePanel trigger] trigger nodeId change" nodeId
if mCorpusId == Just corpusId && mListId == Just listId && mNodeId == Just nodeId && R.readRef currentDocIdRef == Just nodeId then do
-- if mCorpusId == Just corpusId && mListId == Just listId && mNodeId == Just nodeId && mCurrentDocId == Just nodeId then do
R.setRef currentDocIdRef Nothing
-- R.setRef currentDocIdRef Nothing
R2.callTrigger toggleSidePanel unit
-- T.modify_ (\sp -> sp { mCurrentDocId = Nothing }) sidePanel
else do
-- R2.callTrigger toggleSidePanel unit
setMCorpusId $ const $ Just corpusId
-- else do
setMListId $ const $ Just listId
-- setMCorpusId $ const $ Just corpusId
setMNodeId $ const $ Just nodeId
-- setMListId $ const $ Just listId
R.setRef currentDocIdRef $ Just nodeId
-- setMNodeId $ const $ Just nodeId
R2.callTrigger triggerSidePanel unit
-- R.setRef currentDocIdRef $ Just nodeId
-- R2.callTrigger triggerSidePanel unit
-- T.modify_ (\sp -> sp { mCorpusId = Just corpusId
-- , mCurrentDocId = Just nodeId
-- , mListId = Just listId
-- , mNodeId = Just nodeId }) sidePanel
-- log2 "[sidePanel] trigger" trigger
-- log2 "[sidePanel] trigger" trigger
R2.setTrigger triggerAnnotatedDocIdChange trigger
-- R2.setTrigger triggerAnnotatedDocIdChange trigger
-- pure unit
pure $ do
--
pure $ do
-- log "[sidePanel] clearing triggerAnnotatedDocIdChange"
--
-- log "[sidePanel] clearing triggerAnnotatedDocIdChange"
R2.clearTrigger triggerAnnotatedDocIdChange
--
R2.clearTrigger triggerAnnotatedDocIdChange
let mainStyle = case
fst showSidePanel
of
let mainStyle = case
sidePanelState'
of
Opened -> { display: "block" }
Opened -> { display: "block" }
_ -> { display: "none" }
_ -> { display: "none" }
let closeSidePanel _ = do
let closeSidePanel _ = do
R.setRef currentDocIdRef Nothing
-- T.modify_ (\sp -> sp { mCurrentDocId = Nothing
snd showSidePanel $ const Closed
-- , state = Closed }) sidePanel
T.write_ Closed sidePanelState
T.write_ Nothing sidePanel
pure $ H.div { style: mainStyle } [
pure $ H.div { style: mainStyle } [
H.div { className: "header" } [
H.div { className: "header" } [
...
@@ -406,13 +407,11 @@ sidePanelCpt = here.component "sidePanel" cpt
...
@@ -406,13 +407,11 @@ sidePanelCpt = here.component "sidePanel" cpt
H.span { className: "fa fa-times" } []
H.span { className: "fa fa-times" } []
]
]
]
]
, sidePanelDocView { m
CorpusId, mListId, mNodeId
, session } []
, sidePanelDocView { m
SidePanel: sidePanel'
, session } []
]
]
type SidePanelDocView = (
type SidePanelDocView = (
mCorpusId :: Maybe NodeID
mSidePanel :: Maybe (Record TT.SidePanel)
, mListId :: Maybe ListId
, mNodeId :: Maybe NodeID
, session :: Session
, session :: Session
)
)
...
@@ -422,16 +421,13 @@ sidePanelDocView = R.createElement sidePanelDocViewCpt
...
@@ -422,16 +421,13 @@ sidePanelDocView = R.createElement sidePanelDocViewCpt
sidePanelDocViewCpt :: R.Component SidePanelDocView
sidePanelDocViewCpt :: R.Component SidePanelDocView
sidePanelDocViewCpt = here.component "sidePanelDocView" cpt
sidePanelDocViewCpt = here.component "sidePanelDocView" cpt
where
where
cpt { m
ListId
: Nothing } _ = do
cpt { m
SidePanel
: Nothing } _ = do
pure $ H.div {} []
pure $ H.div {} []
cpt { mNodeId: Nothing } _ = do
cpt { mSidePanel: Just { corpusId, listId, nodeId }
pure $ H.div {} []
cpt { mCorpusId
, mListId: Just listId
, mNodeId: Just nodeId
, session } _ = do
, session } _ = do
let session' = R.createContext session
let session' = R.createContext session
pure $ D.documentLayout { listId
pure $ D.documentLayout { listId
, mCorpusId
, mCorpusId
: Just corpusId
, nodeId
, nodeId
, session: session' } []
, session: session' } []
src/Gargantext/Components/Nodes/Texts/Types.purs
View file @
12910a76
module Gargantext.Components.Nodes.Texts.Types where
module Gargantext.Components.Nodes.Texts.Types where
import Data.Maybe (Maybe(..))
import Data.Maybe (Maybe(..))
import Effect (Effect)
import Reactix as R
import Reactix as R
import Gargantext.Prelude
import Gargantext.Prelude
...
@@ -56,3 +55,15 @@ initialControls = do
...
@@ -56,3 +55,15 @@ initialControls = do
pure $ {
pure $ {
triggers
triggers
}
}
type SidePanel =
(
corpusId :: NodeID
, listId :: ListId
, mCurrentDocId :: Maybe Int
, nodeId :: NodeID
)
initialSidePanel :: Maybe (Record SidePanel)
initialSidePanel = Nothing
src/Gargantext/Components/Router.purs
View file @
12910a76
module Gargantext.Components.Router (router) where
module Gargantext.Components.Router (router) where
import Gargantext.Prelude
import Data.Array (fromFoldable)
import Data.Array (fromFoldable)
import Data.Maybe (Maybe(..))
import Data.Maybe (Maybe(..))
import Data.Tuple.Nested ((/\))
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 Record as Record
...
@@ -9,13 +12,12 @@ import Record.Extra as RE
...
@@ -9,13 +12,12 @@ import Record.Extra as RE
import Toestand as T
import Toestand as T
import Unsafe.Coerce (unsafeCoerce)
import Unsafe.Coerce (unsafeCoerce)
import Gargantext.Prelude
import Gargantext.AsyncTasks as GAT
import Gargantext.Components.App.Data (Boxes)
import Gargantext.Components.App.Data (Boxes)
import Gargantext.Components.Footer (footer)
import Gargantext.Components.Footer (footer)
import Gargantext.Components.Forest as Forest
import Gargantext.Components.Forest as Forest
import Gargantext.Components.GraphExplorer (explorerLayoutLoader)
import Gargantext.Components.GraphExplorer as GraphExplorer
import Gargantext.Components.GraphExplorer.Sidebar as GES
import Gargantext.Components.GraphExplorer.Sidebar.Types as GEST
import Gargantext.Components.Lang (LandingLang(LL_EN))
import Gargantext.Components.Lang (LandingLang(LL_EN))
import Gargantext.Components.Login (login)
import Gargantext.Components.Login (login)
import Gargantext.Components.Nodes.Annuaire (annuaireLayout)
import Gargantext.Components.Nodes.Annuaire (annuaireLayout)
...
@@ -28,17 +30,20 @@ import Gargantext.Components.Nodes.File (fileLayout)
...
@@ -28,17 +30,20 @@ import Gargantext.Components.Nodes.File (fileLayout)
import Gargantext.Components.Nodes.Frame (frameLayout)
import Gargantext.Components.Nodes.Frame (frameLayout)
import Gargantext.Components.Nodes.Home (homeLayout)
import Gargantext.Components.Nodes.Home (homeLayout)
import Gargantext.Components.Nodes.Lists as Lists
import Gargantext.Components.Nodes.Lists as Lists
import Gargantext.Components.Nodes.Lists.Types as ListsTypes
import Gargantext.Components.Nodes.Texts as Texts
import Gargantext.Components.Nodes.Texts as Texts
import Gargantext.Components.SessionLoader (sessionWrapper)
import Gargantext.Components.SessionLoader (sessionWrapper)
import Gargantext.Components.SimpleLayout (simpleLayout)
import Gargantext.Components.SimpleLayout (simpleLayout)
import Gargantext.Components.TopBar (handedChooser)
import Gargantext.Components.TopBar as TopBar
import Gargantext.Components.TopBar as TopBar
import Gargantext.Config (defaultFrontends, defaultBackends)
import Gargantext.Config (defaultFrontends, defaultBackends)
import Gargantext.Ends (Backend)
import Gargantext.Ends (Backend)
import Gargantext.Routes (AppRoute)
import Gargantext.Routes (AppRoute)
import Gargantext.Routes as GR
import Gargantext.Routes as GR
import Gargantext.Sessions (Session)
import Gargantext.Sessions (Session
, WithSessionContext
)
import Gargantext.Types (CorpusId, ListId, NodeID, NodeType(..), SessionId)
import Gargantext.Types (CorpusId, ListId, NodeID, NodeType(..), SessionId
, SidePanelState(..)
)
import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Toestand as T2
here :: R2.Here
here :: R2.Here
here = R2.here "Gargantext.Components.Router"
here = R2.here "Gargantext.Components.Router"
...
@@ -56,28 +61,21 @@ router props = R.createElement routerCpt props []
...
@@ -56,28 +61,21 @@ router props = R.createElement routerCpt props []
routerCpt :: R.Component Props
routerCpt :: R.Component Props
routerCpt = here.component "router" cpt where
routerCpt = here.component "router" cpt where
cpt props@{ boxes } _ = do
cpt props@{ boxes } _ = do
let session = R.createContext (unsafeCoerce {})
pure $ R.fragment
pure $ R.fragment
[ loginModal { boxes } []
[ loginModal { boxes } []
, TopBar.topBar { handed: boxes.handed } []
, topBar { boxes } []
, Forest.forestLayoutMain { backend: boxes.backend
, forest { boxes, session } []
, forestOpen: boxes.forestOpen
, sidePanel { boxes, session } []
, frontends: defaultFrontends
, handed: boxes.handed
, reloadForest: boxes.reloadForest
, reloadRoot: boxes.reloadRoot
, route: boxes.route
, sessions: boxes.sessions
, showLogin: boxes.showLogin
, tasks: boxes.tasks } [ renderRoute props [] ]
]
]
renderRoute :: R2.Component
Props
renderRoute :: R2.Component
(WithSessionContext Props)
renderRoute = R.createElement renderRouteCpt
renderRoute = R.createElement renderRouteCpt
renderRouteCpt :: R.Component
Props
renderRouteCpt :: R.Component
(WithSessionContext Props)
renderRouteCpt = here.component "renderRoute" cpt where
renderRouteCpt = here.component "renderRoute" cpt where
cpt props@{ boxes } _ = do
cpt props@{ boxes, session } _ = do
let session = R.createContext (unsafeCoerce {})
let sessionProps sId = Record.merge { session, sessionId: sId } props
let sessionProps sId = Record.merge { session, sessionId: sId } props
let sessionNodeProps sId nId = Record.merge { nodeId: nId } $ sessionProps sId
let sessionNodeProps sId nId = Record.merge { nodeId: nId } $ sessionProps sId
...
@@ -95,7 +93,7 @@ renderRouteCpt = here.component "renderRoute" cpt where
...
@@ -95,7 +93,7 @@ renderRouteCpt = here.component "renderRoute" cpt where
GR.FolderPrivate s n -> corpus (sessionNodeProps s n) []
GR.FolderPrivate s n -> corpus (sessionNodeProps s n) []
GR.FolderPublic s n -> corpus (sessionNodeProps s n) []
GR.FolderPublic s n -> corpus (sessionNodeProps s n) []
GR.FolderShared s n -> corpus (sessionNodeProps s n) []
GR.FolderShared s n -> corpus (sessionNodeProps s n) []
GR.Home -> home
props
[]
GR.Home -> home
{ boxes }
[]
GR.Lists s n -> lists (sessionNodeProps s n) []
GR.Lists s n -> lists (sessionNodeProps s n) []
GR.Login -> login' boxes
GR.Login -> login' boxes
GR.PGraphExplorer s g -> graphExplorer (sessionNodeProps s g) []
GR.PGraphExplorer s g -> graphExplorer (sessionNodeProps s g) []
...
@@ -109,14 +107,10 @@ renderRouteCpt = here.component "renderRoute" cpt where
...
@@ -109,14 +107,10 @@ renderRouteCpt = here.component "renderRoute" cpt where
]
]
type LoginModalProps = (
loginModal :: R2.Component Props
boxes :: Boxes
)
loginModal :: R2.Component LoginModalProps
loginModal = R.createElement loginModalCpt
loginModal = R.createElement loginModalCpt
loginModalCpt :: R.Component
LoginModal
Props
loginModalCpt :: R.Component Props
loginModalCpt = here.component "loginModal" cpt
loginModalCpt = here.component "loginModal" cpt
where
where
cpt { boxes: boxes@{ showLogin } } _ = do
cpt { boxes: boxes@{ showLogin } } _ = do
...
@@ -124,13 +118,37 @@ loginModalCpt = here.component "loginModal" cpt
...
@@ -124,13 +118,37 @@ loginModalCpt = here.component "loginModal" cpt
pure $ if showLogin' then login' boxes else H.div {} []
pure $ if showLogin' then login' boxes else H.div {} []
forested :: R2.Component Props
authed :: Record SessionProps -> R.Element -> R.Element
forested = R.createElement forestedCpt
authed props@{ boxes: { sessions }, session, sessionId } content =
sessionWrapper { fallback: home homeProps []
forestedCpt :: R.Component Props
, context: session
forestedCpt = here.component "forested" cpt
, sessionId
, sessions } [ content, footer {} [] ]
where
where
cpt { boxes: { backend
homeProps = RE.pick props :: Record Props
topBar :: R2.Component Props
topBar = R.createElement topBarCpt
topBarCpt :: R.Component Props
topBarCpt = here.component "topBar" cpt where
cpt props@{ boxes: boxes@{ handed
, route } } _ = do
route' <- T.useLive T.unequal boxes.route
let children = case route' of
GR.PGraphExplorer s g -> [ GraphExplorer.topBar { boxes } [] ]
_ -> []
pure $ TopBar.topBar { handed } children
forest :: R2.Component (WithSessionContext Props)
forest = R.createElement forestCpt
forestCpt :: R.Component (WithSessionContext Props)
forestCpt = here.component "forest" cpt where
cpt props@{ boxes: { backend
, forestOpen
, forestOpen
, handed
, handed
, reloadForest
, reloadForest
...
@@ -138,7 +156,10 @@ forestedCpt = here.component "forested" cpt
...
@@ -138,7 +156,10 @@ forestedCpt = here.component "forested" cpt
, route
, route
, sessions
, sessions
, showLogin
, showLogin
, tasks } } children = do
, tasks }
, session } _ = do
session' <- R.useContext session
pure $ Forest.forestLayoutMain { backend
pure $ Forest.forestLayoutMain { backend
, forestOpen
, forestOpen
, frontends: defaultFrontends
, frontends: defaultFrontends
...
@@ -148,16 +169,58 @@ forestedCpt = here.component "forested" cpt
...
@@ -148,16 +169,58 @@ forestedCpt = here.component "forested" cpt
, route
, route
, sessions
, sessions
, showLogin
, showLogin
, tasks } children
, tasks } [ renderRoute (Record.merge { session } props) [] ]
authed :: Record SessionProps -> R.Element -> R.Element
sidePanel :: R2.Component (WithSessionContext Props)
authed props@{ boxes: { sessions }, session, sessionId } content =
sidePanel = R.createElement sidePanelCpt
sessionWrapper { fallback: home homeProps []
, context: session
sidePanelCpt :: R.Component (WithSessionContext Props)
, sessionId
sidePanelCpt = here.component "sidePanel" cpt where
, sessions } [ content, footer {} [] ]
cpt props@{ boxes: boxes@{ graphVersion
where
, reloadForest
homeProps = RE.pick props :: Record Props
, sidePanelGraph
, sidePanelState
, sidePanelLists
, sidePanelTexts }
, session } _ = do
route' <- T.useLive T.unequal boxes.route
session' <- R.useContext session
sidePanelState' <- T.useLive T.unequal sidePanelState
case sidePanelState' of
Opened ->
case route' of
GR.Lists s n -> do
pure $ H.div { className: "side-panel" } [ Lists.sidePanel { session: session'
, sidePanel: sidePanelLists
, sidePanelState } [] ]
GR.PGraphExplorer s g -> do
{ mGraph, mMetaData, removedNodeIds, selectedNodeIds, sideTab } <- GEST.focusedSidePanel sidePanelGraph
mGraph' <- T.useLive T.unequal mGraph
mGraphMetaData' <- T.useLive T.unequal mMetaData
case (mGraph' /\ mGraphMetaData') of
(Nothing /\ _) -> pure $ H.div {} []
(_ /\ Nothing) -> pure $ H.div {} []
(Just graph /\ Just metaData) -> do
pure $ H.div { className: "side-panel" }
[ GES.sidebar { frontends: defaultFrontends
, graph
, graphId: g
, graphVersion
, metaData
, reloadForest
, removedNodeIds
, selectedNodeIds
, session: session'
, sideTab
} [] ]
GR.Texts s n -> do
pure $ H.div { className: "side-panel" } [ Texts.sidePanel { session: session'
, sidePanel: sidePanelTexts
, sidePanelState } [] ]
_ -> pure $ H.div {} []
_ -> pure $ H.div {} []
annuaire :: R2.Component SessionNodeProps
annuaire :: R2.Component SessionNodeProps
annuaire = R.createElement annuaireCpt
annuaire = R.createElement annuaireCpt
...
@@ -166,8 +229,9 @@ annuaireCpt :: R.Component SessionNodeProps
...
@@ -166,8 +229,9 @@ annuaireCpt :: R.Component SessionNodeProps
annuaireCpt = here.component "annuaire" cpt where
annuaireCpt = here.component "annuaire" cpt where
cpt props@{ boxes, nodeId, session, sessionId } _ = do
cpt props@{ boxes, nodeId, session, sessionId } _ = do
let sessionProps = RE.pick props :: Record SessionProps
let sessionProps = RE.pick props :: Record SessionProps
pure $ authed sessionProps $ annuaireLayout { frontends, nodeId, session }
pure $ authed sessionProps $ annuaireLayout { frontends: defaultFrontends
where frontends = defaultFrontends
, nodeId
, session }
corpus :: R2.Component SessionNodeProps
corpus :: R2.Component SessionNodeProps
corpus = R.createElement corpusCpt
corpus = R.createElement corpusCpt
...
@@ -213,7 +277,7 @@ document = R.createElement documentCpt
...
@@ -213,7 +277,7 @@ document = R.createElement documentCpt
documentCpt :: R.Component DocumentProps
documentCpt :: R.Component DocumentProps
documentCpt = here.component "document" cpt where
documentCpt = here.component "document" cpt where
cpt props@{
listId, nodeId, session, sessionId, boxes
} _ = do
cpt props@{
boxes, listId, nodeId, session, sessionId
} _ = do
let sessionProps = RE.pick props :: Record SessionProps
let sessionProps = RE.pick props :: Record SessionProps
pure $ authed sessionProps $
pure $ authed sessionProps $
documentMainLayout { listId, nodeId, mCorpusId, session } []
documentMainLayout { listId, nodeId, mCorpusId, session } []
...
@@ -240,6 +304,8 @@ listsCpt = here.component "lists" cpt where
...
@@ -240,6 +304,8 @@ listsCpt = here.component "lists" cpt where
, route
, route
, sessions
, sessions
, showLogin
, showLogin
, sidePanelState
, sidePanelLists
, tasks }
, tasks }
, nodeId
, nodeId
, session
, session
...
@@ -251,8 +317,9 @@ listsCpt = here.component "lists" cpt where
...
@@ -251,8 +317,9 @@ listsCpt = here.component "lists" cpt where
, reloadRoot
, reloadRoot
, session
, session
, sessionUpdate: \_ -> pure unit
, sessionUpdate: \_ -> pure unit
, sidePanel: sidePanelLists
, sidePanelState
, tasks } []
, tasks } []
where frontends = defaultFrontends
login' :: Boxes -> R.Element
login' :: Boxes -> R.Element
login' { backend, sessions, showLogin: visible } =
login' { backend, sessions, showLogin: visible } =
...
@@ -266,29 +333,40 @@ graphExplorer = R.createElement graphExplorerCpt
...
@@ -266,29 +333,40 @@ graphExplorer = R.createElement graphExplorerCpt
graphExplorerCpt :: R.Component SessionNodeProps
graphExplorerCpt :: R.Component SessionNodeProps
graphExplorerCpt = here.component "graphExplorer" cpt where
graphExplorerCpt = here.component "graphExplorer" cpt where
cpt props@{ boxes: { backend, handed, route, sessions, showLogin, tasks }
cpt props@{ boxes: boxes@{ backend
, handed
, route
, sessions
, showLogin
, sidePanelGraph
, sidePanelState
, tasks }
, nodeId
, nodeId
, session } _ = do
, session } _ = do
{ mMetaData } <- GEST.focusedSidePanel sidePanelGraph
mMetaData' <- T.useLive T.unequal mMetaData
let sessionProps = RE.pick props :: Record SessionProps
let sessionProps = RE.pick props :: Record SessionProps
pure $ authed sessionProps $
pure $ authed sessionProps $
simpleLayout { handed }
-- simpleLayout { handed }
[ explorerLayoutLoader { backend
GraphExplorer.explorerLayoutLoader { backend
, frontends
, boxes
, frontends: defaultFrontends
, graphId: nodeId
, graphId: nodeId
, handed
, handed
, mMetaData'
, route
, route
, session
, session
, sessions
, sessions
, showLogin
, showLogin
, tasks } [] ]
, sidePanelState
where frontends = defaultFrontends
, tasks } []
routeFile :: R2.Component SessionNodeProps
routeFile :: R2.Component SessionNodeProps
routeFile = R.createElement routeFileCpt
routeFile = R.createElement routeFileCpt
routeFileCpt :: R.Component SessionNodeProps
routeFileCpt :: R.Component SessionNodeProps
routeFileCpt = here.component "routeFile" cpt where
routeFileCpt = here.component "routeFile" cpt where
cpt props@{
nodeId, session, sessionId, boxes
} _ = do
cpt props@{
boxes, nodeId, session, sessionId
} _ = do
let sessionProps = RE.pick props :: Record SessionProps
let sessionProps = RE.pick props :: Record SessionProps
pure $ authed sessionProps $
pure $ authed sessionProps $
fileLayout { nodeId, session }
fileLayout { nodeId, session }
...
@@ -303,7 +381,7 @@ routeFrame = R.createElement routeFrameCpt
...
@@ -303,7 +381,7 @@ routeFrame = R.createElement routeFrameCpt
routeFrameCpt :: R.Component RouteFrameProps
routeFrameCpt :: R.Component RouteFrameProps
routeFrameCpt = here.component "routeFrame" cpt where
routeFrameCpt = here.component "routeFrame" cpt where
cpt props@{
nodeId, nodeType, session, sessionId, boxes
} _ = do
cpt props@{
boxes, nodeId, nodeType, session, sessionId
} _ = do
let sessionProps = RE.pick props :: Record SessionProps
let sessionProps = RE.pick props :: Record SessionProps
pure $ authed sessionProps $
pure $ authed sessionProps $
frameLayout { nodeId, nodeType, session }
frameLayout { nodeId, nodeType, session }
...
@@ -313,7 +391,7 @@ team = R.createElement teamCpt
...
@@ -313,7 +391,7 @@ team = R.createElement teamCpt
teamCpt :: R.Component SessionNodeProps
teamCpt :: R.Component SessionNodeProps
teamCpt = here.component "team" cpt where
teamCpt = here.component "team" cpt where
cpt props@{
nodeId, session, sessionId, boxes
} _ = do
cpt props@{
boxes, nodeId, session, sessionId
} _ = do
let sessionProps = RE.pick props :: Record SessionProps
let sessionProps = RE.pick props :: Record SessionProps
pure $ authed sessionProps $
pure $ authed sessionProps $
corpusLayout { nodeId, session }
corpusLayout { nodeId, session }
...
@@ -332,36 +410,43 @@ textsCpt = here.component "texts" cpt
...
@@ -332,36 +410,43 @@ textsCpt = here.component "texts" cpt
, route
, route
, sessions
, sessions
, showLogin
, showLogin
, sidePanelState
, sidePanelTexts
, tasks }
, tasks }
, nodeId
, nodeId
, session
, session
, sessionId } _ = do
, sessionId } _ = do
let sessionProps = RE.pick props :: Record SessionProps
let sessionProps = RE.pick props :: Record SessionProps
pure $ authed sessionProps $
pure $ authed sessionProps $
Texts.textsWithSessionContext { frontends
Texts.textsWithSessionContext { frontends
: defaultFrontends
, nodeId
, nodeId
, session
} []
, session
where
, sidePanel: sidePanelTexts
frontends = defaultFrontends
, sidePanelState } []
user :: R2.Component SessionNodeProps
user :: R2.Component SessionNodeProps
user = R.createElement userCpt
user = R.createElement userCpt
userCpt :: R.Component SessionNodeProps
userCpt :: R.Component SessionNodeProps
userCpt = here.component "user" cpt where
userCpt = here.component "user" cpt where
cpt props@{ boxes: boxes@{ reloadForest, reloadRoot, tasks }
cpt props@{ boxes: boxes@{ reloadForest
, reloadRoot
, sidePanelState
, sidePanelTexts
, tasks }
, nodeId
, nodeId
, session
, session
, sessionId } _ = do
, sessionId } _ = do
let sessionProps = RE.pick props :: Record SessionProps
let sessionProps = RE.pick props :: Record SessionProps
pure $ authed sessionProps $
pure $ authed sessionProps $
userLayoutSessionContext { frontends
userLayoutSessionContext { frontends
: defaultFrontends
, nodeId
, nodeId
, reloadForest
, reloadForest
, reloadRoot
, reloadRoot
, session
, session
, sidePanel: sidePanelTexts
, sidePanelState
, tasks } []
, tasks } []
where frontends = defaultFrontends
type ContactProps = ( annuaireId :: NodeID | SessionNodeProps )
type ContactProps = ( annuaireId :: NodeID | SessionNodeProps )
...
@@ -370,10 +455,24 @@ contact = R.createElement contactCpt
...
@@ -370,10 +455,24 @@ contact = R.createElement contactCpt
contactCpt :: R.Component ContactProps
contactCpt :: R.Component ContactProps
contactCpt = here.component "contact" cpt where
contactCpt = here.component "contact" cpt where
cpt props@{ annuaireId, nodeId, session, sessionId
cpt props@{ annuaireId
, boxes: { reloadForest, reloadRoot, tasks } } _ = do
, boxes: { reloadForest
, reloadRoot
, sidePanelTexts
, sidePanelState
, tasks }
, nodeId
, session
, sessionId } _ = do
let sessionProps = RE.pick props :: Record SessionProps
let sessionProps = RE.pick props :: Record SessionProps
let forestedProps = RE.pick props :: Record Props
let forestedProps = RE.pick props :: Record Props
pure $ authed sessionProps $
pure $ authed sessionProps $
contactLayout { annuaireId, frontends, nodeId, reloadForest, reloadRoot, session, tasks } []
contactLayout { annuaireId
where frontends = defaultFrontends
, frontends: defaultFrontends
, nodeId
, reloadForest
, reloadRoot
, session
, sidePanel: sidePanelTexts
, sidePanelState
, tasks } []
src/Gargantext/Components/Tab.purs
View file @
12910a76
...
@@ -52,9 +52,9 @@ tab = R.createElement tabCpt
...
@@ -52,9 +52,9 @@ tab = R.createElement tabCpt
-- | A tab only shows its contents if it is currently selected
-- | A tab only shows its contents if it is currently selected
tabCpt :: R.Component TabProps
tabCpt :: R.Component TabProps
tabCpt =
R.staticComponent "G.C.Tab.
tab" cpt
tabCpt =
here.component "
tab" cpt
where
where
cpt { selected, index } children = H.div { className } children'
cpt { selected, index } children =
pure $
H.div { className } children'
where
where
same = selected == index
same = selected == index
className = "tab-pane" <> (if same then "show active" else "fade")
className = "tab-pane" <> (if same then "show active" else "fade")
...
...
src/Gargantext/Components/Table.purs
View file @
12910a76
...
@@ -139,10 +139,10 @@ tableCpt = here.component "table" cpt
...
@@ -139,10 +139,10 @@ tableCpt = here.component "table" cpt
Just (DESC d) | c == d -> [lnk (Just (ASC c)) "DESC ", lnk Nothing (columnName c)]
Just (DESC d) | c == d -> [lnk (Just (ASC c)) "DESC ", lnk Nothing (columnName c)]
_ -> [lnk (Just (ASC c)) (columnName c)]
_ -> [lnk (Just (ASC c)) (columnName c)]
pure $ container
pure $ container
{ syncResetButton
{ pageSizeControl: sizeDD { params }
, pageSizeControl: sizeDD { params }
, pageSizeDescription: textDescription state.page state.pageSize totalRecords
, pageSizeDescription: textDescription state.page state.pageSize totalRecords
, paginationLinks: pagination { params, totalPages }
, paginationLinks: pagination { params, totalPages }
, syncResetButton
, tableBody: map _.row $ A.fromFoldable rows
, tableBody: map _.row $ A.fromFoldable rows
, tableHead: H.tr {} (colHeader <$> colNames)
, tableHead: H.tr {} (colHeader <$> colNames)
}
}
...
...
src/Gargantext/Components/TopBar.purs
View file @
12910a76
...
@@ -23,7 +23,7 @@ topBar = R.createElement topBarCpt
...
@@ -23,7 +23,7 @@ topBar = R.createElement topBarCpt
topBarCpt :: R.Component TopBarProps
topBarCpt :: R.Component TopBarProps
topBarCpt = here.component "topBar" cpt
topBarCpt = here.component "topBar" cpt
where
where
cpt { handed }
_
children = do
cpt { handed } children = do
handed' <- T.useLive T.unequal handed
handed' <- T.useLive T.unequal handed
pure $ H.div { className: "navbar navbar-expand-lg navbar-dark bg-dark fixed-top"
pure $ H.div { className: "navbar navbar-expand-lg navbar-dark bg-dark fixed-top"
...
@@ -34,13 +34,13 @@ topBarCpt = here.component "topBar" cpt
...
@@ -34,13 +34,13 @@ topBarCpt = here.component "topBar" cpt
-- https://stackoverflow.com/questions/19733447/bootstrap-navbar-with-left-center-or-right-aligned-items
-- https://stackoverflow.com/questions/19733447/bootstrap-navbar-with-left-center-or-right-aligned-items
-- In practice: only apply "ml-auto" to the last element of this list, if handed == LeftHanded
-- In practice: only apply "ml-auto" to the last element of this list, if handed == LeftHanded
logo
logo
, H.ul { className: "navbar-nav " <> if handed' == LeftHanded then "ml-auto" else "" } $ reverseHanded handed'
[
, H.ul { className: "navbar-nav " <> if handed' == LeftHanded then "ml-auto" else "" } $ reverseHanded handed'
divDropdownLeft {} []
([
divDropdownLeft {} []
, handButton handed'
, handButton handed'
, smiley
, smiley
, H.li { className: "nav-item" } [ themeSwitcher { theme: defaultTheme
, H.li { className: "nav-item" } [ themeSwitcher { theme: defaultTheme
, themes: allThemes } [] ]
, themes: allThemes } [] ]
]
]
<> children)
]
]
where
where
handButton handed' = H.li { title: "If you are Left Handed you can change\n"
handButton handed' = H.li { title: "If you are Left Handed you can change\n"
...
...
src/Gargantext/Hooks/Sigmax/Types.purs
View file @
12910a76
...
@@ -19,7 +19,10 @@ import Gargantext.Types as GT
...
@@ -19,7 +19,10 @@ import Gargantext.Types as GT
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} }
--derive instance eqGraph :: Eq Graph
derive instance genericGraph :: Generic (Graph n e) _
instance eqGraphInst :: (Eq (Record n), Eq (Record e)) => Eq (Graph n e) where
eq = genericEq
--instance eqGraph :: Eq Graph where
--instance eqGraph :: Eq Graph where
-- eq (Graph {nodes: n1, edges: e1}) (Graph {nodes: n2, edges: e2}) = n1 == n2 && e1 == e2
-- eq (Graph {nodes: n1, edges: e1}) (Graph {nodes: n2, edges: e2}) = n1 == n2 && e1 == e2
...
...
src/Gargantext/Types.purs
View file @
12910a76
...
@@ -773,6 +773,14 @@ prettyNodeType nt = S.replace (S.Pattern "Node") (S.Replacement " ")
...
@@ -773,6 +773,14 @@ prettyNodeType nt = S.replace (S.Pattern "Node") (S.Replacement " ")
$ S.replace (S.Pattern "Folder") (S.Replacement " ")
$ S.replace (S.Pattern "Folder") (S.Replacement " ")
$ show nt
$ show nt
---------------------------------------------------------------------------
data SidePanelState = InitialClosed | Opened | Closed
derive instance genericSidePanelState :: Generic SidePanelState _
instance eqSidePanelState :: Eq SidePanelState where
eq = genericEq
toggleSidePanelState :: SidePanelState -> SidePanelState
toggleSidePanelState InitialClosed = Opened
toggleSidePanelState Closed = Opened
toggleSidePanelState Opened = Closed
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