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

186 lines 4.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 };
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;
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 return (
124 <div className="visualizer-settings__charts-single">
125
126 <div className="visualizer-settings__charts-title">
127 { title }
128 </div>
129
130 { ( 'dataTable' === chart ) ? (
131 <DataTable
132 id={ charts[i].id }
133 rows={ data['visualizer-data'] }
134 columns={ data['visualizer-series'] }
135 chartsScreen={ true }
136 options={ filterCharts( data['visualizer-settings']) }
137 />
138 ) : (
139 <Chart
140 chartType={ chart }
141 rows={ data['visualizer-data'] }
142 columns={ data['visualizer-series'] }
143 options={ filterCharts( data['visualizer-settings']) }
144 />
145 ) }
146
147 <div
148 className="visualizer-settings__charts-controls"
149 title={ __( 'Insert Chart' ) }
150 onClick={ () => this.props.getChart( charts[i].id ) }
151 >
152 <Dashicon icon="upload"></Dashicon>
153 </div>
154
155 </div>
156 );
157 }) }
158 </div>
159
160 { ! chartsLoaded && 5 < charts.length && (
161 <Button
162 isPrimary
163 isLarge
164 onClick={ this.loadMoreCharts }
165 isBusy={ isBusy }
166 >
167 { __( 'Load More' ) }
168 </Button>
169 ) }
170
171 </Fragment> :
172 <p className="visualizer-no-charts">
173 { __( 'No charts found.' ) }
174 </p> :
175 <Placeholder>
176 <Spinner/>
177 </Placeholder>
178 }
179
180 </div>
181 );
182 }
183 }
184
185 export default Charts;
186