TableRiwayat.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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: "timestamp",
  20. name: "Timestamp",
  21. sortable: true,
  22. // width: 150
  23. },
  24. {
  25. key: "username",
  26. name: "Username",
  27. sortable: true,
  28. // width: 200
  29. },
  30. {
  31. key: "ipv4",
  32. name: "IPv4",
  33. sortable: true,
  34. // width: 120
  35. },
  36. {
  37. key: "menu",
  38. name: "Menu",
  39. sortable: true,
  40. // width: 200
  41. },
  42. {
  43. key: "deskripsi",
  44. name: "Deskripsi",
  45. sortable: true,
  46. width: 400
  47. },
  48. ];
  49. }
  50. async componentDidMount() {
  51. const { token } = this.props;
  52. const dataRiwayat = await getLog2(token);
  53. this.setState({ dataRiwayat });
  54. ReactDataGrid = require("react-data-grid");
  55. this.setState({
  56. dataGridReady: true,
  57. });
  58. let originalRows = this.createRows(1000);
  59. let rows = originalRows.slice(0);
  60. this.setState({ rows, originalRows });
  61. }
  62. getRandomDate = (start, end) => {
  63. return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime())).toLocaleDateString();
  64. };
  65. getover = (e) => {
  66. return <div className=" getover"><span className="getover">{e}</span></div>
  67. }
  68. createRows = () => {
  69. let rows = [];
  70. const { dataRiwayat } = this.state;
  71. if (dataRiwayat) {
  72. dataRiwayat.data.forEach((e) => {
  73. rows.push({
  74. deskripsi: (e.aktivitas),
  75. complete: Math.min(100, Math.round(Math.random() * 110)),
  76. ipv4: e.ipv4 || "-",
  77. menu: e.menu || "-",
  78. username: e.user?.nama || "-",
  79. timelapse: this.getover(moment(e.createdAt).format("DD-MM-YYYY, hh:mm a")),
  80. completeDate: this.getRandomDate(new Date(), new Date(2021, 0, 1)),
  81. });
  82. });
  83. }
  84. return rows;
  85. };
  86. rowGetter = (i) => this.state.rows[i];
  87. handleGridSort = (sortColumn, sortDirection) => {
  88. const comparer = (a, b) => {
  89. if (sortDirection === "ASC") {
  90. return a[sortColumn] > b[sortColumn] ? 1 : -1;
  91. } else if (sortDirection === "DESC") {
  92. return a[sortColumn] < b[sortColumn] ? 1 : -1;
  93. }
  94. };
  95. const rows = sortDirection === "NONE" ? this.state.originalRows.slice(0) : this.state.rows.sort(comparer);
  96. this.setState({ rows });
  97. };
  98. render() {
  99. return (
  100. <ContentWrapper>
  101. <Container fluid>{this.state.dataGridReady && <ReactDataGrid onGridSort={this.handleGridSort} columns={this._columns} rowGetter={this.rowGetter} rowsCount={this.state.rows.length} />}</Container>
  102. <div align="center">
  103. <span>Riwayat Pengguna</span>
  104. </div>
  105. </ContentWrapper>
  106. );
  107. }
  108. }
  109. const mapStateToProps = (state) => ({ token: state.token });
  110. export default connect(mapStateToProps)(TableRiwayat);