Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
77cdcac
Merge pull request #15 from rezcode/staging
rezcode Aug 19, 2022
e811005
revert main
rezcode Aug 19, 2022
b2a318e
Merge branch 'main' into slicing-detail-flight
ayiis218 Aug 19, 2022
5b08015
Merge branch 'slicing-detail-flight'
ayiis218 Aug 19, 2022
60f14ce
[revert]
ayiis218 Aug 19, 2022
edb96d1
back up data
rezcode Aug 19, 2022
8ba9ee1
get trending destination home page
rezcode Aug 19, 2022
696fedc
[ADD] get top ten destinations
rezcode Aug 19, 2022
0df17d2
[ADD] parse query params url search destination
rezcode Aug 19, 2022
e0259ce
Merge pull request #18 from rezcode/integrasi-API-home-page
rezcode Aug 19, 2022
4b04060
move file flight to new folder
rezcode Aug 19, 2022
ffb9c03
[ADD] admin page
rezcode Aug 19, 2022
ca9dfab
[ADD] admin page
rezcode Aug 19, 2022
e0c5a79
Merge pull request #19 from rezcode/slicing-admin-page
rezcode Aug 19, 2022
04e26b4
set min-height home page
rezcode Aug 20, 2022
97222b3
Merge pull request #20 from rezcode/slicing-admin-page
rezcode Aug 20, 2022
1153583
Merge remote-tracking branch 'origin/back-up-data' into integrasi-API…
rezcode Aug 20, 2022
cd6a389
Add formik and yup package
aldoBangun Aug 20, 2022
086b2b5
Add formik into login form
aldoBangun Aug 20, 2022
b436623
[Add] integrasi detail-flight to API
ayiis218 Aug 20, 2022
ec70a6b
Install redux & jwt-decode dependencies
aldoBangun Aug 20, 2022
3d0748d
Add state management using redux & redux-persist
aldoBangun Aug 20, 2022
1256c20
Update login page
aldoBangun Aug 20, 2022
a110906
add logout feature
aldoBangun Aug 20, 2022
26d5835
auto clear error from state on submitting form
aldoBangun Aug 20, 2022
f6a56c9
[update] facilities dinamis
ayiis218 Aug 20, 2022
c45dab1
udpate form validation
aldoBangun Aug 20, 2022
24365f1
Integrate Register with API
aldoBangun Aug 20, 2022
b30b5b5
[ADD] get destination and init destination
rezcode Aug 20, 2022
13e9fb4
Merge pull request #22 from rezcode/integrasi-API-search-flight
rezcode Aug 20, 2022
2923ca2
Merge branch 'back-up-data' into features-auth-formik
rezcode Aug 20, 2022
d39f09b
Merge pull request #21 from aldoBangun/features-auth-formik
rezcode Aug 20, 2022
f77f38a
remove useEffect
aldoBangun Aug 20, 2022
88e4300
Merge branch 'back-up-data' of https://github.com/aldoBangun/bypass-a…
aldoBangun Aug 20, 2022
e35711e
[ADD] Api admin
Aug 20, 2022
d19d059
remove useEffect from register page
aldoBangun Aug 20, 2022
983f16f
Merge pull request #23 from aldoBangun/features-auth-formik
aldoBangun Aug 20, 2022
f0d1cb0
bug fix
aldoBangun Aug 20, 2022
ad51baf
Merge pull request #24 from aldoBangun/features-auth-formik
aldoBangun Aug 20, 2022
d08ae4a
Merge remote-tracking branch 'origin/back-up-data' into api-admin
Aug 20, 2022
d971e0b
Merge pull request #25 from rezcode/api-admin
ilhamyusuf27 Aug 20, 2022
9b0faa9
[FIX] package.json
rezcode Aug 20, 2022
c69ff37
[Add] integrasi search result
ayiis218 Aug 20, 2022
50bd4bf
[add] navigation
ayiis218 Aug 20, 2022
f5aa0d9
[update]
ayiis218 Aug 20, 2022
cdceead
[ADD] loading component
rezcode Aug 20, 2022
c3415f3
add loading component
rezcode Aug 20, 2022
b108831
Merge pull request #26 from rezcode/integrasi-API-search-result
rezcode Aug 20, 2022
a1804d8
[update]
ayiis218 Aug 20, 2022
24308d9
Merge branch 'integrasi-API-search-result' of https://github.com/rezc…
ayiis218 Aug 20, 2022
e41c7da
Merge pull request #27 from rezcode/integrasi-API-search-result
rezcode Aug 20, 2022
9b2490f
Merge pull request #28 from rezcode/integrasi-API-detail-flight
rezcode Aug 20, 2022
4481ac8
[fix] package-lock.json
rezcode Aug 20, 2022
b263783
[ADD] parse url params to result flight list page
rezcode Aug 20, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added assets/loading.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
295 changes: 168 additions & 127 deletions components/organisms/formDetailFlight.js

