module Gargantext.Pages.Corpus.Dashboard where import Prelude hiding (div) import Data.Array (zipWith) import Data.Tuple (Tuple(..)) import Gargantext.Components.Charts.Options.ECharts (Options(..), chart, xAxis', yAxis', tooltipTriggerAxis) import Gargantext.Components.Charts.Options.Data import Gargantext.Components.Charts.Options.Series import Data.Int (toNumber) import React.DOM (div, h1, text) import React.DOM.Props (className) import Thermite (Render, Spec, simpleSpec, defaultPerformAction) render :: Render {} {} Void 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]) [ "Télécom Bretagne", "Mines Nantes", "Eurecom"] ) , chart scatterEx , chart sankeyEx , chart treeMapEx , chart treeEx ] where myData = [seriesBarD1 {name: "Bar Data"} [ dataSerie {name: "val1", value: 50.0} , dataSerie {name: "val2", value: 70.0} , dataSerie {name: "val3", value: 80.0} ] ] focus :: String -> Options focus school = Options { mainTitle : "Focus " <> school , subTitle : "Total scientific publications" , xAxis : xAxis' ["2015", "2016", "2017"] , yAxis : yAxis' { position: "left" , show: true } , series : myData , addZoom : false , tooltip : tooltipTriggerAxis -- Necessary? } ----------------------------------------------------------------------------------------------------------- naturePublis_x :: Array String naturePublis_x = ["Com","Articles","Thèses","Reports"] naturePublis_y' :: Array Int naturePublis_y' = [23901,17417,1188,1176] naturePublis_y :: Array DataD1 naturePublis_y = zipWith (\n v -> dataSerie {name: n, value: toNumber v }) naturePublis_x naturePublis_y' naturePublis :: Options naturePublis = Options { mainTitle : "Nature of publications" , subTitle : "Distribution by type" , xAxis : xAxis' [] , yAxis : yAxis' { position: "left", show: false } , series : [seriesFunnelD1 { name: "Funnel Data" } naturePublis_y] , addZoom : false , tooltip : tooltipTriggerAxis -- Necessary? } ----------------------------------------------------------------------------------------------------------- globalPublis_x :: Array Int 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] globalPublis_y :: Array Int 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] globalPublis :: Options globalPublis = Options { mainTitle : "Histogram" , subTitle : "Distribution of publications over time" , xAxis : xAxis' (map show globalPublis_x) , yAxis : yAxis' { position: "left", show: true } , series : [seriesBarD1 {name: "Number of publication / year"} $ map (\n -> dataSerie {name: "", value: toNumber n }) globalPublis_y] , addZoom : true , tooltip : tooltipTriggerAxis -- Necessary? } distriBySchool_y :: Array (Tuple String Int) 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] distriBySchool :: Options distriBySchool = Options { mainTitle : "School production in 2017" , subTitle : "Distribution by school" , xAxis : xAxis' [] , yAxis : yAxis' { position : "", show: false } , series : [ seriesPieD1 {name: "Pie data"} (map (\(Tuple n v) -> dataSerie {name: n, value: toNumber v}) distriBySchool_y)] , addZoom : false , tooltip : tooltipTriggerAxis -- Necessary? } scatterEx :: Options scatterEx = Options { mainTitle : "Scatter test" , subTitle : "Scatter subtitle" , xAxis : xAxis' [] , yAxis : yAxis' { position: "", show: true } , 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]]) ] , addZoom : false , tooltip : tooltipTriggerAxis -- Necessary? } sankeyEx :: Options sankeyEx = Options { mainTitle : "" , subTitle : "" , xAxis : xAxis' [] , yAxis : yAxis' { position: "", show: false } , 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" } ] , tooltip : tooltipTriggerAxis -- Necessary? , addZoom : false } treeData :: Array TreeData treeData = [ treeNode "nodeA" 10.0 [ treeLeaf "nodeAa" 4.0 , treeLeaf "nodeAb" 5.0 , treeNode "nodeAc" 1.0 [ treeLeaf "nodeAca" 0.5 , treeLeaf "nodeAcb" 0.5 ] ] , treeNode "nodeB" 20.0 [ treeNode "nodeBa" 20.0 [ treeLeaf "nodeBa1" 20.0]] , treeNode "nodeC" 20.0 [ treeNode "nodeCa" 20.0 [ treeLeaf "nodeCa1" 10.0 , treeLeaf "nodeCa2" 10.0 ] ] , treeNode "nodeD" 20.0 [ treeNode "nodeDa" 20.0 [ treeLeaf "nodeDa1" 2.0 , treeLeaf "nodeDa2" 2.0 , treeLeaf "nodeDa3" 2.0 , treeLeaf "nodeDa4" 2.0 , treeLeaf "nodeDa5" 2.0 , treeLeaf "nodeDa6" 2.0 , treeLeaf "nodeDa7" 2.0 , treeLeaf "nodeDa8" 2.0 , treeLeaf "nodeDa9" 2.0 , treeLeaf "nodeDa10" 2.0 ] ] ] treeData' :: Array TreeData treeData' = [ treeNode "nodeA" 10.0 [ treeLeaf "nodeAa" 4.0 , treeLeaf "nodeAb" 5.0 , treeNode "nodeAc" 1.0 [ treeLeaf "nodeAca" 0.5 , treeLeaf "nodeAcb" 0.5 ] , treeNode "nodeB" 20.0 [ treeNode "nodeBa" 20.0 [ treeLeaf "nodeBa1" 20.0]] , treeNode "nodeC" 20.0 [ treeNode "nodeBa" 20.0 [ treeLeaf "nodeBa1" 20.0]] , treeNode "nodeD" 20.0 [ treeNode "nodeBa" 20.0 [ treeLeaf "nodeBa1" 20.0]] , treeNode "nodeE" 20.0 [ treeNode "nodeBa" 20.0 [ treeLeaf "nodeBa1" 20.0]] , treeNode "nodeF" 20.0 [ treeNode "nodeBa" 20.0 [ treeLeaf "nodeBa1" 20.0]] , treeNode "nodeG" 20.0 [ treeNode "nodeBa" 20.0 [ treeLeaf "nodeBa1" 20.0]] , treeNode "nodeH" 20.0 [ treeNode "nodeBa" 20.0 [ treeLeaf "nodeBa1" 20.0]] ] ] treeMapEx :: Options treeMapEx = Options { mainTitle : "" , subTitle : "" , xAxis : xAxis' [] , yAxis : yAxis' { position: "", show: false } , series : [mkTree TreeMap treeData] , addZoom : false , tooltip : tooltipTriggerAxis -- Necessary? } treeEx :: Options treeEx = Options { mainTitle : "Tree" , subTitle : "Radial" , xAxis : xAxis' [] , yAxis : yAxis' { position: "", show: false } , series : [mkTree TreeRadial treeData'] , addZoom : false , tooltip : tooltipTriggerAxis -- Necessary? } layoutDashboard :: Spec {} {} Void layoutDashboard = simpleSpec defaultPerformAction render