TableRiwayat.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import React, { Component } from "react";
  2. import ContentWrapper from "@/components/Layout/ContentWrapper";
  3. import { Container, Progress } from "reactstrap";
  4. import { getLog2 } from "@/actions/log";
  5. import { connect } from "react-redux";
  6. import moment from "moment";
  7. let ReactDataGrid = null;
  8. class TableRiwayat extends Component {
  9. state = {
  10. dataGridReady: false,
  11. dataRiwayat: {},
  12. rows: [],
  13. originalRows: null,
  14. };
  15. constructor(props, context) {
  16. super(props, context);
  17. this._columns = [
  18. {
  19. key: "timelapse",
  20. name: "Timelapse",
  21. sortable: true,
  22. },
  23. {
  24. key: "username",
  25. name: "Username",
  26. sortable: true,
  27. },
  28. {
  29. key: "ipv4",
  30. name: "IPv4",
  31. sortable: true,
  32. },
  33. {
  34. key: "menu",
  35. name: "Menu",
  36. sortable: true,
  37. },
  38. {
  39. key: "deskripsi",
  40. name: "Deskripsi",
  41. sortable: true,
  42. },
  43. ];
  44. }
  45. async componentDidMount() {
  46. const { token } = this.props;
  47. const dataRiwayat = await getLog2(token);
  48. this.setState({ dataRiwayat });
  49. ReactDataGrid = require("react-data-grid");
  50. this.setState({
  51. dataGridReady: true,
  52. });
  53. let originalRows = this.createRows(1000);
  54. let rows = originalRows.slice(0);
  55. this.setState({ rows, originalRows });
  56. }
  57. getRandomDate = (start, end) => {
  58. return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime())).toLocaleDateString();
  59. };
  60. createRows = () => {
  61. let rows = [];
  62. const { dataRiwayat } = this.state;
  63. if (dataRiwayat) {
  64. dataRiwayat.data.forEach((e) => {
  65. rows.push({
  66. deskripsi: e.aktivitas,
  67. complete: Math.min(100, Math.round(Math.random() * 110)),
  68. ipv4: e.ipv4,
  69. menu: e.menu || "-",
  70. username: e.user.nama,
  71. timelapse: moment(e.createdAt).toLocaleString(),
  72. completeDate: this.getRandomDate(new Date(), new Date(2021, 0, 1)),
  73. });
  74. });
  75. }
  76. return rows;
  77. };
  78. rowGetter = (i) => this.state.rows[i];
  79. handleGridSort = (sortColumn, sortDirection) => {
  80. const comparer = (a, b) => {
  81. if (sortDirection === "ASC") {
  82. return a[sortColumn] > b[sortColumn] ? 1 : -1;
  83. } else if (sortDirection === "DESC") {
  84. return a[sortColumn] < b[sortColumn] ? 1 : -1;
  85. }
  86. };
  87. const rows = sortDirection === "NONE" ? this.state.originalRows.slice(0) : this.state.rows.sort(comparer);
  88. this.setState({ rows });
  89. };
  90. render() {
  91. return (
  92. <ContentWrapper>
  93. <Container fluid>
  94. {this.state.dataGridReady && (
  95. <ReactDataGrid
  96. onGridSort={this.handleGridSort}
  97. columns={this._columns}
  98. rowGetter={this.rowGetter}
  99. rowsCount={this.state.rows.length}
  100. // minHeight={0}
  101. />
  102. )}
  103. </Container>
  104. <div align="center">
  105. <span>Riwayat Pengguna</span>
  106. </div>
  107. </ContentWrapper>
  108. );
  109. }
  110. }
  111. const mapStateToProps = (state) => ({ token: state.token });
  112. export default connect(mapStateToProps)(TableRiwayat);