From 3d000ef543d1dffe994d0cf3e78344708c9f221d Mon Sep 17 00:00:00 2001
From: "Cross, Liam (UG - Comp Sci & Elec Eng)" <lc01383@surrey.ac.uk>
Date: Tue, 2 Apr 2024 19:44:26 +0000
Subject: [PATCH] Separate client and airline dashboards

---
 .../BookingList/BookingCard/BookingCard.tsx   |   2 +-
 .../CustomerDashboard/CustomerDashboard.scss  | 120 ----------------
 .../CustomerDashboard/CustomerDashboard.tsx   | 133 ------------------
 .../src/components/Dashboard/Dashboard.scss   |   8 ++
 client/src/components/Dashboard/Dashboard.tsx |  16 +++
 .../FlightCard/FlightCard.scss                |   2 +-
 .../FlightCard/FlightCard.tsx                 |   2 +-
 .../components/Dashboard/Flights/Flights.scss |  30 ++++
 .../components/Dashboard/Flights/Flights.tsx  |  54 +++++++
 .../components/Dashboard/Profile/Profile.scss |  13 ++
 .../components/Dashboard/Profile/Profile.tsx  | 114 +++++++++++++++
 .../components/Dashboard/Profile/airplane.jpg | Bin 0 -> 10836 bytes
 .../Profile}/avatar.jpg                       | Bin
 client/src/components/Header/Header.tsx       |   8 +-
 client/src/components/Login/Login.tsx         |   5 +-
 client/src/components/Register/Register.tsx   |   7 +-
 client/src/helpers/UserType.ts                |   7 +
 client/src/index.scss                         |  53 +++++++
 client/src/main.tsx                           |  12 +-
 .../src/services/BookingList/BookingList.ts   |   2 +-
 .../services/Dashboard/AirlineDashboard.ts    |   9 ++
 .../CustomerDashboard.ts                      |   6 +-
 22 files changed, 333 insertions(+), 270 deletions(-)
 delete mode 100644 client/src/components/CustomerDashboard/CustomerDashboard.scss
 delete mode 100644 client/src/components/CustomerDashboard/CustomerDashboard.tsx
 create mode 100644 client/src/components/Dashboard/Dashboard.scss
 create mode 100644 client/src/components/Dashboard/Dashboard.tsx
 rename client/src/components/{CustomerDashboard => Dashboard}/FlightCard/FlightCard.scss (99%)
 rename client/src/components/{CustomerDashboard => Dashboard}/FlightCard/FlightCard.tsx (95%)
 create mode 100644 client/src/components/Dashboard/Flights/Flights.scss
 create mode 100644 client/src/components/Dashboard/Flights/Flights.tsx
 create mode 100644 client/src/components/Dashboard/Profile/Profile.scss
 create mode 100644 client/src/components/Dashboard/Profile/Profile.tsx
 create mode 100644 client/src/components/Dashboard/Profile/airplane.jpg
 rename client/src/components/{CustomerDashboard => Dashboard/Profile}/avatar.jpg (100%)
 create mode 100644 client/src/services/Dashboard/AirlineDashboard.ts
 rename client/src/services/{CustomerDashboard => Dashboard}/CustomerDashboard.ts (98%)

diff --git a/client/src/components/BookingList/BookingCard/BookingCard.tsx b/client/src/components/BookingList/BookingCard/BookingCard.tsx
index 900011a..29b598f 100644
--- a/client/src/components/BookingList/BookingCard/BookingCard.tsx
+++ b/client/src/components/BookingList/BookingCard/BookingCard.tsx
@@ -1,5 +1,5 @@
 import { useLocation } from 'react-router-dom';
