Skip to content

Commit bc46686

Browse files
Merge pull request #734 from contactashish13/issue-724
Google charts: Series number format not applying in the Gutenberg editor
2 parents 021e69a + 3bd755a commit bc46686

File tree

5 files changed

+86
-5
lines changed

5 files changed

+86
-5
lines changed

classes/Visualizer/Gutenberg/build/block.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

classes/Visualizer/Gutenberg/src/Components/ChartRender.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import DataTable from './DataTable.js';
77

88
import merge from 'merge';
99

10-
import { compact, formatDate, isValidJSON } from '../utils.js';
10+
import { compact, formatDate, isValidJSON, formatData } from '../utils.js';
1111

1212
/**
1313
* WordPress dependencies
@@ -97,6 +97,7 @@ class ChartRender extends Component {
9797
compact( this.props.chart['visualizer-settings'])
9898
}
9999
height="500px"
100+
formatters={ formatData( data ) }
100101
/>
101102
) : (
102103
<Chart
@@ -109,6 +110,7 @@ class ChartRender extends Component {
109110
compact( this.props.chart['visualizer-settings'])
110111
}
111112
height="500px"
113+
formatters={ formatData( data ) }
112114
/>
113115
) ) }
114116

classes/Visualizer/Gutenberg/src/Components/ChartSelect.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import PanelButton from './PanelButton.js';
2323

2424
import merge from 'merge';
2525

26-
import { compact, formatDate, isValidJSON } from '../utils.js';
26+
import { compact, formatDate, isValidJSON, formatData } from '../utils.js';
2727

2828
/**
2929
* WordPress dependencies
@@ -169,6 +169,7 @@ class ChartSelect extends Component {
169169
compact( this.props.chart['visualizer-settings'])
170170
}
171171
height="500px"
172+
formatters={ formatData( data ) }
172173
/>
173174
) : (
174175
<Chart
@@ -181,6 +182,7 @@ class ChartSelect extends Component {
181182
compact( this.props.chart['visualizer-settings'])
182183
}
183184
height="500px"
185+
formatters={ formatData( data ) }
184186
/>
185187
)
186188
) }

classes/Visualizer/Gutenberg/src/Components/Charts.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { Chart } from 'react-google-charts';
55

66
import DataTable from './DataTable.js';
77

8-
import { formatDate, filterCharts } from '../utils.js';
8+
import { formatDate, filterCharts, formatData } from '../utils.js';
99

1010
/**
1111
* WordPress dependencies
@@ -152,13 +152,15 @@ class Charts extends Component {
152152
rows={ data['visualizer-data'] }
153153
columns={ data['visualizer-series'] }
154154
options={ filterCharts( data['visualizer-settings']) }
155+
formatters={ formatData( data ) }
155156
/>
156157
) : (
157158
<Chart
158159
chartType={ chart }
159160
rows={ data['visualizer-data'] }
160161
columns={ data['visualizer-series'] }
161162
options={ filterCharts( data['visualizer-settings']) }
163+
formatters={ formatData( data ) }
162164
/>
163165
) ) }
164166

classes/Visualizer/Gutenberg/src/utils.js

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,3 +103,78 @@ export const CSVToArray = ( strData, strDelimiter ) => {
103103
export const isChecked = ( settings, param ) => {
104104
return true === settings[param] || 'true' === settings[param] || '1' === settings[param] || 1 === settings[param];
105105
};
106+
107+
108+
export const formatData = ( chart ) => {
109+
let library = chart['visualizer-chart-library'];
110+
111+
switch ( library ) {
112+
case 'GoogleCharts':
113+
return formatDataForGoogleCharts( chart );
114+
}
115+
};
116+
117+
export const formatDataForGoogleCharts = ( chart ) => {
118+
let settings = chart['visualizer-settings'];
119+
let type = chart['visualizer-chart-type'];
120+
let series = chart['visualizer-series'];
121+
122+
let formatters = [];
123+
124+
if ( settings.series ) {
125+
switch ( type ) {
126+
case 'tabular':
127+
for ( let i in settings.series ) {
128+
i = parseInt( i );
129+
if ( ! series[i + 1]) {
130+
continue;
131+
}
132+
if ( settings.series[i].format && '' !== settings.series[i].format ) {
133+
let col = i + 1;
134+
let formatter = getFormatterForGoogle( series[i + 1].type );
135+
if ( formatter ) {
136+
formatters.push({ type: formatter, options: { pattern: settings.series[i].format }, column: col });
137+
}
138+
}
139+
}
140+
break;
141+
default:
142+
for ( let i = 0; i < settings.series.length; i++ ) {
143+
if ( ! series[i + 1] || 'undefined' === typeof settings.series[i]) {
144+
continue;
145+
}
146+
if ( settings.series[i].format && '' !== settings.series[i].format ) {
147+
let col = i + 1;
148+
let formatter = getFormatterForGoogle( series[i + 1].type );
149+
if ( formatter ) {
150+
formatters.push({ type: formatter, options: { pattern: settings.series[i].format }, column: col });
151+
}
152+
}
153+
}
154+
break;
155+
}
156+
} else if ( 'pie' === type && settings.format && '' !== settings.format ) {
157+
formatters.push({ type: getFormatterForGoogle( 'number' ), options: { pattern: settings.format }, column: 1 });
158+
}
159+
160+
if ( settings.hAxis && series[0]) {
161+
let formatter = getFormatterForGoogle( series[0].type );
162+
if ( formatter ) {
163+
formatters.push({ type: formatter, options: { pattern: settings.hAxis.format }, column: 0 });
164+
}
165+
}
166+
167+
return formatters;
168+
};
169+
170+
export const getFormatterForGoogle = ( dataType ) => {
171+
switch ( dataType ) {
172+
case 'number':
173+
return 'NumberFormat';
174+
case 'date':
175+
case 'datetime':
176+
case 'timeofday':
177+
return 'DateFormat';
178+
}
179+
return null;
180+
};

0 commit comments

Comments
 (0)