|  | @@ -1,3 +1,4 @@
 | 
	
		
			
				|  |  | +import DataTable from 'react-data-table-component';
 | 
	
		
			
				|  |  |  import Datatable from "@/components/Tables/Datatable";
 | 
	
		
			
				|  |  |  import Link from "next/link";
 | 
	
		
			
				|  |  |  import moment from "moment";
 | 
	
	
		
			
				|  | @@ -9,65 +10,202 @@ 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: "",
 | 
	
		
			
				|  |  | +            dataRiwayatsort: [],
 | 
	
		
			
				|  |  |              fromDate: "",
 | 
	
		
			
				|  |  |              toDate: "",
 | 
	
		
			
				|  |  | -            updateTable: false
 | 
	
		
			
				|  |  | +            updateTable: false,
 | 
	
		
			
				|  |  | +            search: "",
 | 
	
		
			
				|  |  | +            dataFilterSearch: []
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      componentDidMount = async () => {
 | 
	
		
			
				|  |  |          const { token } = this.props;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        // const dataRiwayat = await getLog2(this.props.token)
 | 
	
		
			
				|  |  | -        // this.setState({ dataRiwayat });
 | 
	
		
			
				|  |  | +        const data = await getLog2(this.props.token)
 | 
	
		
			
				|  |  | +        const dataRiwayat = data.data
 | 
	
		
			
				|  |  | +        this.setState({ dataRiwayat });
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    onFilter = async () => {
 | 
	
		
			
				|  |  | -        // const date1 = moment(this.state.fromDate).format("YYYY-MM-DD")
 | 
	
		
			
				|  |  | -        // const date2 = moment(this.state.toDate).format("YYYY-MM-DD")
 | 
	
		
			
				|  |  | -        // const dataRiwayat = await getLog2(this.props.token, { fromDate: date1, toDate: date2 })
 | 
	
		
			
				|  |  | +    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 });
 | 
	
		
			
				|  |  | -        this.setState({ updateTable: true });
 | 
	
		
			
				|  |  | -        setTimeout(() => {
 | 
	
		
			
				|  |  | -            this.setState({ updateTable: false });
 | 
	
		
			
				|  |  | -        }, 1);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    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 });
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    componentDidUpdate = async (prevProps, prevState) => {
 | 
	
		
			
				|  |  | -        const { dataRiwayat } = this.state
 | 
	
		
			
				|  |  | -        if (prevState.toDate != this.state.toDate) {
 | 
	
		
			
				|  |  | -            console.log(dataRiwayat)
 | 
	
		
			
				|  |  | -            const date1 = moment(this.state.fromDate).format("YYYY-MM-DD")
 | 
	
		
			
				|  |  | -            const date2 = moment(this.state.toDate).format("YYYY-MM-DD")
 | 
	
		
			
				|  |  | -            const dataRiwayat = await getLog2(this.props.token, { fromDate: date1, toDate: date2 })
 | 
	
		
			
				|  |  | -            this.setState({ dataRiwayat });
 | 
	
		
			
				|  |  | +    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
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        // const dataRiwayatsort = this.state
 | 
	
		
			
				|  |  | -        // if (this.state.updateTable === true) {
 | 
	
		
			
				|  |  | -        //     const date1 = moment(this.state.fromDate).format("YYYY-MM-DD")
 | 
	
		
			
				|  |  | -        //     const date2 = moment(this.state.toDate).format("YYYY-MM-DD")
 | 
	
		
			
				|  |  | -        //     const dataRiwayat = await getLog2(this.props.token, { fromDate: date1, toDate: date2 })
 | 
	
		
			
				|  |  | -        //     this.setState({ dataRiwayatsort });
 | 
	
		
			
				|  |  | -        //     // this.setState({ dataRiwayat });
 | 
	
		
			
				|  |  | -        // }
 | 
	
		
			
				|  |  | +        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="card-body card-over">
 | 
	
		
			
				|  |  | -                    <span className=" ml-2 float-left">
 | 
	
		
			
				|  |  | +                <div className="row card-body card-over">
 | 
	
		
			
				|  |  | +                    <div className=" pl-4 col-2 float-left">
 | 
	
		
			
				|  |  |                          <label className="col-form-label">Range Filter : </label>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                        <span className=" mr-2 ml-4">
 | 
	
		
			
				|  |  | +                        <span>
 | 
	
		
			
				|  |  |                              <Datetime
 | 
	
		
			
				|  |  |                                  timeFormat={false}
 | 
	
		
			
				|  |  |                                  inputProps={{ className: "form-control" }}
 | 
	
	
		
			
				|  | @@ -76,6 +214,7 @@ class TableRiwayat extends Component {
 | 
	
		
			
				|  |  |                                  onChange={(fromDate) => {
 | 
	
		
			
				|  |  |                                      this.setState({ fromDate })
 | 
	
		
			
				|  |  |                                  }}
 | 
	
		
			
				|  |  | +                                className=' mb-3'
 | 
	
		
			
				|  |  |                              />
 | 
	
		
			
				|  |  |                          </span>
 | 
	
		
			
				|  |  |                          <span>
 | 
	
	
		
			
				|  | @@ -87,87 +226,32 @@ class TableRiwayat extends Component {
 | 
	
		
			
				|  |  |                                  onChange={(toDate) => {
 | 
	
		
			
				|  |  |                                      this.setState({ toDate })
 | 
	
		
			
				|  |  |                                  }}
 | 
	
		
			
				|  |  | +                                // className=' w-75'
 | 
	
		
			
				|  |  |                              />
 | 
	
		
			
				|  |  |                          </span>
 | 
	
		
			
				|  |  | -                        <Button color="info" className=" mt-4" onClick={this.onFilter}>Filter</Button>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    </span>
 | 
	
		
			
				|  |  | -                    
 | 
	
		
			
				|  |  | -                    {this.state.dataRiwayat && (
 | 
	
		
			
				|  |  | -                        <Datatable options={{
 | 
	
		
			
				|  |  | -                            searching: true,
 | 
	
		
			
				|  |  | -                            aLengthMenu: [500],
 | 
	
		
			
				|  |  | -                            paging: false,
 | 
	
		
			
				|  |  | -                            scrollX: true, scrollY: "370px",
 | 
	
		
			
				|  |  | -                            bordered: true,
 | 
	
		
			
				|  |  | -                            "pageLength": 10
 | 
	
		
			
				|  |  | -                        }}>
 | 
	
		
			
				|  |  | -                            <table className="table w-100" data-order='[[3, "desc"]]'>
 | 
	
		
			
				|  |  | -                                <thead>
 | 
	
		
			
				|  |  | -                                    <tr>
 | 
	
		
			
				|  |  | -                                        <th>Timestamp</th>
 | 
	
		
			
				|  |  | -                                        <th>Username</th>
 | 
	
		
			
				|  |  | -                                        <th>IPv4</th>
 | 
	
		
			
				|  |  | -                                        <th>Menu</th>
 | 
	
		
			
				|  |  | -                                        <th>Deskripsi</th>
 | 
	
		
			
				|  |  | -                                        {/* <th>Created</th> */}
 | 
	
		
			
				|  |  | -                                    </tr>
 | 
	
		
			
				|  |  | -                                </thead>
 | 
	
		
			
				|  |  | -                                <tbody>
 | 
	
		
			
				|  |  | -                                    {this.state.dataRiwayat && this.state.dataRiwayat.data?.map(value => (
 | 
	
		
			
				|  |  | -                                        <tr>
 | 
	
		
			
				|  |  | -                                            <td style={{ width: 175 }}>
 | 
	
		
			
				|  |  | -                                                <div className="media align-items-center">
 | 
	
		
			
				|  |  | -                                                    <div className="media-body d-flex">
 | 
	
		
			
				|  |  | -                                                        <div>
 | 
	
		
			
				|  |  | -                                                            <p>{value.createdAt && (moment(value.createdAt).format("DD-MM-YYYY, HH:mm"))}</p>
 | 
	
		
			
				|  |  | -                                                        </div>
 | 
	
		
			
				|  |  | -                                                    </div>
 | 
	
		
			
				|  |  | -                                                </div>
 | 
	
		
			
				|  |  | -                                            </td>
 | 
	
		
			
				|  |  | -                                            <td >
 | 
	
		
			
				|  |  | -                                                <div className="media align-items-center">
 | 
	
		
			
				|  |  | -                                                    <div className="media-body d-flex">
 | 
	
		
			
				|  |  | -                                                        <div>
 | 
	
		
			
				|  |  | -                                                            <p>{value.user?.nama}</p>
 | 
	
		
			
				|  |  | -                                                        </div>
 | 
	
		
			
				|  |  | -                                                    </div>
 | 
	
		
			
				|  |  | -                                                </div>
 | 
	
		
			
				|  |  | -                                            </td>
 | 
	
		
			
				|  |  | -                                            <td>
 | 
	
		
			
				|  |  | -                                                <div className="media align-items-center">
 | 
	
		
			
				|  |  | -                                                    <div className="media-body d-flex">
 | 
	
		
			
				|  |  | -                                                        <div>
 | 
	
		
			
				|  |  | -                                                            <p>{value.ipv4}</p>
 | 
	
		
			
				|  |  | -                                                        </div>
 | 
	
		
			
				|  |  | -                                                    </div>
 | 
	
		
			
				|  |  | -                                                </div>
 | 
	
		
			
				|  |  | -                                            </td>
 | 
	
		
			
				|  |  | -                                            <td >
 | 
	
		
			
				|  |  | -                                                <div className="media align-items-center">
 | 
	
		
			
				|  |  | -                                                    <div className="media-body d-flex">
 | 
	
		
			
				|  |  | -                                                        <div>
 | 
	
		
			
				|  |  | -                                                            <p>{value.menu}</p>
 | 
	
		
			
				|  |  | -                                                        </div>
 | 
	
		
			
				|  |  | -                                                    </div>
 | 
	
		
			
				|  |  | -                                                </div>
 | 
	
		
			
				|  |  | -                                            </td>
 | 
	
		
			
				|  |  | -                                            <td style={{ minWidth: 350 }}>
 | 
	
		
			
				|  |  | -                                                <div className="media align-items-center">
 | 
	
		
			
				|  |  | -                                                    <div className="media-body d-flex">
 | 
	
		
			
				|  |  | -                                                        <div>
 | 
	
		
			
				|  |  | -                                                            <p>{value.aktivitas}</p>
 | 
	
		
			
				|  |  | -                                                        </div>
 | 
	
		
			
				|  |  | -                                                    </div>
 | 
	
		
			
				|  |  | -                                                </div>
 | 
	
		
			
				|  |  | -                                            </td>
 | 
	
		
			
				|  |  | -                                        </tr>
 | 
	
		
			
				|  |  | -                                    ))}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                                </tbody>
 | 
	
		
			
				|  |  | -                            </table>
 | 
	
		
			
				|  |  | -                        </Datatable>
 | 
	
		
			
				|  |  | -                    )}
 | 
	
		
			
				|  |  | +                        <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 >
 | 
	
		
			
				|  |  |          );
 |