Dashboard.purs 8.99 KB
Newer Older
1
module Gargantext.Pages.Corpus.Dashboard where
2

3
import Prelude hiding (div)
Sudhir Kumar's avatar
Sudhir Kumar committed
4

5
import Data.Array (zipWith)
6
import Data.Tuple (Tuple(..))
7 8
import Gargantext.Components.Charts.Options.ECharts (Options(..), chart, xAxis', yAxis', tooltipTriggerAxis)
import Gargantext.Components.Charts.Options.Data
Sudhir Kumar's avatar
Sudhir Kumar committed
9
import Gargantext.Components.Charts.Options.Series
10
import Data.Int (toNumber)
11
import React.DOM (div, h1, text)
12
import React.DOM.Props (className)
13
import Thermite (Render, Spec, simpleSpec, defaultPerformAction)
14

15
render :: Render {} {} Void
16 17 18 19 20 21 22
render dispatch _ state _ = [
    h1 [] [text "IMT DashBoard"]
    , div [className "row"] [ div [className "col-md-9 content"] [chart globalPublis]
                            , div [className "col-md-3 content"] [chart naturePublis]
                            ]
    , chart distriBySchool
    , div [className "row"] (map (\school -> div [className "col-md-4 content"] [chart $ focus school])
23
                                 [ "Télécom Bretagne", "Mines Nantes", "Eurecom"]
24
                            )
25
    , chart scatterEx
26
    , chart sankeyEx
27 28
    , chart treeMapEx
    , chart treeEx
29 30
  ]
    where
31
      myData = [seriesBarD1 {name: "Bar Data"}
32 33 34
                            [ dataSerie {name: "val1", value: 50.0}
                            , dataSerie {name: "val2", value: 70.0}
                            , dataSerie {name: "val3", value: 80.0}
35 36
                            ]
               ]
37 38

      focus :: String -> Options
39 40 41 42 43
      focus school = Options
        { mainTitle : "Focus " <> school
        , subTitle  : "Total scientific publications"
        , xAxis     : xAxis' ["2015", "2016", "2017"]
        , yAxis     : yAxis' { position: "left"
44
                             , show: false
45
                             , min : 0
46 47 48
                             }
        , series    : myData
        , addZoom   : false
49
        , tooltip   : tooltipTriggerAxis -- Necessary?
50
        }
51

52 53
-----------------------------------------------------------------------------------------------------------

54
naturePublis_x :: Array String
55
naturePublis_x = ["Com","Articles","Thèses","Reports"]
56
naturePublis_y' :: Array Int
57
naturePublis_y' = [23901,17417,1188,1176]
58

59 60
naturePublis_y :: Array DataD1
naturePublis_y = zipWith (\n v -> dataSerie {name: n, value: toNumber v }) naturePublis_x naturePublis_y'
61 62

naturePublis :: Options
63 64 65 66
naturePublis = Options
  { mainTitle : "Nature of publications"
  , subTitle  : "Distribution by type"
  , xAxis     : xAxis' []
67
  , yAxis     : yAxis' { position: "left", show: false, min:0}
68 69
  , series    : [seriesFunnelD1 { name: "Funnel Data" } naturePublis_y]
  , addZoom   : false
70
  , tooltip   : tooltipTriggerAxis -- Necessary?
71
  }
72 73 74

-----------------------------------------------------------------------------------------------------------

75
globalPublis_x :: Array Int
76
globalPublis_x = [1982,1986,1987,1988,1990,1993,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017]
77
globalPublis_y :: Array Int
78 79
globalPublis_y = [1,4,2,1,1,2,1,1,8,38,234,76,40,82,75,202,1475,1092,1827,2630,4978,3668,4764,5915,4602,5269,6814,4018]

80

81
globalPublis :: Options
82
globalPublis = Options
83
  { mainTitle : "Histogram"
84
  , subTitle  : "Distribution of publications over time"
85
  , xAxis     : xAxis' (map show globalPublis_x)
86
  , yAxis     : yAxis' { position: "left", show: true, min:0}
87
  , series    : [seriesBarD1 {name: "Number of publication / year"} $ map (\n -> dataSerie {name: "", value: toNumber n }) globalPublis_y]
88
  , addZoom   : true
89
  , tooltip   : tooltipTriggerAxis -- Necessary?
90
  }
91 92 93



94
distriBySchool_y :: Array (Tuple String Int)
95 96
distriBySchool_y = [Tuple "Télécom Bretagne" 1150,Tuple "Télécom SudParis" 946,Tuple "Mines Nantes" 547,Tuple "Télécom ParisTech" 429,Tuple "IMT Atlantique" 205,Tuple "Mines Alès" 56
                   ,Tuple "Télécom Ecole de Management" 52,Tuple "Mines Albi-Carmaux" 6]
97 98

distriBySchool :: Options
99 100 101 102
distriBySchool = Options
  { mainTitle : "School production in 2017"
  , subTitle  : "Distribution by school"
  , xAxis     : xAxis' []
103
  , yAxis     : yAxis' { position : "", show: false, min:0}
104
  , series    : [ seriesPieD1 {name: "Pie data"} (map (\(Tuple n v) -> dataSerie {name: n, value: toNumber v}) distriBySchool_y)]
105
  , addZoom   : false
106
  , tooltip   : tooltipTriggerAxis -- Necessary?
107
  }
108

