Skip to content

Commit

Permalink
Merge pull request #49 from DFanso/api-connections
Browse files Browse the repository at this point in the history
admin movie fetch and auth-done
  • Loading branch information
VidwaDeSeram authored Jan 4, 2024
2 parents 8ec6265 + ebfbecd commit 1a7e7b9
Show file tree
Hide file tree
Showing 7 changed files with 361 additions and 158 deletions.
39 changes: 39 additions & 0 deletions admin/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions admin/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"axios": "^1.6.4",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.21.1",
"react-scripts": "5.0.1",
"sweetalert2": "^11.10.2",
"web-vitals": "^2.1.4"
},
"scripts": {
Expand Down
176 changes: 124 additions & 52 deletions admin/src/App.js
Original file line number Diff line number Diff line change
@@ -1,66 +1,138 @@
import React, { useState } from 'react';
import { BrowserRouter as Router, Route, Routes, Navigate } from 'react-router-dom';
import Header from './components/Header';
import Sidebar from './components/Sidebar';
import Login from './pages/Login';
import Movies from './pages/Movie';
import MovieUpdate from './pages/MovieUpdate';
import AddShowtime from './pages/AddShowtime';
import UpdateShowtime from './pages/UpdateShowtime';
import DeleteMovieForm from './pages/DeleteMovie';
import DeleteShowtime from './pages/DeleteShowtime';
import AddBooking from './pages/AddBooking';
import UpdateBooking from './pages/UpdateBooking';
import DeleteBooking from './pages/DeleteBooking';
import Chat from './pages/Chat';
import MovieGrid from './pages/AllMovies';
import ShowtimeGrid from './pages/AllShowtimes';
import BookingGrid from './pages/AllBookings';
import RegisterPage from './pages/Signup';
import React, { useState, useEffect, useContext } from "react";
import {
BrowserRouter as Router,
Route,
Routes,
Navigate,
} from "react-router-dom";

import axios from "axios";
import Swal from "sweetalert2";

import Header from "./components/Header";
import Sidebar from "./components/Sidebar";
import Login from "./pages/Login";
import Movies from "./pages/Movie";
import MovieUpdate from "./pages/MovieUpdate";
import AddShowtime from "./pages/AddShowtime";
import UpdateShowtime from "./pages/UpdateShowtime";
import DeleteMovieForm from "./pages/DeleteMovie";
import DeleteShowtime from "./pages/DeleteShowtime";
import AddBooking from "./pages/AddBooking";
import UpdateBooking from "./pages/UpdateBooking";
import DeleteBooking from "./pages/DeleteBooking";
import Chat from "./pages/Chat";
import MovieGrid from "./pages/AllMovies";
import ShowtimeGrid from "./pages/AllShowtimes";
import BookingGrid from "./pages/AllBookings";
import RegisterPage from "./pages/Signup";

import { UserContext } from "./pages/auth/UserContext"; // Import UserContext
import { UserProvider } from "./pages/auth/UserContext";

const App = () => {
const { updateUserData } = useContext(UserContext); // Use updateUserData from UserContext
const [isLoggedIn, setIsLoggedIn] = useState(false);

const checkUserLoggedIn = async () => {
const token = localStorage.getItem("admin-token"); // Use a different token key for admin
if (token) {
try {
const profileResponse = await axios.get(
`${process.env.REACT_APP_API_PATH}/users/profile`, // API endpoint for admin profile
{
headers: {
Authorization: `Bearer ${token}`, // Use the token from localStorage
},
}
);

if (profileResponse.data && profileResponse.data.type === "ADMIN") {
updateUserData(profileResponse.data);
setIsLoggedIn(true);
} else {
// Handle non-admin user
Swal.fire({
title: "Access Denied",
text: "You are not authorized to access the admin panel.",
icon: "error",
confirmButtonText: "OK",
});
localStorage.removeItem("admin-token"); // Optionally remove the token
setIsLoggedIn(false);
}
} catch (error) {
console.error("Error fetching admin data:", error);
Swal.fire({
title: "Error",
text: "An error occurred while fetching user data.",
icon: "error",
confirmButtonText: "OK",
});
}
}
};
useEffect(() => {
checkUserLoggedIn();
}, []);

const handleLogin = () => {
setIsLoggedIn(true);
};

function ProtectedRoute({ children }) {
if (!isLoggedIn) {
console.log(isLoggedIn);
return <Navigate to="/login" />;
}
return children;
}
return (
<Router>
{isLoggedIn ? (
<div className="app-container">
<Header />
<div style={{ display: 'flex', height: 'calc(100vh - [header-height])' }}>
<Sidebar />
<div style={{ flex: 1, padding: '20px' }}>
<Routes>
<Route path="/movies-view" element={<MovieGrid />} />
<Route path="/movies" element={<Movies />} />
<Route path="/UpdateMovie" element={<MovieUpdate />} />
<Route path="/DeleteMovie" element={<DeleteMovieForm />} />
<Route path="/add-showtime" element={<AddShowtime />} />
<Route path="/update-showtime" element={<UpdateShowtime />} />
<Route path="/delete-showtime" element={<DeleteShowtime />} />
<Route path="/add-booking" element={<AddBooking />} />
<Route path="/update-booking" element={<UpdateBooking />} />
<Route path="/delete-booking" element={<DeleteBooking />} />
<Route path="/chat" element={<Chat />} />
<Route path="/showtime-view" element={<ShowtimeGrid />} />
<Route path="/Booking-view" element={<BookingGrid />} />
<Route path="/register-page" element={<RegisterPage />} />
<Route path="/" element={<Navigate replace to="/movies-view" />} />
</Routes>
<UserProvider>
<Router>
{isLoggedIn ? (
<div className="app-container">
<Header />
<div
style={{
display: "flex",
height: "calc(100vh - [header-height])",
}}
>
<Sidebar />
<div style={{ flex: 1, padding: "20px" }}>
<Routes>
<Route path="/movies-view" element={<MovieGrid />} />
<Route path="/movies" element={<Movies />} />
<Route path="/UpdateMovie" element={<MovieUpdate />} />
<Route path="/DeleteMovie" element={<DeleteMovieForm />} />
<Route path="/add-showtime" element={<AddShowtime />} />
<Route path="/update-showtime" element={<UpdateShowtime />} />
<Route path="/delete-showtime" element={<DeleteShowtime />} />
<Route path="/add-booking" element={<AddBooking />} />
<Route path="/update-booking" element={<UpdateBooking />} />
<Route path="/delete-booking" element={<DeleteBooking />} />
<Route path="/chat" element={<Chat />} />
<Route path="/showtime-view" element={<ShowtimeGrid />} />
<Route path="/Booking-view" element={<BookingGrid />} />
<Route path="/register-page" element={<RegisterPage />} />
<Route
path="/"
element={<Navigate replace to="/movies-view" />}
/>
</Routes>
</div>
</div>
</div>
</div>
) : (
<Routes>
<Route path="/login" element={<Login onLogin={handleLogin} />} />
<Route path="/register-page" element={<RegisterPage />} />
<Route path="*" element={<Navigate replace to="/login" />} />
</Routes>
)}
</Router>
) : (
<Routes>
<Route path="/login" element={<Login onLogin={handleLogin} />} />
<Route path="/register-page" element={<RegisterPage />} />
<Route path="*" element={<Navigate replace to="/login" />} />
</Routes>
)}
</Router>
</UserProvider>
);
};

Expand Down
18 changes: 10 additions & 8 deletions admin/src/index.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import App from "./App";
import reportWebVitals from "./reportWebVitals";

const root = ReactDOM.createRoot(document.getElementById('root'));
import { UserProvider } from "./pages/auth/UserContext";

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
<React.StrictMode>
<UserProvider>
<App />
</React.StrictMode>
</UserProvider>
);

// If you want to start measuring performance in your app, pass a function
Expand Down
Loading

0 comments on commit 1a7e7b9

Please sign in to comment.