sitcod3 commited on
Commit
8314dad
·
verified ·
1 Parent(s): e25f115

Upload src/App.tsx with huggingface_hub

Browse files
Files changed (1) hide show
  1. src/App.tsx +82 -0
src/App.tsx ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { BrowserRouter, Routes, Route, Navigate } from "react-router-dom";
2
+ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
3
+ import { Toaster } from "react-hot-toast";
4
+ import { ReactNode } from "react";
5
+ import { ApiKeyProvider, useApiKey } from "./context/ApiKeyContext";
6
+ import AppLayout from "./layouts/AppLayout";
7
+ import Gate from "./pages/Gate";
8
+
9
+ // All Real Pages
10
+ import Dashboard from "./pages/Dashboard";
11
+ import Campaigns from "./pages/Campaigns";
12
+ import CampaignDetail from "./pages/CampaignDetail";
13
+ import Leads from "./pages/Leads";
14
+ import EmailAccounts from "./pages/EmailAccounts";
15
+ import Warmup from "./pages/Warmup";
16
+ import Inbox from "./pages/Inbox";
17
+ import Webhooks from "./pages/Webhooks";
18
+ import Analytics from "./pages/Analytics";
19
+ import Clients from "./pages/Clients";
20
+ import Settings from "./pages/Settings";
21
+
22
+ const queryClient = new QueryClient({
23
+ defaultOptions: {
24
+ queries: {
25
+ staleTime: 30_000,
26
+ retry: 2,
27
+ refetchOnWindowFocus: true,
28
+ },
29
+ },
30
+ });
31
+
32
+ function RequireKey({ children }: { children: ReactNode }) {
33
+ const { activeKey } = useApiKey();
34
+ if (!activeKey) {
35
+ return <Navigate to="/connect" replace />;
36
+ }
37
+ return <>{children}</>;
38
+ }
39
+
40
+ export default function App() {
41
+ return (
42
+ <QueryClientProvider client={queryClient}>
43
+ <ApiKeyProvider>
44
+ <BrowserRouter>
45
+ <Routes>
46
+ <Route path="/connect" element={<Gate />} />
47
+ <Route
48
+ path="/"
49
+ element={
50
+ <RequireKey>
51
+ <AppLayout />
52
+ </RequireKey>
53
+ }
54
+ >
55
+ <Route index element={<Dashboard />} />
56
+ <Route path="campaigns" element={<Campaigns />} />
57
+ <Route path="campaigns/:id" element={<CampaignDetail />} />
58
+ <Route path="leads" element={<Leads />} />
59
+ <Route path="email-accounts" element={<EmailAccounts />} />
60
+ <Route path="warmup" element={<Warmup />} />
61
+ <Route path="inbox" element={<Inbox />} />
62
+ <Route path="webhooks" element={<Webhooks />} />
63
+ <Route path="analytics" element={<Analytics />} />
64
+ <Route path="clients" element={<Clients />} />
65
+ <Route path="settings" element={<Settings />} />
66
+ </Route>
67
+ </Routes>
68
+ </BrowserRouter>
69
+ <Toaster
70
+ position="bottom-right"
71
+ toastOptions={{
72
+ style: {
73
+ background: 'var(--nt-bg-surface-raised)',
74
+ color: 'var(--nt-text-primary)',
75
+ border: '1px solid var(--nt-border-accent)'
76
+ }
77
+ }}
78
+ />
79
+ </ApiKeyProvider>
80
+ </QueryClientProvider>
81
+ );
82
+ }