1
- import React , { useState } from "react" ;
1
+ import React , { useMemo , useState } from "react" ;
2
2
import styled from "styled-components" ;
3
3
4
4
import { formatUnits } from "viem" ;
@@ -11,6 +11,7 @@ import { responsiveSize } from "styles/responsiveSize";
11
11
12
12
import { StyledSkeleton } from "components/StyledSkeleton" ;
13
13
14
+ import CasesByCourtsChart , { CasesByCourtsChartData } from "./CasesByCourtsChart" ;
14
15
import TimeSeriesChart from "./TimeSeriesChart" ;
15
16
16
17
const Container = styled . div `
@@ -27,7 +28,7 @@ const StyledDropdown = styled(DropdownSelect)`
27
28
const CHART_OPTIONS = [
28
29
{ text : "Staked PNK" , value : "stakedPNK" } ,
29
30
{ text : "Cases" , value : "cases" } ,
30
- { text : "Cases per court" , value : 2 } ,
31
+ { text : "Cases per court" , value : "casesPerCourt" } ,
31
32
] ;
32
33
33
34
const ChartOptionsDropdown : React . FC < {
@@ -56,6 +57,8 @@ const Chart: React.FC = () => {
56
57
const [ chartOption , setChartOption ] = useState ( "stakedPNK" ) ;
57
58
const { data } = useHomePageContext ( ) ;
58
59
const chartData = data ?. counters ;
60
+ const courtsChartData = data ?. courts ;
61
+
59
62
const processedData = chartData ?. reduce ( ( accData : IChartData [ ] , counter ) => {
60
63
return [
61
64
...accData ,
@@ -66,10 +69,34 @@ const Chart: React.FC = () => {
66
69
] ;
67
70
} , [ ] ) ;
68
71
72
+ const processedCourtsData = courtsChartData ?. reduce (
73
+ ( accData : CasesByCourtsChartData , current ) => {
74
+ return {
75
+ labels : [ ...accData . labels , current . name ?? "" ] ,
76
+ cases : [ ...accData . cases , current . numberDisputes ] ,
77
+ totalCases : accData . totalCases + parseInt ( current . numberDisputes , 10 ) ,
78
+ } ;
79
+ } ,
80
+ { labels : [ ] , cases : [ ] , totalCases : 0 }
81
+ ) ;
82
+
83
+ const ChartComponent = useMemo ( ( ) => {
84
+ switch ( chartOption ) {
85
+ case "casesPerCourt" :
86
+ return processedCourtsData ? (
87
+ < CasesByCourtsChart data = { processedCourtsData } />
88
+ ) : (
89
+ < StyledSkeleton height = { 233 } />
90
+ ) ;
91
+ default :
92
+ return processedData ? < TimeSeriesChart data = { processedData } /> : < StyledSkeleton height = { 233 } /> ;
93
+ }
94
+ } , [ processedCourtsData , processedData , chartOption ] ) ;
95
+
69
96
return (
70
97
< Container >
71
98
< ChartOptionsDropdown { ...{ setChartOption } } />
72
- { processedData ? < TimeSeriesChart data = { processedData } /> : < StyledSkeleton height = { 233 } /> }
99
+ { ChartComponent }
73
100
</ Container >
74
101
) ;
75
102
} ;
0 commit comments