| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- 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. <Table>)
- */
- 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
- })
- )
- }
- }
|