| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- import DataTable from 'react-data-table-component';
- import Datatable from "@/components/Tables/Datatable";
- import Link from "next/link";
- import moment from "moment";
- import React, { Component } from "react";
- import { getLog2 } from "@/actions/log";
- import { connect } from "react-redux";
- import { Row, Col, Input, FormGroup, Label, Progress, Button } from "reactstrap";
- import Datetime from "react-datetime";
- class TableRiwayat extends Component {
- constructor(props) {
- super(props);
- this.state = {
- dataRiwayat: [],
- dataRiwayatsort: [],
- fromDate: "",
- toDate: "",
- updateTable: false,
- search: "",
- dataFilterSearch: []
- };
- }
- componentDidMount = async () => {
- const { token } = this.props;
- const data = await getLog2(this.props.token)
- const dataRiwayat = data.data
- this.setState({ dataRiwayat });
- }
- fetchData = async () => {
- const date1 = moment(this.state.fromDate).format("YYYY-MM-DD")
- const date2 = moment(this.state.toDate).format("YYYY-MM-DD")
- const data = await getLog2(this.props.token, { fromDate: date1, toDate: date2 })
- const dataFilterSearch = data.data
- this.setState({ dataFilterSearch: dataFilterSearch, dataRiwayat: dataFilterSearch });
- // this.setState({ dataRiwayat });
- }
- onFilter = () => {
- this.setState({ loading: true });
- this.fetchData(); 21
- this.setState({ loading: false });
- if (this.state.dataRiwayat && this.state.dataRiwayat.length) {
- // this.renderTableData();
- this.setState({ noData: true });
- }
- }
- handleSearchChange = (e) => {
- const { dataRiwayat } = this.state;
- const searchValue = e.target.value;
- const dataNoFilter = dataRiwayat
- const result = dataRiwayat.filter((item) =>
- item.aktivitas.toLowerCase().includes(searchValue.toLowerCase())
- || item?.timestamp?.toLowerCase().includes(searchValue.toLowerCase())
- || item?.username?.toLowerCase().includes(searchValue.toLowerCase())
- || item?.ipv4?.toLowerCase().includes(searchValue.toLowerCase())
- || item?.menu?.toLowerCase().includes(searchValue.toLowerCase())
- );
- this.setState({
- search: searchValue,
- })
- if (result.length) {
- this.setState({
- dataFilterSearch: result
- });
- }
- else {
- this.setState({
- dataFilterSearch: dataNoFilter
- })
- }
- }
- render() {
- const { dataRiwayat, search, dataFilterSearch } = this.state
- const columns = [
- {
- name: 'Timestamp',
- // selector: row => row.timestamp,
- cell: row => (
- <div>
- <div>
- <div
- data-tag="allowRowEvents"
- style={{ color: 'grey', whiteSpace: 'wrap', textOverflow: 'ellipses', width: '100px' }}
- >
- { }
- {row.timestamp}
- </div>
- </div>
- </div>
- )
- },
- {
- name: 'UserName',
- // selector: row => row.username,
- cell: row => (
- <div>
- <div>
- <div
- data-tag="allowRowEvents"
- style={{ color: 'grey', whiteSpace: 'wrap', textOverflow: 'ellipses', width: '100px' }}
- >
- { }
- {row.username}
- </div>
- </div>
- </div>
- )
- },
- {
- name: 'IPv4',
- // selector: row => row.ipv4,
- cell: row => (
- <div>
- <div>
- <div
- data-tag="allowRowEvents"
- style={{ color: 'grey', whiteSpace: 'wrap', textOverflow: 'ellipses', width: '100px' }}
- >
- { }
- {row.ipv4}
- </div>
- </div>
- </div>
- )
- },
- {
- name: 'Menu',
- // selector: row => row.menu,
- cell: row => (
- <div>
- <div>
- <div
- data-tag="allowRowEvents"
- style={{ color: 'grey', whiteSpace: 'wrap', width: '100px' }}
- >
-
- {row.menu||"-"}
- </div>
- </div>
- </div>
- )
- },
- {
- name: 'Deskripsi',
- // selector: row => row.aktivitas,
- cell: row => (
- <div>
- <div>
- <div
- data-tag="allowRowEvents"
- style={{ color: 'grey', overflow: 'hidden', whiteSpace: 'wrap', textOverflow: 'ellipses', width: '300px' }}
- >
- { }
- {row.aktivitas}
- </div>
- </div>
- </div>
- ),
- },
- ];
- const data = dataRiwayat?.map((value, index) => (
- {
- timestamp: value.createdAt,
- username: value.user?.nama,
- ipv4: value?.ipv4,
- menu: value?.menu,
- aktivitas: value?.aktivitas,
- }
- ))
- const datasearch = dataFilterSearch?.map((value, index) => (
- {
- timestamp: value.createdAt,
- username: value.user?.nama,
- ipv4: value?.ipv4,
- menu: value?.menu,
- aktivitas: value?.aktivitas,
- }
- ))
- return (
- <div className="card b ">
- <div className="row card-body card-over">
- <div className=" pl-4 col-2 float-left">
- <label className="col-form-label">Range Filter : </label>
- <span>
- <Datetime
- timeFormat={false}
- inputProps={{ className: "form-control" }}
- closeOnSelect={true}
- value={this.state.fromDate ? moment(this.state.fromDate).format("DD-MM-YYYY") : "DD/MM/YYYY"}
- onChange={(fromDate) => {
- this.setState({ fromDate })
- }}
- className=' mb-3'
- />
- </span>
- <span>
- <Datetime
- timeFormat={false}
- inputProps={{ className: "form-control" }}
- closeOnSelect={true}
- value={this.state.toDate ? moment(this.state.toDate).format("DD-MM-YYYY") : "DD/MM/YYYY"}
- onChange={(toDate) => {
- this.setState({ toDate })
- }}
- // className=' w-75'
- />
- </span>
- <Button color="info" className=" mt-4" onClick={(e) => this.onFilter()}>Filter</Button>
- </div>
- <div className="col-10">
- <DataTable data={datasearch.length ? datasearch : data} columns={columns}
- defaultSortField="title"
- pagination
- // selectableRows
- subHeader
- subHeaderComponent={
- <input
- type="text"
- className="w-25 form-control"
- placeholder="Search..."
- value={search}
- onChange={this.handleSearchChange}
- />
- }
- subHeaderAlign="right"
- />
- </div>
- </div>
- </div >
- );
- }
- }
- const mapStateToProps = (state) => ({ token: state.token });
- export default connect(mapStateToProps)(TableRiwayat);
|