Commit 36df4cc8 authored by Alexandre Delanoë's avatar Alexandre Delanoë

Merge remote-tracking branch 'origin/383-dev-docs-chart-update' into dev-merge

parents 976f1755 183d0cf6
...@@ -6220,6 +6220,10 @@ h3 { ...@@ -6220,6 +6220,10 @@ h3 {
background-image: radial-gradient(circle, #000000 10%, transparent 10%); background-image: radial-gradient(circle, #000000 10%, transparent 10%);
} }
.echarts-for-react {
height: 300px;
}
html { html {
box-sizing: border-box; box-sizing: border-box;
height: 100%; height: 100%;
......
...@@ -6173,6 +6173,10 @@ h3 { ...@@ -6173,6 +6173,10 @@ h3 {
background-image: radial-gradient(circle, #343a40 10%, transparent 10%); background-image: radial-gradient(circle, #343a40 10%, transparent 10%);
} }
.echarts-for-react {
height: 300px;
}
html { html {
box-sizing: border-box; box-sizing: border-box;
height: 100%; height: 100%;
......
...@@ -5929,6 +5929,10 @@ h3 { ...@@ -5929,6 +5929,10 @@ h3 {
background-image: radial-gradient(circle, #1e2b37 10%, transparent 10%); background-image: radial-gradient(circle, #1e2b37 10%, transparent 10%);
} }
.echarts-for-react {
height: 300px;
}
html { html {
box-sizing: border-box; box-sizing: border-box;
height: 100%; height: 100%;
......
...@@ -6177,6 +6177,10 @@ h3 { ...@@ -6177,6 +6177,10 @@ h3 {
background-image: radial-gradient(circle, #072247 10%, transparent 10%); background-image: radial-gradient(circle, #072247 10%, transparent 10%);
} }
.echarts-for-react {
height: 300px;
}
html { html {
box-sizing: border-box; box-sizing: border-box;
height: 100%; height: 100%;
......
...@@ -6178,6 +6178,10 @@ h3 { ...@@ -6178,6 +6178,10 @@ h3 {
background-image: radial-gradient(circle, #111111 10%, transparent 10%); background-image: radial-gradient(circle, #111111 10%, transparent 10%);
} }
.echarts-for-react {
height: 300px;
}
html { html {
box-sizing: border-box; box-sizing: border-box;
height: 100%; height: 100%;
......
...@@ -7,7 +7,8 @@ import Data.Array as A ...@@ -7,7 +7,8 @@ import Data.Array as A
import Data.Generic.Rep (class Generic) import Data.Generic.Rep (class Generic)
import Data.Map as Map import Data.Map as Map
import Data.Maybe (Maybe(..)) import Data.Maybe (Maybe(..))
import Effect.Aff (launchAff) import Effect.Aff (launchAff_)
import Effect.Class (liftEffect)
import Gargantext.Components.Category.Types (Category(..), Star(..), cat2score, categories, clickAgain, star2score, stars) import Gargantext.Components.Category.Types (Category(..), Star(..), cat2score, categories, clickAgain, star2score, stars)
import Gargantext.Components.DocsTable.Types (DocumentsView(..), LocalCategories, LocalUserScore) import Gargantext.Components.DocsTable.Types (DocumentsView(..), LocalCategories, LocalUserScore)
import Gargantext.Config.REST (AffRESTError) import Gargantext.Config.REST (AffRESTError)
...@@ -15,6 +16,7 @@ import Gargantext.Routes (SessionRoute(NodeAPI)) ...@@ -15,6 +16,7 @@ import Gargantext.Routes (SessionRoute(NodeAPI))
import Gargantext.Sessions (Session, put) import Gargantext.Sessions (Session, put)
import Gargantext.Types (NodeID, NodeType(..)) import Gargantext.Types (NodeID, NodeType(..))
import Gargantext.Utils.Reactix as R2 import Gargantext.Utils.Reactix as R2
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 Simple.JSON as JSON import Simple.JSON as JSON
...@@ -23,19 +25,24 @@ here :: R2.Here ...@@ -23,19 +25,24 @@ here :: R2.Here
here = R2.here "Gargantext.Components.Category" here = R2.here "Gargantext.Components.Category"
type RatingProps = type RatingProps =
( score :: Star ( chartReload :: T2.ReloadS
, nodeId :: NodeID , nodeId :: NodeID
, row :: DocumentsView , row :: DocumentsView
, score :: Star
, session :: Session , session :: Session
, setLocalCategories :: R.Setter LocalUserScore , setLocalCategories :: R.Setter LocalUserScore
) )
rating :: R2.Component RatingProps rating :: R2.Component RatingProps
rating = R.createElement ratingCpt rating = R.createElement ratingCpt
ratingCpt :: R.Component RatingProps ratingCpt :: R.Component RatingProps
ratingCpt = here.component "rating" cpt where ratingCpt = here.component "rating" cpt where
cpt { nodeId, row: DocumentsView r, score, session, setLocalCategories } _ = cpt { chartReload
, nodeId
, row: DocumentsView r
, score
, session
, setLocalCategories } _ =
pure $ H.div { className:"flex" } divs where pure $ H.div { className:"flex" } divs where
divs = map (\s -> H.div { className : icon' score s divs = map (\s -> H.div { className : icon' score s
, on: { click: onClick s } } []) stars , on: { click: onClick s } } []) stars
...@@ -48,9 +55,9 @@ ratingCpt = here.component "rating" cpt where ...@@ -48,9 +55,9 @@ ratingCpt = here.component "rating" cpt where
else c else c
setLocalCategories $ Map.insert r._id c' setLocalCategories $ Map.insert r._id c'
void $ launchAff launchAff_ $ do
$ putRating session nodeId _ <- putRating session nodeId $ RatingQuery { nodeIds: [r._id], rating: c' }
$ RatingQuery { nodeIds: [r._id], rating: c' } liftEffect $ T2.reload chartReload
newtype RatingQuery = newtype RatingQuery =
RatingQuery { nodeIds :: Array Int RatingQuery { nodeIds :: Array Int
...@@ -98,9 +105,8 @@ carousselCpt = here.component "caroussel" cpt ...@@ -98,9 +105,8 @@ carousselCpt = here.component "caroussel" cpt
onClick c = \_-> do onClick c = \_-> do
setLocalCategories $ Map.insert r._id c setLocalCategories $ Map.insert r._id c
void $ launchAff launchAff_ $ do
$ putCategories session nodeId putCategories session nodeId $ CategoryQuery {nodeIds: [r._id], category: c}
$ CategoryQuery {nodeIds: [r._id], category: c}
icon :: Category -> Boolean -> String icon :: Category -> Boolean -> String
icon cat b = btn b $ "fa fa-" <> (color $ size b $ icon' cat b) icon cat b = btn b $ "fa fa-" <> (color $ size b $ icon' cat b)
......
...@@ -74,6 +74,7 @@ type Path a = ...@@ -74,6 +74,7 @@ type Path a =
type CommonProps = type CommonProps =
( boxes :: Boxes ( boxes :: Boxes
, cacheState :: T.Box NT.CacheState , cacheState :: T.Box NT.CacheState
, chartReload :: T2.ReloadS
, frontends :: Frontends , frontends :: Frontends
, listId :: Int , listId :: Int
, mCorpusId :: Maybe Int , mCorpusId :: Maybe Int
...@@ -88,8 +89,8 @@ type CommonProps = ...@@ -88,8 +89,8 @@ type CommonProps =
) )
type LayoutProps = type LayoutProps =
( chart :: R.Element ( chart :: R.Element
, showSearch :: Boolean , showSearch :: Boolean
| CommonProps | CommonProps
-- , path :: Record (Path a) -- , path :: Record (Path a)
) )
...@@ -126,6 +127,7 @@ docViewCpt = here.component "docView" cpt where ...@@ -126,6 +127,7 @@ docViewCpt = here.component "docView" cpt where
cpt { layout: { boxes cpt { layout: { boxes
, cacheState , cacheState
, chart , chart
, chartReload
, frontends , frontends
, listId , listId
, mCorpusId , mCorpusId
...@@ -204,20 +206,21 @@ docViewCpt = here.component "docView" cpt where ...@@ -204,20 +206,21 @@ docViewCpt = here.component "docView" cpt where
] ]
, H.div {className: "col-md-12"} , H.div {className: "col-md-12"}
[ pageLayout { boxes [ pageLayout { boxes
, cacheState , cacheState
, frontends , chartReload
, key: "docView-" <> (show cacheState') , frontends
, listId , key: "docView-" <> (show cacheState')
, mCorpusId , listId
, nodeId , mCorpusId
, params , nodeId
, query: query' , params
, session , query: query'
, sidePanel , session
, tabType , sidePanel
, totalRecords , tabType
, yearFilter , totalRecords
} [] , yearFilter
} []
] ]
] ]
] ]
...@@ -434,6 +437,7 @@ pageLayoutCpt = here.component "pageLayout" cpt where ...@@ -434,6 +437,7 @@ pageLayoutCpt = here.component "pageLayout" cpt where
, mkRequest , mkRequest
, path , path
, renderer: paint , renderer: paint
, spinnerClass: Nothing
} }
NT.CacheOff -> do NT.CacheOff -> do
localCategories <- T.useBox (Map.empty :: LocalUserScore) localCategories <- T.useBox (Map.empty :: LocalUserScore)
...@@ -448,7 +452,7 @@ pageLayoutCpt = here.component "pageLayout" cpt where ...@@ -448,7 +452,7 @@ pageLayoutCpt = here.component "pageLayout" cpt where
pure $ handleResponse <$> eRes pure $ handleResponse <$> eRes
let render (Tuple count documents) = pagePaintRaw { documents let render (Tuple count documents) = pagePaintRaw { documents
, layout: props' { params = paramsS' , layout: props' { params = paramsS'
, totalRecords = count } , totalRecords = count }
, localCategories , localCategories
, params: paramsS } [] , params: paramsS } []
let errorHandler = logRESTError here "[pageLayout]" let errorHandler = logRESTError here "[pageLayout]"
...@@ -515,9 +519,10 @@ type PagePaintRawProps = ...@@ -515,9 +519,10 @@ type PagePaintRawProps =
pagePaintRaw :: R2.Component PagePaintRawProps pagePaintRaw :: R2.Component PagePaintRawProps
pagePaintRaw = R.createElement pagePaintRawCpt pagePaintRaw = R.createElement pagePaintRawCpt
pagePaintRawCpt :: R.Component PagePaintRawProps pagePaintRawCpt :: R.Component PagePaintRawProps
pagePaintRawCpt = here.component "pagePaintRawCpt" cpt where pagePaintRawCpt = here.component "pagePaintRaw" cpt where
cpt { documents cpt { documents
, layout: { boxes , layout: { boxes
, chartReload
, frontends , frontends
, listId , listId
, mCorpusId , mCorpusId
...@@ -539,7 +544,7 @@ pagePaintRawCpt = here.component "pagePaintRawCpt" cpt where ...@@ -539,7 +544,7 @@ pagePaintRawCpt = here.component "pagePaintRawCpt" cpt where
{ colNames { colNames
, container: TT.defaultContainer , container: TT.defaultContainer
, params , params
, rows: rows reload localCategories' mCurrentDocId' , rows: rows reload chartReload localCategories' mCurrentDocId'
, syncResetButton : [ H.div {} [] ] , syncResetButton : [ H.div {} [] ]
, totalRecords , totalRecords
, wrapColElts , wrapColElts
...@@ -554,9 +559,9 @@ pagePaintRawCpt = here.component "pagePaintRawCpt" cpt where ...@@ -554,9 +559,9 @@ 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' mCurrentDocId' = row reload <$> A.toUnfoldable documents rows reload chartReload localCategories' mCurrentDocId' = row <$> A.toUnfoldable documents
where where
row reload 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: "" }
...@@ -568,7 +573,8 @@ pagePaintRawCpt = here.component "pagePaintRawCpt" cpt where ...@@ -568,7 +573,8 @@ pagePaintRawCpt = here.component "pagePaintRawCpt" cpt where
] ]
--, 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" }
[ rating { nodeId [ rating { chartReload
, nodeId
, row: dv , row: dv
, score: cat , score: cat
, setLocalCategories: \lc -> T.modify_ lc localCategories , setLocalCategories: \lc -> T.modify_ lc localCategories
......
module Gargantext.Components.LoadingSpinner where module Gargantext.Components.LoadingSpinner where
import Data.Maybe (Maybe(..), fromMaybe)
import Reactix as R import Reactix as R
import Reactix.DOM.HTML as H import Reactix.DOM.HTML as H
...@@ -10,7 +11,9 @@ import Gargantext.Utils.Reactix as R2 ...@@ -10,7 +11,9 @@ import Gargantext.Utils.Reactix as R2
here :: R2.Here here :: R2.Here
here = R2.here "Gargantext.Components.LoadingSpinner" here = R2.here "Gargantext.Components.LoadingSpinner"
type Props = () type Props =
( additionalClass :: Maybe String -- addtional classes for styling the spinner
)
loadingSpinner :: Record Props -> R.Element loadingSpinner :: Record Props -> R.Element
loadingSpinner props = R.createElement loadingSpinnerCpt props [] loadingSpinner props = R.createElement loadingSpinnerCpt props []
...@@ -22,5 +25,7 @@ loadingSpinnerCpt = here.component "LoadingSpinner" cpt ...@@ -22,5 +25,7 @@ loadingSpinnerCpt = here.component "LoadingSpinner" cpt
-- cpt _ _ = H.i {className: "fa fa-globe fa-spin fa-3x fa-fw"} [H.text ""] -- cpt _ _ = H.i {className: "fa fa-globe fa-spin fa-3x fa-fw"} [H.text ""]
-- cpt _ _ = H.i {className: "fa fa-circle-o-notch fa-spin fa-3x fa-fw"} [H.text ""] -- cpt _ _ = H.i {className: "fa fa-circle-o-notch fa-spin fa-3x fa-fw"} [H.text ""]
cpt _ _ = do cpt { additionalClass } _ = do
pure $ H.i {className: "fa fa-spinner fa-pulse fa-3x fa-fw"} [H.text ""] pure $ H.i { className: "fa fa-spinner fa-pulse fa-3x fa-fw " <> c } [H.text ""]
where
c = fromMaybe "" additionalClass
...@@ -605,6 +605,7 @@ mainNgramsTableCacheOnCpt = here.component "mainNgramsTableCacheOn" cpt where ...@@ -605,6 +605,7 @@ mainNgramsTableCacheOnCpt = here.component "mainNgramsTableCacheOn" cpt where
, mkRequest , mkRequest
, path: path' , path: path'
, renderer: render , renderer: render
, spinnerClass: Nothing
} }
versionEndpoint { defaultListId, path: { nodeId, tabType, session } } _ = get session $ R.GetNgramsTableVersion { listId: defaultListId, tabType } (Just nodeId) versionEndpoint { defaultListId, path: { nodeId, tabType, session } } _ = get session $ R.GetNgramsTableVersion { listId: defaultListId, tabType } (Just nodeId)
errorHandler = logRESTError here "[mainNgramsTable]" errorHandler = logRESTError here "[mainNgramsTable]"
......
...@@ -32,13 +32,20 @@ type LoaderWithCacheAPIProps path res ret = ( ...@@ -32,13 +32,20 @@ type LoaderWithCacheAPIProps path res ret = (
, mkRequest :: path -> GUC.Request , mkRequest :: path -> GUC.Request
, path :: path , path :: path
, renderer :: ret -> R.Element , renderer :: ret -> R.Element
, spinnerClass :: Maybe String
) )
useLoaderWithCacheAPI :: forall path res ret. Eq path => JSON.ReadForeign res => Eq ret => useLoaderWithCacheAPI :: forall path res ret. Eq path => JSON.ReadForeign res => Eq ret =>
Record (LoaderWithCacheAPIProps path res ret) Record (LoaderWithCacheAPIProps path res ret)
-> R.Hooks R.Element -> R.Hooks R.Element
useLoaderWithCacheAPI { cacheEndpoint, errorHandler, handleResponse, mkRequest, path, renderer } = do useLoaderWithCacheAPI { cacheEndpoint
, errorHandler
, handleResponse
, mkRequest
, path
, renderer
, spinnerClass } = do
state <- T.useBox Nothing state <- T.useBox Nothing
state' <- T.useLive T.unequal state state' <- T.useLive T.unequal state
...@@ -48,7 +55,7 @@ useLoaderWithCacheAPI { cacheEndpoint, errorHandler, handleResponse, mkRequest, ...@@ -48,7 +55,7 @@ useLoaderWithCacheAPI { cacheEndpoint, errorHandler, handleResponse, mkRequest,
, mkRequest , mkRequest
, path , path
, state } , state }
pure $ maybe (loadingSpinner {}) renderer state' pure $ maybe (loadingSpinner { additionalClass: spinnerClass }) renderer state'
type LoaderWithCacheAPIEffectProps path res ret = ( type LoaderWithCacheAPIEffectProps path res ret = (
cacheEndpoint :: path -> AffRESTError Version cacheEndpoint :: path -> AffRESTError Version
......
...@@ -11,10 +11,8 @@ import Effect.Aff (Aff) ...@@ -11,10 +11,8 @@ import Effect.Aff (Aff)
import Gargantext.Components.App.Store (Boxes) import Gargantext.Components.App.Store (Boxes)
import Gargantext.Components.DocsTable as DT import Gargantext.Components.DocsTable as DT
import Gargantext.Components.DocsTable.Types (Year) import Gargantext.Components.DocsTable.Types (Year)
import Gargantext.Components.GraphQL.User (UserInfo)
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.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 TextsT import Gargantext.Components.Nodes.Texts.Types as TextsT
import Gargantext.Components.Tab as Tab import Gargantext.Components.Tab as Tab
...@@ -22,6 +20,7 @@ import Gargantext.Ends (Frontends) ...@@ -22,6 +20,7 @@ import Gargantext.Ends (Frontends)
import Gargantext.Sessions (Session) import Gargantext.Sessions (Session)
import Gargantext.Types (CTabNgramType(..), PTabNgramType(..), TabSubType(..), TabType(..)) import Gargantext.Types (CTabNgramType(..), PTabNgramType(..), TabSubType(..), TabType(..))
import Gargantext.Utils.Reactix as R2 import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Toestand as T2
import Reactix as R import Reactix as R
import Record as Record import Record as Record
import Record.Extra as RX import Record.Extra as RX
...@@ -67,9 +66,10 @@ tabsCpt = here.component "tabs" cpt where ...@@ -67,9 +66,10 @@ tabsCpt = here.component "tabs" cpt where
cpt props _ = do cpt props _ = do
activeTab <- T.useBox 0 activeTab <- T.useBox 0
yearFilter <- T.useBox (Nothing :: Maybe Year) yearFilter <- T.useBox (Nothing :: Maybe Year)
chartReload <- T.useBox T2.newReload
pure $ Tab.tabs { activeTab, tabs: tabs' yearFilter props } pure $ Tab.tabs { activeTab, tabs: tabs' yearFilter chartReload props }
tabs' yearFilter props@{ boxes, defaultListId, sidePanel } = tabs' yearFilter chartReload props@{ boxes, defaultListId, sidePanel } =
[ "Documents" /\ docs [ "Documents" /\ docs
, "Patents" /\ ngramsView (viewProps Patents) , "Patents" /\ ngramsView (viewProps Patents)
, "Books" /\ ngramsView (viewProps Books) , "Books" /\ ngramsView (viewProps Books)
...@@ -78,7 +78,7 @@ tabsCpt = here.component "tabs" cpt where ...@@ -78,7 +78,7 @@ tabsCpt = here.component "tabs" cpt where
] where ] where
viewProps mode = Record.merge props { mode } viewProps mode = Record.merge props { mode }
totalRecords = 4736 -- TODO lol totalRecords = 4736 -- TODO lol
docs = DT.docViewLayout (Record.merge { boxes, sidePanel } $ Record.merge dtCommon dtExtra) docs = DT.docViewLayout (Record.merge { boxes, chartReload, sidePanel } $ Record.merge dtCommon dtExtra)
dtCommon = RX.pick props :: Record DTCommon dtCommon = RX.pick props :: Record DTCommon
dtExtra = dtExtra =
{ chart: mempty { chart: mempty
......
...@@ -12,7 +12,6 @@ import Gargantext.Components.DocsTable as DT ...@@ -12,7 +12,6 @@ import Gargantext.Components.DocsTable as DT
import Gargantext.Components.DocsTable.Types (Year) import Gargantext.Components.DocsTable.Types (Year)
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.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.Components.Tab as Tab import Gargantext.Components.Tab as Tab
...@@ -20,6 +19,7 @@ import Gargantext.Ends (Frontends) ...@@ -20,6 +19,7 @@ import Gargantext.Ends (Frontends)
import Gargantext.Sessions (Session) import Gargantext.Sessions (Session)
import Gargantext.Types (CTabNgramType(..), PTabNgramType(..), TabSubType(..), TabType(..)) import Gargantext.Types (CTabNgramType(..), PTabNgramType(..), TabSubType(..), TabType(..))
import Gargantext.Utils.Reactix as R2 import Gargantext.Utils.Reactix as R2
import Gargantext.Utils.Toestand as T2
import Reactix as R import Reactix as R
import Toestand as T import Toestand as T
...@@ -72,10 +72,11 @@ tabsCpt = here.component "tabs" cpt ...@@ -72,10 +72,11 @@ tabsCpt = here.component "tabs" cpt
} _ = do } _ = do
activeTab <- T.useBox 0 activeTab <- T.useBox 0
yearFilter <- T.useBox (Nothing :: Maybe Year) yearFilter <- T.useBox (Nothing :: Maybe Year)
chartReload <- T.useBox T2.newReload
pure $ Tab.tabs { activeTab, tabs: tabs' yearFilter } pure $ Tab.tabs { activeTab, tabs: tabs' yearFilter chartReload }
where where
tabs' yearFilter = tabs' yearFilter chartReload =
[ "Documents" /\ docs [ "Documents" /\ docs
, "Patents" /\ ngramsView patentsView [] , "Patents" /\ ngramsView patentsView []
, "Books" /\ ngramsView booksView [] , "Books" /\ ngramsView booksView []
...@@ -110,6 +111,7 @@ tabsCpt = here.component "tabs" cpt ...@@ -110,6 +111,7 @@ tabsCpt = here.component "tabs" cpt
{ boxes { boxes
, cacheState , cacheState
, chart , chart
, chartReload
, frontends , frontends
, listId: defaultListId , listId: defaultListId
, mCorpusId: Nothing , mCorpusId: Nothing
......
...@@ -3,6 +3,7 @@ module Gargantext.Components.Nodes.Corpus.Chart.Common where ...@@ -3,6 +3,7 @@ module Gargantext.Components.Nodes.Corpus.Chart.Common where
import Gargantext.Prelude import Gargantext.Prelude
import Data.Array as A import Data.Array as A
import Data.Maybe (Maybe(..))
import Data.Tuple.Nested ((/\)) import Data.Tuple.Nested ((/\))
import Gargantext.Components.Nodes.Corpus.Chart.Types (MetricsProps, ReloadPath) import Gargantext.Components.Nodes.Corpus.Chart.Types (MetricsProps, ReloadPath)
import Gargantext.Config.REST (AffRESTError) import Gargantext.Config.REST (AffRESTError)
...@@ -86,4 +87,5 @@ metricsWithCacheLoadViewCpt = here.component "metricsWithCacheLoadView" cpt ...@@ -86,4 +87,5 @@ metricsWithCacheLoadViewCpt = here.component "metricsWithCacheLoadView" cpt
, handleResponse , handleResponse
, mkRequest , mkRequest
, path: (reload' /\ path) , path: (reload' /\ path)
, renderer: loaded { boxes, path, reload, session, onClick, onInit } } , renderer: loaded { boxes, path, reload, session, onClick, onInit }
, spinnerClass: Just "echarts-for-react-spinner" }
...@@ -6,6 +6,7 @@ import Data.Generic.Rep (class Generic) ...@@ -6,6 +6,7 @@ import Data.Generic.Rep (class Generic)
import Data.Maybe (Maybe(..)) import Data.Maybe (Maybe(..))
import Data.Show.Generic (genericShow) import Data.Show.Generic (genericShow)
import Data.Tuple.Nested ((/\)) import Data.Tuple.Nested ((/\))
import Effect (Effect)
import Effect.Aff (launchAff_) import Effect.Aff (launchAff_)
import Gargantext.Components.App.Store (Boxes) import Gargantext.Components.App.Store (Boxes)
import Gargantext.Components.Charts.Options.ECharts (dispatchAction) import Gargantext.Components.Charts.Options.ECharts (dispatchAction)
...@@ -16,6 +17,7 @@ import Gargantext.Components.NgramsTable.Loader (clearCache) ...@@ -16,6 +17,7 @@ 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.Chart.Types as CTypes
import Gargantext.Components.Nodes.Corpus.Document as D import Gargantext.Components.Nodes.Corpus.Document as D
import Gargantext.Components.Nodes.Corpus.Types (CorpusData) import Gargantext.Components.Nodes.Corpus.Types (CorpusData)
import Gargantext.Components.Nodes.Lists.Types as LT import Gargantext.Components.Nodes.Lists.Types as LT
...@@ -203,14 +205,16 @@ tabsCpt = here.component "tabs" cpt ...@@ -203,14 +205,16 @@ tabsCpt = here.component "tabs" cpt
activeTab <- T.useBox 0 activeTab <- T.useBox 0
chartReload <- T.useBox T2.newReload
pure $ Tab.tabs { pure $ Tab.tabs {
activeTab activeTab
, tabs: [ , tabs: [
"Documents" /\ R.fragment [ "Documents" /\ R.fragment [
histo { boxes, path, session, onClick, onInit } histoRender { boxes, path, onClick, onInit, reload: chartReload, session } []
, docView' path TabDocs , docView' path chartReload TabDocs
] ]
, "Trash" /\ docView' path TabTrash , "Trash" /\ docView' path chartReload TabTrash
-- , "More like fav" /\ docView' path TabMoreLikeFav -- , "More like fav" /\ docView' path TabMoreLikeFav
-- , "More like trash" /\ docView' path TabMoreLikeTrash -- , "More like trash" /\ docView' path TabMoreLikeTrash
] ]
...@@ -221,31 +225,47 @@ tabsCpt = here.component "tabs" cpt ...@@ -221,31 +225,47 @@ tabsCpt = here.component "tabs" cpt
, listId: corpusData.defaultListId , listId: corpusData.defaultListId
, limit: Nothing , limit: Nothing
, tabType: TabCorpus TabDocs } , tabType: TabCorpus TabDocs }
docView' path tabType = docView { boxes docView' path chartReload tabType = docView { boxes
, cacheState , cacheState
, corpusData , chartReload
, corpusId , corpusData
, frontends , corpusId
, listId: path.listId , frontends
-- , path , listId: path.listId
, session -- , path
, tabType , session
, sidePanel , tabType
, yearFilter , sidePanel
} [] , yearFilter
} []
type HistoProps =
( reload :: T2.ReloadS
| CTypes.Props
)
histoRender :: R2.Component HistoProps
histoRender = R.createElement histoRenderCpt
histoRenderCpt :: R.Component HistoProps
histoRenderCpt = here.component "histoRender" cpt where
cpt { boxes, path, onClick, onInit, reload, session } _ = do
reload' <- T.useLive T.unequal reload
pure $ histo { boxes, path, onClick, onInit, session }
type DocViewProps a = type DocViewProps a =
( boxes :: Boxes ( boxes :: Boxes
, cacheState :: T.Box LT.CacheState , cacheState :: T.Box LT.CacheState
, corpusData :: CorpusData , chartReload :: T2.ReloadS
, corpusId :: NodeID , corpusData :: CorpusData
, frontends :: Frontends , corpusId :: NodeID
, listId :: ListId , frontends :: Frontends
-- , path :: Record DT.Path , listId :: ListId
, session :: Session -- , path :: Record DT.Path
, tabType :: TabSubType a , session :: Session
, sidePanel :: T.Box (Maybe (Record TT.SidePanel)) , tabType :: TabSubType a
, yearFilter :: T.Box (Maybe Year) , sidePanel :: T.Box (Maybe (Record TT.SidePanel))
, yearFilter :: T.Box (Maybe Year)
) )
docView :: forall a. R2.Component (DocViewProps a) docView :: forall a. R2.Component (DocViewProps a)
...@@ -259,6 +279,7 @@ docViewCpt = here.component "docView" cpt ...@@ -259,6 +279,7 @@ docViewCpt = here.component "docView" cpt
-- docViewLayoutRec :: forall a. DocViewProps a -> Record DT.LayoutProps -- docViewLayoutRec :: forall a. DocViewProps a -> Record DT.LayoutProps
docViewLayoutRec { boxes docViewLayoutRec { boxes
, cacheState , cacheState
, chartReload
, corpusId , corpusId
, frontends , frontends
, listId , listId
...@@ -270,6 +291,7 @@ docViewLayoutRec { boxes ...@@ -270,6 +291,7 @@ docViewLayoutRec { boxes
{ boxes { boxes
, cacheState , cacheState
, chart : H.div {} [] , chart : H.div {} []
, chartReload
, frontends , frontends
, listId , listId
, mCorpusId: Just corpusId , mCorpusId: Just corpusId
...@@ -284,6 +306,7 @@ docViewLayoutRec { boxes ...@@ -284,6 +306,7 @@ docViewLayoutRec { boxes
} }
docViewLayoutRec { boxes docViewLayoutRec { boxes
, cacheState , cacheState
, chartReload
, corpusId , corpusId
, frontends , frontends
, listId , listId
...@@ -295,6 +318,7 @@ docViewLayoutRec { boxes ...@@ -295,6 +318,7 @@ docViewLayoutRec { boxes
{ boxes { boxes
, cacheState , cacheState
, chart : H.div {} [] , chart : H.div {} []
, chartReload
, frontends , frontends
, listId , listId
, mCorpusId: Just corpusId , mCorpusId: Just corpusId
...@@ -309,6 +333,7 @@ docViewLayoutRec { boxes ...@@ -309,6 +333,7 @@ docViewLayoutRec { boxes
} }
docViewLayoutRec { boxes docViewLayoutRec { boxes
, cacheState , cacheState
, chartReload
, corpusId , corpusId
, frontends , frontends
, listId , listId
...@@ -320,6 +345,7 @@ docViewLayoutRec { boxes ...@@ -320,6 +345,7 @@ docViewLayoutRec { boxes
{ boxes { boxes
, cacheState , cacheState
, chart : H.div {} [] , chart : H.div {} []
, chartReload
, frontends , frontends
, listId , listId
, mCorpusId: Just corpusId , mCorpusId: Just corpusId
...@@ -334,6 +360,7 @@ docViewLayoutRec { boxes ...@@ -334,6 +360,7 @@ docViewLayoutRec { boxes
} }
docViewLayoutRec { boxes docViewLayoutRec { boxes
, cacheState , cacheState
, chartReload
, corpusId , corpusId
, frontends , frontends
, listId , listId
...@@ -345,6 +372,7 @@ docViewLayoutRec { boxes ...@@ -345,6 +372,7 @@ docViewLayoutRec { boxes
{ boxes { boxes
, cacheState , cacheState
, chart : H.div {} [] , chart : H.div {} []
, chartReload
, frontends , frontends
, listId , listId
, mCorpusId: Just corpusId , mCorpusId: Just corpusId
...@@ -360,6 +388,7 @@ docViewLayoutRec { boxes ...@@ -360,6 +388,7 @@ docViewLayoutRec { boxes
-- DUMMY -- DUMMY
docViewLayoutRec { boxes docViewLayoutRec { boxes
, cacheState , cacheState
, chartReload
, corpusId , corpusId
, frontends , frontends
, listId , listId
...@@ -371,6 +400,7 @@ docViewLayoutRec { boxes ...@@ -371,6 +400,7 @@ docViewLayoutRec { boxes
{ boxes { boxes
, cacheState , cacheState
, chart : H.div {} [] , chart : H.div {} []
, chartReload
, frontends , frontends
, listId , listId
, mCorpusId: Just corpusId , mCorpusId: Just corpusId
......
...@@ -49,7 +49,6 @@ type TabProps = ( selected :: Int, index :: Int ) ...@@ -49,7 +49,6 @@ type TabProps = ( selected :: Int, index :: Int )
tab :: R2.Component TabProps tab :: R2.Component TabProps
tab = R.createElement tabCpt 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 = here.component "tab" cpt tabCpt = here.component "tab" cpt
......
...@@ -62,7 +62,7 @@ loaderCpt = here.component "loader" cpt ...@@ -62,7 +62,7 @@ loaderCpt = here.component "loader" cpt
cpt { render, state } _ = do cpt { render, state } _ = do
state' <- T.useLive T.unequal state state' <- T.useLive T.unequal state
pure $ maybe (loadingSpinner {}) render state' pure $ maybe (loadingSpinner { additionalClass: Nothing }) render state'
type UseLoaderEffect path state = type UseLoaderEffect path state =
( errorHandler :: RESTError -> Effect Unit ( errorHandler :: RESTError -> Effect Unit
...@@ -142,6 +142,7 @@ type LoaderWithCacheAPIProps path res ret = ...@@ -142,6 +142,7 @@ type LoaderWithCacheAPIProps path res ret =
, mkRequest :: path -> GUC.Request , mkRequest :: path -> GUC.Request
, path :: path , path :: path
, renderer :: ret -> R.Element , renderer :: ret -> R.Element
, spinnerClass :: Maybe String
) )
useLoaderWithCacheAPI :: forall path res ret. useLoaderWithCacheAPI :: forall path res ret.
...@@ -153,7 +154,8 @@ useLoaderWithCacheAPI { boxes ...@@ -153,7 +154,8 @@ useLoaderWithCacheAPI { boxes
, handleResponse , handleResponse
, mkRequest , mkRequest
, path , path
, renderer } = do , renderer
, spinnerClass } = do
state <- T.useBox Nothing state <- T.useBox Nothing
state' <- T.useLive T.unequal state state' <- T.useLive T.unequal state
...@@ -163,7 +165,7 @@ useLoaderWithCacheAPI { boxes ...@@ -163,7 +165,7 @@ useLoaderWithCacheAPI { boxes
, mkRequest , mkRequest
, path , path
, state } , state }
pure $ maybe (loadingSpinner {}) renderer state' pure $ maybe (loadingSpinner { additionalClass: spinnerClass }) renderer state'
type LoaderWithCacheAPIEffectProps path res ret = ( type LoaderWithCacheAPIEffectProps path res ret = (
boxes :: Boxes boxes :: Boxes
......
...@@ -55,3 +55,4 @@ useMemberBox val box = T.useFocused (Set.member val) (toggleSet val) box ...@@ -55,3 +55,4 @@ useMemberBox val box = T.useFocused (Set.member val) (toggleSet val) box
toggleSet :: forall s. Ord s => s -> Boolean -> Set s -> Set s toggleSet :: forall s. Ord s => s -> Boolean -> Set s -> Set s
toggleSet val true set = Set.insert val set toggleSet val true set = Set.insert val set
toggleSet val false set = Set.delete val set toggleSet val false set = Set.delete val set
@import "./components/_grouped.scss" @import "./components/_grouped.scss"
@import "./components/_loading_spinner.scss"
.echarts-for-react {
height: 300px;
}
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