2 Module : Gargantext.Core.Viz.Chart
3 Description : Graph utils
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
12 {-# LANGUAGE TemplateHaskell #-}
14 module Gargantext.Core.Viz.Chart
17 import Data.List (sortOn)
18 import Data.Map (toList)
19 import qualified Data.List as List
20 import qualified Data.Map as Map
21 import Data.Maybe (catMaybes)
22 import qualified Data.Vector as V
24 import Gargantext.Core.Types.Main
25 import Gargantext.Database.Admin.Config
26 import Gargantext.Database.Prelude
27 import Gargantext.Database.Query.Table.Node
28 import Gargantext.Database.Query.Table.Node.Select
29 import Gargantext.Database.Query.Table.NodeNode (selectDocsDates)
30 import Gargantext.Database.Schema.Node
31 import Gargantext.Prelude
32 import Gargantext.Core.Text.Metrics.Count (occurrencesWith)
35 import Gargantext.API.Ngrams.NgramsTree
36 import Gargantext.API.Ngrams.Tools
37 import Gargantext.API.Ngrams.Types
38 import Gargantext.Core.Types
39 import Gargantext.Database.Action.Flow
40 import Gargantext.Database.Action.Metrics.NgramsByNode
41 import Gargantext.Database.Schema.Ngrams
42 import Gargantext.Core.Viz.Types
43 import qualified Data.HashMap.Strict as HashMap
46 histoData :: CorpusId -> Cmd err Histo
48 dates <- selectDocsDates cId
49 let (ls, css) = V.unzip
51 $ sortOn fst -- TODO Vector.sortOn
53 $ occurrencesWith identity dates
57 chartData :: FlowCmdM env err m
58 => CorpusId -> NgramsType -> ListType
60 chartData cId nt lt = do
61 ls' <- selectNodesWithUsername NodeList userMaster
62 ls <- map (_node_id) <$> getListsWithParentId cId
63 ts <- mapTermListRoot ls nt <$> getRepo
65 dico = filterListWithRoot lt ts
66 terms = catMaybes $ List.concat $ map (\(a,b) -> [Just a, b]) $ HashMap.toList dico
67 group dico' x = case HashMap.lookup x dico' of
69 Just x' -> maybe x identity x'
71 (_total,mapTerms) <- countNodesByNgramsWith (group dico)
72 <$> getNodesByNgramsOnlyUser cId (ls' <> ls) nt terms
73 let (dates, count) = V.unzip $ fmap (\(NgramsTerm t,(d,_)) -> (t, d)) $ V.fromList $ HashMap.toList mapTerms
74 pure (Histo dates (round <$> count))
77 treeData :: FlowCmdM env err m
78 => CorpusId -> NgramsType -> ListType
79 -> m (V.Vector NgramsTree)
80 treeData cId nt lt = do
81 ls' <- selectNodesWithUsername NodeList userMaster
82 ls <- map (_node_id) <$> getListsWithParentId cId
83 ts <- mapTermListRoot ls nt <$> getRepo
86 dico = filterListWithRoot lt ts
87 terms = catMaybes $ List.concat $ map (\(a,b) -> [Just a, b]) $ HashMap.toList dico
89 cs' <- getNodesByNgramsOnlyUser cId (ls' <> ls) nt terms
91 m <- getListNgrams ls nt
92 pure $ V.fromList $ toTree lt cs' m