mirror of
https://github.com/hubHarmony/servii-frontend.git
synced 2024-11-17 21:40:30 +00:00
protected roads
This commit is contained in:
parent
0e85a6acf3
commit
8e5ffcd6e4
40
src/App.jsx
40
src/App.jsx
@ -2,7 +2,7 @@ import { useEffect, useState, Suspense, lazy } from 'react';
|
|||||||
import { BrowserRouter as Router, Route, Routes, Navigate } from 'react-router-dom';
|
import { BrowserRouter as Router, Route, Routes, Navigate } from 'react-router-dom';
|
||||||
import { ToastContainer } from 'react-toastify';
|
import { ToastContainer } from 'react-toastify';
|
||||||
import 'react-toastify/dist/ReactToastify.css';
|
import 'react-toastify/dist/ReactToastify.css';
|
||||||
import { auth } from './service/firebase';
|
import { auth , getUserSubscription } from './service/firebase';
|
||||||
import styles from './App.module.scss';
|
import styles from './App.module.scss';
|
||||||
import Loading from './pages/Loading/loading';
|
import Loading from './pages/Loading/loading';
|
||||||
import Pricing from './pages/Payement/Pricing/Pricing';
|
import Pricing from './pages/Payement/Pricing/Pricing';
|
||||||
@ -21,6 +21,7 @@ const App = () => {
|
|||||||
const [user, setUser] = useState(() => JSON.parse(localStorage.getItem('user')) || null);
|
const [user, setUser] = useState(() => JSON.parse(localStorage.getItem('user')) || null);
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const [showLoading, setShowLoading] = useState(false);
|
const [showLoading, setShowLoading] = useState(false);
|
||||||
|
const [subscription, setSubscription] = useState(0);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const timeoutId = setTimeout(() => setShowLoading(true), 6000);
|
const timeoutId = setTimeout(() => setShowLoading(true), 6000);
|
||||||
@ -28,10 +29,11 @@ const App = () => {
|
|||||||
const unsubscribe = auth.onAuthStateChanged((user) => {
|
const unsubscribe = auth.onAuthStateChanged((user) => {
|
||||||
if (user) {
|
if (user) {
|
||||||
localStorage.setItem('user', JSON.stringify(user));
|
localStorage.setItem('user', JSON.stringify(user));
|
||||||
|
setUser(user);
|
||||||
} else {
|
} else {
|
||||||
localStorage.removeItem('user');
|
localStorage.removeItem('user');
|
||||||
|
setUser(null);
|
||||||
}
|
}
|
||||||
setUser(user);
|
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
clearTimeout(timeoutId);
|
clearTimeout(timeoutId);
|
||||||
});
|
});
|
||||||
@ -42,6 +44,20 @@ const App = () => {
|
|||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (user) {
|
||||||
|
const fetchSubscription = async () => {
|
||||||
|
try {
|
||||||
|
const userSubscription = await getUserSubscription(user.uid);
|
||||||
|
setSubscription(userSubscription || 0);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error fetching subscription:', error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
fetchSubscription();
|
||||||
|
}
|
||||||
|
}, [user]);
|
||||||
|
|
||||||
if (loading && showLoading) {
|
if (loading && showLoading) {
|
||||||
return <Loading />;
|
return <Loading />;
|
||||||
}
|
}
|
||||||
@ -51,20 +67,34 @@ const App = () => {
|
|||||||
<div className={styles.container}>
|
<div className={styles.container}>
|
||||||
<Suspense fallback={<Loading />}>
|
<Suspense fallback={<Loading />}>
|
||||||
<Routes>
|
<Routes>
|
||||||
|
{/* Public Route */}
|
||||||
<Route path="/login" element={user ? <Navigate to="/dashboard" /> : <LoginPage />} />
|
<Route path="/login" element={user ? <Navigate to="/dashboard" /> : <LoginPage />} />
|
||||||
|
|
||||||
|
{/* Protected Routes (Requires Authentication) */}
|
||||||
<Route path="/dashboard" element={user ? <DashboardPage user={user} /> : <Navigate to="/login" />} />
|
<Route path="/dashboard" element={user ? <DashboardPage user={user} /> : <Navigate to="/login" />} />
|
||||||
<Route path="/createServer" element={user ? <CreatePage user={user} /> : <Navigate to="/login" />} />
|
<Route path="/createServer" element={user ? <CreatePage user={user} /> : <Navigate to="/login" />} />
|
||||||
<Route path="/createServer/java" element={user ? <Javapick user={user} /> : <Navigate to="/login" />} />
|
|
||||||
<Route path="/createServer/bedrock" element={user ? <Bedrock user={user} /> : <Navigate to="/login" />} />
|
{/* Routes with Subscription Levels */}
|
||||||
<Route path="/createServer/modpack" element={user ? <Modpack user={user} /> : <Navigate to="/login" />} />
|
<Route path="/createServer/java" element={user ? (subscription > 0 ? <Javapick user={user} /> : <Navigate to="/payement?package=Gratuit" />) : <Navigate to="/login" />} />
|
||||||
|
<Route path="/createServer/bedrock" element={user ? (subscription > 1 ? <Bedrock user={user} /> : <Navigate to="/payement?package=Standard" />) : <Navigate to="/login" />} />
|
||||||
|
<Route path="/createServer/modpack" element={user ? (subscription > 2 ? <Modpack user={user} /> : <Navigate to="/payement?package=Premium" />) : <Navigate to="/login" />} />
|
||||||
|
|
||||||
|
{/* Server Details Route */}
|
||||||
<Route path="/server/:serverName/*" element={user ? <ServerDetails user={user} /> : <Navigate to="/login" />} />
|
<Route path="/server/:serverName/*" element={user ? <ServerDetails user={user} /> : <Navigate to="/login" />} />
|
||||||
|
|
||||||
|
{/* Pricing and Payment */}
|
||||||
<Route path="/pricing" element={user ? <Pricing user={user} /> : <Navigate to="/login" />} />
|
<Route path="/pricing" element={user ? <Pricing user={user} /> : <Navigate to="/login" />} />
|
||||||
<Route path="/payement/*" element={user ? <PaymentForm user={user} /> : <Navigate to="/login" />} />
|
<Route path="/payement/*" element={user ? <PaymentForm user={user} /> : <Navigate to="/login" />} />
|
||||||
<Route path="/return/*" element={user ? <Checkout user={user} /> : <Navigate to="/login" />} />
|
<Route path="/return/*" element={user ? <Checkout user={user} /> : <Navigate to="/login" />} />
|
||||||
|
|
||||||
|
{/* Default Route */}
|
||||||
<Route path="/" element={<Navigate to={user ? "/dashboard" : "/login"} />} />
|
<Route path="/" element={<Navigate to={user ? "/dashboard" : "/login"} />} />
|
||||||
|
|
||||||
|
{/* Catch-all route */}
|
||||||
<Route path="*" element={user ? <DashboardPage user={user} /> : <Navigate to="/login" />} />
|
<Route path="*" element={user ? <DashboardPage user={user} /> : <Navigate to="/login" />} />
|
||||||
</Routes>
|
</Routes>
|
||||||
</Suspense>
|
</Suspense>
|
||||||
|
|
||||||
<ToastContainer
|
<ToastContainer
|
||||||
position="top-right"
|
position="top-right"
|
||||||
autoClose={3500}
|
autoClose={3500}
|
||||||
|
Loading…
Reference in New Issue
Block a user