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

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