- Add dedicated /amber-callback route so Amber always has a stable return URL - Handles get_public_key (login), sign_event, nip44/nip04 encrypt/decrypt - Shows animated processing screen while completing, then redirects back - Add subscribeToAmberReturn() helper in amber.ts using visibilitychange - Auto-detects when user returns to the tab after cancelling in Amber - Resets login UI to initial state gracefully - Update buildCallbackUrl() to use /amber-callback instead of current page URL - Rewrite Amber tab in LoginDialog: - Remove 2-step clipboard paste flow entirely - Single tap opens Amber, login completes automatically on return - Waiting state shows animated dots + cancel button - No manual pubkey entry needed - Save return path in sessionStorage so AmberCallbackPage redirects user back Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
107 lines
5.6 KiB
TypeScript
107 lines
5.6 KiB
TypeScript
import { BrowserRouter, Route, Routes } from "react-router-dom";
|
|
import { ScrollToTop } from "./components/ScrollToTop";
|
|
|
|
import Index from "./pages/Index";
|
|
import MapPage from "./pages/MapPage";
|
|
import EventsPage from "./pages/EventsPage";
|
|
import FoodPage from "./pages/FoodPage";
|
|
import WalletPage from "./pages/WalletPage";
|
|
import SettingsPage from "./pages/SettingsPage";
|
|
import CreateSpotPage from "./pages/CreateSpotPage";
|
|
import CreateShopPage from "./pages/CreateShopPage";
|
|
import CreateEventPage from "./pages/CreateEventPage";
|
|
import CreateListingPage from "./pages/CreateListingPage";
|
|
import CreateTourPage from "./pages/CreateTourPage";
|
|
import EditSpotPage from "./pages/EditSpotPage";
|
|
import EditShopPage from "./pages/EditShopPage";
|
|
import EditEventPage from "./pages/EditEventPage";
|
|
import GearSwapPage from "./pages/GearSwapPage";
|
|
import SpotDetailPage from "./pages/SpotDetailPage";
|
|
import ShopDetailPage from "./pages/ShopDetailPage";
|
|
import EventDetailPage from "./pages/EventDetailPage";
|
|
import OnboardingPage from "./pages/OnboardingPage";
|
|
import PyramidPage from "./pages/PyramidPage";
|
|
import LabPage from "./pages/LabPage";
|
|
import BecomeCoachPage from "./pages/BecomeCoachPage";
|
|
import BecomeFilmerPage from "./pages/BecomeFilmerPage";
|
|
import BecomeEditorPage from "./pages/BecomeEditorPage";
|
|
import CoachDetailPage from "./pages/CoachDetailPage";
|
|
import TourDetailPage from "./pages/TourDetailPage";
|
|
import AboutPage from "./pages/AboutPage";
|
|
import FAQPage from "./pages/FAQPage";
|
|
import CommunityStatsPage from "./pages/CommunityStatsPage";
|
|
import SpotCollectionsPage from "./pages/SpotCollectionsPage";
|
|
import CollectionDetailPage from "./pages/CollectionDetailPage";
|
|
import DirectMessagesPage from "./pages/DirectMessagesPage";
|
|
import ConversationPage from "./pages/ConversationPage";
|
|
import BountyLeaderboardPage from "./pages/BountyLeaderboardPage";
|
|
import SignersPage from "./pages/SignersPage";
|
|
import StashPage from "./pages/StashPage";
|
|
import { NIP19Page } from "./pages/NIP19Page";
|
|
import LicensePage from "./pages/LicensePage";
|
|
import SupportersPage from "./pages/SupportersPage";
|
|
import RiderCardPage from "./pages/RiderCardPage";
|
|
import AmberCallbackPage from "./pages/AmberCallbackPage";
|
|
import NotFound from "./pages/NotFound";
|
|
|
|
export function AppRouter() {
|
|
return (
|
|
<BrowserRouter>
|
|
<ScrollToTop />
|
|
<Routes>
|
|
<Route path="/" element={<Index />} />
|
|
<Route path="/map" element={<MapPage />} />
|
|
<Route path="/events" element={<EventsPage />} />
|
|
<Route path="/lab" element={<LabPage />} />
|
|
{/* Legacy route redirect */}
|
|
<Route path="/coaches" element={<LabPage />} />
|
|
<Route path="/become-coach" element={<BecomeCoachPage />} />
|
|
<Route path="/become-filmer" element={<BecomeFilmerPage />} />
|
|
<Route path="/become-editor" element={<BecomeEditorPage />} />
|
|
<Route path="/coach/:pubkey/:identifier" element={<CoachDetailPage />} />
|
|
<Route path="/onboarding" element={<OnboardingPage />} />
|
|
<Route path="/pyramid" element={<PyramidPage />} />
|
|
<Route path="/marketplace" element={<GearSwapPage />} />
|
|
<Route path="/stats" element={<CommunityStatsPage />} />
|
|
<Route path="/about" element={<AboutPage />} />
|
|
<Route path="/faq" element={<FAQPage />} />
|
|
<Route path="/food" element={<FoodPage />} />
|
|
<Route path="/wallet" element={<WalletPage />} />
|
|
<Route path="/settings" element={<SettingsPage />} />
|
|
<Route path="/create-spot" element={<CreateSpotPage />} />
|
|
<Route path="/create-shop" element={<CreateShopPage />} />
|
|
<Route path="/create-event" element={<CreateEventPage />} />
|
|
<Route path="/create-listing" element={<CreateListingPage />} />
|
|
<Route path="/create-tour" element={<CreateTourPage />} />
|
|
<Route path="/edit-spot/:pubkey/:identifier" element={<EditSpotPage />} />
|
|
<Route path="/edit-shop/:pubkey/:identifier" element={<EditShopPage />} />
|
|
<Route path="/edit-event/:pubkey/:identifier" element={<EditEventPage />} />
|
|
<Route path="/spot/:pubkey/:identifier" element={<SpotDetailPage />} />
|
|
<Route path="/shop/:pubkey/:identifier" element={<ShopDetailPage />} />
|
|
<Route path="/event/:pubkey/:identifier" element={<EventDetailPage />} />
|
|
<Route path="/tour/:pubkey/:identifier" element={<TourDetailPage />} />
|
|
<Route path="/collections" element={<SpotCollectionsPage />} />
|
|
<Route path="/collections/:pubkey/:identifier" element={<CollectionDetailPage />} />
|
|
<Route path="/messages" element={<DirectMessagesPage />} />
|
|
<Route path="/messages/:npub" element={<ConversationPage />} />
|
|
{/* Bounty System */}
|
|
<Route path="/bounties" element={<BountyLeaderboardPage />} />
|
|
{/* Security & Signers */}
|
|
<Route path="/signers" element={<SignersPage />} />
|
|
{/* Stash - Private Inventory */}
|
|
<Route path="/stash" element={<StashPage />} />
|
|
{/* Info pages */}
|
|
<Route path="/card" element={<RiderCardPage />} />
|
|
<Route path="/license" element={<LicensePage />} />
|
|
<Route path="/supporters" element={<SupportersPage />} />
|
|
{/* Amber NIP-55 callback — Amber redirects here after signing/login */}
|
|
<Route path="/amber-callback" element={<AmberCallbackPage />} />
|
|
{/* NIP-19 route for npub1, note1, naddr1, nevent1, nprofile1 */}
|
|
<Route path="/:nip19" element={<NIP19Page />} />
|
|
{/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL "*" ROUTE */}
|
|
<Route path="*" element={<NotFound />} />
|
|
</Routes>
|
|
</BrowserRouter>
|
|
);
|
|
}
|
|
export default AppRouter;
|