PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.2.0
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.2.0
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.2.0, at classes/Visualizer/Gutenberg/src/Components/Charts.js

161 lines 3.4 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 if ( 0 <= [ 'gauge', 'table', 'timeline', 'dataTable' ].indexOf( data['visualizer-chart-type']) ) {
95 if ( 'dataTable' === data['visualizer-chart-type']) {
96 chart = data['visualizer-chart-type'];
97 } else {
98 chart = startCase( data['visualizer-chart-type']);
99 }
100 } else {
101 chart = `${ startCase( data['visualizer-chart-type']) }Chart`;
102 }
103
104 if ( 'dataTable' === chart ) {
105 return;
106 }
107
108 return (
109 <div className="visualizer-settings__charts-single">
110
111 <div className="visualizer-settings__charts-title">
112 { title }
113 </div>
114
115 <Chart
116 chartType={ chart }
117 rows={ data['visualizer-data'] }
118 columns={ data['visualizer-series'] }
119 options={ filterCharts( data['visualizer-settings']) }
120 />
121
122 <div
123 className="visualizer-settings__charts-controls"
124 title={ __( 'Insert Chart' ) }
125 onClick={ () => this.props.getChart( charts[i].id ) }
126 >
127 <Dashicon icon="upload"></Dashicon>
128 </div>
129
130 </div>
131 );
132 }) }
133 </div>
134
135 { ! chartsLoaded && (
136 <Button
137 isPrimary
138 isLarge
139 onClick={ this.loadMoreCharts }
140 isBusy={ isBusy }
141 >
142 { __( 'Load More' ) }
143 </Button>
144 ) }
145
146 </Fragment> :
147 <p className="visualizer-no-charts">
148 { __( 'No charts found.' ) }
149 </p> :
150 <Placeholder>
151 <Spinner/>
152 </Placeholder>
153 }
154
155 </div>
156 );
157 }
158 }
159
160 export default Charts;
161