-import { IFlight } from '../../../services/CustomerDashboard/CustomerDashboard';
+import { IFlight } from '../../../services/Dashboard/CustomerDashboard';
 import './BookingCard.scss';
 
 interface IBookingCard {
diff --git a/client/src/components/CustomerDashboard/CustomerDashboard.scss b/client/src/components/CustomerDashboard/CustomerDashboard.scss
deleted file mode 100644
index def2dfb..0000000
--- a/client/src/components/CustomerDashboard/CustomerDashboard.scss
+++ /dev/null
@@ -1,120 +0,0 @@
-.customer-dashboard {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  justify-content: center;
-  width: 100%;
-  gap: 2rem;
-}
-
-.avatar {
-  width: 150px;
-}
-
-.customer-profile {
-  display: flex;
-  flex-direction: row;
-  gap: 1.5rem;
-}
-
-.bio-card {
-  padding: 1.5rem 5rem !important; // Sorry
-}
-
-.form-h {
-  display: flex;
-  flex-direction: column;
-  gap: 1rem;
-
-  .form-group-h {
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    gap: 1rem;
-
-    label {
-      font-weight: 700;
-      width: 180px;
-    }
-
-    input {
-      font-size: 1rem;
-      padding: 6px 12px;
-      border: 1px solid gray;
-      border-radius: 5px;
-      width: 300px;
-    }
-
-    button {
-      font-size: 1rem;
-      padding: 6px 12px;
-      border: 1px solid gray;
-      border-radius: 5px;
-      background-color: var(--main);
-      color: white;
-    }
-
-    button:hover {
-      filter: brightness(50%);
-      cursor: pointer;
-    }
-
-    button:disabled {
-      filter: brightness(40%);
-    }
-
-    button:disabled:hover {
-      cursor: auto;
-    }
-
-    span {
-      overflow: hidden;
-      color: red;
-    }
-  }
-}
-
-.flights-title {
-  font-size: 2rem;
-}
-
-.flights {
-  display: flex;
-  flex-direction: column;
-  width: 80vw;
-  gap: 0.5rem;
-}
-
-.flight-list {
-  display: flex;
-  gap: 1rem;
-}
-
-.view-more {
-  font-size: 1rem;
-  padding: 6px 12px;
-  border: 1px solid gray;
-  border-radius: 5px;
-  background-color: var(--main);
-  color: white;
-}
-
-.view-more:hover {
-  filter: brightness(50%);
-  cursor: pointer;
-}
-
-.view_more_button {
-  margin-left: 10px;
-  font-size: 1rem;
-  padding: 6px 12px;
-  border: 1px solid gray;
-  border-radius: 5px;
-  background-color: var(--main);
-  color: white;
-}
-
-.view_more_button:hover {
-  filter: brightness(50%);
-  cursor: pointer;
-}
\ No newline at end of file
diff --git a/client/src/components/CustomerDashboard/CustomerDashboard.tsx b/client/src/components/CustomerDashboard/CustomerDashboard.tsx
deleted file mode 100644
index 394312d..0000000
--- a/client/src/components/CustomerDashboard/CustomerDashboard.tsx
+++ /dev/null
@@ -1,133 +0,0 @@
-import { useState } from 'react';
-import { useLoaderData } from 'react-router-dom';
-import { useForm } from 'react-hook-form';
-import { ICustomerDashboardData } from '../../services/CustomerDashboard/CustomerDashboard';
-import { useAuth } from '../../hooks/useAuth';
-import FlightCard from './FlightCard/FlightCard';
-import avatar from './avatar.jpg';
-import './CustomerDashboard.scss';
-
-interface ICustomerDashboardForm {
-  name: string;
-  email: string;
-  password: string;
-  confirmPassword: string;
-}
-
-function CustomerDashboard() {
-  const [error, setError] = useState('');
-  const [disabled, setDisabled] = useState(true);
-  const { user } = useAuth();
-  const data = useLoaderData() as ICustomerDashboardData;
-  const formValues: ICustomerDashboardForm = {
-    name: user?.username ?? '',
-    email: user?.email ?? '',
-    password: '',
-    confirmPassword: ''
-  };
-  const { register, handleSubmit } = useForm<ICustomerDashboardForm>({mode: 'onChange', defaultValues: formValues});
-
-  const toggleEdit = () => {
-    setDisabled(!disabled);
-  };
-
-  const onSubmit = (formValue: ICustomerDashboardForm) => {
-    if (formValue.password.length < 7) {
-      setError('password length must be greater than 7 characters');
-      return;
-    }
-
-    if (formValue.password !== formValue.confirmPassword) {
-      setError('password and confirm password must match');
-      return;
-    }
-
-    setError('');
-    console.log('ready to make update details api call');
-  };
-
-  return (
-    <>
-      <div className='customer-dashboard'>
-        <div className='customer-profile'>
-          <div className='customer-profile-bio'>
-            <div className='card bio-card'>
-              <div className='flex'>
-                <img src={avatar} alt='avatar' className='avatar'></img>
-                <span>{user?.username ?? ''}</span>
-                <span>Loyal Customer</span>
-              </div>
-            </div>
-          </div>
-
-          <div className='customer-profile-fields'>
-            <div className='card'>
-              <form onSubmit={handleSubmit(onSubmit)}>
-                <div className='form-h'>
-                  <div className='form-group-h'>
-                    <label>Full Name</label>
-                    <input type='text' {...register('name', { required: true, disabled })} />
-                  </div>
-
-                  <div className='form-group-h'>
-                    <label>Email</label>
-                    <input type='email' {...register('email', { required: true, disabled })} />
-                  </div>
-
-                  <div className='form-group-h'>
-                    <label>Password</label>
-                    <input type='password' placeholder='Enter new password' {...register('password', { required: true, disabled })} />
-                  </div>
-
-                  <div className='form-group-h'>
-                    <label>Confirm Password</label>
-                    <input type='password' placeholder='Confirm new password' {...register('confirmPassword', { required: true, disabled })} />
-                  </div>
-
-                  <div className='form-group-h'>
-                    <button type='button' onClick={toggleEdit}>Toggle Edit</button>
-                    <button type='submit' disabled={disabled}>Submit</button>
-                  </div>
-
-                  <div className='form-group-h'>
-                    {error && <span>{error}</span>}
-                  </div>
-                </div>
-              </form>
-            </div>
-          </div>
-        </div>
-
-        <div className='flights'>
-          <div className='flex-row'>
-            <span className='flights-title'>Upcoming Flights</span>
-            <button type='submit' className='view_more_button'>View more</button>
-          </div>
-          <div className='flight-list'>
-            {data.upcomingFlights.length > 0
-              ? data.upcomingFlights.map((flight) => {
-                  return <FlightCard key={flight.id} flight={flight}></FlightCard>
-                })
-              : <div>No Upcoming Flights</div>}
-          </div>
-        </div>
-
-        <div className='flights'>
-          <div className='flex-row'>
-            <span className='flights-title'>Flights History</span>
-            <button type='submit' className='view_more_button'>View more</button>
-          </div>
-          <div className='flight-list'>
-            {data.upcomingFlights.length > 0
-              ? data.flightsHistory.map((flight) => {
-                  return <FlightCard key={flight.id} flight={flight}></FlightCard>
-                })
-              : <div>No Flights History</div>}
-          </div>
-        </div>
-      </div>
-    </>
-  );
-}
-
-export default CustomerDashboard;
\ No newline at end of file
diff --git a/client/src/components/Dashboard/Dashboard.scss b/client/src/components/Dashboard/Dashboard.scss
new file mode 100644
index 0000000..a825b41
--- /dev/null
+++ b/client/src/components/Dashboard/Dashboard.scss
@@ -0,0 +1,8 @@
+.dashboard {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  width: 100%;
+  gap: 2rem;
+}
diff --git a/client/src/components/Dashboard/Dashboard.tsx b/client/src/components/Dashboard/Dashboard.tsx
new file mode 100644
index 0000000..7521039
--- /dev/null
+++ b/client/src/components/Dashboard/Dashboard.tsx
@@ -0,0 +1,16 @@
+import Profile from './Profile/Profile';
+import Flights from './Flights/Flights';
+import './Dashboard.scss';
+
+function Dashboard() {
+  return (
+    <>
+      <div className='dashboard'>
+        <Profile></Profile>
+        <Flights></Flights>
+      </div>
+    </>
+  );
+}
+
+export default Dashboard;
diff --git a/client/src/components/CustomerDashboard/FlightCard/FlightCard.scss b/client/src/components/Dashboard/FlightCard/FlightCard.scss
similarity index 99%
rename from client/src/components/CustomerDashboard/FlightCard/FlightCard.scss
rename to client/src/components/Dashboard/FlightCard/FlightCard.scss
index 639c3a9..8163853 100644
--- a/client/src/components/CustomerDashboard/FlightCard/FlightCard.scss
+++ b/client/src/components/Dashboard/FlightCard/FlightCard.scss
@@ -13,4 +13,4 @@
 .flight-path {
   color: #777;
   font-size: 0.8rem;
-}
\ No newline at end of file
+}
diff --git a/client/src/components/CustomerDashboard/FlightCard/FlightCard.tsx b/client/src/components/Dashboard/FlightCard/FlightCard.tsx
similarity index 95%
rename from client/src/components/CustomerDashboard/FlightCard/FlightCard.tsx
rename to client/src/components/Dashboard/FlightCard/FlightCard.tsx
index 9e20e2b..32125e5 100644
--- a/client/src/components/CustomerDashboard/FlightCard/FlightCard.tsx
+++ b/client/src/components/Dashboard/FlightCard/FlightCard.tsx
@@ -25,4 +25,4 @@ function FlightCard({ flight }: IFlightCard) {
   );
 }
 