Large diffs are not rendered by default.

357 changes: 212 additions & 145 deletions components/organisms/formFlight.js
Original file line number Diff line number Diff line change
@@ -1,154 +1,221 @@
/* eslint-disable jsx-a11y/alt-text */
/* eslint-disable react-hooks/rules-of-hooks */
/* eslint-disable @next/next/no-img-element */
import React, { useState } from "react";
import React, { useEffect, useState } from "react";
import Image from "next/image";
import { useRouter } from "next/router";
// import Zoom from 'next-image-zoom';
import back from "../../public/icons/btnback.svg";
import arrow from "../../public/icons/arrow.svg";
import go from "../../public/icons/white-arrow.svg";
import full from "../../public/icons/fullScreen.svg";
import Default from "../../public/img/bali.png";
import style from "./style/flight.module.css";
import { MdOutlineSwapHoriz } from "react-icons/md";
import { useRouter } from "next/router";
import Link from "next/link";

const formFlight = (props) => {
const { inititateDestination } = props;
const { destinationList } = props;
const [origin, setOrigin] = useState("Jakarta");
const [destination, setDestination] = useState("");
const [departure, setDeparture] = useState("");
const [classCategory, setClassCategory] = useState("");
const router = useRouter();

const handleSearchFlight = (e) => {
e.preventDefault();
if (destination === "") {
return (destination = inititateDestination?.city);
}
const body = {
origin,
destination,
departure,
class_category: classCategory,
};

const formFlight = () => {
const router = useRouter();
/* const [deptCity, setDeptCity] = useState('');
const [arrCity, setArrCity] = useState(''); */
return (
<div className={style.section}>
<div className="container">
<div className="row">
<div className={style.header}>
<div className="row">
<Image className={style.img} src={Default} alt="destinasi" height={290} width={470}></Image>
<div className={`row ms-2 ${style.icon}`}>
<div className="col-6 mt-4">
<Image className={style.back} src={back} alt="Back" />
</div>
<div className="col-6 mt-3 d-flex justify-content-end">
<Image className={style.full} src={full} alt="full" />
</div>
</div>
<div className={style.title}>
<h3>Destinations</h3>
</div>
</div>
</div>
<div className={style.container}>
<div className={style.content}>
<div className={style.box}>
<div className="text-secondary">From</div>
<select
className="font-weight-bold form-control w-auto"
name="deptCity"
style={{ border: "none" }}
// value={deptCity}
>
<option value="">Medan</option>
<option value="loading">Loading</option>
<option value="error">Error</option>
</select>
<p className={`text-secondary${style.dest}`}>Indonesia</p>
</div>
<Image
src={arrow}
alt="arrow"
/* onClick={() => {
setDeptCity(arrCity);
setArrCity(deptCity);
}} */
/>
<div className={style.box}>
<div className="text-secondary">To</div>
router.push(
`/search-result?origin=${body.origin}&destination=${body.destination}&departure=${body.departure}&class_category=${body.class_category}`
);
};

<select
className="font-weight-bold form-control w-auto"
style={{ border: "none" }}
name="arrCity"
// value={arrCity}
>
<option value="">Tokyo</option>
<option value="loading">Loading</option>
<option value="error">Error</option>
</select>
<p className={`text-secondary${style.dest}`}>Japan</p>
</div>
</div>
<div className={style.type}>
<ul className={style.mode}>
<div className="row mt-4 w-100">
<div className="col-6">
<li className="one-way">
<input type="radio" id="one" name="type" />
<label htmlFor="one">One Way</label>
</li>
</div>
<div className="col-6">
<li className="round-trip">
<input type="radio" id="round" name="type" />
<label htmlFor="round">Round Trip</label>
</li>
</div>
</div>
</ul>
</div>
<div className="search-departure mt-4 text-secondary">
<div>Departure</div>
<div className={style.date}>
<input type="date" className="form-control" name="" id="" min={new Date().toISOString().split("T")[0]} />
</div>
</div>
<div className="search-person mt-4 text-secondary">
<div>How many person?</div>
<div className={`mt-1 ${style.select}`}>
<select className="form-check">
<option value="null" disabled="disabled" selected>
Child
</option>
<option value="1">1 Child</option>
<option value="2">2 Child</option>
<option value="3">3 Child</option>
<option value="4">4 Child</option>
</select>
<select className="form-check">
<option value="null" disabled="disabled" selected>
Adult
</option>
<option value="1">1 Adult</option>
<option value="2">2 Adult</option>
<option value="3">3 Adult</option>
<option value="4">4 Adult</option>
</select>
</div>
</div>
<div className="mt-5 text-secondary">
<div>Which class do you want?</div>
<div className={style.radio}>
<div>
<input type="radio" name="radio" id="radio1" />
<label htmlFor="radio1"> Economy</label>
</div>
<div>
<input type="radio" name="radio" id="radio2" />
<label htmlFor="radio2"> Business</label>
</div>
<div>
<input type="radio" name="radio" id="radio3" />
<label htmlFor="radio3"> First Class</label>
</div>
</div>
</div>
<button className={`mt-4 ${style.button}`} onClick={() => router.push("/result")}>
Search Flight
<Image src={go} alt="" />
</button>
</div>
</div>
</div>
</div>
);
return (
<div className={style.section}>
<div className="container">
<div className="row">
<div className={style.header}>
<div className="row">
<Image
className={style.img}
src={inititateDestination?.destination_image}
alt="destinasi"
height={290}
width={470}
></Image>
<div className={`row ms-2 ${style.icon}`}>
<div className="col-6 mt-4">
<Link href={"/"} passHref>
<Image className={style.back} src={back} alt="Back" />
</Link>
</div>
<div className="col-6 mt-3 d-flex justify-content-end">
<Image className={style.full} src={full} alt="full" />
</div>
</div>
<div className={style.title}>
<h3>Destinations</h3>
</div>
</div>
</div>
<div className={style.container}>
<form>
<div className={style.content}>
<div className={style.box}>
<div className="row align-items-center">
<div className="col-5">
<p>from</p>
<select
className="font-weight-bold shadow-none form-control w-auto"
name="deptCity"
style={{ border: "none", paddingLeft: "0px" }}
onChange={(e) => {
const selectedOrigin = e.target.value;
setOrigin(selectedOrigin);
}}
>
<option selected value="Jakarta">
Jakarta
</option>
{destinationList?.map((item, index) => (
<option key={index} value={item.city}>
{item.city}
</option>
))}
</select>
<span className="text-secondary">Indonesia</span>
</div>
<div className="col-2 text-center">
<MdOutlineSwapHoriz size={25} color="#2395FF" />
</div>
<div className="col-5 text-end">
<p>to</p>
<select
className="font-weight-bold shadow-none form-control w-auto"
name="deptCity"
style={{ border: "none" }}
onChange={(e) => {
const selectedDestination = e.target.value;
setDestination(selectedDestination);
}}
>
<option selected>{inititateDestination?.city}</option>
{destinationList?.map((item, index) => (
<option key={index} value={item.city}>
{item.city}
</option>
))}
</select>
<span className="text-secondary">Indonesia</span>
</div>
</div>
</div>
</div>
<div className={style.type}>
<ul className={style.mode}>
<div className="row mt-4 w-100">
<div className="col-6">
<li className="one-way">
<input type="radio" id="one" checked name="type" />
<label htmlFor="one">One Way</label>
</li>
</div>
<div className="col-6">
<li className="round-trip">
<input type="radio" id="round" disabled name="type" />
<label htmlFor="round">Round Trip</label>
</li>
</div>
</div>
</ul>
</div>
<div className="search-departure mt-4 text-secondary">
<div>Departure</div>
<div className={style.date}>
<input
type="date"
className="form-control"
name=""
id=""
min={new Date().toISOString().split("T")[0]}
onChange={(e) => setDeparture(e.target.value)}
/>
</div>
</div>
{/* <div className="search-person mt-4 text-secondary">
<div>How many person?</div>
<div className={`mt-1 ${style.select}`}>
<select className="form-check">
<option value="null" disabled="disabled" selected>
Child
</option>
<option value="1">1 Child</option>
<option value="2">2 Child</option>
<option value="3">3 Child</option>
<option value="4">4 Child</option>
</select>
<select className="form-check">
<option value="null" disabled="disabled" selected>
Adult
</option>
<option value="1">1 Adult</option>
<option value="2">2 Adult</option>
<option value="3">3 Adult</option>
<option value="4">4 Adult</option>
</select>
</div>
</div> */}
<div className="mt-5 text-secondary">
<div>Which class do you want?</div>
<div className={style.radio}>
<div>
<input
type="radio"
name="radio"
value="economy"
id="radio1"
onChange={(e) => setClassCategory(e.target.value)}
/>
<label htmlFor="radio1"> Economy</label>
</div>
<div>
<input
type="radio"
name="radio"
value="business"
id="radio2"
onChange={(e) => setClassCategory(e.target.value)}
/>
<label htmlFor="radio2"> Business</label>
</div>
<div>
<input
type="radio"
name="radio"
value="first-class"
id="radio3"
onChange={(e) => setClassCategory(e.target.value)}
/>
<label htmlFor="radio3"> First Class</label>
</div>
</div>
</div>
<button
className={`mt-4 ${style.button}`}
onClick={handleSearchFlight}
type="submit"
>
Search Flight
</button>
</form>
</div>
</div>
</div>
</div>
);
};

export default formFlight;
Loading