178 lines
4.2 KiB
TypeScript
178 lines
4.2 KiB
TypeScript
import {
|
|
createRootRoute,
|
|
createRoute,
|
|
createRouter,
|
|
Outlet,
|
|
redirect,
|
|
} from '@tanstack/react-router'
|
|
import { useSessionStore } from '@/entities/session'
|
|
import { BondPage } from '@/pages/bond'
|
|
import { BrokerAccountOverviewPage } from '@/pages/broker-account'
|
|
import { BrokerAccountsPage } from '@/pages/broker-accounts'
|
|
import { BrokerAnalyticsPage } from '@/pages/broker-analytics'
|
|
import { BrokerEventsPage } from '@/pages/broker-events'
|
|
import { BrokerOperationsPage } from '@/pages/broker-operations'
|
|
import { BrokerPositionsPage } from '@/pages/broker-positions'
|
|
import { HomePage } from '@/pages/home'
|
|
import { LoginPage } from '@/pages/login'
|
|
import { PortfolioDetailPage, PortfoliosListPage } from '@/pages/portfolios'
|
|
import { ProfilePage } from '@/pages/profile'
|
|
import { RegisterPage } from '@/pages/register'
|
|
import { ScreenerPage } from '@/pages/screener'
|
|
import { StockPage } from '@/pages/stock'
|
|
import { BrokerAccountLayout } from '@/widgets/broker-account-layout'
|
|
import { AppLayout } from '../layouts/AppLayout'
|
|
|
|
function requireAuth() {
|
|
if (!useSessionStore.getState().isAuthenticated) {
|
|
throw redirect({ to: '/login' })
|
|
}
|
|
}
|
|
|
|
const rootRoute = createRootRoute({
|
|
component: () => <AppLayout />,
|
|
})
|
|
|
|
const indexRoute = createRoute({
|
|
getParentRoute: () => rootRoute,
|
|
path: '/',
|
|
component: HomePage,
|
|
})
|
|
|
|
const stockRoute = createRoute({
|
|
getParentRoute: () => rootRoute,
|
|
path: '/stocks/$secid',
|
|
component: StockPage,
|
|
})
|
|
|
|
const bondRoute = createRoute({
|
|
getParentRoute: () => rootRoute,
|
|
path: '/bonds/$secid',
|
|
component: BondPage,
|
|
})
|
|
|
|
const screenerRoute = createRoute({
|
|
getParentRoute: () => rootRoute,
|
|
path: '/screener',
|
|
component: ScreenerPage,
|
|
})
|
|
|
|
const loginRoute = createRoute({
|
|
getParentRoute: () => rootRoute,
|
|
path: '/login',
|
|
component: LoginPage,
|
|
})
|
|
|
|
const registerRoute = createRoute({
|
|
getParentRoute: () => rootRoute,
|
|
path: '/register',
|
|
component: RegisterPage,
|
|
})
|
|
|
|
const profileRoute = createRoute({
|
|
getParentRoute: () => rootRoute,
|
|
path: '/profile',
|
|
beforeLoad: requireAuth,
|
|
component: ProfilePage,
|
|
})
|
|
|
|
const portfoliosRoute = createRoute({
|
|
getParentRoute: () => rootRoute,
|
|
path: '/portfolios',
|
|
beforeLoad: requireAuth,
|
|
component: PortfoliosListPage,
|
|
})
|
|
|
|
const portfolioDetailRoute = createRoute({
|
|
getParentRoute: () => rootRoute,
|
|
path: '/portfolios/$id',
|
|
beforeLoad: requireAuth,
|
|
component: PortfolioDetailPage,
|
|
})
|
|
|
|
const brokerRoute = createRoute({
|
|
getParentRoute: () => rootRoute,
|
|
path: '/broker',
|
|
beforeLoad: requireAuth,
|
|
component: BrokerAccountsPage,
|
|
})
|
|
|
|
const brokerAccountRoot = createRoute({
|
|
getParentRoute: () => rootRoute,
|
|
path: '/broker/$accountId',
|
|
beforeLoad: requireAuth,
|
|
component: () => (
|
|
<BrokerAccountLayout>
|
|
<Outlet />
|
|
</BrokerAccountLayout>
|
|
),
|
|
})
|
|
|
|
const brokerAccountIndexRoute = createRoute({
|
|
getParentRoute: () => brokerAccountRoot,
|
|
path: '/',
|
|
component: BrokerAccountOverviewPage,
|
|
})
|
|
|
|
const brokerSharesRoute = createRoute({
|
|
getParentRoute: () => brokerAccountRoot,
|
|
path: '/shares',
|
|
component: () => <BrokerPositionsPage type="share" title="Акции" />,
|
|
})
|
|
|
|
const brokerBondsRoute = createRoute({
|
|
getParentRoute: () => brokerAccountRoot,
|
|
path: '/bonds',
|
|
component: () => <BrokerPositionsPage type="bond" title="Облигации" />,
|
|
})
|
|
|
|
const brokerOperationsRoute = createRoute({
|
|
getParentRoute: () => brokerAccountRoot,
|
|
path: '/operations',
|
|
component: BrokerOperationsPage,
|
|
})
|
|
|
|
const brokerEventsRoute = createRoute({
|
|
getParentRoute: () => brokerAccountRoot,
|
|
path: '/events',
|
|
component: BrokerEventsPage,
|
|
})
|
|
|
|
const brokerAnalyticsRoute = createRoute({
|
|
getParentRoute: () => brokerAccountRoot,
|
|
path: '/analytics',
|
|
component: BrokerAnalyticsPage,
|
|
})
|
|
|
|
const routeTree = rootRoute.addChildren([
|
|
indexRoute,
|
|
stockRoute,
|
|
bondRoute,
|
|
screenerRoute,
|
|
loginRoute,
|
|
registerRoute,
|
|
profileRoute,
|
|
portfoliosRoute,
|
|
portfolioDetailRoute,
|
|
brokerRoute,
|
|
brokerAccountRoot.addChildren([
|
|
brokerAccountIndexRoute,
|
|
brokerSharesRoute,
|
|
brokerBondsRoute,
|
|
brokerOperationsRoute,
|
|
brokerEventsRoute,
|
|
brokerAnalyticsRoute,
|
|
]),
|
|
])
|
|
|
|
export const router = createRouter({
|
|
routeTree,
|
|
defaultPreload: 'intent',
|
|
})
|
|
|
|
declare module '@tanstack/react-router' {
|
|
interface Register {
|
|
router: typeof router
|
|
}
|
|
}
|