-export default FlightCard;
\ No newline at end of file
+export default FlightCard;
diff --git a/client/src/components/Dashboard/Flights/Flights.scss b/client/src/components/Dashboard/Flights/Flights.scss
new file mode 100644
index 0000000..9cabf46
--- /dev/null
+++ b/client/src/components/Dashboard/Flights/Flights.scss
@@ -0,0 +1,30 @@
+.flights-title {
+  font-size: 2rem;
+}
+
+.flights {
+  display: flex;
+  flex-direction: column;
+  width: 80vw;
+  gap: 0.5rem;
+}
+
+.flight-list {
+  display: flex;
+  gap: 1rem;
+}
+
+.view-more {
+  margin-left: 10px;
+  font-size: 1rem;
+  padding: 6px 12px;
+  border: 1px solid gray;
+  border-radius: 5px;
+  background-color: var(--main);
+  color: white;
+}
+
+.view-more:hover {
+  filter: brightness(50%);
+  cursor: pointer;
+}
diff --git a/client/src/components/Dashboard/Flights/Flights.tsx b/client/src/components/Dashboard/Flights/Flights.tsx
new file mode 100644
index 0000000..96ff319
--- /dev/null
+++ b/client/src/components/Dashboard/Flights/Flights.tsx
@@ -0,0 +1,54 @@
+import { useLoaderData } from 'react-router';
+import { ICustomerDashboardData } from '../../../services/Dashboard/CustomerDashboard';
+import { IAirlineDashboardData } from '../../../services/Dashboard/AirlineDashboard';
+import FlightCard from '../FlightCard/FlightCard';
+import './Flights.scss';
+
+function Flights() {
+  const data = useLoaderData() as ICustomerDashboardData | IAirlineDashboardData;
+
+  if (data.type === 'customer') {
+    return (
+      <>
+        <div className='flights'>
+          <div className='flex-row'>
+            <span className='flights-title'>Upcoming Flights</span>
+            <button type='submit' className='view-more'>View more</button>
+          </div>
+          <div className='flight-list'>
+            {data.upcomingFlights.length > 0
+              ? data.upcomingFlights.map((flight) => {
+                  return <FlightCard key={flight.id} flight={flight}></FlightCard>
+                })
+              : <div>No Upcoming Flights</div>}
+          </div>
+        </div>
+  
+        <div className='flights'>
+          <div className='flex-row'>
+            <span className='flights-title'>Flights History</span>
+            <button type='submit' className='view-more'>View more</button>
+          </div>
+          <div className='flight-list'>
+            {data.upcomingFlights.length > 0
+              ? data.flightsHistory.map((flight) => {
+                  return <FlightCard key={flight.id} flight={flight}></FlightCard>
+                })
+              : <div>No Flights History</div>}
+          </div>
+        </div>
+      </>
+    );
+  } else {
+    return (
+      <>
+        <div>
+          todo airline dashboard
+        </div>
+      </>
+    );
+  }
+
+}
+
+export default Flights;
diff --git a/client/src/components/Dashboard/Profile/Profile.scss b/client/src/components/Dashboard/Profile/Profile.scss
new file mode 100644
index 0000000..6db01b1
--- /dev/null
+++ b/client/src/components/Dashboard/Profile/Profile.scss
@@ -0,0 +1,13 @@
+.profile {
+  display: flex;
+  flex-direction: row;
+  gap: 1.5rem;
+}
+
+.bio-card {
+  padding: 1.5rem 5rem !important; // Sorry
+}
+
+.avatar {
+  width: 150px;
+}
diff --git a/client/src/components/Dashboard/Profile/Profile.tsx b/client/src/components/Dashboard/Profile/Profile.tsx
new file mode 100644
index 0000000..f289594
--- /dev/null
+++ b/client/src/components/Dashboard/Profile/Profile.tsx
@@ -0,0 +1,114 @@
+import { useState } from 'react';
+import { useForm } from 'react-hook-form';
+import { useAuth } from '../../../hooks/useAuth';
+import avatar from './avatar.jpg';
+import plane from './airplane.jpg';
+import './Profile.scss';
+
+interface IProfileForm {
+  name: string;
+  email: string;
+  password: string;
+  confirmPassword: string;
+}
+
+function Profile() {
+  const { user } = useAuth();
+  const [disabled, setDisabled] = useState(true);
+  const [error, setError] = useState('');
+  const isAirline = user?.type === 1;
+  const defaultValues: IProfileForm = {
+    email: user?.email ?? '',
+    name: user?.username ?? '',
+    password: '',
+    confirmPassword: ''
+  };
+  const { register, handleSubmit, getValues, setValue } = useForm<IProfileForm>({ mode: 'onChange', defaultValues });
+
+  const resetFormValues = () => {
+    if (!getValues().name)
+      setValue('name', user?.username ?? '');
+  
+    if (!getValues().email)
+      setValue('email', user?.email ?? '');
+  
+    if (!getValues().password)
+      setValue('password', '');
+  
+    if (!getValues().confirmPassword)
+      setValue('confirmPassword', '');
+  };
+
+  resetFormValues();
+
+  const toggleEdit = () => {
+    setDisabled(!disabled);
+    resetFormValues();
+  };
+
+  const onSubmit = (formValue: IProfileForm) => {
+    if (formValue.password.length < 7) {
+      setError('password length must be greater than 7 characters');
+      return;
+    }
+
+    if (formValue.password !== formValue.confirmPassword) {
+      setError('password and confirm password must match');
+      return;
+    }
+
+    setError('');
+    console.log('ready to make update details api call');
+  };
+
+  return (
+    <>
+      <div className='profile'>
+        <div className='card bio-card'>
+          <div className='flex'>
+            <img src={isAirline ? plane : avatar} alt='avatar' className='avatar'></img>
+            <span>{user?.username ?? ''}</span>
+            <span>Loyal {isAirline ? 'Airline' : 'Customer'}</span>
+          </div>
+        </div>
+
+        <div className='card'>
+          <form onSubmit={handleSubmit(onSubmit)}>
+            <div className='form-h'>
+              <div className='form-group-h'>
+                <label>Full Name</label>
+                <input type='text' {...register('name', { required: true, disabled })} />
+              </div>
+
+              <div className='form-group-h'>
+                <label>Email</label>
+                <input type='email' {...register('email', { required: true, disabled })} />
+              </div>
+
+              <div className='form-group-h'>
+                <label>Password</label>
+                <input type='password' placeholder='Enter new password' {...register('password', { required: true, disabled })} />
+              </div>
+
+              <div className='form-group-h'>
+                <label>Confirm Password</label>
+                <input type='password' placeholder='Confirm new password' {...register('confirmPassword', { required: true, disabled })} />
+              </div>
+
+              <div className='form-group-h'>
+                <button type='button' onClick={toggleEdit}>Toggle Edit</button>
+                <button type='submit' disabled={disabled}>Submit</button>
+              </div>
+
+              <div className='form-group-h'>
+                {error && <span>{error}</span>}
+              </div>
+            </div>
+          </form>
+        </div>
+      </div>
+    </>
+  );
+}
+
+export default Profile;
diff --git a/client/src/components/Dashboard/Profile/airplane.jpg b/client/src/components/Dashboard/Profile/airplane.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..20b46345cfaf2caf79d4999c0d0641f9a40053df
GIT binary patch
literal 10836
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

