Skip to content
Snippets Groups Projects
BookingQuery.tsx 2.72 KiB
Newer Older
import { useState } from 'react';
import { useForm } from 'react-hook-form';
import { useNavigate } from 'react-router-dom';
import { airports } from '../../helpers/Airports';
import './BookingQuery.scss';

interface IBookingQuery {
  origin: string;
  destination: string;
  date: string;
  seatType: string;
}

function BookingQuery() {
  const navigate = useNavigate();
  const [error, setError] = useState('');
  const { register, handleSubmit } = useForm<IBookingQuery>({mode: 'onChange', defaultValues: { origin: '', destination: '', seatType: ''}});

  const onSubmit = (query: IBookingQuery) => {
    if (query.origin === query.destination) {
      setError('Destination cannot be the same as origin');
      return;
    }

    setError('');
    navigate(`/booking/list?origin=${query.origin}&destination=${query.destination}&date=${query.date}&seatType=${query.seatType}`);
  };

  return (
    <>
      <div className='booking-query'>
        <form onSubmit={handleSubmit(onSubmit)}>
          <div className='card booking-query-card'>
            <div className='form-group'>
              <label>Origin:</label>
              <select {...register('origin', { required: true })}>
                <option value={''} disabled>Select an airport</option>
                {airports.map((airport) => {
                  return <option key={airport} value={airport}>{airport}</option>
                })}
              </select>
            </div>

            <div className='form-group'>
              <label>Destination:</label>
              <select {...register('destination', { required: true })}>
                <option value='' disabled>Select an airport</option>
                {airports.map((airport) => {
                  return <option key={airport} value={airport}>{airport}</option>
                })}
              </select>
            </div>

            <div className='form-group'>
              <label>Departure Date:</label>
              <input type='date' min={new Date().toISOString().split('T')[0]} {...register('date', { required: true })}></input>
            </div>

            <div className='form-group'>
              <label>Seat Type:</label>
              <select {...register('seatType', { required: true })}>
                <option value='' disabled>Select Seat Type</option>
                <option value='economy'>Economy</option>
                <option value='business'>Business</option>
              </select>
            </div>

            <div className='form-group'>
              <button type='submit'>Submit</button>
            </div>

            <div className='form-group'>
              {error && <span>{error}</span>}
            </div>
          </div>
        </form>
      </div>
    </>
  );
}

export default BookingQuery;