109
scatterEx :: Options
110 111 112 113
scatterEx = Options
  { mainTitle : "Scatter test"
  , subTitle  : "Scatter subtitle"
  , xAxis     : xAxis' []
114
  , yAxis     : yAxis' { position: "", show: true, min:0}
115 116 117
  , series    : [ seriesScatterD2 {name: "name1", symbolSize: 10.0} (dataSerieV <$> [[2.0,3.0],[3.0,4.0]])
                , seriesScatterD2 {name: "name2", symbolSize: 5.0 } (dataSerieV <$> [[1.0,3.0],[5.0,4.0]])
                , seriesScatterD2 {name: "name3", symbolSize: 10.0} (dataSerieV <$> [[10.0,3.0],[8.0,4.0]])
118 119
                ]
  , addZoom   : false
120
  , tooltip   : tooltipTriggerAxis -- Necessary?
121
  }
122

123
sankeyEx :: Options
124 125 126 127
sankeyEx = Options
  { mainTitle : ""
  , subTitle  : ""
  , xAxis     : xAxis' []
128
  , yAxis     : yAxis' { position: "", show: false, min:0}
129 130 131 132 133 134 135 136 137 138 139 140 141 142
  , series    :
     [ seriesSankey
         { "data":
             [ {name : "a"}, {name : "b"}
             , {name:"c"}, {name:"d"} ]
         , links:
             [ {source : "a", target : "b", value :2.0}
             , {source : "a", target : "c", value :1.0}
             , {source : "b", target : "c", value :1.0}
             , {source : "b", target : "d", value :3.0}
             ]
         , layout: "none"
         }
     ]
143
  , tooltip   : tooltipTriggerAxis -- Necessary?
144 145
  , addZoom   : false
  }
146

147 148 149 150 151
treeData :: Array TreeNode
treeData = [ treeNode "nodeA" 10 [ treeNode "nodeAa" 4 []
                                   , treeNode "nodeAb" 5 []
                                   , treeNode "nodeAc" 1 [ treeNode "nodeAca" 5 []
                                                           , treeNode "nodeAcb" 5 []
152
                                                          ]
153
                                   ]
154 155 156
           , treeNode "nodeB" 20 [ treeNode "nodeBa" 20 [ treeNode "nodeBa1" 20 [] ]]
           , treeNode "nodeC" 20 [ treeNode "nodeCa" 20 [ treeNode "nodeCa1" 10 []
                                                            , treeNode "nodeCa2" 10 []
157 158
                                                            ]
                                   ]
159 160 161 162 163 164 165 166 167 168
           , treeNode "nodeD" 20 [ treeNode "nodeDa" 20 [ treeNode "nodeDa1" 2 []
                                                            , treeNode "nodeDa2" 2 []
                                                            , treeNode "nodeDa3" 2 []
                                                            , treeNode "nodeDa4" 2 []
                                                            , treeNode "nodeDa5" 2 []
                                                            , treeNode "nodeDa6" 2 []
                                                            , treeNode "nodeDa7" 2 []
                                                            , treeNode "nodeDa8" 2 []
                                                            , treeNode "nodeDa9" 2 []
                                                            , treeNode "nodeDa10" 2 []
169 170 171 172 173
                                                            ]
                                     ]
          ]


174 175 176 177 178
treeData' :: Array TreeNode
treeData' = [ treeNode "nodeA" 10 [ treeLeaf "nodeAa" 4
                                    , treeLeaf "nodeAb" 5
                                    , treeNode "nodeAc" 1 [ treeLeaf "nodeAca" 5
                                                           , treeLeaf "nodeAcb" 5
179
                                                          ]
180 181 182 183 184 185 186
                                   , treeNode "nodeB" 20 [ treeNode "nodeBa" 20 [ treeLeaf "nodeBa1" 20]]
                                   , treeNode "nodeC" 20 [ treeNode "nodeBa" 20 [ treeLeaf "nodeBa1" 20]]
                                   , treeNode "nodeD" 20 [ treeNode "nodeBa" 20 [ treeLeaf "nodeBa1" 20]]
                                   , treeNode "nodeE" 20 [ treeNode "nodeBa" 20 [ treeLeaf "nodeBa1" 20]]
                                   , treeNode "nodeF" 20 [ treeNode "nodeBa" 20 [ treeLeaf "nodeBa1" 20]]
                                   , treeNode "nodeG" 20 [ treeNode "nodeBa" 20 [ treeLeaf "nodeBa1" 20]]
                                   , treeNode "nodeH" 20 [ treeNode "nodeBa" 20 [ treeLeaf "nodeBa1" 20]]
187 188 189 190
                                   ]
          ]


191 192

treeMapEx :: Options
193 194 195 196
treeMapEx = Options
  { mainTitle : ""
  , subTitle  : ""
  , xAxis     : xAxis' []
197
  , yAxis     : yAxis' { position: "", show: false, min:0}
198 199
  , series    : [mkTree TreeMap treeData]
  , addZoom   : false
200
  , tooltip   : tooltipTriggerAxis -- Necessary?
201
  }
202 203

treeEx :: Options
204 205 206 207
treeEx = Options
  { mainTitle : "Tree"
  , subTitle  : "Radial"
  , xAxis     : xAxis' []
208
  , yAxis     : yAxis' { position: "", show: false, min:0}
209 210
  , series    : [mkTree TreeRadial treeData']
  , addZoom   : false
211
  , tooltip   : tooltipTriggerAxis -- Necessary?
212
  }
213

214 215
layoutDashboard :: Spec {} {} Void
layoutDashboard = simpleSpec defaultPerformAction render