1- import { Component } from 'react' ;
1+ import React , { useState , useEffect } from 'react' ;
22import PropTypes from 'prop-types' ;
33import { NoSsr } from '@layer5/sistent' ;
44import { MenuItem , TextField , Box , styled } from '@layer5/sistent' ;
@@ -13,112 +13,95 @@ const StyledTextField = styled(TextField)(({ theme }) => ({
1313 marginBottom : theme . spacing ( 1 ) ,
1414} ) ) ;
1515
16- class GrafanaMetricsCompare extends Component {
17- constructor ( props ) {
18- super ( props ) ;
19- const { chartCompare } = props ;
20- const panels = this . computePanels ( chartCompare ) ;
21- this . state = {
22- chartCompare,
23- panels,
24- panel : '' ,
25- selectedSeries : '' ,
26- series : [ ] ,
16+ const GrafanaMetricsCompare = ( { chartCompare } ) => {
17+ const [ panels , setPanels ] = useState ( { } ) ;
18+ const [ panel , setPanel ] = useState ( '' ) ;
19+ const [ selectedSeries , setSelectedSeries ] = useState ( '' ) ;
20+ const [ series , setSeries ] = useState ( [ ] ) ;
21+
22+ useEffect ( ( ) => {
23+ const computePanels = ( chartCompare ) => {
24+ const panels = { } ;
25+ if ( chartCompare && chartCompare . length > 0 ) {
26+ chartCompare . forEach ( ( cc ) => {
27+ if ( cc . boardConfig && cc . boardConfig . panels ) {
28+ cc . boardConfig . panels . forEach ( ( panel ) => {
29+ panels [ panel . title ] = panel ;
30+ } ) ;
31+ }
32+ } ) ;
33+ }
34+ return panels ;
2735 } ;
28- }
2936
30- computePanels ( chartCompare ) {
31- const panels = { } ;
32- if ( chartCompare && chartCompare !== null && chartCompare . length > 0 ) {
33- chartCompare . forEach ( ( cc ) => {
34- if (
35- cc . boardConfig &&
36- cc . boardConfig !== null &&
37- cc . boardConfig . panels &&
38- cc . boardConfig . panels !== null
39- ) {
40- cc . boardConfig . panels . forEach ( ( panel ) => {
41- // if(panels.indexOf(panel.title) === -1){
42- // panels.push(panel);
43- // }
44- panels [ panel . title ] = panel ;
45- } ) ;
46- }
47- } ) ;
48- }
49- return panels ;
50- }
37+ const computedPanels = computePanels ( chartCompare ) ;
38+ setPanels ( computedPanels ) ;
5139
52- componentDidMount ( ) {
53- const { panels } = this . state ;
54- const panel = Object . keys ( panels ) . length > 0 ? Object . keys ( panels ) [ 0 ] : '' ;
55- let series = [ ] ;
56- if ( panels [ panel ] && panels [ panel ] . targets ) {
57- series = panels [ panel ] . targets . map ( ( target ) => target . expr ) ;
40+ const initialPanel =
41+ Object . keys ( computedPanels ) . length > 0 ? Object . keys ( computedPanels ) [ 0 ] : '' ;
42+ let initialSeries = [ ] ;
43+ if ( computedPanels [ initialPanel ] && computedPanels [ initialPanel ] . targets ) {
44+ initialSeries = computedPanels [ initialPanel ] . targets . map ( ( target ) => target . expr ) ;
5845 }
59- this . setState ( { panel, series, selectedSeries : series . length > 0 ? series [ 0 ] : '' } ) ;
60- }
46+ setPanel ( initialPanel ) ;
47+ setSeries ( initialSeries ) ;
48+ setSelectedSeries ( initialSeries . length > 0 ? initialSeries [ 0 ] : '' ) ;
49+ } , [ chartCompare ] ) ;
6150
62- handleChange = ( name ) => ( event ) => {
63- const { panels } = this . state ;
51+ const handleChange = ( name ) => ( event ) => {
6452 if ( name === 'panel' ) {
65- let series = [ ] ;
66- const panel = event . target . value ;
67- if ( panels [ panel ] && panels [ panel ] . targets ) {
68- series = panels [ panel ] . targets . map ( ( target ) => target . expr ) ;
53+ const selectedPanel = event . target . value ;
54+ let newSeries = [ ] ;
55+ if ( panels [ selectedPanel ] && panels [ selectedPanel ] . targets ) {
56+ newSeries = panels [ selectedPanel ] . targets . map ( ( target ) => target . expr ) ;
6957 }
70- this . setState ( { panel, series, selectedSeries : series . length > 0 ? series [ 0 ] : '' } ) ;
58+ setPanel ( selectedPanel ) ;
59+ setSeries ( newSeries ) ;
60+ setSelectedSeries ( newSeries . length > 0 ? newSeries [ 0 ] : '' ) ;
7161 } else if ( name === 'series' ) {
72- this . setState ( { selectedSeries : event . target . value } ) ;
62+ setSelectedSeries ( event . target . value ) ;
7363 }
7464 } ;
7565
76- render ( ) {
77- const { panels, panel, selectedSeries, series } = this . state ;
78-
79- return (
80- < NoSsr >
81- < Root >
82- < StyledTextField
83- select
84- fullWidth
85- label = "Panel"
86- value = { panel }
87- onChange = { this . handleChange ( 'panel' ) }
88- margin = "dense"
89- variant = "outlined"
90- >
91- { panels &&
92- Object . keys ( panels ) . map ( ( p ) => (
93- < MenuItem key = { p } value = { p } >
94- { p }
95- </ MenuItem >
96- ) ) }
97- </ StyledTextField >
98- < StyledTextField
99- select
100- fullWidth
101- label = "Series"
102- value = { selectedSeries }
103- onChange = { this . handleChange ( 'series' ) }
104- margin = "dense"
105- variant = "outlined"
106- >
107- { series &&
108- series . map ( ( s ) => (
109- < MenuItem key = { s } value = { s } >
110- { s }
111- </ MenuItem >
112- ) ) }
113- </ StyledTextField >
114- </ Root >
115- </ NoSsr >
116- ) ;
117- }
118- }
66+ return (
67+ < NoSsr >
68+ < Root >
69+ < StyledTextField
70+ select
71+ fullWidth
72+ label = "Panel"
73+ value = { panel }
74+ onChange = { handleChange ( 'panel' ) }
75+ margin = "dense"
76+ variant = "outlined"
77+ >
78+ { Object . keys ( panels ) . map ( ( p ) => (
79+ < MenuItem key = { p } value = { p } >
80+ { p }
81+ </ MenuItem >
82+ ) ) }
83+ </ StyledTextField >
84+ < StyledTextField
85+ select
86+ fullWidth
87+ label = "Series"
88+ value = { selectedSeries }
89+ onChange = { handleChange ( 'series' ) }
90+ margin = "dense"
91+ variant = "outlined"
92+ >
93+ { series . map ( ( s ) => (
94+ < MenuItem key = { s } value = { s } >
95+ { s }
96+ </ MenuItem >
97+ ) ) }
98+ </ StyledTextField >
99+ </ Root >
100+ </ NoSsr >
101+ ) ;
102+ } ;
119103
120104GrafanaMetricsCompare . propTypes = {
121- classes : PropTypes . object . isRequired ,
122105 chartCompare : PropTypes . array . isRequired ,
123106} ;
124107
0 commit comments