Commit 7a559d4e authored by arturo's avatar arturo

[phylo] add document focus

* #375
parent 61422c57
Pipeline #2889 failed with stage
in 0 seconds
...@@ -7864,14 +7864,15 @@ input[type=range]:-moz-focusring { ...@@ -7864,14 +7864,15 @@ input[type=range]:-moz-focusring {
background-color: #121212; background-color: #121212;
} }
.graph-doc-list__item--selected::before { .graph-doc-list__item--selected::before {
top: 0;
right: 0;
bottom: 0;
left: 0;
content: ""; content: "";
position: absolute; position: absolute;
z-index: 1; z-index: 1;
width: 2px; width: 2px;
background-color: #0F81C7; background-color: #0F81C7;
left: 0;
top: 0;
bottom: 0;
} }
.graph-doc-list__item--selected:first-child::before { .graph-doc-list__item--selected:first-child::before {
border-top-left-radius: 0.25rem; border-top-left-radius: 0.25rem;
...@@ -9280,6 +9281,20 @@ select.form-control { ...@@ -9280,6 +9281,20 @@ select.form-control {
border-right: 1px solid #dee2e6; border-right: 1px solid #dee2e6;
} }
.phylo__focus {
flex-grow: 1;
pointer-events: all;
position: relative;
}
.phylo__focus__inner {
top: 0;
right: 0;
bottom: 0;
left: 0;
position: absolute;
background-color: #000000;
}
.phylo-isoline { .phylo-isoline {
display: flex; display: flex;
position: relative; position: relative;
...@@ -9443,7 +9458,7 @@ select.form-control { ...@@ -9443,7 +9458,7 @@ select.form-control {
font-weight: bold; font-weight: bold;
} }
.phylo-selection-tab__selection { .phylo-selection-tab__selection {
margin: 16px 20px 0; margin: 16px 20px;
} }
.phylo-selection-tab__selection__item { .phylo-selection-tab__selection__item {
white-space: normal; white-space: normal;
...@@ -9475,6 +9490,55 @@ select.form-control { ...@@ -9475,6 +9490,55 @@ select.form-control {
color: #ADB5BD; color: #ADB5BD;
text-align: center; text-align: center;
} }
.phylo-selection-tab__extracted-docs {
margin: 16px 20px;
}
.phylo-doc-list__item {
cursor: pointer;
display: flex;
align-items: flex-start;
transition: all 0.2s ease-in-out;
}
.phylo-doc-list__item:focus {
outline: 0;
}
.phylo-doc-list__item:hover {
background-color: #121212;
}
.phylo-doc-list__item--selected::before {
top: 0;
right: 0;
bottom: 0;
left: 0;
content: "";
position: absolute;
z-index: 1;
width: 2px;
background-color: #0F81C7;
}
.phylo-doc-list__item--selected:first-child::before {
border-top-left-radius: 0.25rem;
}
.phylo-doc-list__item--selected:last-child::before {
border-bottom-left-radius: 0.25rem;
}
.phylo-doc-list__item__main {
flex-grow: 1;
padding-right: 1.25rem;
}
.phylo-doc-list__item__title, .phylo-doc-list__item__source, .phylo-doc-list__item__date {
line-height: 1.3;
margin-bottom: 4px;
}
.phylo-doc-list__item__source {
font-size: 15px;
color: #DEE2E6;
}
.phylo-doc-list__item__date {
font-size: 14px;
color: #CED4DA;
}
.phylo-toolbar { .phylo-toolbar {
display: flex; display: flex;
......
...@@ -7817,14 +7817,15 @@ input[type=range]:-moz-focusring { ...@@ -7817,14 +7817,15 @@ input[type=range]:-moz-focusring {
background-color: #FCFCFC; background-color: #FCFCFC;
} }
.graph-doc-list__item--selected::before { .graph-doc-list__item--selected::before {
top: 0;
right: 0;
bottom: 0;
left: 0;
content: ""; content: "";
position: absolute; position: absolute;
z-index: 1; z-index: 1;
width: 2px; width: 2px;
background-color: #17a2b8; background-color: #17a2b8;
left: 0;
top: 0;
bottom: 0;
} }
.graph-doc-list__item--selected:first-child::before { .graph-doc-list__item--selected:first-child::before {
border-top-left-radius: 0.25rem; border-top-left-radius: 0.25rem;
...@@ -9233,6 +9234,20 @@ select.form-control { ...@@ -9233,6 +9234,20 @@ select.form-control {
border-right: 1px solid #dee2e6; border-right: 1px solid #dee2e6;
} }
.phylo__focus {
flex-grow: 1;
pointer-events: all;
position: relative;
}
.phylo__focus__inner {
top: 0;
right: 0;
bottom: 0;
left: 0;
position: absolute;
background-color: #fff;
}
.phylo-isoline { .phylo-isoline {
display: flex; display: flex;
position: relative; position: relative;
...@@ -9396,7 +9411,7 @@ select.form-control { ...@@ -9396,7 +9411,7 @@ select.form-control {
font-weight: bold; font-weight: bold;
} }
.phylo-selection-tab__selection { .phylo-selection-tab__selection {
margin: 16px 20px 0; margin: 16px 20px;
} }
.phylo-selection-tab__selection__item { .phylo-selection-tab__selection__item {
white-space: normal; white-space: normal;
...@@ -9428,6 +9443,55 @@ select.form-control { ...@@ -9428,6 +9443,55 @@ select.form-control {
color: #ADB5BD; color: #ADB5BD;
text-align: center; text-align: center;
} }
.phylo-selection-tab__extracted-docs {
margin: 16px 20px;
}
.phylo-doc-list__item {
cursor: pointer;
display: flex;
align-items: flex-start;
transition: all 0.2s ease-in-out;
}
.phylo-doc-list__item:focus {
outline: 0;
}
.phylo-doc-list__item:hover {
background-color: #FCFCFC;
}
.phylo-doc-list__item--selected::before {
top: 0;
right: 0;
bottom: 0;
left: 0;
content: "";
position: absolute;
z-index: 1;
width: 2px;
background-color: #17a2b8;
}
.phylo-doc-list__item--selected:first-child::before {
border-top-left-radius: 0.25rem;
}
.phylo-doc-list__item--selected:last-child::before {
border-bottom-left-radius: 0.25rem;
}
.phylo-doc-list__item__main {
flex-grow: 1;
padding-right: 1.25rem;
}
.phylo-doc-list__item__title, .phylo-doc-list__item__source, .phylo-doc-list__item__date {
line-height: 1.3;
margin-bottom: 4px;
}
.phylo-doc-list__item__source {
font-size: 15px;
color: #495057;
}
.phylo-doc-list__item__date {
font-size: 14px;
color: #6C757D;
}
.phylo-toolbar { .phylo-toolbar {
display: flex; display: flex;
......
...@@ -7573,14 +7573,15 @@ input[type=range]:-moz-focusring { ...@@ -7573,14 +7573,15 @@ input[type=range]:-moz-focusring {
background-color: #FCFCFC; background-color: #FCFCFC;
} }
.graph-doc-list__item--selected::before { .graph-doc-list__item--selected::before {
top: 0;
right: 0;
bottom: 0;
left: 0;
content: ""; content: "";
position: absolute; position: absolute;
z-index: 1; z-index: 1;
width: 2px; width: 2px;
background-color: #5c8f94; background-color: #5c8f94;
left: 0;
top: 0;
bottom: 0;
} }
.graph-doc-list__item--selected:first-child::before { .graph-doc-list__item--selected:first-child::before {
border-top-left-radius: 0.25rem; border-top-left-radius: 0.25rem;
...@@ -8989,6 +8990,20 @@ select.form-control { ...@@ -8989,6 +8990,20 @@ select.form-control {
border-right: 1px solid #dee2e6; border-right: 1px solid #dee2e6;
} }
.phylo__focus {
flex-grow: 1;
pointer-events: all;
position: relative;
}
.phylo__focus__inner {
top: 0;
right: 0;
bottom: 0;
left: 0;
position: absolute;
background-color: #fff;
}
.phylo-isoline { .phylo-isoline {
display: flex; display: flex;
position: relative; position: relative;
...@@ -9152,7 +9167,7 @@ select.form-control { ...@@ -9152,7 +9167,7 @@ select.form-control {
font-weight: bold; font-weight: bold;
} }
.phylo-selection-tab__selection { .phylo-selection-tab__selection {
margin: 16px 20px 0; margin: 16px 20px;
} }
.phylo-selection-tab__selection__item { .phylo-selection-tab__selection__item {
white-space: normal; white-space: normal;
...@@ -9184,6 +9199,55 @@ select.form-control { ...@@ -9184,6 +9199,55 @@ select.form-control {
color: #ADB5BD; color: #ADB5BD;
text-align: center; text-align: center;
} }
.phylo-selection-tab__extracted-docs {
margin: 16px 20px;
}
.phylo-doc-list__item {
cursor: pointer;
display: flex;
align-items: flex-start;
transition: all 0.2s ease-in-out;
}
.phylo-doc-list__item:focus {
outline: 0;
}
.phylo-doc-list__item:hover {
background-color: #FCFCFC;
}
.phylo-doc-list__item--selected::before {
top: 0;
right: 0;
bottom: 0;
left: 0;
content: "";
position: absolute;
z-index: 1;
width: 2px;
background-color: #5c8f94;
}
.phylo-doc-list__item--selected:first-child::before {
border-top-left-radius: 0.25rem;
}
.phylo-doc-list__item--selected:last-child::before {
border-bottom-left-radius: 0.25rem;
}
.phylo-doc-list__item__main {
flex-grow: 1;
padding-right: 1.25rem;
}
.phylo-doc-list__item__title, .phylo-doc-list__item__source, .phylo-doc-list__item__date {
line-height: 1.3;
margin-bottom: 4px;
}
.phylo-doc-list__item__source {
font-size: 15px;
color: #495057;
}
.phylo-doc-list__item__date {
font-size: 14px;
color: #6C757D;
}
.phylo-toolbar { .phylo-toolbar {
display: flex; display: flex;
......
...@@ -7821,14 +7821,15 @@ input[type=range]:-moz-focusring { ...@@ -7821,14 +7821,15 @@ input[type=range]:-moz-focusring {
background-color: #FCFCFC; background-color: #FCFCFC;
} }
.graph-doc-list__item--selected::before { .graph-doc-list__item--selected::before {
top: 0;
right: 0;
bottom: 0;
left: 0;
content: ""; content: "";
position: absolute; position: absolute;
z-index: 1; z-index: 1;
width: 2px; width: 2px;
background-color: #74DBEF; background-color: #74DBEF;
left: 0;
top: 0;
bottom: 0;
} }
.graph-doc-list__item--selected:first-child::before { .graph-doc-list__item--selected:first-child::before {
border-top-left-radius: 0.25rem; border-top-left-radius: 0.25rem;
...@@ -9237,6 +9238,20 @@ select.form-control { ...@@ -9237,6 +9238,20 @@ select.form-control {
border-right: 1px solid #dee2e6; border-right: 1px solid #dee2e6;
} }
.phylo__focus {
flex-grow: 1;
pointer-events: all;
position: relative;
}
.phylo__focus__inner {
top: 0;
right: 0;
bottom: 0;
left: 0;
position: absolute;
background-color: #fff;
}
.phylo-isoline { .phylo-isoline {
display: flex; display: flex;
position: relative; position: relative;
...@@ -9400,7 +9415,7 @@ select.form-control { ...@@ -9400,7 +9415,7 @@ select.form-control {
font-weight: bold; font-weight: bold;
} }
.phylo-selection-tab__selection { .phylo-selection-tab__selection {
margin: 16px 20px 0; margin: 16px 20px;
} }
.phylo-selection-tab__selection__item { .phylo-selection-tab__selection__item {
white-space: normal; white-space: normal;
...@@ -9432,6 +9447,55 @@ select.form-control { ...@@ -9432,6 +9447,55 @@ select.form-control {
color: #ADB5BD; color: #ADB5BD;
text-align: center; text-align: center;
} }
.phylo-selection-tab__extracted-docs {
margin: 16px 20px;
}
.phylo-doc-list__item {
cursor: pointer;
display: flex;
align-items: flex-start;
transition: all 0.2s ease-in-out;
}
.phylo-doc-list__item:focus {
outline: 0;
}
.phylo-doc-list__item:hover {
background-color: #FCFCFC;
}
.phylo-doc-list__item--selected::before {
top: 0;
right: 0;
bottom: 0;
left: 0;
content: "";
position: absolute;
z-index: 1;
width: 2px;
background-color: #74DBEF;
}
.phylo-doc-list__item--selected:first-child::before {
border-top-left-radius: 0.25rem;
}
.phylo-doc-list__item--selected:last-child::before {
border-bottom-left-radius: 0.25rem;
}
.phylo-doc-list__item__main {
flex-grow: 1;
padding-right: 1.25rem;
}
.phylo-doc-list__item__title, .phylo-doc-list__item__source, .phylo-doc-list__item__date {
line-height: 1.3;
margin-bottom: 4px;
}
.phylo-doc-list__item__source {
font-size: 15px;
color: #495057;
}
.phylo-doc-list__item__date {
font-size: 14px;
color: #6C757D;
}
.phylo-toolbar { .phylo-toolbar {
display: flex; display: flex;
......
...@@ -7822,14 +7822,15 @@ input[type=range]:-moz-focusring { ...@@ -7822,14 +7822,15 @@ input[type=range]:-moz-focusring {
background-color: #FCFCFC; background-color: #FCFCFC;
} }
.graph-doc-list__item--selected::before { .graph-doc-list__item--selected::before {
top: 0;
right: 0;
bottom: 0;
left: 0;
content: ""; content: "";
position: absolute; position: absolute;
z-index: 1; z-index: 1;
width: 2px; width: 2px;
background-color: #515151; background-color: #515151;
left: 0;
top: 0;
bottom: 0;
} }
.graph-doc-list__item--selected:first-child::before { .graph-doc-list__item--selected:first-child::before {
border-top-left-radius: 0.25rem; border-top-left-radius: 0.25rem;
...@@ -9238,6 +9239,20 @@ select.form-control { ...@@ -9238,6 +9239,20 @@ select.form-control {
border-right: 1px solid #dee2e6; border-right: 1px solid #dee2e6;
} }
.phylo__focus {
flex-grow: 1;
pointer-events: all;
position: relative;
}
.phylo__focus__inner {
top: 0;
right: 0;
bottom: 0;
left: 0;
position: absolute;
background-color: #fff;
}
.phylo-isoline { .phylo-isoline {
display: flex; display: flex;
position: relative; position: relative;
...@@ -9401,7 +9416,7 @@ select.form-control { ...@@ -9401,7 +9416,7 @@ select.form-control {
font-weight: bold; font-weight: bold;
} }
.phylo-selection-tab__selection { .phylo-selection-tab__selection {
margin: 16px 20px 0; margin: 16px 20px;
} }
.phylo-selection-tab__selection__item { .phylo-selection-tab__selection__item {
white-space: normal; white-space: normal;
...@@ -9433,6 +9448,55 @@ select.form-control { ...@@ -9433,6 +9448,55 @@ select.form-control {
color: #ADB5BD; color: #ADB5BD;
text-align: center; text-align: center;
} }
.phylo-selection-tab__extracted-docs {
margin: 16px 20px;
}
.phylo-doc-list__item {
cursor: pointer;
display: flex;
align-items: flex-start;
transition: all 0.2s ease-in-out;
}
.phylo-doc-list__item:focus {
outline: 0;
}
.phylo-doc-list__item:hover {
background-color: #FCFCFC;
}
.phylo-doc-list__item--selected::before {
top: 0;
right: 0;
bottom: 0;
left: 0;
content: "";
position: absolute;
z-index: 1;
width: 2px;
background-color: #515151;
}
.phylo-doc-list__item--selected:first-child::before {
border-top-left-radius: 0.25rem;
}
.phylo-doc-list__item--selected:last-child::before {
border-bottom-left-radius: 0.25rem;
}
.phylo-doc-list__item__main {
flex-grow: 1;
padding-right: 1.25rem;
}
.phylo-doc-list__item__title, .phylo-doc-list__item__source, .phylo-doc-list__item__date {
line-height: 1.3;
margin-bottom: 4px;
}
.phylo-doc-list__item__source {
font-size: 15px;
color: #495057;
}
.phylo-doc-list__item__date {
font-size: 14px;
color: #6C757D;
}
.phylo-toolbar { .phylo-toolbar {
display: flex; display: flex;
......
...@@ -11,7 +11,7 @@ import Gargantext.Components.Bootstrap as B ...@@ -11,7 +11,7 @@ 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 (CacheParams, PhyloDataSet, defaultCacheParams) import Gargantext.Components.PhyloExplorer.Types (CacheParams, PhyloSet(..), defaultCacheParams)
import Gargantext.Config.REST (logRESTError) import Gargantext.Config.REST (logRESTError)
import Gargantext.Hooks.FirstEffect (useFirstEffect') import Gargantext.Hooks.FirstEffect (useFirstEffect')
import Gargantext.Hooks.Loader (useLoaderEffect) import Gargantext.Hooks.Loader (useLoaderEffect)
...@@ -40,7 +40,7 @@ nodeCpt = here.component "node" cpt where ...@@ -40,7 +40,7 @@ nodeCpt = here.component "node" cpt where
-- | -- |
session <- useSession session <- useSession
state' /\ state <- R2.useBox' (Nothing :: Maybe PhyloDataSet) state' /\ state <- R2.useBox' (Nothing :: Maybe PhyloSet)
cache' /\ cache <- R2.useBox' (defaultCacheParams :: CacheParams) cache' /\ cache <- R2.useBox' (defaultCacheParams :: CacheParams)
-- | Computed -- | Computed
...@@ -92,13 +92,15 @@ nodeCpt = here.component "node" cpt where ...@@ -92,13 +92,15 @@ nodeCpt = here.component "node" cpt where
] ]
] ]
, defaultSlot: , defaultSlot:
R2.fromMaybe state' \(phyloDataSet :: PhyloDataSet) -> R2.fromMaybe state' \(PhyloSet { corpusId, listId, phyloData }) ->
let let
state_ :: Record PhyloStore.State state_ :: Record PhyloStore.State
state_ = state_ =
-- Data -- Data
{ phyloDataSet { phyloData
, corpusId
, listId
, phyloId: nodeId , phyloId: nodeId
-- (cache params) -- (cache params)
, expandSelection: getter _.expandSelection cache' , expandSelection: getter _.expandSelection cache'
......
...@@ -16,8 +16,8 @@ import Data.Maybe (Maybe(..)) ...@@ -16,8 +16,8 @@ import Data.Maybe (Maybe(..))
import Data.Newtype (class Newtype) import Data.Newtype (class Newtype)
import Data.Show.Generic (genericShow) import Data.Show.Generic (genericShow)
import Data.Symbol (SProxy(..)) import Data.Symbol (SProxy(..))
import Gargantext.Components.PhyloExplorer.JSON (PhyloJSONSet) import Gargantext.Components.PhyloExplorer.JSON (PhyloJSON)
import Gargantext.Components.PhyloExplorer.Types (PhyloDataSet, parsePhyloJSONSet) import Gargantext.Components.PhyloExplorer.Types (PhyloSet, parseToPhyloSet)
import Gargantext.Config.REST (AffRESTError) import Gargantext.Config.REST (AffRESTError)
import Gargantext.Routes (SessionRoute(..)) import Gargantext.Routes (SessionRoute(..))
import Gargantext.Routes as GR import Gargantext.Routes as GR
...@@ -30,10 +30,10 @@ import Simple.JSON as JSON ...@@ -30,10 +30,10 @@ import Simple.JSON as JSON
import Simple.JSON.Generics as JSONG import Simple.JSON.Generics as JSONG
get :: S.Session -> NodeID -> AffRESTError (PhyloDataSet) get :: S.Session -> NodeID -> AffRESTError (PhyloSet)
get session nodeId = request >>= (_ <#> parsePhyloJSONSet) >>> pure get session nodeId = request >>= (_ <#> parseToPhyloSet) >>> pure
where where
request :: AffRESTError (PhyloJSONSet) request :: AffRESTError (PhyloJSON)
request = S.get session $ PhyloAPI nodeId request = S.get session $ PhyloAPI nodeId
---------------------------------------------------------- ----------------------------------------------------------
......
module Gargantext.Components.PhyloExplorer.Frame.DocFocus
( docFocus
) where
import Gargantext.Prelude
import Data.Maybe (Maybe(..))
import Effect (Effect)
import Gargantext.Components.Bootstrap as B
import Gargantext.Components.Bootstrap.Types (Elevation(..))
import Gargantext.Components.Nodes.Corpus.Document (node)
import Gargantext.Components.PhyloExplorer.Types (FrameDoc(..))
import Gargantext.Sessions (Session, sessionId)
import Gargantext.Utils.Reactix as R2
import Reactix as R
import Reactix.DOM.HTML as H
here :: R2.Here
here = R2.here "Gargantext.Components.GraphExplorer.Frame.DocFocus"
type Props =
( frameDoc :: FrameDoc
, session :: Session
, closeCallback :: Unit -> Effect Unit
)
docFocus :: R2.Leaf Props
docFocus = R2.leaf docFocusCpt
docFocusCpt :: R.Component Props
docFocusCpt = here.component "main" cpt where
cpt { frameDoc: FrameDoc { docId, listId, corpusId }
, session
, closeCallback
} _ = do
-- | Render
-- |
pure $
H.div
{ className: "graph-doc-focus" }
[
H.div
{ className: "graph-doc-focus__header" }
[
B.iconButton
{ name: "times"
, elevation: Level2
, callback: closeCallback
}
]
,
H.div
{ className: "graph-doc-focus__body" }
[
-- print the document node
node
{ listId
, mCorpusId: Just corpusId
, nodeId: docId
, key: show (sessionId session) <> "-" <> show docId
}
]
]
module Gargantext.Components.PhyloExplorer.JSON where module Gargantext.Components.PhyloExplorer.JSON
( PhyloJSON(..)
, GraphData(..)
, NodeData(..), RawObject(..)
, EdgeData(..), RawEdge(..)
) where
import Gargantext.Prelude import Gargantext.Prelude
...@@ -10,6 +15,26 @@ import Gargantext.Utils.SimpleJSON (untaggedSumRep) ...@@ -10,6 +15,26 @@ import Gargantext.Utils.SimpleJSON (untaggedSumRep)
import Simple.JSON as JSON import Simple.JSON as JSON
newtype PhyloJSON = PhyloJSON
{ pd_corpusId :: Int
, pd_listId :: Int
, pd_data ::
{ _subgraph_cnt :: Int
, directed :: Boolean
, edges :: Array RawEdge
, objects :: Array RawObject
, strict :: Boolean
| GraphData
}
}
derive instance Generic PhyloJSON _
derive instance Eq PhyloJSON
instance Show PhyloJSON where show = genericShow
derive newtype instance JSON.ReadForeign PhyloJSON
--------------------------------------------------
type GraphData = type GraphData =
( bb :: String ( bb :: String
, color :: String , color :: String
...@@ -39,22 +64,6 @@ type GraphData = ...@@ -39,22 +64,6 @@ type GraphData =
-------------------------------------------------- --------------------------------------------------
newtype PhyloJSONSet = PhyloJSONSet
{ _subgraph_cnt :: Int
, directed :: Boolean
, edges :: Array RawEdge
, objects :: Array RawObject
, strict :: Boolean
| GraphData
}
derive instance Generic PhyloJSONSet _
derive instance Eq PhyloJSONSet
instance Show PhyloJSONSet where show = genericShow
derive newtype instance JSON.ReadForeign PhyloJSONSet
--------------------------------------------------
type NodeData = type NodeData =
( height :: String ( height :: String
, label :: String , label :: String
...@@ -125,7 +134,6 @@ instance Show RawObject where show = genericShow ...@@ -125,7 +134,6 @@ instance Show RawObject where show = genericShow
instance JSON.ReadForeign RawObject where instance JSON.ReadForeign RawObject where
readImpl f = GR.to <$> untaggedSumRep f readImpl f = GR.to <$> untaggedSumRep f
-------------------------------------------------- --------------------------------------------------
type EdgeData = type EdgeData =
......
...@@ -13,14 +13,16 @@ import Data.String (null) ...@@ -13,14 +13,16 @@ import Data.String (null)
import Effect (Effect) import Effect (Effect)
import FFI.Simple ((..), (.=)) import FFI.Simple ((..), (.=))
import Gargantext.Components.Bootstrap as B import Gargantext.Components.Bootstrap as B
import Gargantext.Components.PhyloExplorer.Frame.DocFocus (docFocus)
import Gargantext.Components.PhyloExplorer.Resources (PubSubEvent(..)) import Gargantext.Components.PhyloExplorer.Resources (PubSubEvent(..))
import Gargantext.Components.PhyloExplorer.Resources as RS import Gargantext.Components.PhyloExplorer.Resources as RS
import Gargantext.Components.PhyloExplorer.SideBar (sideBar) import Gargantext.Components.PhyloExplorer.SideBar (sideBar)
import Gargantext.Components.PhyloExplorer.Store as PhyloStore import Gargantext.Components.PhyloExplorer.Store as PhyloStore
import Gargantext.Components.PhyloExplorer.ToolBar (toolBar) import Gargantext.Components.PhyloExplorer.ToolBar (toolBar)
import Gargantext.Components.PhyloExplorer.TopBar (topBar) import Gargantext.Components.PhyloExplorer.TopBar (topBar)
import Gargantext.Components.PhyloExplorer.Types (DisplayView, ExtractedCount, FrameDoc, PhyloDataSet(..), TabView(..), Term, sortSources) import Gargantext.Components.PhyloExplorer.Types (DisplayView, ExtractedCount, FrameDoc, PhyloData(..), TabView(..), Term, sortSources)
import Gargantext.Hooks.FirstEffect (useFirstEffect') import Gargantext.Hooks.FirstEffect (useFirstEffect')
import Gargantext.Hooks.Session (useSession)
import Gargantext.Hooks.UpdateEffect (useUpdateEffect1', useUpdateEffect3') import Gargantext.Hooks.UpdateEffect (useUpdateEffect1', useUpdateEffect3')
import Gargantext.Types (SidePanelState(..)) import Gargantext.Types (SidePanelState(..))
import Gargantext.Utils (getter, (?)) import Gargantext.Utils (getter, (?))
...@@ -59,11 +61,11 @@ layoutCpt = here.component "layout" cpt where ...@@ -59,11 +61,11 @@ layoutCpt = here.component "layout" cpt where
, selectedSource , selectedSource
, extractedCount , extractedCount
, phyloId , phyloId
, phyloDataSet , phyloData
, frameDoc , frameDoc
} <- PhyloStore.use } <- PhyloStore.use
(PhyloDataSet o) <- R2.useLive' phyloDataSet (PhyloData o) <- R2.useLive' phyloData
phyloId' <- R2.useLive' phyloId phyloId' <- R2.useLive' phyloId
sources' <- R2.useLive' sources sources' <- R2.useLive' sources
terms' <- R2.useLive' terms terms' <- R2.useLive' terms
...@@ -77,6 +79,8 @@ layoutCpt = here.component "layout" cpt where ...@@ -77,6 +79,8 @@ layoutCpt = here.component "layout" cpt where
selectedSource' <- R2.useLive' selectedSource selectedSource' <- R2.useLive' selectedSource
frameDoc' <- R2.useLive' frameDoc frameDoc' <- R2.useLive' frameDoc
session <- useSession
-- | Hooks -- | Hooks
-- | -- |
let topBarPortalKey = "portal-topbar::" <> show phyloId' let topBarPortalKey = "portal-topbar::" <> show phyloId'
...@@ -143,6 +147,9 @@ layoutCpt = here.component "layout" cpt where ...@@ -143,6 +147,9 @@ layoutCpt = here.component "layout" cpt where
mTerm <- RS.autocompleteSearch terms' s mTerm <- RS.autocompleteSearch terms' s
RS.autocompleteSubmit displayView mTerm RS.autocompleteSubmit displayView mTerm
closeDocCallback :: Unit -> Effect Unit
closeDocCallback _ = T.write_ Nothing frameDoc
-- | Effects -- | Effects
-- | -- |
...@@ -150,7 +157,7 @@ layoutCpt = here.component "layout" cpt where ...@@ -150,7 +157,7 @@ layoutCpt = here.component "layout" cpt where
useFirstEffect' do useFirstEffect' do
(sortSources >>> flip T.write_ sources) o.sources (sortSources >>> flip T.write_ sources) o.sources
RS.setGlobalD3Reference window d3 RS.setGlobalD3Reference window d3
RS.setGlobalDependencies window (PhyloDataSet o) RS.setGlobalDependencies window (PhyloData o)
RS.drawPhylo RS.drawPhylo
o.branches o.branches
o.periods o.periods
...@@ -256,7 +263,7 @@ layoutCpt = here.component "layout" cpt where ...@@ -256,7 +263,7 @@ layoutCpt = here.component "layout" cpt where
{ className: "phylo__frame" } { className: "phylo__frame" }
[ [
-- Doc focus -- Doc focus
R2.fromMaybe frameDoc' \(f :: FrameDoc) -> R2.fromMaybe frameDoc' \(frameDoc_ :: FrameDoc) ->
H.div H.div
{ className: "phylo__focus" } { className: "phylo__focus" }
...@@ -264,7 +271,11 @@ layoutCpt = here.component "layout" cpt where ...@@ -264,7 +271,11 @@ layoutCpt = here.component "layout" cpt where
H.div H.div
{ className: "phylo__focus__inner" } { className: "phylo__focus__inner" }
[ [
H.text $ "hello" docFocus
{ session
, frameDoc: frameDoc_
, closeCallback: closeDocCallback
}
] ]
] ]
, ,
......
...@@ -25,7 +25,7 @@ import Data.String as String ...@@ -25,7 +25,7 @@ import Data.String as String
import Effect (Effect) import Effect (Effect)
import Effect.Uncurried (EffectFn1, EffectFn2, EffectFn4, EffectFn7, runEffectFn1, runEffectFn2, runEffectFn4, runEffectFn7) import Effect.Uncurried (EffectFn1, EffectFn2, EffectFn4, EffectFn7, runEffectFn1, runEffectFn2, runEffectFn4, runEffectFn7)
import FFI.Simple ((..), (.=), (.?)) import FFI.Simple ((..), (.=), (.?))
import Gargantext.Components.PhyloExplorer.Types (AncestorLink, Branch, BranchLink, DisplayView(..), Group(..), Link, Period, PhyloDataSet(..), Source(..), Term(..)) import Gargantext.Components.PhyloExplorer.Types (AncestorLink, Branch, BranchLink, DisplayView(..), Group(..), Link, Period, PhyloData(..), Source(..), Term(..))
import Gargantext.Utils (getter) import Gargantext.Utils (getter)
import Gargantext.Utils.Reactix ((~~)) import Gargantext.Utils.Reactix ((~~))
import Gargantext.Utils.Reactix as R2 import Gargantext.Utils.Reactix as R2
...@@ -203,8 +203,8 @@ selectionNodes = ffi ["selection", ""] "selection.nodes()" ...@@ -203,8 +203,8 @@ selectionNodes = ffi ["selection", ""] "selection.nodes()"
----------------------------------------------------------- -----------------------------------------------------------
setGlobalDependencies :: Window -> PhyloDataSet -> Effect Unit setGlobalDependencies :: Window -> PhyloData -> Effect Unit
setGlobalDependencies w (PhyloDataSet o) setGlobalDependencies w (PhyloData o)
= do = do
_ <- pure $ (w .= "freq") {} _ <- pure $ (w .= "freq") {}
_ <- pure $ (w .= "nbBranches") o.nbBranches _ <- pure $ (w .= "nbBranches") o.nbBranches
......
...@@ -5,7 +5,7 @@ module Gargantext.Components.PhyloExplorer.DetailsTab ...@@ -5,7 +5,7 @@ module Gargantext.Components.PhyloExplorer.DetailsTab
import Gargantext.Prelude import Gargantext.Prelude
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 (PhyloData(..))
import Gargantext.Utils (nbsp) import Gargantext.Utils (nbsp)
import Gargantext.Utils.Reactix as R2 import Gargantext.Utils.Reactix as R2
import Reactix as R import Reactix as R
...@@ -25,7 +25,7 @@ detailsTabCpt = here.component "" cpt where ...@@ -25,7 +25,7 @@ detailsTabCpt = here.component "" cpt where
-- | -- |
store <- PhyloStore.use store <- PhyloStore.use
(PhyloDataSet o) <- R2.useLive' store.phyloDataSet (PhyloData o) <- R2.useLive' store.phyloData
-- | Render -- | Render
-- | -- |
......
...@@ -12,6 +12,7 @@ import Data.Tuple.Nested ((/\)) ...@@ -12,6 +12,7 @@ import Data.Tuple.Nested ((/\))
import Effect (Effect) 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.Sidebar.DocList (docListWrapper)
import Gargantext.Components.PhyloExplorer.Store as PhyloStore import Gargantext.Components.PhyloExplorer.Store as PhyloStore
import Gargantext.Components.PhyloExplorer.Types (ExtractedCount(..), ExtractedTerm(..), defaultCacheParams) import Gargantext.Components.PhyloExplorer.Types (ExtractedCount(..), ExtractedTerm(..), defaultCacheParams)
import Gargantext.Hooks.FirstEffect (useFirstEffect') import Gargantext.Hooks.FirstEffect (useFirstEffect')
...@@ -322,19 +323,26 @@ component = here.component "main" cpt where ...@@ -322,19 +323,26 @@ component = here.component "main" cpt where
] ]
] ]
] ]
-- , ,
-- (separator) -- (separator)
-- R2.when (not null extractedTerms) $ R2.when (not null extractedTerms) $
-- H.div H.div
-- { className: "phylo-selection-tab__separator" } { className: "phylo-selection-tab__separator" }
-- [ [
-- B.icon B.icon
-- { name: "angle-double-down" } { name: "angle-double-down" }
-- ] ]
-- , ,
-- Extracted Docs -- Extracted Docs
-- R2.when (not null extractedTerms) $ R2.when (not null extractedTerms) $
H.div
{ className: "phylo-selection-tab__extracted-docs" }
[
docListWrapper
{}
]
] ]
termFontSize :: Number -> String termFontSize :: Number -> String
......
...@@ -11,7 +11,7 @@ module Gargantext.Components.PhyloExplorer.Store ...@@ -11,7 +11,7 @@ module Gargantext.Components.PhyloExplorer.Store
import Gargantext.Prelude import Gargantext.Prelude
import Data.Maybe (Maybe(..)) import Data.Maybe (Maybe(..))
import Gargantext.Components.PhyloExplorer.Types (DisplayView(..), ExtractedCount, ExtractedTerm, FrameDoc, PhyloDataSet, Source, TabView(..), Term, defaultCacheParams) import Gargantext.Components.PhyloExplorer.Types (CorpusId, DisplayView(..), ExtractedCount, ExtractedTerm, FrameDoc, PhyloData, Source, TabView(..), Term, ListId, defaultCacheParams)
import Gargantext.Types (NodeID, SidePanelState(..)) import Gargantext.Types (NodeID, SidePanelState(..))
import Gargantext.Utils (getter) import Gargantext.Utils (getter)
import Gargantext.Utils.Reactix as R2 import Gargantext.Utils.Reactix as R2
...@@ -25,8 +25,10 @@ here = R2.here "Gargantext.Components.GraphExplorer.Store" ...@@ -25,8 +25,10 @@ here = R2.here "Gargantext.Components.GraphExplorer.Store"
type Store = type Store =
-- Data -- Data
( phyloDataSet :: T.Box PhyloDataSet ( phyloData :: T.Box PhyloData
, phyloId :: T.Box NodeID , phyloId :: T.Box NodeID
, corpusId :: T.Box CorpusId
, listId :: T.Box ListId
, isBuilt :: T.Box Boolean , isBuilt :: T.Box Boolean
-- Layout -- Layout
, toolBarDisplayed :: T.Box Boolean , toolBarDisplayed :: T.Box Boolean
...@@ -54,8 +56,10 @@ type Store = ...@@ -54,8 +56,10 @@ type Store =
type State = type State =
-- Data -- Data
( phyloDataSet :: PhyloDataSet ( phyloData :: PhyloData
, phyloId :: NodeID , phyloId :: NodeID
, corpusId :: CorpusId
, listId :: ListId
, isBuilt :: Boolean , isBuilt :: Boolean
-- Layout -- Layout
, toolBarDisplayed :: Boolean , toolBarDisplayed :: Boolean
......
module Gargantext.Components.PhyloExplorer.Types module Gargantext.Components.PhyloExplorer.Types
( PhyloDataSet(..) ( PhyloSet(..), parseToPhyloSet
, parsePhyloJSONSet , CorpusId, ListId, DocId
, PhyloData(..)
, Branch(..), Period(..), Group(..) , Branch(..), Period(..), Group(..)
, Link(..), AncestorLink(..), BranchLink(..) , Link(..), AncestorLink(..), BranchLink(..)
, Term(..) , Term(..)
...@@ -28,18 +29,72 @@ import Data.String as String ...@@ -28,18 +29,72 @@ import Data.String as String
import Data.String.Extra (camelCase) import Data.String.Extra (camelCase)
import Data.Tuple as Tuple import Data.Tuple as Tuple
import Data.Tuple.Nested ((/\)) import Data.Tuple.Nested ((/\))
import Gargantext.Components.PhyloExplorer.JSON (PhyloJSONSet(..), RawEdge(..), RawObject(..)) import Gargantext.Components.PhyloExplorer.JSON (PhyloJSON(..), RawEdge(..), RawObject(..))
import Gargantext.Types (NodeID) import Gargantext.Types (NodeID)
import Simple.JSON as JSON import Simple.JSON as JSON
-- @NOTE #219: PureScript Date or stick to JavaScript foreign? -- @NOTE #219: PureScript Date or stick to JavaScript foreign?
foreign import yearToDate :: String -> Date.Date foreign import yearToDate :: String -> Date.Date
foreign import stringToDate :: String -> Date.Date foreign import stringToDate :: String -> Date.Date
foreign import utcStringToDate :: String -> Date.Date foreign import utcStringToDate :: String -> Date.Date
type CorpusId = Int
type ListId = Int
type DocId = Int
------------------------------------------------------------------
data PhyloSet = PhyloSet
{ corpusId :: CorpusId
, listId :: ListId
, phyloData :: PhyloData
}
derive instance Generic PhyloSet _
derive instance Eq PhyloSet
instance Show PhyloSet where show = genericShow
parseToPhyloSet :: PhyloJSON -> PhyloSet
parseToPhyloSet (PhyloJSON o) = PhyloSet
{ corpusId : o.pd_corpusId
, listId : o.pd_listId
, phyloData : PhyloData
{ ancestorLinks
, bb : parseBB p.bb
, branchLinks
, branches
, groups
, links
, name : p.name
, nbBranches : parseInt p.phyloBranches
-- @NOTE #219: remotely stringify as a Double instead of an Int (reason?)
, nbDocs : (parseFloat >>> parseInt') p.phyloDocs
, nbFoundations : parseInt p.phyloFoundations
, nbGroups : parseInt p.phyloGroups
, nbPeriods : parseInt p.phyloPeriods
, nbTerms : parseInt p.phyloTerms
, periods
, sources : parseSources p.phyloSources
, timeScale : p.phyloTimeScale
, weighted : getGlobalWeightedValue groups
}
}
where
p = o.pd_data
epochTS = p.phyloTimeScale == "epoch"
ancestorLinks = parseAncestorLinks p.edges
branchLinks = parseBranchLinks p.edges
branches = parseBranches p.objects
groups = parseGroups epochTS p.objects
links = parseLinks p.edges
periods = parsePeriods epochTS p.objects
----------------------------------------------------------------------
data PhyloDataSet = PhyloDataSet data PhyloData = PhyloData
{ ancestorLinks :: Array AncestorLink { ancestorLinks :: Array AncestorLink
, bb :: Array Number , bb :: Array Number
, branchLinks :: Array BranchLink , branchLinks :: Array BranchLink
...@@ -59,41 +114,9 @@ data PhyloDataSet = PhyloDataSet ...@@ -59,41 +114,9 @@ data PhyloDataSet = PhyloDataSet
, weighted :: Boolean , weighted :: Boolean
} }
derive instance Generic PhyloDataSet _ derive instance Generic PhyloData _
derive instance Eq PhyloDataSet derive instance Eq PhyloData
instance Show PhyloDataSet where show = genericShow instance Show PhyloData where show = genericShow
parsePhyloJSONSet :: PhyloJSONSet -> PhyloDataSet
parsePhyloJSONSet (PhyloJSONSet o) = PhyloDataSet
{ ancestorLinks
, bb : parseBB o.bb
, branchLinks
, branches
, groups
, links
, name : o.name
, nbBranches : parseInt o.phyloBranches
-- @NOTE #219: remotely stringify as a Double instead of an Int (reason?)
, nbDocs : (parseFloat >>> parseInt') o.phyloDocs
, nbFoundations : parseInt o.phyloFoundations
, nbGroups : parseInt o.phyloGroups
, nbPeriods : parseInt o.phyloPeriods
, nbTerms : parseInt o.phyloTerms
, periods
, sources : parseSources o.phyloSources
, timeScale : o.phyloTimeScale
, weighted : getGlobalWeightedValue groups
}
where
epochTS = o.phyloTimeScale == "epoch"
ancestorLinks = parseAncestorLinks o.edges
branchLinks = parseBranchLinks o.edges
branches = parseBranches o.objects
groups = parseGroups epochTS o.objects
links = parseLinks o.edges
periods = parsePeriods epochTS o.objects
----------------------------------------------------------- -----------------------------------------------------------
...@@ -492,9 +515,9 @@ derive newtype instance JSON.ReadForeign ExtractedCount ...@@ -492,9 +515,9 @@ derive newtype instance JSON.ReadForeign ExtractedCount
----------------------------------------------------------- -----------------------------------------------------------
newtype FrameDoc = FrameDoc newtype FrameDoc = FrameDoc
{ docId :: NodeID { docId :: DocId
, corpusId :: NodeID , corpusId :: CorpusId
, listId :: NodeID , listId :: ListId
} }
derive instance Generic FrameDoc _ derive instance Generic FrameDoc _
......
...@@ -252,14 +252,13 @@ ...@@ -252,14 +252,13 @@
background-color: $gray-50 background-color: $gray-50
&--selected::before &--selected::before
@include fit-positions
content: "" content: ""
position: absolute position: absolute
z-index: 1 z-index: 1
width: 2px width: 2px
background-color: $info background-color: $info
left: 0
top: 0
bottom: 0
// (following list group item border radius) // (following list group item border radius)
&--selected:first-child::before &--selected:first-child::before
......
...@@ -383,6 +383,19 @@ $decreasing-color: #11638F; ...@@ -383,6 +383,19 @@ $decreasing-color: #11638F;
} }
} }
} }
&__focus {
flex-grow: 1;
pointer-events: all;
position: relative;
&__inner {
@include fit-positions();
position: absolute;
background-color: $body-bg;
}
}
} }
...@@ -563,7 +576,7 @@ $decreasing-color: #11638F; ...@@ -563,7 +576,7 @@ $decreasing-color: #11638F;
} }
&__selection { &__selection {
margin: $margin-y $margin-x 0; margin: $margin-y $margin-x;
&__item { &__item {
white-space: normal; white-space: normal;
...@@ -611,6 +624,65 @@ $decreasing-color: #11638F; ...@@ -611,6 +624,65 @@ $decreasing-color: #11638F;
color: $gray-500; color: $gray-500;
text-align: center; text-align: center;
} }
&__extracted-docs {
margin: $margin-y $margin-x;
}
}
.phylo-doc-list {
&__item {
@include clickable();
display: flex;
align-items: flex-start;
transition: $transition-base;
&:hover {
background-color: $gray-50;
}
&--selected::before {
@include fit-positions();
content: "";
position: absolute;
z-index: 1;
width: 2px;
background-color: $info;
}
// (following list group item border radius)
&--selected:first-child::before {
border-top-left-radius: $list-group-border-radius;
}
&--selected:last-child::before {
border-bottom-left-radius: $list-group-border-radius;
}
&__main {
flex-grow: 1;
padding-right: $card-spacer-x;
}
&__title,
&__source,
&__date {
line-height: 1.3;
margin-bottom: space-x(0.5);
}
&__source {
font-size: 15px;
color: $gray-700;
}
&__date {
font-size: 14px;
color: $gray-600;
}
}
} }
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment