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

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

195 lines 5.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import isPlainObject from 'is-plain-object';
2
3 import deepFilter from 'deep-filter';
4
5 // Format Date of Chart Data
6 export const formatDate = ( data ) => {
7 Object.keys( data['visualizer-series']).map( i => {
8 if ( data['visualizer-series'][i].type !== undefined && 'date' === data['visualizer-series'][i].type ) {
9 Object.keys( data['visualizer-data']).map( o => {
10 return data['visualizer-data'][o][i] = new Date( data['visualizer-data'][o][i]);
11 });
12 }
13 });
14 return data;
15 };
16
17 // A fork of deep-compact package as it had some issues
18 // NOTE: This method is likely to create problems.
19 // Problem Scenario #1:
20 // - A table has 5 columns (series). Say the 1st column is Date and others are Numbers.
21 // - If the 1st columns format (series.format) is provided, DataTable.js gets 6 (0-5) series.
22 // - BUT if the 1st columns format (series.format) is empty, DataTable.js gets 5 (1-4) series.
23 // That is why when sending options to DataTable.js, filterChart method has not been used.
24 const notEmpty = value => {
25 let key;
26
27 if ( Array.isArray( value ) ) {
28 return 0 < value.length;
29 }
30
31 if ( isPlainObject( value ) ) {
32 for ( key in value ) {
33 return true;
34 }
35
36 return false;
37 }
38
39 if ( 'string' === typeof value ) {
40 return 0 < value.length;
41 }
42
43 return null != value;
44 };
45
46 export const compact = value => deepFilter( value, notEmpty );
47
48 // Remove chart size-related properies for Chart List
49 export const filterCharts = value => {
50 value.width = '';
51 value.height = '';
52 value.backgroundColor = {};
53 value.chartArea = {};
54
55 return compact( value, notEmpty );
56 };
57
58 // Check if JSON object is valid or not
59 export const isValidJSON = obj => {
60 try {
61 JSON.parse( obj );
62 } catch ( e ) {
63 return false;
64 }
65 return true;
66 };
67
68 // Convert CSV data to Array
69 // Source: https://www.bennadel.com/blog/1504-ask-ben-parsing-csv-strings-with-javascript-exec-regular-expression-command.htm
70 export const CSVToArray = ( strData, strDelimiter ) => {
71 strDelimiter = ( strDelimiter || ',' );
72
73 const objPattern = new RegExp(
74 ( '(\\' + strDelimiter + '|\\r?\\n|\\r|^)' + '(?:\'([^\']*(?:\'\'[^\']*)*)\'|' + '([^\'\\' + strDelimiter + '\\r\\n]*))' ), 'gi' );
75
76 const arrData = [ [] ];
77
78 let arrMatches = null;
79
80 while ( arrMatches = objPattern.exec( strData ) ) {
81
82 const strMatchedDelimiter = arrMatches[ 1 ];
83
84 if ( strMatchedDelimiter.length && strMatchedDelimiter !== strDelimiter ) {
85 arrData.push([]);
86 }
87
88 let strMatchedValue;
89
90 if ( arrMatches[ 2 ]) {
91 strMatchedValue = arrMatches[ 2 ].replace( new RegExp( '\'\'', 'g' ), '\'' );
92 } else {
93 strMatchedValue = arrMatches[ 3 ];
94 }
95
96 arrData[ arrData.length - 1 ].push( strMatchedValue );
97 }
98
99 return ( arrData );
100 };
101
102
103 export const isChecked = ( settings, param ) => {
104 return true === settings[param] || 'true' === settings[param] || '1' === settings[param] || 1 === settings[param];
105 };
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 };
181
182 export const getColorCode = ( color ) => {
183 if ( -1 === color.indexOf( '#' ) ) {
184 let getCssVar = color.match( /\((.*)\)/ ).pop();
185 if ( getCssVar ) {
186 let style = getComputedStyle( document.body );
187 return style.getPropertyValue( getCssVar );
188 }
189 }
190 return color;
191 };
192
193 // Google Chart Packages
194 export const googleChartPackages = [ 'corechart', 'geochart', 'gauge', 'table', 'timeline', 'controls' ];
195