1- import React from 'react' ;
1+ import React , { useEffect , useState , useRef } from 'react' ;
22import ReactECharts from 'echarts-for-react' ;
3+ import { getMachineState10Days , getMachineStateIntraDays } from '@/utility/chartUtility' ;
4+ import { showToast } from "@/utility/toast" ;
5+ import { Toast } from "primereact/toast" ;
6+ import axios from "axios" ;
37
4- const StackedPercentageBarChart : React . FC = ( ) => {
5- const simulatedData = [
6- { date : '2025-05-17' , Offline : 3 , Error : 2 , Maintenance : 1 , Idle : 6 , Running : 12 } ,
7- { date : '2025-05-18' , Offline : 4 , Error : 1 , Maintenance : 2 , Idle : 7 , Running : 10 } ,
8- { date : '2025-05-19' , Offline : 2 , Error : 1 , Maintenance : 3 , Idle : 5 , Running : 13 } ,
9- { date : '2025-05-20' , Offline : 1 , Error : 3 , Maintenance : 2 , Idle : 8 , Running : 10 } ,
10- { date : '2025-05-21' , Offline : 5 , Error : 2 , Maintenance : 1 , Idle : 4 , Running : 12 } ,
11- { date : '2025-05-22' , Offline : 3 , Error : 1 , Maintenance : 2 , Idle : 9 , Running : 9 } ,
12- { date : '2025-05-23' , Offline : 2 , Error : 2 , Maintenance : 1 , Idle : 7 , Running : 12 } ,
13- { date : '2025-05-24' , Offline : 4 , Error : 1 , Maintenance : 3 , Idle : 6 , Running : 10 } ,
14- { date : '2025-05-25' , Offline : 1 , Error : 2 , Maintenance : 2 , Idle : 5 , Running : 14 } ,
15- { date : '2025-05-26' , Offline : 3 , Error : 1 , Maintenance : 2 , Idle : 6 , Running : 12 }
16- ] ;
8+ interface StackedPercentageBarChartProps {
9+ activityInterval : string ;
10+ }
1711
18- const states = [ "Offline" , "Error" , "Maintenance" , "Idle" , "Running" ]
12+ const StackedPercentageBarChart : React . FC < StackedPercentageBarChartProps > = ( { activityInterval} ) => {
13+ const [ machineState , setMachineState ] = useState < Record < string , any > [ ] > ( [ ] ) ;
14+ const toast = useRef < Toast > ( null ) ;
15+ const fetchData = async ( ) => {
16+ try {
17+ if ( activityInterval === "10-days" ) {
18+ const response = await getMachineState10Days ( ) ;
19+ setMachineState ( response ) ;
20+ } else {
21+ const response = await getMachineStateIntraDays ( ) ;
22+ setMachineState ( response ) ;
23+ }
24+ } catch ( error ) {
25+ if ( axios . isAxiosError ( error ) && error . response ?. data ?. message ) {
26+ showToast ( toast , "error" , "Error" , error . response . data . message ) ;
27+ } else {
28+ showToast ( toast , "error" , "Error" , "Error fetching machine state data" ) ;
29+ }
30+ }
31+ }
1932
20- const series = states . slice ( ) . reverse ( ) . map ( ( state , index , arr ) => ( {
33+ useEffect ( ( ) => {
34+ fetchData ( ) ;
35+ } , [ activityInterval ] )
36+
37+ const stateMap = {
38+ "Offline" : "hours_0" ,
39+ "Online Idle" : "hours_1" ,
40+ "Online Running" : "hours_2" ,
41+ } ;
42+ const states = Object . keys ( stateMap ) ;
43+
44+ const series = states . map ( ( state , index , arr ) => ( {
2145 name : state ,
2246 type : 'bar' ,
2347 stack : 'total' ,
@@ -26,7 +50,7 @@ const StackedPercentageBarChart: React.FC = () => {
2650 itemStyle : {
2751 borderRadius : index === 0 ? [ 0 , 0 , 4 , 4 ] : index === arr . length - 1 ? [ 4 , 4 , 0 , 0 ] : 0
2852 } ,
29- data : simulatedData . map ( ( d ) => d [ state ] ) ,
53+ data : machineState . map ( ( d ) => d [ stateMap [ state ] ] ) ,
3054 } ) ) ;
3155
3256 const option = {
@@ -37,15 +61,16 @@ const StackedPercentageBarChart: React.FC = () => {
3761 trigger : 'axis' ,
3862 formatter : ( params : any ) => {
3963 const dateStr = params [ 0 ] . dataIndex !== undefined
40- ? simulatedData [ params [ 0 ] . dataIndex ] . date
64+ ? machineState [ params [ 0 ] . dataIndex ] . date
4165 : '' ;
42- const date = new Date ( dateStr ) ;
66+
67+ const [ day , month , year ] = dateStr . split ( '.' ) ;
68+ const validDateStr = `${ year } -${ month } -${ day } ` ;
69+
70+ const date = new Date ( validDateStr ) ;
4371
4472 const dayNames = [ 'Su' , 'Mo' , 'Tu' , 'We' , 'Th' , 'Fr' , 'Sa' ] ;
4573 const dayName = dayNames [ date . getDay ( ) ] ;
46- const day = String ( date . getDate ( ) ) . padStart ( 2 , '0' ) ;
47- const month = String ( date . getMonth ( ) + 1 ) . padStart ( 2 , '0' ) ;
48- const year = date . getFullYear ( ) ;
4974
5075 const total = params . reduce ( ( sum : number , p : any ) => sum + p . value , 0 ) ;
5176 const header = `${ dayName } . ${ day } .${ month } .${ year } <span>(${ total } h)<span>` ;
@@ -54,7 +79,7 @@ const StackedPercentageBarChart: React.FC = () => {
5479 . slice ( ) . reverse ( ) . map ( ( p : any ) => {
5580 const hours = p . value ;
5681 const percent = ( ( hours / total ) * 100 ) . toFixed ( 1 ) ;
57- return `<div class="muct_row"><div>${ p . marker } ${ p . seriesName === "Maintenance" ? "Maint." : p . seriesName } </div><div><span>${ percent } %</span></div><div>${ hours } <span>h</span></div></div>` ;
82+ return `<div class="muct_row"><div>${ p . marker } ${ p . seriesName } </div><div><span>${ percent } %</span></div><div>${ hours } <span>h</span></div></div>` ;
5883 } )
5984 . join ( '' ) ;
6085 return `<div class="machine_uptime_chart_tooltip"><div class="muct_header">${ header } </div><div class="muct_details">${ details } <div></div>` ;
@@ -63,11 +88,10 @@ const StackedPercentageBarChart: React.FC = () => {
6388 xAxis : {
6489 type : 'category' ,
6590 axisLine : { show : false } ,
66- data : simulatedData . map ( ( d ) => {
67- const date = new Date ( d . date ) ;
68- const day = String ( date . getDate ( ) ) . padStart ( 2 , '0' ) ;
69- const month = String ( date . getMonth ( ) + 1 ) . padStart ( 2 , '0' ) ;
70- return `${ day } .${ month } ` ;
91+ data : machineState . map ( ( d ) => {
92+ const [ day , month , year ] = d . date . split ( "." ) ;
93+ const formatted = `${ day } .${ month } ` ;
94+ return formatted ;
7195 } ) ,
7296 axisTick : { show : false }
7397 } ,
0 commit comments