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

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