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

208 lines 5.7 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', 'tabular', 'timeline' ].indexOf( data['visualizer-chart-type']) ) {
111 if ( 'DataTable' === data['visualizer-chart-library']) {
112 chart = data['visualizer-chart-type'];
113 } else {
114 chart = data['visualizer-chart-type'];
115 if ( 'tabular' === chart ) {
116 chart = 'table';
117 }
118 chart = startCase( chart );
119 }
120 } else {
121 chart = `${ startCase( data['visualizer-chart-type']) }Chart`;
122 }
123
124 if ( data['visualizer-chart-library']) {
125 if ( 'ChartJS' === data['visualizer-chart-library']) {
126 return;
127 }
128 }
129
130 if ( data['visualizer-data-exploded']) {
131 footer = __( 'Annotations in this chart may not display here but they will display in the front end.' );
132 }
133
134 return (
135 <div className="visualizer-settings__charts-single" key={ `chart-${ charts[i].id }` }>
136
137 <div className="visualizer-settings__charts-title">
138 { title }
139 </div>
140
141 { ( 'DataTable' === data['visualizer-chart-library']) ? (
142 <DataTable
143 id={ charts[i].id }
144 rows={ data['visualizer-data'] }
145 columns={ data['visualizer-series'] }
146 chartsScreen={ true }
147 options={ data['visualizer-settings'] }
148 />
149 ) : ( '' !== data['visualizer-data-exploded'] ? (
150 <Chart
151 chartType={ chart }
152 rows={ data['visualizer-data'] }
153 columns={ data['visualizer-series'] }
154 options={ filterCharts( data['visualizer-settings']) }
155 />
156 ) : (
157 <Chart
158 chartType={ chart }
159 rows={ data['visualizer-data'] }
160 columns={ data['visualizer-series'] }
161 options={ filterCharts( data['visualizer-settings']) }
162 />
163 ) ) }
164
165 <div className="visualizer-settings__charts-footer"><sub>
166 { footer }
167 </sub></div>
168
169 <div
170 className="visualizer-settings__charts-controls"
171 title={ __( 'Insert Chart' ) }
172 onClick={ () => this.props.getChart( charts[i].id ) }
173 >
174 <Dashicon icon="upload"></Dashicon>
175 </div>
176
177 </div>
178 );
179 }) }
180 </div>
181
182 { ! chartsLoaded && perPage - 1 < charts.length && (
183 <Button
184 isPrimary
185 isLarge
186 onClick={ this.loadMoreCharts }
187 isBusy={ isBusy }
188 >
189 { __( 'Load More' ) }
190 </Button>
191 ) }
192
193 </Fragment> :
194 <p className="visualizer-no-charts">
195 { __( 'No charts found.' ) }
196 </p> :
197 <Placeholder>
198 <Spinner/>
199 </Placeholder>
200 }
201
202 </div>
203 );
204 }
205 }
206
207 export default Charts;
208