Commit c56e557c authored by arturo's avatar arturo

[config] Store Graph Sidepanel expand/hide choice

* #403
parent fa4d3a5b
Pipeline #2874 failed with stage
in 0 seconds
...@@ -9463,6 +9463,11 @@ select.form-control { ...@@ -9463,6 +9463,11 @@ select.form-control {
.phylo-selection-tab__counter__value { .phylo-selection-tab__counter__value {
color: #0F81C7; color: #0F81C7;
} }
.phylo-selection-tab__counter__expand {
position: absolute;
right: 1.25rem;
bottom: 1rem;
}
.phylo-selection-tab__nil { .phylo-selection-tab__nil {
margin: 16px 20px; margin: 16px 20px;
} }
......
...@@ -9416,6 +9416,11 @@ select.form-control { ...@@ -9416,6 +9416,11 @@ select.form-control {
.phylo-selection-tab__counter__value { .phylo-selection-tab__counter__value {
color: #17a2b8; color: #17a2b8;
} }
.phylo-selection-tab__counter__expand {
position: absolute;
right: 1.25rem;
bottom: 1rem;
}
.phylo-selection-tab__nil { .phylo-selection-tab__nil {
margin: 16px 20px; margin: 16px 20px;
} }
......
...@@ -9172,6 +9172,11 @@ select.form-control { ...@@ -9172,6 +9172,11 @@ select.form-control {
.phylo-selection-tab__counter__value { .phylo-selection-tab__counter__value {
color: #5c8f94; color: #5c8f94;
} }
.phylo-selection-tab__counter__expand {
position: absolute;
right: 1.25rem;
bottom: 1rem;
}
.phylo-selection-tab__nil { .phylo-selection-tab__nil {
margin: 16px 20px; margin: 16px 20px;
} }
......
...@@ -9420,6 +9420,11 @@ select.form-control { ...@@ -9420,6 +9420,11 @@ select.form-control {
.phylo-selection-tab__counter__value { .phylo-selection-tab__counter__value {
color: #74DBEF; color: #74DBEF;
} }
.phylo-selection-tab__counter__expand {
position: absolute;
right: 1.25rem;
bottom: 1rem;
}
.phylo-selection-tab__nil { .phylo-selection-tab__nil {
margin: 16px 20px; margin: 16px 20px;
} }
......
...@@ -9421,6 +9421,11 @@ select.form-control { ...@@ -9421,6 +9421,11 @@ select.form-control {
.phylo-selection-tab__counter__value { .phylo-selection-tab__counter__value {
color: #515151; color: #515151;
} }
.phylo-selection-tab__counter__expand {
position: absolute;
right: 1.25rem;
bottom: 1rem;
}
.phylo-selection-tab__nil { .phylo-selection-tab__nil {
margin: 16px 20px; margin: 16px 20px;
} }
......
...@@ -32,10 +32,11 @@ import Gargantext.Components.NgramsTable.Core as NTC ...@@ -32,10 +32,11 @@ import Gargantext.Components.NgramsTable.Core as NTC
import Gargantext.Config.REST (AffRESTError) import Gargantext.Config.REST (AffRESTError)
import Gargantext.Data.Array (mapMaybe) import Gargantext.Data.Array (mapMaybe)
import Gargantext.Ends (Frontends) import Gargantext.Ends (Frontends)
import Gargantext.Hooks.FirstEffect (useFirstEffect')
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 (CTabNgramType, FrontendError(..), NodeID, TabSubType(..), TabType(..), TermList(..), modeTabType) import Gargantext.Types (CTabNgramType, FrontendError(..), NodeID, TabSubType(..), TabType(..), TermList(..), modeTabType)
import Gargantext.Utils (nbsp, (?)) import Gargantext.Utils (nbsp, setter, (?))
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 as Math import Math as Math
...@@ -258,23 +259,33 @@ selectedNodes = R2.leaf selectedNodesCpt ...@@ -258,23 +259,33 @@ selectedNodes = R2.leaf selectedNodesCpt
selectedNodesCpt :: R.Component SelectedNodesProps selectedNodesCpt :: R.Component SelectedNodesProps
selectedNodesCpt = here.component "selectedNodes" cpt where selectedNodesCpt = here.component "selectedNodes" cpt where
cpt props _ = do cpt props _ = do
-- States -- | States
-- |
{ selectedNodeIds { selectedNodeIds
, graph , graph
, showNGramsActions , expandSelection
} <- GraphStore.use } <- GraphStore.use
showNGramsActions' <- R2.useLive' showNGramsActions
selectedNodeIds' <- R2.useLive' selectedNodeIds selectedNodeIds' <- R2.useLive' selectedNodeIds
graph' <- R2.useLive' graph graph' <- R2.useLive' graph
expandSelection' <- R2.useLive' expandSelection
-- Behaviors -- | Effects
-- |
-- transfer local Component change to Local Storage cache
useFirstEffect' $
flip T.listen expandSelection onExpandSelectionChange
-- | Behaviors
-- |
let let
onBadgeClick id _ = T.write_ (Set.singleton id) selectedNodeIds onBadgeClick id _ = T.write_ (Set.singleton id) selectedNodeIds
onExpandClick _ = T.modify_ (not) showNGramsActions onExpandClick _ = T.modify_ (not) expandSelection
-- Render -- | Render
-- |
pure $ pure $
H.ul H.ul
...@@ -308,7 +319,7 @@ selectedNodesCpt = here.component "selectedNodes" cpt where ...@@ -308,7 +319,7 @@ selectedNodesCpt = here.component "selectedNodes" cpt where
, ,
-- Expand NGrams actions -- Expand NGrams actions
B.iconButton B.iconButton
{ name: showNGramsActions' ? { name: expandSelection' ?
"caret-up" $ "caret-up" $
"caret-down" "caret-down"
, className: "graph-selected-nodes__expand" , className: "graph-selected-nodes__expand"
...@@ -317,7 +328,7 @@ selectedNodesCpt = here.component "selectedNodes" cpt where ...@@ -317,7 +328,7 @@ selectedNodesCpt = here.component "selectedNodes" cpt where
] ]
, ,
-- NGrams actions -- NGrams actions
R2.when showNGramsActions' $ R2.when expandSelection' $
H.li H.li
{ className: intercalate " " { className: intercalate " "
...@@ -362,6 +373,12 @@ selectedNodesCpt = here.component "selectedNodes" cpt where ...@@ -362,6 +373,12 @@ selectedNodesCpt = here.component "selectedNodes" cpt where
] ]
] ]
onExpandSelectionChange :: T.Change Boolean -> Effect Unit
onExpandSelectionChange { new } = do
cache <- R2.loadLocalStorageState' R2.graphParamsKey GET.defaultCacheParams
let update = setter (_ { expandSelection = new }) cache
R2.setLocalStorageState R2.graphParamsKey update
--------------------------------------------------------- ---------------------------------------------------------
neighborhood :: R2.Leaf () neighborhood :: R2.Leaf ()
...@@ -370,17 +387,18 @@ neighborhood = R2.leaf neighborhoodCpt ...@@ -370,17 +387,18 @@ neighborhood = R2.leaf neighborhoodCpt
neighborhoodCpt :: R.Memo () neighborhoodCpt :: R.Memo ()
neighborhoodCpt = R.memo' $ here.component "neighborhood" cpt where neighborhoodCpt = R.memo' $ here.component "neighborhood" cpt where
cpt _ _ = do cpt _ _ = do
-- States -- | States
-- |
{ selectedNodeIds { selectedNodeIds
, graph , graph
, showWordCloud , expandNeighborhood
} <- GraphStore.use } <- GraphStore.use
selectedNodeIds' <- selectedNodeIds' <-
R2.useLive' selectedNodeIds R2.useLive' selectedNodeIds
showWordCloud' <- expandNeighborhood' <-
R2.useLive' showWordCloud R2.useLive' expandNeighborhood
graph' <- graph' <-
R2.useLive' graph R2.useLive' graph
...@@ -394,7 +412,8 @@ neighborhoodCpt = R.memo' $ here.component "neighborhood" cpt where ...@@ -394,7 +412,8 @@ neighborhoodCpt = R.memo' $ here.component "neighborhood" cpt where
termCount /\ termCountBox <- termCount /\ termCountBox <-
R2.useBox' 0 R2.useBox' 0
-- Computed -- | Computed
-- |
let let
minSize = F.foldl Math.min 0.0 (Seq.map _.size (SigmaxT.graphNodes graph')) minSize = F.foldl Math.min 0.0 (Seq.map _.size (SigmaxT.graphNodes graph'))
...@@ -405,13 +424,20 @@ neighborhoodCpt = R.memo' $ here.component "neighborhood" cpt where ...@@ -405,13 +424,20 @@ neighborhoodCpt = R.memo' $ here.component "neighborhood" cpt where
withTruncateResults = (termCount > maxTruncateResult) && (not showMore) withTruncateResults = (termCount > maxTruncateResult) && (not showMore)
-- Behaviors -- | Behaviors
-- |
let let
onBadgeClick id _ = T.write_ (Set.singleton id) selectedNodeIds onBadgeClick id _ = T.write_ (Set.singleton id) selectedNodeIds
onExpandClick _ = T.modify_ (not) showWordCloud onExpandClick _ = T.modify_ (not) expandNeighborhood
-- | Effects
-- |
-- transfer local Component change to Local Storage cache
useFirstEffect' $
flip T.listen expandNeighborhood onExpandNeighborhoodChange
-- Effects
R.useEffect1' selectedNodeIds' do R.useEffect1' selectedNodeIds' do
let refreshed = neighbourBadges graph' selectedNodeIds' let refreshed = neighbourBadges graph' selectedNodeIds'
let count = Seq.length refreshed let count = Seq.length refreshed
...@@ -420,7 +446,8 @@ neighborhoodCpt = R.memo' $ here.component "neighborhood" cpt where ...@@ -420,7 +446,8 @@ neighborhoodCpt = R.memo' $ here.component "neighborhood" cpt where
T.write_ ordered termListBox T.write_ ordered termListBox
T.write_ false showMoreBox T.write_ false showMoreBox
-- Render -- | Render
-- |
pure $ pure $
H.ul H.ul
...@@ -446,7 +473,7 @@ neighborhoodCpt = R.memo' $ here.component "neighborhood" cpt where ...@@ -446,7 +473,7 @@ neighborhoodCpt = R.memo' $ here.component "neighborhood" cpt where
, ,
-- Expand word cloud -- Expand word cloud
B.iconButton B.iconButton
{ name: showWordCloud' ? { name: expandNeighborhood' ?
"caret-up" $ "caret-up" $
"caret-down" "caret-down"
, className: "graph-neighborhood__expand" , className: "graph-neighborhood__expand"
...@@ -456,7 +483,7 @@ neighborhoodCpt = R.memo' $ here.component "neighborhood" cpt where ...@@ -456,7 +483,7 @@ neighborhoodCpt = R.memo' $ here.component "neighborhood" cpt where
] ]
, ,
-- Word cloud -- Word cloud
R2.when showWordCloud' $ R2.when expandNeighborhood' $
H.li H.li
{ className: "list-group-item"} { className: "list-group-item"}
...@@ -505,6 +532,12 @@ neighborhoodCpt = R.memo' $ here.component "neighborhood" cpt where ...@@ -505,6 +532,12 @@ neighborhoodCpt = R.memo' $ here.component "neighborhood" cpt where
] ]
] ]
onExpandNeighborhoodChange :: T.Change Boolean -> Effect Unit
onExpandNeighborhoodChange { new } = do
cache <- R2.loadLocalStorageState' R2.graphParamsKey GET.defaultCacheParams
let update = setter (_ { expandNeighborhood = new }) cache
R2.setLocalStorageState R2.graphParamsKey update
--------------------------------------------------------- ---------------------------------------------------------
type UpdateTermButtonProps = type UpdateTermButtonProps =
......
...@@ -14,6 +14,7 @@ import Data.Set as Set ...@@ -14,6 +14,7 @@ import Data.Set as Set
import Gargantext.Components.GraphExplorer.Types as GET import Gargantext.Components.GraphExplorer.Types as GET
import Gargantext.Hooks.Sigmax.Types as SigmaxT import Gargantext.Hooks.Sigmax.Types as SigmaxT
import Gargantext.Types as GT import Gargantext.Types as GT
import Gargantext.Utils (getter)
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.Stores as Stores import Gargantext.Utils.Stores as Stores
...@@ -35,8 +36,8 @@ type Store = ...@@ -35,8 +36,8 @@ type Store =
, sideTab :: T.Box GET.SideTab , sideTab :: T.Box GET.SideTab
, showSidebar :: T.Box GT.SidePanelState , showSidebar :: T.Box GT.SidePanelState
, showDoc :: T.Box (Maybe GET.GraphSideDoc) , showDoc :: T.Box (Maybe GET.GraphSideDoc)
, showWordCloud :: T.Box Boolean , expandSelection :: T.Box Boolean
, showNGramsActions :: T.Box Boolean , expandNeighborhood :: T.Box Boolean
-- Controls -- Controls
, multiSelectEnabled :: T.Box Boolean , multiSelectEnabled :: T.Box Boolean
, edgeConfluence :: T.Box Range.NumberRange , edgeConfluence :: T.Box Range.NumberRange
...@@ -65,8 +66,8 @@ type State = ...@@ -65,8 +66,8 @@ type State =
, sideTab :: GET.SideTab , sideTab :: GET.SideTab
, showSidebar :: GT.SidePanelState , showSidebar :: GT.SidePanelState
, showDoc :: Maybe GET.GraphSideDoc , showDoc :: Maybe GET.GraphSideDoc
, showWordCloud :: Boolean , expandSelection :: Boolean
, showNGramsActions :: Boolean , expandNeighborhood :: Boolean
-- Controls -- Controls
, multiSelectEnabled :: Boolean , multiSelectEnabled :: Boolean
, edgeConfluence :: Range.NumberRange , edgeConfluence :: Range.NumberRange
...@@ -90,8 +91,8 @@ options :: ...@@ -90,8 +91,8 @@ options ::
, showDoc :: Maybe GET.GraphSideDoc , showDoc :: Maybe GET.GraphSideDoc
, showSidebar :: GT.SidePanelState , showSidebar :: GT.SidePanelState
, sideTab :: GET.SideTab , sideTab :: GET.SideTab
, showWordCloud :: Boolean , expandSelection :: Boolean
, showNGramsActions :: Boolean , expandNeighborhood :: Boolean
-- Controls -- Controls
, labelSize :: Number , labelSize :: Number
, mouseSelectorSize :: Number , mouseSelectorSize :: Number
...@@ -111,8 +112,8 @@ options = ...@@ -111,8 +112,8 @@ options =
, sideTab : GET.SideTabLegend , sideTab : GET.SideTabLegend
, showSidebar : GT.InitialClosed , showSidebar : GT.InitialClosed
, showDoc : Nothing , showDoc : Nothing
, showWordCloud : true , expandSelection : getter _.expandSelection GET.defaultCacheParams
, showNGramsActions : true , expandNeighborhood : getter _.expandNeighborhood GET.defaultCacheParams
-- Controls -- Controls
, multiSelectEnabled : false , multiSelectEnabled : false
, labelSize : 14.0 , labelSize : 14.0
......
...@@ -3,11 +3,12 @@ module Gargantext.Components.GraphExplorer.Types where ...@@ -3,11 +3,12 @@ module Gargantext.Components.GraphExplorer.Types where
import Gargantext.Prelude import Gargantext.Prelude
import Data.Array ((!!), length) import Data.Array ((!!), length)
import Data.Generic.Rep (class Generic)
import Data.Eq.Generic (genericEq) import Data.Eq.Generic (genericEq)
import Data.Generic.Rep (class Generic)
import Data.Maybe (Maybe(..), fromJust) import Data.Maybe (Maybe(..), fromJust)
import Data.Newtype (class Newtype) import Data.Newtype (class Newtype)
import Data.Ord.Generic (genericCompare) import Data.Ord.Generic (genericCompare)
import Data.Show.Generic (genericShow)
import Data.Symbol (SProxy(..)) import Data.Symbol (SProxy(..))
import Partial.Unsafe (unsafePartial) import Partial.Unsafe (unsafePartial)
import Record as Record import Record as Record
...@@ -267,3 +268,26 @@ instance JSON.WriteForeign HyperdataGraph where ...@@ -267,3 +268,26 @@ instance JSON.WriteForeign HyperdataGraph where
data Stage = Init | Ready | Cleanup data Stage = Init | Ready | Cleanup
derive instance Generic Stage _ derive instance Generic Stage _
derive instance Eq Stage derive instance Eq Stage
-----------------------------------------------------------------------
newtype CacheParams = CacheParams
{ expandSelection :: Boolean
, expandNeighborhood :: Boolean
}
derive instance Newtype CacheParams _
derive instance Generic CacheParams _
derive instance Eq CacheParams
instance Show CacheParams where show = genericShow
derive newtype instance JSON.ReadForeign CacheParams
derive newtype instance JSON.WriteForeign CacheParams
-- (!) in case cache storage (ie. JavaScript Local Storage) returns an invalid
-- objects (eg. possible data migration), this will safely set new default
-- values
defaultCacheParams :: CacheParams
defaultCacheParams = CacheParams
{ expandSelection : true
, expandNeighborhood: true
}
...@@ -11,11 +11,13 @@ import Gargantext.Components.Bootstrap as B ...@@ -11,11 +11,13 @@ import Gargantext.Components.Bootstrap as B
import Gargantext.Components.PhyloExplorer.API (get) import Gargantext.Components.PhyloExplorer.API (get)
import Gargantext.Components.PhyloExplorer.Layout (layout) import Gargantext.Components.PhyloExplorer.Layout (layout)
import Gargantext.Components.PhyloExplorer.Store as PhyloStore import Gargantext.Components.PhyloExplorer.Store as PhyloStore
import Gargantext.Components.PhyloExplorer.Types (PhyloDataSet) import Gargantext.Components.PhyloExplorer.Types (CacheParams, PhyloDataSet, defaultCacheParams)
import Gargantext.Config.REST (logRESTError) import Gargantext.Config.REST (logRESTError)
import Gargantext.Hooks.FirstEffect (useFirstEffect')
import Gargantext.Hooks.Loader (useLoaderEffect) import Gargantext.Hooks.Loader (useLoaderEffect)
import Gargantext.Hooks.Session (useSession) import Gargantext.Hooks.Session (useSession)
import Gargantext.Types (NodeID) import Gargantext.Types (NodeID)
import Gargantext.Utils (getter)
import Gargantext.Utils.Reactix as R2 import Gargantext.Utils.Reactix as R2
import Reactix as R import Reactix as R
import Reactix.DOM.HTML as H import Reactix.DOM.HTML as H
...@@ -38,7 +40,8 @@ nodeCpt = here.component "node" cpt where ...@@ -38,7 +40,8 @@ nodeCpt = here.component "node" cpt where
-- | -- |
session <- useSession session <- useSession
state' /\ state <- R2.useBox' Nothing state' /\ state <- R2.useBox' (Nothing :: Maybe PhyloDataSet)
cache' /\ cache <- R2.useBox' (defaultCacheParams :: CacheParams)
-- | Computed -- | Computed
-- | -- |
...@@ -47,6 +50,10 @@ nodeCpt = here.component "node" cpt where ...@@ -47,6 +50,10 @@ nodeCpt = here.component "node" cpt where
-- | Hooks -- | Hooks
-- | -- |
-- load Local Storage cache (if exists)
useFirstEffect' $
R2.loadLocalStorageState R2.phyloParamsKey cache
useLoaderEffect useLoaderEffect
{ errorHandler { errorHandler
, loader: get session , loader: get session
...@@ -93,6 +100,9 @@ nodeCpt = here.component "node" cpt where ...@@ -93,6 +100,9 @@ nodeCpt = here.component "node" cpt where
-- Data -- Data
{ phyloDataSet { phyloDataSet
, phyloId: nodeId , phyloId: nodeId
-- (cache params)
, expandSelection: getter _.expandSelection cache'
, expandNeighborhood: getter _.expandNeighborhood cache'
-- (default options) -- (default options)
} `Record.merge` PhyloStore.options } `Record.merge` PhyloStore.options
......
...@@ -17,10 +17,12 @@ import Gargantext.Components.GraphExplorer.Layout (convert, layout) ...@@ -17,10 +17,12 @@ import Gargantext.Components.GraphExplorer.Layout (convert, layout)
import Gargantext.Components.GraphExplorer.Store as GraphStore import Gargantext.Components.GraphExplorer.Store as GraphStore
import Gargantext.Components.GraphExplorer.Types as GET import Gargantext.Components.GraphExplorer.Types as GET
import Gargantext.Config.REST (logRESTError) import Gargantext.Config.REST (logRESTError)
import Gargantext.Hooks.FirstEffect (useFirstEffect')
import Gargantext.Hooks.Loader (useLoaderEffect) import Gargantext.Hooks.Loader (useLoaderEffect)
import Gargantext.Hooks.Session (useSession) import Gargantext.Hooks.Session (useSession)
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.Utils (getter)
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 Reactix as R import Reactix as R
...@@ -48,9 +50,19 @@ nodeCpt = here.component "node" cpt where ...@@ -48,9 +50,19 @@ nodeCpt = here.component "node" cpt where
graphVersion' <- R2.useLive' graphVersion graphVersion' <- R2.useLive' graphVersion
state' /\ state <- R2.useBox' Nothing state' /\ state <- R2.useBox' Nothing
cache' /\ cache <- R2.useBox' (GET.defaultCacheParams :: GET.CacheParams)
-- | Computed
-- |
let errorHandler = logRESTError here "[explorerLayout]"
-- | Hooks -- | Hooks
-- | -- |
-- load Local Storage cache (if exists)
useFirstEffect' $
R2.loadLocalStorageState R2.graphParamsKey cache
useLoaderEffect useLoaderEffect
{ errorHandler { errorHandler
, loader: GraphAPI.getNodes session graphVersion' , loader: GraphAPI.getNodes session graphVersion'
...@@ -80,21 +92,20 @@ nodeCpt = here.component "node" cpt where ...@@ -80,21 +92,20 @@ nodeCpt = here.component "node" cpt where
{} {}
, defaultSlot: , defaultSlot:
R2.fromMaybe state' handler R2.fromMaybe state' \loaded ->
let
GET.HyperdataGraph { graph: hyperdataGraph } = loaded
Tuple mMetaData graph = convert hyperdataGraph
in
hydrateStore
{ graph
, hyperdataGraph: loaded
, mMetaData
, graphId
, cacheParams: cache'
}
} }
where
errorHandler = logRESTError here "[explorerLayout]"
handler loaded@(GET.HyperdataGraph { graph: hyperdataGraph }) =
hydrateStore
{ graph
, hyperdataGraph: loaded
, mMetaData
, graphId
}
where
Tuple mMetaData graph = convert hyperdataGraph
-------------------------------------------------------- --------------------------------------------------------
type HydrateStoreProps = type HydrateStoreProps =
...@@ -102,6 +113,7 @@ type HydrateStoreProps = ...@@ -102,6 +113,7 @@ type HydrateStoreProps =
, graph :: SigmaxT.SGraph , graph :: SigmaxT.SGraph
, hyperdataGraph :: GET.HyperdataGraph , hyperdataGraph :: GET.HyperdataGraph
, graphId :: GET.GraphId , graphId :: GET.GraphId
, cacheParams :: GET.CacheParams
) )
hydrateStore:: R2.Leaf HydrateStoreProps hydrateStore:: R2.Leaf HydrateStoreProps
...@@ -113,6 +125,7 @@ hydrateStoreCpt = here.component "hydrateStore" cpt where ...@@ -113,6 +125,7 @@ hydrateStoreCpt = here.component "hydrateStore" cpt where
, graph , graph
, graphId , graphId
, hyperdataGraph , hyperdataGraph
, cacheParams
} _ = do } _ = do
-- | Computed -- | Computed
-- | -- |
...@@ -144,6 +157,9 @@ hydrateStoreCpt = here.component "hydrateStore" cpt where ...@@ -144,6 +157,9 @@ hydrateStoreCpt = here.component "hydrateStore" cpt where
{ min: 0.0 { min: 0.0
, max: I.toNumber $ Seq.length $ SigmaxT.graphEdges graph , max: I.toNumber $ Seq.length $ SigmaxT.graphEdges graph
} }
-- (cache options)
, expandSelection: getter _.expandSelection cacheParams
, expandNeighborhood: getter _.expandNeighborhood cacheParams
-- (default options) -- (default options)
} `Record.merge` GraphStore.options } `Record.merge` GraphStore.options
......
...@@ -13,8 +13,9 @@ import Effect (Effect) ...@@ -13,8 +13,9 @@ import Effect (Effect)
import Gargantext.Components.Bootstrap as B import Gargantext.Components.Bootstrap as B
import Gargantext.Components.Bootstrap.Types (ButtonVariant(..), Variant(..)) import Gargantext.Components.Bootstrap.Types (ButtonVariant(..), Variant(..))
import Gargantext.Components.PhyloExplorer.Store as PhyloStore import Gargantext.Components.PhyloExplorer.Store as PhyloStore
import Gargantext.Components.PhyloExplorer.Types (ExtractedCount(..), ExtractedTerm(..)) import Gargantext.Components.PhyloExplorer.Types (ExtractedCount(..), ExtractedTerm(..), defaultCacheParams)
import Gargantext.Utils (nbsp, (?)) import Gargantext.Hooks.FirstEffect (useFirstEffect')
import Gargantext.Utils (nbsp, setter, (?))
import Gargantext.Utils.Reactix as R2 import Gargantext.Utils.Reactix as R2
import Reactix as R import Reactix as R
import Reactix.DOM.HTML as H import Reactix.DOM.HTML as H
...@@ -28,22 +29,23 @@ type Props = ...@@ -28,22 +29,23 @@ type Props =
selectionTab :: R2.Leaf Props selectionTab :: R2.Leaf Props
selectionTab = R2.leaf component selectionTab = R2.leaf component
componentName :: String here :: R2.Here
componentName = "Gargantext.Components.PhyloExplorer.SideBar.SelectionTab" here = R2.here "Gargantext.Components.PhyloExplorer.SideBar.SelectionTab"
component :: R.Component Props component :: R.Component Props
component = R.hooksComponent componentName cpt where component = here.component "main" cpt where
cpt { selectTermCallback cpt { selectTermCallback
} _ = do } _ = do
-- | State -- | State
-- | -- |
store <- PhyloStore.use store <- PhyloStore.use
extractedTerms <- R2.useLive' store.extractedTerms extractedTerms <- R2.useLive' store.extractedTerms
extractedCount <- R2.useLive' store.extractedCount extractedCount <- R2.useLive' store.extractedCount
selectedTerm <- R2.useLive' store.selectedTerm selectedTerm <- R2.useLive' store.selectedTerm
selectedBranch <- R2.useLive' store.selectedBranch selectedBranch <- R2.useLive' store.selectedBranch
selectedSource <- R2.useLive' store.selectedSource selectedSource <- R2.useLive' store.selectedSource
expandNeighborhood <- R2.useLive' store.expandNeighborhood
showMore' /\ showMore <- R2.useBox' false showMore' /\ showMore <- R2.useBox' false
...@@ -68,6 +70,17 @@ component = R.hooksComponent componentName cpt where ...@@ -68,6 +70,17 @@ component = R.hooksComponent componentName cpt where
R.useEffect1' extractedTerms $ R.useEffect1' extractedTerms $
T.write_ false showMore T.write_ false showMore
-- transfer local Component change to Local Storage cache
useFirstEffect' $
flip T.listen store.expandNeighborhood onExpandNeighborhoodChange
-- | Behaviors
-- |
let
onExpandClick _ = T.modify_ (not) store.expandNeighborhood
-- | Render -- | Render
-- | -- |
pure $ pure $
...@@ -249,53 +262,64 @@ component = R.hooksComponent componentName cpt where ...@@ -249,53 +262,64 @@ component = R.hooksComponent componentName cpt where
, ,
detailsCount count.branchCount "branches" false detailsCount count.branchCount "branches" false
] ]
,
-- Expand word cloud
B.iconButton
{ name: expandNeighborhood ?
"caret-up" $
"caret-down"
, className: "phylo-selection-tab__counter__expand"
, callback: onExpandClick
}
]