| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 | 
							- import React, { Component } from "react";
 
- import Router from "next/router";
 
- import ContentWrapper from "@/components/Layout/ContentWrapper";
 
- import { Row, Col, Button, Table, Pagination, PaginationItem, PaginationLink } from "reactstrap";
 
- // React Slider
 
- import { getPT, getPembina } from "@/actions/PT";
 
- import Slider from "rc-slider";
 
- import "rc-slider/assets/index.css";
 
- // React Select
 
- import Select from "react-select";
 
- // DateTimePicker
 
- import Datetime from "react-datetime";
 
- import "react-datetime/css/react-datetime.css";
 
- import https from "https";
 
- import CardTool from "@/components/Common/CardTool";
 
- import dummyData from "../PT-ID.json";
 
- const selectInstanceId = 1;
 
- class Search extends Component {
 
- 	state = {
 
- 		pembina: [],
 
- 		selectedOptionMulti: [],
 
- 		data: [],
 
- 		search: "",
 
- 	};
 
- 	componentDidMount = async () => {
 
- 		const dataPembina = await getPembina();
 
- 		this.setState({ pembina: dataPembina.data });
 
- 	};
 
- 	optionsPembina = (pembina) => {
 
- 		return pembina.map((e) => ({ value: e.id, label: e.nama, className: "State-ACT" }));
 
- 	};
 
- 	handleChangeSelectMulti = (selectedOptionMulti) => {
 
- 		this.setState({ selectedOptionMulti });
 
- 	};
 
- 	renderInputGroup = (props) => {
 
- 		return (
 
- 			<div className="input-group date">
 
- 				<input className="form-control" {...props} />
 
- 				<span className="input-group-append input-group-addon">
 
- 					<span className="input-group-text fas fa-calendar-alt"></span>
 
- 				</span>
 
- 			</div>
 
- 		);
 
- 	};
 
- 	handleClick = (e, PT_ID) => {
 
- 		e.preventDefault();
 
- 		Router.push({
 
- 			pathname: "/app/pemantauan/timeline",
 
- 			query: { ptId: PT_ID },
 
- 		});
 
- 	};
 
- 	fetchData = async () => {
 
- 		const searchValue = document.getElementById("searchInput").value;
 
- 		this.setState({ search: searchValue });
 
- 		const jsonData = await getPT({ search: searchValue });
 
- 		this.setState({ data: jsonData.data });
 
- 	};
 
- 	handleApplyClick = () => {
 
- 		// console.log("selectedOptionMulti : ", this.state.selectedOptionMulti);
 
- 		this.fetchData();
 
- 		if (this.state.data && this.state.data.length) {
 
- 			this.renderTableData();
 
- 		}
 
- 	};
 
- 	handleSearchClick = () => {
 
- 		this.fetchData();
 
- 		if (this.state.data && this.state.data.length) {
 
- 			this.renderTableData();
 
- 		}
 
- 	};
 
- 	renderTableData() {
 
- 		return (
 
- 			this.state.data &&
 
- 			this.state.data.map((pt, index) => {
 
- 				return (
 
- 					<tr>
 
- 						<td>
 
- 							<label>{index + 1}</label>
 
- 						</td>
 
- 						<td>
 
- 							<div className="media align-items-center">
 
- 								<a className="mr-3" href="">
 
- 									<img className="img-fluid rounded thumb64" src="/static/img/dummy-search.png" alt="Dummy" />
 
- 								</a>
 
- 								<div className="media-body d-flex">
 
- 									<div>
 
- 										<h4 className="m-0">{pt.nama}</h4>
 
- 										<small className="text-muted">
 
- 											{pt.sk_pendirian} - {pt.website} - {pt.email}
 
- 										</small>
 
- 										<p>{pt.alamat.jalan}</p>
 
- 									</div>
 
- 									<div className="ml-auto">
 
- 										<Button color="info" size="sm" onClick={(e) => this.handleClick(e, pt.id)}>
 
- 											View
 
- 										</Button>
 
- 									</div>
 
- 								</div>
 
- 							</div>
 
- 						</td>
 
- 					</tr>
 
- 				);
 
- 			})
 
- 		);
 
- 	}
 
- 	render() {
 
- 		const { selectedOptionMulti, pembina } = this.state;
 
- 		console.log(pembina);
 
- 		return (
 
- 			<ContentWrapper>
 
- 				<div className="content-heading">
 
- 					<div>
 
- 						Search
 
- 						<small>Search and filter results</small>
 
- 					</div>
 
- 				</div>
 
- 				<Row>
 
- 					<Col lg="9">
 
- 						<div className="form-group mb-4">
 
- 							<input className="form-control mb-2" type="text" id="searchInput" placeholder="Pencarian Nama Perguruan Tinggi" />
 
- 							<div className="d-flex">
 
- 								<button className="btn btn-secondary" type="button" onClick={(e) => this.handleSearchClick()}>
 
- 									Search
 
- 								</button>
 
- 								<div className="ml-auto"></div>
 
- 							</div>
 
- 						</div>
 
- 						{/* START card */}
 
- 						<div className="card card-default">
 
- 							<div className="card-header">Search Results</div>
 
- 							{/* START table-responsive */}
 
- 							<Table striped bordered hover>
 
- 								<thead>
 
- 									<tr>
 
- 										<th>No. </th>
 
- 										<th>Description</th>
 
- 									</tr>
 
- 								</thead>
 
- 								<tbody>{this.renderTableData()}</tbody>
 
- 							</Table>
 
- 							{/* END table-responsive */}
 
- 							<div className="card-footer">
 
- 								<div className="d-flex"></div>
 
- 							</div>
 
- 						</div>
 
- 						{/* END card */}
 
- 					</Col>
 
- 					<Col lg="3">
 
- 						<h3 className="m-0 pb-3">Filters</h3>
 
- 						<div className="form-group mb-4">
 
- 							<label className="col-form-label mb-2">by Pembina</label>
 
- 							<br />
 
- 							<Select instanceId={selectInstanceId + 1} isMulti value={selectedOptionMulti} onChange={this.handleChangeSelectMulti} options={pembina ? this.optionsPembina(pembina) : []} required />
 
- 						</div>
 
- 						<Button color="secondary" size="lg" onClick={(e) => this.handleApplyClick()}>
 
- 							Apply
 
- 						</Button>
 
- 					</Col>
 
- 				</Row>
 
- 			</ContentWrapper>
 
- 		);
 
- 	}
 
- }
 
- export default Search;
 
 
  |