PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.10.7
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.10.7
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 / DataTable.js

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

202 lines 7.4 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 uuidv4 from 'uuid';
5
6 /**
7 * WordPress dependencies
8 */
9 const {
10 Component,
11 Fragment
12 } = wp.element;
13
14 class DataTables extends Component {
15 constructor() {
16 super( ...arguments );
17
18 this.initDataTable = this.initDataTable.bind( this );
19 this.dataRenderer = this.dataRenderer.bind( this );
20
21 this.table;
22 this.uniqueId = uuidv4();
23 }
24
25 componentDidMount() {
26 this.initDataTable( this.props.columns, this.props.rows );
27 };
28
29 componentWillUnmount() {
30 this.table.destroy();
31 }
32
33 componentDidUpdate( prevProps ) {
34 if ( this.props !== prevProps ) {
35 if ( this.props.options.responsive_bool !== prevProps.options.responsive_bool ) {
36 if ( 'true' === prevProps.options.responsive_bool ) {
37 document.getElementById( `dataTable-instances-${ this.props.id }-${ this.uniqueId }` ).classList.remove( 'collapsed' );
38 }
39 }
40
41 this.table.destroy();
42 document.getElementById( `dataTable-instances-${ this.props.id }-${ this.uniqueId }` ).innerHTML = '';
43 this.initDataTable( this.props.columns, this.props.rows );
44 }
45 }
46
47 initDataTable( tableColumns, tableRow ) {
48 const settings = this.props.options;
49 const columns = tableColumns.map( ( i, index ) => {
50 let type = i.type;
51
52 switch ( i.type ) {
53 case 'number':
54 type = 'num';
55 break;
56 case 'date':
57 case 'datetime':
58 case 'timeofday':
59 type = 'date';
60 break;
61 }
62
63 return {
64 title: i.label,
65 data: i.label,
66 type: type,
67 render: this.dataRenderer( type, index )
68 };
69 });
70
71 const data = tableRow.map( i => {
72 const row = {};
73
74 columns.forEach( ( j, n ) => {
75 var datum = i[n];
76
77 // datum could be undefined for dynamic data (e.g. through json).
78 if ( 'undefined' === typeof datum ) {
79 datum = i[j.data];
80 }
81 row[j.data] = datum;
82 });
83
84 return row;
85 });
86
87 this.table = jQuery( `#dataTable-instances-${ this.props.id }-${ this.uniqueId }` ).DataTable({
88 destroy: true,
89 data: data,
90 columns: columns,
91 paging: 'true' === settings.paging_bool ? true : false,
92 pageLength: settings.pageLength_int || 10,
93 pagingType: settings.pagingType,
94 ordering: 'false' === settings.ordering_bool ? false : true,
95 fixedHeader: 'true' === settings.fixedHeader_bool ? true : false,
96 scrollCollapse: !! this.props.chartsScreen || 'true' === settings.scrollCollapse_bool ? true : false,
97 scrollY: this.props.chartsScreen && 180 || ( 'true' === settings.scrollCollapse_bool && Number( settings.scrollY_int ) || false ),
98 responsive: !! this.props.chartsScreen || 'true' === settings.responsive_bool ? true : false,
99 searching: false,
100 select: false,
101 lengthChange: false,
102 bFilter: false,
103 bInfo: false
104 });
105 }
106
107 dataRenderer( type, index ) {
108 const settings = this.props.options;
109
110 let renderer = null;
111 if ( 'undefined' === typeof settings.series || 'undefined' === typeof settings.series[index] || 'undefined' === typeof settings.series[index].format ) {
112 return renderer;
113 }
114
115 switch ( type ) {
116 case 'date':
117 case 'datetime':
118 case 'timeofday':
119 if ( settings.series[index].format && settings.series[index].format.from && settings.series[index].format.to ) {
120 renderer = jQuery.fn.dataTable.render.moment( settings.series[index].format.from, settings.series[index].format.to );
121 } else {
122 renderer = jQuery.fn.dataTable.render.moment( 'MM-DD-YYYY' );
123 }
124 break;
125 case 'num':
126 const parts = [ '', '', '', '', '' ];
127 if ( settings.series[index].format.thousands ) {
128 parts[0] = settings.series[index].format.thousands;
129 }
130 if ( settings.series[index].format.decimal ) {
131 parts[1] = settings.series[index].format.decimal;
132 }
133 if ( settings.series[index].format.precision && 0 < parseInt( settings.series[index].format.precision ) ) {
134 parts[2] = settings.series[index].format.precision;
135 }
136 if ( settings.series[index].format.prefix ) {
137 parts[3] = settings.series[index].format.prefix;
138 }
139 if ( settings.series[index].format.suffix ) {
140 parts[4] = settings.series[index].format.suffix;
141 }
142 renderer = jQuery.fn.dataTable.render.number( ...parts );
143 break;
144 case 'boolean':
145 jQuery.fn.dataTable.render.extra = function( data, type, row ) {
146 if ( ( true === data || 'true' === data ) && '' !== settings.series[index].format.truthy ) {
147 return settings.series[index].format.truthy.replace( /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '' );
148 }
149 if ( ( false === data || 'false' === data ) && '' !== settings.series[index].format.falsy ) {
150 return settings.series[index].format.falsy.replace( /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '' );
151 }
152 return data;
153 };
154 renderer = jQuery.fn.dataTable.render.extra;
155 break;
156 }
157
158 return renderer;
159 }
160
161 render() {
162 const settings = this.props.options;
163
164 return (
165 <Fragment>
166 { settings.customcss && (
167 <style>
168 { settings.customcss.oddTableRow && (
169 `#dataTable-instances-${ this.props.id }-${ this.uniqueId } tr.odd {
170 ${ settings.customcss.oddTableRow.color ? `color: ${ settings.customcss.oddTableRow.color } !important;` : '' }
171 ${ settings.customcss.oddTableRow['background-color'] ? `background-color: ${ settings.customcss.oddTableRow['background-color'] } !important;` : '' }
172 ${ settings.customcss.oddTableRow.transform ? `transform: rotate( ${ settings.customcss.oddTableRow.transform }deg ) !important;` : '' }
173 }`
174 )}
175
176 { settings.customcss.evenTableRow && (
177 `#dataTable-instances-${ this.props.id }-${ this.uniqueId } tr.even {
178 ${ settings.customcss.evenTableRow.color ? `color: ${ settings.customcss.evenTableRow.color } !important;` : '' }
179 ${ settings.customcss.evenTableRow['background-color'] ? `background-color: ${ settings.customcss.evenTableRow['background-color'] } !important;` : '' }
180 ${ settings.customcss.evenTableRow.transform ? `transform: rotate( ${ settings.customcss.evenTableRow.transform }deg ) !important;` : '' }
181 }`
182 )}
183
184 { settings.customcss.tableCell && (
185 `#dataTable-instances-${ this.props.id }-${ this.uniqueId } tr td,
186 #dataTable-instances-${ this.props.id }-${ this.uniqueId }_wrapper tr th {
187 ${ settings.customcss.tableCell.color ? `color: ${ settings.customcss.tableCell.color } !important;` : '' }
188 ${ settings.customcss.tableCell['background-color'] ? `background-color: ${ settings.customcss.tableCell['background-color'] } !important;` : '' }
189 ${ settings.customcss.tableCell.transform ? `transform: rotate( ${ settings.customcss.tableCell.transform }deg ) !important;` : '' }
190 }`
191 )}
192 </style>
193 ) }
194
195 <table id={ `dataTable-instances-${ this.props.id }-${ this.uniqueId }` }></table>
196 </Fragment>
197 );
198 }
199 }
200
201 export default DataTables;
202