1- import React , { useState } from "react" ;
1+ import React , { useMemo , useState } from "react" ;
22import styled from "styled-components" ;
33
44import { formatUnits } from "viem" ;
@@ -11,6 +11,7 @@ import { responsiveSize } from "styles/responsiveSize";
1111
1212import { StyledSkeleton } from "components/StyledSkeleton" ;
1313
14+ import CasesByCourtsChart , { CasesByCourtsChartData } from "./CasesByCourtsChart" ;
1415import TimeSeriesChart from "./TimeSeriesChart" ;
1516
1617const Container = styled . div `
@@ -27,7 +28,7 @@ const StyledDropdown = styled(DropdownSelect)`
2728const CHART_OPTIONS = [
2829 { text : "Staked PNK" , value : "stakedPNK" } ,
2930 { text : "Cases" , value : "cases" } ,
30- { text : "Cases per court" , value : 2 } ,
31+ { text : "Cases per court" , value : "casesPerCourt" } ,
3132] ;
3233
3334const ChartOptionsDropdown : React . FC < {
@@ -56,6 +57,8 @@ const Chart: React.FC = () => {
5657 const [ chartOption , setChartOption ] = useState ( "stakedPNK" ) ;
5758 const { data } = useHomePageContext ( ) ;
5859 const chartData = data ?. counters ;
60+ const courtsChartData = data ?. courts ;
61+
5962 const processedData = chartData ?. reduce ( ( accData : IChartData [ ] , counter ) => {
6063 return [
6164 ...accData ,
@@ -66,10 +69,34 @@ const Chart: React.FC = () => {
6669 ] ;
6770 } , [ ] ) ;
6871
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+
6996 return (
7097 < Container >
7198 < ChartOptionsDropdown { ...{ setChartOption } } />
72- { processedData ? < TimeSeriesChart data = { processedData } /> : < StyledSkeleton height = { 233 } /> }
99+ { ChartComponent }
73100 </ Container >
74101 ) ;
75102} ;
0 commit comments