literal 0
HcmV?d00001

diff --git a/client/src/components/CustomerDashboard/avatar.jpg b/client/src/components/Dashboard/Profile/avatar.jpg
similarity index 100%
rename from client/src/components/CustomerDashboard/avatar.jpg
rename to client/src/components/Dashboard/Profile/avatar.jpg
diff --git a/client/src/components/Header/Header.tsx b/client/src/components/Header/Header.tsx
index cd7ac92..4128437 100644
--- a/client/src/components/Header/Header.tsx
+++ b/client/src/components/Header/Header.tsx
@@ -1,10 +1,11 @@
 import { Link } from 'react-router-dom';
 import { useAuth } from '../../hooks/useAuth';
 import './Header.scss';
+import { userToDashboard } from '../../helpers/UserType';
 
 function Header() {
-  const { isAuth } = useAuth();
-
+  const { isAuth, user } = useAuth();
+  
   return (
     <>
       <div className='header'>
@@ -16,6 +17,7 @@ function Header() {
 
             {isAuth ?
             <div>
+              <Link to={userToDashboard(user)} className='nav-item'>Dashboard</Link>
               <Link to={'booking/query'} className='nav-item'>Book a Flight</Link>
               <Link to={'logout'} className='nav-item'>Logout</Link>
             </div> :
@@ -30,4 +32,4 @@ function Header() {
   );
 }
 
-export default Header;
\ No newline at end of file
+export default Header;
diff --git a/client/src/components/Login/Login.tsx b/client/src/components/Login/Login.tsx
index 271ba52..0eeeacb 100644
--- a/client/src/components/Login/Login.tsx
+++ b/client/src/components/Login/Login.tsx
@@ -4,6 +4,7 @@ import { useForm } from 'react-hook-form';
 import { AxiosError } from 'axios';
 import { useAuth } from '../../hooks/useAuth';
 import { loginUser } from '../../services/Login/Login';
+import { userToDashboard } from '../../helpers/UserType';
 import './Login.scss';
 
 export interface ILoginForm {
@@ -12,7 +13,7 @@ export interface ILoginForm {
 }
 
 export function Login() {
-  const { giveAuth, updateUser } = useAuth();
+  const { giveAuth, updateUser, user } = useAuth();
   const navigate = useNavigate();
   const [error, setError] = useState('');
   const { register, handleSubmit } = useForm<ILoginForm>({mode: 'onChange'});
@@ -24,7 +25,7 @@ export function Login() {
       const result = await loginUser(formValue);
       giveAuth();
       updateUser(result.data);
-      navigate('/customer-dashboard');
+      navigate(`/${userToDashboard(user)}`);
     } catch (error) {
       const errorMessage = (error as AxiosError).response?.data;
 
diff --git a/client/src/components/Register/Register.tsx b/client/src/components/Register/Register.tsx
index 7a431c6..ea69c77 100644
--- a/client/src/components/Register/Register.tsx
+++ b/client/src/components/Register/Register.tsx
@@ -5,6 +5,7 @@ import { AxiosError } from 'axios';
 import { registerUser } from '../../services/Register/Register';
 import { useAuth } from '../../hooks/useAuth';
 import './Register.scss';
+import { userToDashboard } from '../../helpers/UserType';
 
 export interface IRegisterForm {
   name: string;
@@ -15,7 +16,7 @@ export interface IRegisterForm {
 }
 
 export function Register() {
-  const { giveAuth, updateUser } = useAuth();
+  const { giveAuth, updateUser, user } = useAuth();
   const navigate = useNavigate();
   const [error, setError] = useState('');
   const { register, handleSubmit } = useForm<IRegisterForm>({mode: 'onChange'});
@@ -37,7 +38,7 @@ export function Register() {
       const result = await registerUser(formValue);
       giveAuth();
       updateUser(result.data);
-      navigate('/customer-dashboard');
+      navigate(`/${userToDashboard(user)}`);
     } catch (error) {
       const errorMessage = (error as AxiosError).response?.data;
 
@@ -96,4 +97,4 @@ export function Register() {
   );  
 }
 
-export default Register;
\ No newline at end of file
+export default Register;
diff --git a/client/src/helpers/UserType.ts b/client/src/helpers/UserType.ts
index 46ca75a..463e644 100644
--- a/client/src/helpers/UserType.ts
+++ b/client/src/helpers/UserType.ts
@@ -1,3 +1,10 @@
+import { IUser } from '../providers/AuthProvider';
+
 export function userStringToType(user: string) {
   return user.toLowerCase() === 'customer' ? 0 : 1;
 }
+
+export function userToDashboard(user?: IUser) {
+  const isAirline = user?.type === 1;
+  return isAirline ? 'airline-dashboard' : 'customer-dashboard';
+}
diff --git a/client/src/index.scss b/client/src/index.scss
index 0f7974e..9579f87 100644
--- a/client/src/index.scss
+++ b/client/src/index.scss
@@ -76,6 +76,59 @@ body {
   }
 }
 
+.form-h {
+  display: flex;
+  flex-direction: column;
+  gap: 1rem;
+
+  .form-group-h {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    gap: 1rem;
+
+    label {
+      font-weight: 700;
+      width: 180px;
+    }
+
+    input {
+      font-size: 1rem;
+      padding: 6px 12px;
+      border: 1px solid gray;
+      border-radius: 5px;
+      width: 300px;
+    }
+
+    button {
+      font-size: 1rem;
+      padding: 6px 12px;
+      border: 1px solid gray;
+      border-radius: 5px;
+      background-color: var(--main);
+      color: white;
+    }
+
+    button:hover {
+      filter: brightness(50%);
+      cursor: pointer;
+    }
+
+    button:disabled {
+      filter: brightness(40%);
+    }
+
+    button:disabled:hover {
+      cursor: auto;
+    }
+
+    span {
+      overflow: hidden;
+      color: red;
+    }
+  }
+}
+
 .flex {
   display: flex;
   flex-direction: column;
diff --git a/client/src/main.tsx b/client/src/main.tsx
index 54cf148..6e9c4d9 100644
--- a/client/src/main.tsx
+++ b/client/src/main.tsx
@@ -6,12 +6,13 @@ import Login from './components/Login/Login.tsx';
 import Register from './components/Register/Register.tsx';
 import Logout from './components/Logout/Logout.tsx';
 import ProtectedRoute from './components/ProtectedRoute/ProtectedRoute.tsx';
-import CustomerDashboard from './components/CustomerDashboard/CustomerDashboard.tsx';
+import Dashboard from './components/Dashboard/Dashboard.tsx';
 import BookingQuery from './components/BookingQuery/BookingQuery.tsx';
 import BookingList from './components/BookingList/BookingList.tsx';
 import { AuthoriseUser } from './services/Authorise/Authorise.ts';
 import { LogoutUser } from './services/Logout/Logout.ts';
-import { GetCustomerDashboardData } from './services/CustomerDashboard/CustomerDashboard.ts';
+import { GetCustomerDashboardData } from './services/Dashboard/CustomerDashboard.ts';
+import { GetAirlineDashboardData } from './services/Dashboard/AirlineDashboard.ts';
 import { GetBookingList } from './services/BookingList/BookingList.ts';
 import './index.scss';
 
@@ -40,7 +41,12 @@ const router = createBrowserRouter([
           {
             path: 'customer-dashboard',
             loader: GetCustomerDashboardData,
-            element: <CustomerDashboard></CustomerDashboard>
+            element: <Dashboard></Dashboard>
+          },
+          {
+            path: 'airline-dashboard',
+            loader: GetAirlineDashboardData,
+            element: <Dashboard></Dashboard>
           },
           {
             path: 'booking/query',
diff --git a/client/src/services/BookingList/BookingList.ts b/client/src/services/BookingList/BookingList.ts
index 985a359..84487d8 100644
--- a/client/src/services/BookingList/BookingList.ts
+++ b/client/src/services/BookingList/BookingList.ts
@@ -1,5 +1,5 @@
 import { getSearchParam } from '../../helpers/SearchParams';
-import { IFlight } from '../CustomerDashboard/CustomerDashboard';
+import { IFlight } from '../Dashboard/CustomerDashboard';
 
 
 export interface IBookingList {
diff --git a/client/src/services/Dashboard/AirlineDashboard.ts b/client/src/services/Dashboard/AirlineDashboard.ts
new file mode 100644
index 0000000..3600759
--- /dev/null
+++ b/client/src/services/Dashboard/AirlineDashboard.ts
@@ -0,0 +1,9 @@
+export interface IAirlineDashboardData {
+  type: 'airline'
+}
+
+export async function GetAirlineDashboardData(): Promise<IAirlineDashboardData> {
+  return {
+    type: 'airline'
+  };
+}
diff --git a/client/src/services/CustomerDashboard/CustomerDashboard.ts b/client/src/services/Dashboard/CustomerDashboard.ts
similarity index 98%
rename from client/src/services/CustomerDashboard/CustomerDashboard.ts
rename to client/src/services/Dashboard/CustomerDashboard.ts
index e8c7984..a9338d5 100644
--- a/client/src/services/CustomerDashboard/CustomerDashboard.ts
+++ b/client/src/services/Dashboard/CustomerDashboard.ts
@@ -1,4 +1,3 @@
-
 export interface IFlight {
   id: number;
   flightNumber: string;
@@ -11,12 +10,15 @@ export interface IFlight {
 }
 
 export interface ICustomerDashboardData {
+  type: 'customer'
   upcomingFlights: IFlight[];
   flightsHistory: IFlight[];
 }
 
 export async function GetCustomerDashboardData(): Promise<ICustomerDashboardData> {
+
   return {
+    type: 'customer',
     upcomingFlights: [
       {
         id: 4,
@@ -82,4 +84,4 @@ export async function GetCustomerDashboardData(): Promise<ICustomerDashboardData
       }
     ]
   }
-}
\ No newline at end of file
+}
-- 
GitLab