PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.4.1
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.4.1
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 3.10.4 All 148 releases
visualizer / classes / Visualizer / Gutenberg / src / Components / Charts.js

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

201 lines 5.2 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 DataTable from './DataTable.js';
7
8 import { formatDate, filterCharts } from '../utils.js';
9
10 /**
11 * WordPress dependencies
12 */
13 const { startCase } = lodash;
14
15 const { __ } = wp.i18n;
16
17 const { apiFetch } = wp;
18
19 const {
20 Component,
21 Fragment
22 } = wp.element;
23
24 const {
25 Button,
26 Dashicon,
27 ExternalLink,
28 Notice,
29 Placeholder,
30 Spinner
31 } = wp.components;
32
33 class Charts extends Component {
34 constructor() {
35 super( ...arguments );
36
37 this.loadMoreCharts = this.loadMoreCharts.bind( this );
38
39 this.state = {
40 charts: null,
41 isBusy: false,
42 chartsLoaded: false
43 };
44 }
45
46 async componentDidMount() {
47
48 // Fetch review again if block loaded after saving.
49 let result = await apiFetch({ path: 'wp/v2/visualizer/?per_page=6&meta_key=visualizer-chart-library&meta_value=ChartJS' });
50 this.setState({ charts: result });
51 }
52
53 async loadMoreCharts() {
54 const offset = ( this.state.charts ).length;
55 let chartsLoaded = this.state.chartsLoaded;
56
57 this.setState({ isBusy: true });
58
59 let result = await apiFetch({ path: `wp/v2/visualizer/?per_page=6&meta_key=visualizer-chart-library&meta_value=ChartJS&offset=${ offset }` });
60
61 if ( 6 > result.length ) {
62 chartsLoaded = true;
63 }
64
65 this.setState({
66 charts: this.state.charts.concat( result ),
67 isBusy: false,
68 chartsLoaded
69 });
70 }
71
72 render() {
73
74 const { charts, isBusy, chartsLoaded } = this.state;
75
76 return (
77 <div className="visualizer-settings__charts">
78 <Notice
79 status="warning"
80 isDismissible={ false }
81 >
82 { __( 'ChartJS charts are currently not available for selection here, you must visit the library, get the shortcode, and add the chart here in a shortcode tag.' ) }
83
84 <ExternalLink href={ visualizerLocalize.adminPage }>
85 { __( 'Click here to visit Visualizer Charts Library.' ) }
86 </ExternalLink>
87 </Notice>
88
89 {
90 ( null !== charts ) ?
91 ( 1 <= charts.length ) ?
92 <Fragment>
93
94 <div className="visualizer-settings__charts-grid">
95
96 { ( Object.keys( charts ) ).map( i => {
97 const data = formatDate( charts[i]['chart_data']);
98
99 let title, chart, footer;
100
101 if ( data['visualizer-settings'].title ) {
102 title = data['visualizer-settings'].title;
103 } else {
104 title = `#${charts[i].id}`;
105 }
106
107 if ( 0 <= [ 'gauge', 'table', 'timeline', 'dataTable' ].indexOf( data['visualizer-chart-type']) ) {
108 if ( 'dataTable' === data['visualizer-chart-type']) {
109 chart = data['visualizer-chart-type'];
110 } else {
111 chart = startCase( data['visualizer-chart-type']);
112 }
113 } else {
114 chart = `${ startCase( data['visualizer-chart-type']) }Chart`;
115 }
116
117 if ( data['visualizer-chart-library']) {
118 if ( 'ChartJS' === data['visualizer-chart-library']) {
119 return;
120 }
121 }
122
123 if ( data['visualizer-data-exploded']) {
124 footer = __( 'Annotations in this chart may not display here but they will display in the front end.' );
125 }
126
127 return (
128 <div className="visualizer-settings__charts-single">
129
130 <div className="visualizer-settings__charts-title">
131 { title }
132 </div>
133
134 { ( 'dataTable' === chart ) ? (
135 <DataTable
136 id={ charts[i].id }
137 rows={ data['visualizer-data'] }
138 columns={ data['visualizer-series'] }
139 chartsScreen={ true }
140 options={ filterCharts( data['visualizer-settings']) }
141 />
142 ) : ( '' !== data['visualizer-data-exploded'] ? (
143 <Chart
144 chartType={ chart }
145 rows={ data['visualizer-data'] }
146 columns={ data['visualizer-series'] }
147 options={ filterCharts( data['visualizer-settings']) }
148 />
149 ) : (
150 <Chart
151 chartType={ chart }
152 rows={ data['visualizer-data'] }
153 columns={ data['visualizer-series'] }
154 options={ filterCharts( data['visualizer-settings']) }
155 />
156 ) ) }
157
158 <div className="visualizer-settings__charts-footer"><sub>
159 { footer }
160 </sub></div>
161
162 <div
163 className="visualizer-settings__charts-controls"
164 title={ __( 'Insert Chart' ) }
165 onClick={ () => this.props.getChart( charts[i].id ) }
166 >
167 <Dashicon icon="upload"></Dashicon>
168 </div>
169
170 </div>
171 );
172 }) }
173 </div>
174
175 { ! chartsLoaded && 5 < charts.length && (
176 <Button
177 isPrimary
178 isLarge
179 onClick={ this.loadMoreCharts }
180 isBusy={ isBusy }
181 >
182 { __( 'Load More' ) }
183 </Button>
184 ) }
185
186 </Fragment> :
187 <p className="visualizer-no-charts">
188 { __( 'No charts found.' ) }
189 </p> :
190 <Placeholder>
191 <Spinner/>
192 </Placeholder>
193 }
194
195 </div>
196 );
197 }
198 }
199
200 export default Charts;
201