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 / DataTable.js

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

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