PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.1.1
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.1.1
4.0.8 4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.10.0 3.10.1 3.10.10 3.10.11 3.10.12 3.10.13 3.10.14 3.10.15 3.10.2 3.10.3 All 149 releases
visualizer / classes / Visualizer / Gutenberg / src / Components / Charts.js

Charts.js in Visualizer – Tables & Charts Manager with Built-in AI Generator 3.1.1, at classes/Visualizer/Gutenberg/src/Components/Charts.js

154 lines 3.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * External dependencies
3 */
4 import { Chart } from 'react-google-charts';
5
6 import { formatDate, filterCharts } from '../utils.js';
7
8 /**
9 * WordPress dependencies
10 */
11 const { startCase } = lodash;
12
13 const { __ } = wp.i18n;
14
15 const { apiFetch } = wp;
16
17 const {
18 Component,
19 Fragment
20 } = wp.element;
21
22 const {
23 Button,
24 Dashicon,
25 Placeholder,
26 Spinner
27 } = wp.components;
28
29 class Charts extends Component {
30 constructor() {
31 super( ...arguments );
32
33 this.loadMoreCharts = this.loadMoreCharts.bind( this );
34
35 this.state = {
36 charts: null,
37 isBusy: false,
38 chartsLoaded: false
39 };
40 }
41
42 async componentDidMount() {
43
44 // Fetch review again if block loaded after saving.
45 let result = await apiFetch({ path: 'wp/v2/visualizer/?per_page=6' });
46 this.setState({ charts: result });
47 }
48
49 async loadMoreCharts() {
50 const offset = ( this.state.charts ).length;
51 let chartsLoaded = this.state.chartsLoaded;
52
53 this.setState({ isBusy: true });
54
55 let result = await apiFetch({ path: `wp/v2/visualizer/?per_page=6&offset=${ offset }` });
56
57 if ( 6 > result.length ) {
58 chartsLoaded = true;
59 }
60
61 this.setState({
62 charts: this.state.charts.concat( result ),
63 isBusy: false,
64 chartsLoaded
65 });
66 }
67
68 render() {
69
70 const { charts, isBusy, chartsLoaded } = this.state;
71
72 return (
73 <div className="visualizer-settings__charts">
74
75 {
76 ( null !== charts ) ?
77 ( 1 <= charts.length ) ?
78 <Fragment>
79
80 <div className="visualizer-settings__charts-grid">
81
82 { ( Object.keys( charts ) ).map( i => {
83
84 const data = formatDate( charts[i]['chart_data']);
85
86 let title, chart;
87
88 if ( data['visualizer-settings'].title ) {
89 title = data['visualizer-settings'].title;
90 } else {
91 title = `#${charts[i].id}`;
92 }
93
94 // Format chart type for Gauge chart.
95 if ( 0 <= [ 'gauge', 'table', 'timeline' ].indexOf( data['visualizer-chart-type']) ) {
96 chart = startCase( data['visualizer-chart-type']);
97 } else {
98 chart = `${ startCase( data['visualizer-chart-type']) }Chart`;
99 }
100
101 return (
102 <div className="visualizer-settings__charts-single">
103
104 <div className="visualizer-settings__charts-title">
105 { title }
106 </div>
107
108 <Chart
109 chartType={ chart }
110 rows={ data['visualizer-data'] }
111 columns={ data['visualizer-series'] }
112 options={ filterCharts( data['visualizer-settings']) }
113 />
114
115 <div
116 className="visualizer-settings__charts-controls"
117 title={ __( 'Insert Chart' ) }
118 onClick={ () => this.props.getChart( charts[i].id ) }
119 >
120 <Dashicon icon="upload"></Dashicon>
121 </div>
122
123 </div>
124 );
125 }) }
126 </div>
127
128 { ! chartsLoaded && (
129 <Button
130 isPrimary
131 isLarge
132 onClick={ this.loadMoreCharts }
133 isBusy={ isBusy }
134 >
135 { __( 'Load More' ) }
136 </Button>
137 ) }
138
139 </Fragment> :
140 <p className="visualizer-no-charts">
141 { __( 'No charts found.' ) }
142 </p> :
143 <Placeholder>
144 <Spinner/>
145 </Placeholder>
146 }
147
148 </div>
149 );
150 }
151 }
152
153 export default Charts;
154