import React, { Component } from 'react';
import PropTypes from 'prop-types';
import $ from 'jquery';
/**
* Wrapper component for dataTable plugin
* Only DOM child elements, componets are not supported (e.g.
)
*/
export default class Datatable extends Component {
static propTypes = {
/** datatables options object */
options: PropTypes.object,
/** only one children allowed */
children: PropTypes.element.isRequired,
/** callback that receives the datatable instance as param */
dtInstance: PropTypes.func
}
static defaultProps = {
options: {}
}
componentDidMount() {
// Datatables
require('datatables.net-bs')
require('datatables.net-bs4/js/dataTables.bootstrap4.js')
require('datatables.net-bs4/css/dataTables.bootstrap4.css')
require('datatables.net-buttons')
require('datatables.net-buttons-bs')
require('datatables.net-responsive')
require('datatables.net-responsive-bs')
require('datatables.net-responsive-bs/css/responsive.bootstrap.css')
require('datatables.net-buttons/js/buttons.colVis.js') // Column visibility
require('datatables.net-buttons/js/buttons.html5.js') // HTML 5 file export
require('datatables.net-buttons/js/buttons.flash.js') // Flash file export
require('datatables.net-buttons/js/buttons.print.js') // Print view button
require('datatables.net-keytable');
require('datatables.net-keytable-bs/css/keyTable.bootstrap.css')
require('jszip/dist/jszip.js');
require('pdfmake/build/pdfmake.js');
require('pdfmake/build/vfs_fonts.js');
const dtInstance = $(this.tableElement).dataTable(this.props.options);
if(this.props.dtInstance)
this.props.dtInstance(dtInstance)
}
componentWillUnmount() {
$(this.tableElement).dataTable({destroy: true});
}
setRef = node => this.tableElement = node;
render() {
return (
React.cloneElement(React.Children.only(this.props.children), {
ref: this.setRef
})
)
}
}