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

193 lines 5.9 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
50 const columns = tableColumns.map( ( i, index ) => {
51 let type = i.type;
52
53 switch ( i.type ) {
54 case 'number':
55 type = 'num';
56 break;
57 case 'date':
58 case 'datetime':
59 case 'timeofday':
60 type = 'date';
61 break;
62 }
63
64 return {
65 title: i.label,
66 data: i.label,
67 type: type,
68 render: this.dataRenderer( data, type, index )
69 };
70 });
71
72 const data = tableRow.map( i => {
73 const row = {};
74
75 columns.forEach( ( j, n ) => {
76 var datum = i[n];
77
78 // datum could be undefined for dynamic data (e.g. through json).
79 if ( 'undefined' === typeof datum ) {
80 datum = i[j.data];
81 }
82 row[j.data] = datum;
83 });
84
85 return row;
86 });
87
88 this.table = jQuery( `#dataTable-instances-${ this.props.id }-${ this.uniqueId }` ).DataTable({
89 destroy: true,
90 data: data,
91 columns: columns,
92 paging: 'true' === settings.paging_bool ? true : false,
93 pageLength: settings.pageLength_int || 10,
94 pagingType: settings.pagingType,
95 ordering: 'false' === settings.ordering_bool ? false : true,
96 fixedHeader: 'true' === settings.fixedHeader_bool ? true : false,
97 scrollCollapse: this.props.chartsScreen && true || 'true' === settings.scrollCollapse_bool ? true : false,
98 scrollY: this.props.chartsScreen && 180 || ( 'true' === settings.scrollCollapse_bool && Number( settings.scrollY_int ) || false ),
99 responsive: this.props.chartsScreen && true || 'true' === settings.responsive_bool ? true : false,
100 searching: false,
101 select: false,
102 lengthChange: false,
103 bFilter: false,
104 bInfo: false
105 });
106 }
107
108 dataRenderer( data, type, index ) {
109 const settings = this.props.options;
110
111 if ( undefined === settings.series[index]) {
112 return data;
113 }
114
115 if ( 'date' === type || 'datetime' === type || 'timeofday' === type ) {
116 if ( settings.series[index].format && settings.series[index].format.from && settings.series[index].format.to ) {
117 return jQuery.fn.dataTable.render.moment( settings.series[index].format.from, settings.series[index].format.to );
118 }
119
120 return jQuery.fn.dataTable.render.moment( 'MM-DD-YYYY' );
121 }
122
123 if ( 'num' === type ) {
124 const parts = [ '', '', '', '', '' ];
125
126 if ( settings.series[index].format.thousands ) {
127 parts[0] = settings.series[index].format.thousands;
128 }
129
130 if ( settings.series[index].format.decimal ) {
131 parts[1] = settings.series[index].format.decimal;
132 }
133
134 if ( settings.series[index].format.precision ) {
135 parts[2] = settings.series[index].format.precision;
136 }
137
138 if ( settings.series[index].format.prefix ) {
139 parts[3] = settings.series[index].format.prefix;
140 }
141
142 if ( settings.series[index].format.suffix ) {
143 parts[4] = settings.series[index].format.suffix;
144 }
145
146 return jQuery.fn.dataTable.render.number( ...parts );
147 }
148
149 return data;
150 }
151
152 render() {
153 const settings = this.props.options;
154
155 return (
156 <Fragment>
157 { settings.customcss && (
158 <style>
159 { settings.customcss.oddTableRow && (
160 `#dataTable-instances-${ this.props.id }-${ this.uniqueId } tr.odd {
161 ${ settings.customcss.oddTableRow.color ? `color: ${ settings.customcss.oddTableRow.color } !important;` : '' }
162 ${ settings.customcss.oddTableRow['background-color'] ? `background-color: ${ settings.customcss.oddTableRow['background-color'] } !important;` : '' }
163 ${ settings.customcss.oddTableRow.transform ? `transform: rotate( ${ settings.customcss.oddTableRow.transform }deg ) !important;` : '' }
164 }`
165 )}
166
167 { settings.customcss.evenTableRow && (
168 `#dataTable-instances-${ this.props.id }-${ this.uniqueId } tr.even {
169 ${ settings.customcss.evenTableRow.color ? `color: ${ settings.customcss.evenTableRow.color } !important;` : '' }
170 ${ settings.customcss.evenTableRow['background-color'] ? `background-color: ${ settings.customcss.evenTableRow['background-color'] } !important;` : '' }
171 ${ settings.customcss.evenTableRow.transform ? `transform: rotate( ${ settings.customcss.evenTableRow.transform }deg ) !important;` : '' }
172 }`
173 )}
174
175 { settings.customcss.tableCell && (
176 `#dataTable-instances-${ this.props.id }-${ this.uniqueId } tr td,
177 #dataTable-instances-${ this.props.id }-${ this.uniqueId }_wrapper tr th {
178 ${ settings.customcss.tableCell.color ? `color: ${ settings.customcss.tableCell.color } !important;` : '' }
179 ${ settings.customcss.tableCell['background-color'] ? `background-color: ${ settings.customcss.tableCell['background-color'] } !important;` : '' }
180 ${ settings.customcss.tableCell.transform ? `transform: rotate( ${ settings.customcss.tableCell.transform }deg ) !important;` : '' }
181 }`
182 )}
183 </style>
184 ) }
185
186 <table id={ `dataTable-instances-${ this.props.id }-${ this.uniqueId }` }></table>
187 </Fragment>
188 );
189 }
190 }
191
192 export default DataTables;
193