Datatable.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import React, { Component } from 'react';
  2. import PropTypes from 'prop-types';
  3. import $ from 'jquery';
  4. /**
  5. * Wrapper component for dataTable plugin
  6. * Only DOM child elements, componets are not supported (e.g. <Table>)
  7. */
  8. export default class Datatable extends Component {
  9. static propTypes = {
  10. /** datatables options object */
  11. options: PropTypes.object,
  12. /** only one children allowed */
  13. children: PropTypes.element.isRequired,
  14. /** callback that receives the datatable instance as param */
  15. dtInstance: PropTypes.func
  16. }
  17. static defaultProps = {
  18. options: {}
  19. }
  20. componentDidMount() {
  21. // Datatables
  22. require('datatables.net-bs')
  23. require('datatables.net-bs4/js/dataTables.bootstrap4.js')
  24. require('datatables.net-bs4/css/dataTables.bootstrap4.css')
  25. require('datatables.net-buttons')
  26. require('datatables.net-buttons-bs')
  27. require('datatables.net-responsive')
  28. require('datatables.net-responsive-bs')
  29. require('datatables.net-responsive-bs/css/responsive.bootstrap.css')
  30. require('datatables.net-buttons/js/buttons.colVis.js') // Column visibility
  31. require('datatables.net-buttons/js/buttons.html5.js') // HTML 5 file export
  32. require('datatables.net-buttons/js/buttons.flash.js') // Flash file export
  33. require('datatables.net-buttons/js/buttons.print.js') // Print view button
  34. require('datatables.net-keytable');
  35. require('datatables.net-keytable-bs/css/keyTable.bootstrap.css')
  36. require('jszip/dist/jszip.js');
  37. require('pdfmake/build/pdfmake.js');
  38. require('pdfmake/build/vfs_fonts.js');
  39. const dtInstance = $(this.tableElement).dataTable(this.props.options);
  40. if(this.props.dtInstance)
  41. this.props.dtInstance(dtInstance)
  42. }
  43. componentWillUnmount() {
  44. $(this.tableElement).dataTable({destroy: true});
  45. }
  46. setRef = node => this.tableElement = node;
  47. render() {
  48. return (
  49. React.cloneElement(React.Children.only(this.props.children), {
  50. ref: this.setRef
  51. })
  52. )
  53. }
  54. }