|  | @@ -1,116 +1,126 @@
 | 
	
		
			
				|  |  |  import React, { Component } from "react";
 | 
	
		
			
				|  |  |  import ContentWrapper from "@/components/Layout/ContentWrapper";
 | 
	
		
			
				|  |  |  import { Container, Progress } from "reactstrap";
 | 
	
		
			
				|  |  | +import { getLog2 } from "@/actions/log";
 | 
	
		
			
				|  |  | +import { connect } from "react-redux";
 | 
	
		
			
				|  |  | +import moment from "moment";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  let ReactDataGrid = null;
 | 
	
		
			
				|  |  |  class TableRiwayat extends Component {
 | 
	
		
			
				|  |  | -  state = {
 | 
	
		
			
				|  |  | -    dataGridReady: false,
 | 
	
		
			
				|  |  | -  };
 | 
	
		
			
				|  |  | +	state = {
 | 
	
		
			
				|  |  | +		dataGridReady: false,
 | 
	
		
			
				|  |  | +		dataRiwayat: {},
 | 
	
		
			
				|  |  | +		rows: [],
 | 
	
		
			
				|  |  | +		originalRows: null,
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  constructor(props, context) {
 | 
	
		
			
				|  |  | -    super(props, context);
 | 
	
		
			
				|  |  | +	constructor(props, context) {
 | 
	
		
			
				|  |  | +		super(props, context);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    this._columns = [
 | 
	
		
			
				|  |  | -      {
 | 
	
		
			
				|  |  | -        key: "timelapse",
 | 
	
		
			
				|  |  | -        name: "Timelapse",
 | 
	
		
			
				|  |  | -        sortable: true,
 | 
	
		
			
				|  |  | -      },
 | 
	
		
			
				|  |  | -      {
 | 
	
		
			
				|  |  | -        key: "username",
 | 
	
		
			
				|  |  | -        name: "Username",
 | 
	
		
			
				|  |  | -        sortable: true,
 | 
	
		
			
				|  |  | -      },
 | 
	
		
			
				|  |  | -      {
 | 
	
		
			
				|  |  | -        key: "menu",
 | 
	
		
			
				|  |  | -        name: "Menu",
 | 
	
		
			
				|  |  | -        sortable: true,
 | 
	
		
			
				|  |  | -      },
 | 
	
		
			
				|  |  | -      {
 | 
	
		
			
				|  |  | -        key: "deskripsi",
 | 
	
		
			
				|  |  | -        name: "Deskripsi",
 | 
	
		
			
				|  |  | -        sortable: true,
 | 
	
		
			
				|  |  | -      },
 | 
	
		
			
				|  |  | -    ];
 | 
	
		
			
				|  |  | +		this._columns = [
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				key: "timelapse",
 | 
	
		
			
				|  |  | +				name: "Timelapse",
 | 
	
		
			
				|  |  | +				sortable: true,
 | 
	
		
			
				|  |  | +			},
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				key: "username",
 | 
	
		
			
				|  |  | +				name: "Username",
 | 
	
		
			
				|  |  | +				sortable: true,
 | 
	
		
			
				|  |  | +			},
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				key: "ipv4",
 | 
	
		
			
				|  |  | +				name: "IPv4",
 | 
	
		
			
				|  |  | +				sortable: true,
 | 
	
		
			
				|  |  | +			},
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				key: "menu",
 | 
	
		
			
				|  |  | +				name: "Menu",
 | 
	
		
			
				|  |  | +				sortable: true,
 | 
	
		
			
				|  |  | +			},
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				key: "deskripsi",
 | 
	
		
			
				|  |  | +				name: "Deskripsi",
 | 
	
		
			
				|  |  | +				sortable: true,
 | 
	
		
			
				|  |  | +			},
 | 
	
		
			
				|  |  | +		];
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    let originalRows = this.createRows(1000);
 | 
	
		
			
				|  |  | -    let rows = originalRows.slice(0);
 | 
	
		
			
				|  |  | -    this.state = { originalRows, rows };
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | +	async componentDidMount() {
 | 
	
		
			
				|  |  | +		const { token } = this.props;
 | 
	
		
			
				|  |  | +		const dataRiwayat = await getLog2(token);
 | 
	
		
			
				|  |  | +		this.setState({ dataRiwayat });
 | 
	
		
			
				|  |  | +		ReactDataGrid = require("react-data-grid");
 | 
	
		
			
				|  |  | +		this.setState({
 | 
	
		
			
				|  |  | +			dataGridReady: true,
 | 
	
		
			
				|  |  | +		});
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  componentDidMount() {
 | 
	
		
			
				|  |  | -    ReactDataGrid = require("react-data-grid");
 | 
	
		
			
				|  |  | -    this.setState({
 | 
	
		
			
				|  |  | -      dataGridReady: true,
 | 
	
		
			
				|  |  | -    });
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | +		let originalRows = this.createRows(1000);
 | 
	
		
			
				|  |  | +		let rows = originalRows.slice(0);
 | 
	
		
			
				|  |  | +		this.setState({ rows, originalRows });
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  getRandomDate = (start, end) => {
 | 
	
		
			
				|  |  | -    return new Date(
 | 
	
		
			
				|  |  | -      start.getTime() + Math.random() * (end.getTime() - start.getTime())
 | 
	
		
			
				|  |  | -    ).toLocaleDateString();
 | 
	
		
			
				|  |  | -  };
 | 
	
		
			
				|  |  | +	getRandomDate = (start, end) => {
 | 
	
		
			
				|  |  | +		return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime())).toLocaleDateString();
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  createRows = () => {
 | 
	
		
			
				|  |  | -    let rows = [];
 | 
	
		
			
				|  |  | -    for (let i = 1; i < 11; i++) {
 | 
	
		
			
				|  |  | -      rows.push({
 | 
	
		
			
				|  |  | -        deskripsi: "deskripsi di sini",
 | 
	
		
			
				|  |  | -        complete: Math.min(100, Math.round(Math.random() * 110)),
 | 
	
		
			
				|  |  | -        menu: ["Pelaporan", "Login", "Penjadwalan", "Sanksi"][
 | 
	
		
			
				|  |  | -          Math.floor(Math.random() * 3 + 1)
 | 
	
		
			
				|  |  | -        ],
 | 
	
		
			
				|  |  | -        username: ["sugiyanto", "sugiyanti", "andi", "yazid"][
 | 
	
		
			
				|  |  | -          Math.floor(Math.random() * 3 + 1)
 | 
	
		
			
				|  |  | -        ],
 | 
	
		
			
				|  |  | -        timelapse: this.getRandomDate(new Date(2018, 3, 1), new Date()),
 | 
	
		
			
				|  |  | -        completeDate: this.getRandomDate(new Date(), new Date(2021, 0, 1)),
 | 
	
		
			
				|  |  | -      });
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +	createRows = () => {
 | 
	
		
			
				|  |  | +		let rows = [];
 | 
	
		
			
				|  |  | +		const { dataRiwayat } = this.state;
 | 
	
		
			
				|  |  | +		if (dataRiwayat) {
 | 
	
		
			
				|  |  | +			dataRiwayat.data.forEach((e) => {
 | 
	
		
			
				|  |  | +				rows.push({
 | 
	
		
			
				|  |  | +					deskripsi: e.aktivitas,
 | 
	
		
			
				|  |  | +					complete: Math.min(100, Math.round(Math.random() * 110)),
 | 
	
		
			
				|  |  | +					ipv4: e.ipv4,
 | 
	
		
			
				|  |  | +					menu: e.menu || "-",
 | 
	
		
			
				|  |  | +					username: e.user.nama,
 | 
	
		
			
				|  |  | +					timelapse: moment(e.createdAt).toLocaleString(),
 | 
	
		
			
				|  |  | +					completeDate: this.getRandomDate(new Date(), new Date(2021, 0, 1)),
 | 
	
		
			
				|  |  | +				});
 | 
	
		
			
				|  |  | +			});
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    return rows;
 | 
	
		
			
				|  |  | -  };
 | 
	
		
			
				|  |  | +		return rows;
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  rowGetter = (i) => this.state.rows[i];
 | 
	
		
			
				|  |  | +	rowGetter = (i) => this.state.rows[i];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  handleGridSort = (sortColumn, sortDirection) => {
 | 
	
		
			
				|  |  | -    const comparer = (a, b) => {
 | 
	
		
			
				|  |  | -      if (sortDirection === "ASC") {
 | 
	
		
			
				|  |  | -        return a[sortColumn] > b[sortColumn] ? 1 : -1;
 | 
	
		
			
				|  |  | -      } else if (sortDirection === "DESC") {
 | 
	
		
			
				|  |  | -        return a[sortColumn] < b[sortColumn] ? 1 : -1;
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    };
 | 
	
		
			
				|  |  | +	handleGridSort = (sortColumn, sortDirection) => {
 | 
	
		
			
				|  |  | +		const comparer = (a, b) => {
 | 
	
		
			
				|  |  | +			if (sortDirection === "ASC") {
 | 
	
		
			
				|  |  | +				return a[sortColumn] > b[sortColumn] ? 1 : -1;
 | 
	
		
			
				|  |  | +			} else if (sortDirection === "DESC") {
 | 
	
		
			
				|  |  | +				return a[sortColumn] < b[sortColumn] ? 1 : -1;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    const rows =
 | 
	
		
			
				|  |  | -      sortDirection === "NONE"
 | 
	
		
			
				|  |  | -        ? this.state.originalRows.slice(0)
 | 
	
		
			
				|  |  | -        : this.state.rows.sort(comparer);
 | 
	
		
			
				|  |  | +		const rows = sortDirection === "NONE" ? this.state.originalRows.slice(0) : this.state.rows.sort(comparer);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    this.setState({ rows });
 | 
	
		
			
				|  |  | -  };
 | 
	
		
			
				|  |  | +		this.setState({ rows });
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  render() {
 | 
	
		
			
				|  |  | -    return (
 | 
	
		
			
				|  |  | -      <ContentWrapper>
 | 
	
		
			
				|  |  | -        <Container fluid>
 | 
	
		
			
				|  |  | -          {this.state.dataGridReady && (
 | 
	
		
			
				|  |  | -            <ReactDataGrid
 | 
	
		
			
				|  |  | -              onGridSort={this.handleGridSort}
 | 
	
		
			
				|  |  | -              columns={this._columns}
 | 
	
		
			
				|  |  | -              rowGetter={this.rowGetter}
 | 
	
		
			
				|  |  | -              rowsCount={this.state.rows.length}
 | 
	
		
			
				|  |  | -              // minHeight={0}
 | 
	
		
			
				|  |  | -            />
 | 
	
		
			
				|  |  | -          )}
 | 
	
		
			
				|  |  | -        </Container>
 | 
	
		
			
				|  |  | -        <div align="center">
 | 
	
		
			
				|  |  | -          <span>Riwayat Pengguna</span>
 | 
	
		
			
				|  |  | -        </div>
 | 
	
		
			
				|  |  | -      </ContentWrapper>
 | 
	
		
			
				|  |  | -    );
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | +	render() {
 | 
	
		
			
				|  |  | +		return (
 | 
	
		
			
				|  |  | +			<ContentWrapper>
 | 
	
		
			
				|  |  | +				<Container fluid>
 | 
	
		
			
				|  |  | +					{this.state.dataGridReady && (
 | 
	
		
			
				|  |  | +						<ReactDataGrid
 | 
	
		
			
				|  |  | +							onGridSort={this.handleGridSort}
 | 
	
		
			
				|  |  | +							columns={this._columns}
 | 
	
		
			
				|  |  | +							rowGetter={this.rowGetter}
 | 
	
		
			
				|  |  | +							rowsCount={this.state.rows.length}
 | 
	
		
			
				|  |  | +							// minHeight={0}
 | 
	
		
			
				|  |  | +						/>
 | 
	
		
			
				|  |  | +					)}
 | 
	
		
			
				|  |  | +				</Container>
 | 
	
		
			
				|  |  | +				<div align="center">
 | 
	
		
			
				|  |  | +					<span>Riwayat Pengguna</span>
 | 
	
		
			
				|  |  | +				</div>
 | 
	
		
			
				|  |  | +			</ContentWrapper>
 | 
	
		
			
				|  |  | +		);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -export default TableRiwayat;
 | 
	
		
			
				|  |  | +const mapStateToProps = (state) => ({ token: state.token });
 | 
	
		
			
				|  |  | +export default connect(mapStateToProps)(TableRiwayat);
 |