Files
marketplaces/src/app/app.routes.ts

105 lines
3.3 KiB
TypeScript
Raw Normal View History

2026-01-18 18:57:06 +04:00
import { Routes } from '@angular/router';
2026-02-26 22:23:08 +04:00
import { languageGuard } from './guards/language.guard';
2026-07-10 13:34:25 +04:00
import { environment } from '../environments/environment';
2026-01-18 18:57:06 +04:00
// Core routes (same across all brands)
const coreRoutes: Routes = [
2026-01-18 18:57:06 +04:00
{
path: '',
loadComponent: () => import('./pages/home/home.component').then(m => m.HomeComponent)
},
2026-07-05 01:36:21 +04:00
{
path: 'catalog',
loadComponent: () => import('./features/website/catalog/containers/catalog-container.component').then(m => m.CatalogContainerComponent)
},
{
path: 'catalog/:id',
loadComponent: () => import('./features/website/catalog/containers/catalog-container.component').then(m => m.CatalogContainerComponent)
},
2026-01-18 18:57:06 +04:00
{
path: 'category/:id',
2026-07-05 01:36:21 +04:00
redirectTo: 'catalog/:id',
pathMatch: 'full'
2026-01-18 18:57:06 +04:00
},
{
path: 'category/:id/items',
2026-07-05 01:36:21 +04:00
redirectTo: 'catalog/:id',
pathMatch: 'full'
2026-01-18 18:57:06 +04:00
},
2026-07-05 01:43:56 +04:00
{
path: 'product/:id',
loadComponent: () => import('./features/website/product/containers/product-details-container.component').then(m => m.ProductDetailsContainerComponent)
},
2026-01-18 18:57:06 +04:00
{
path: 'item/:id',
2026-07-05 01:43:56 +04:00
redirectTo: 'product/:id',
pathMatch: 'full'
2026-01-18 18:57:06 +04:00
},
{
path: 'search',
loadComponent: () => import('./features/website/catalog/containers/catalog-container.component').then(m => m.CatalogContainerComponent)
2026-01-18 18:57:06 +04:00
},
2026-07-10 13:43:53 +04:00
{
path: 'edit/:section',
2026-07-10 13:43:53 +04:00
loadComponent: () => import('./features/project-editor/pages/project-editor-page.component').then(m => m.ProjectEditorPageComponent)
},
{
path: 'edit',
redirectTo: 'edit/general',
pathMatch: 'full'
},
{
path: 'builder',
redirectTo: 'edit/general',
pathMatch: 'full'
},
2026-07-10 13:43:53 +04:00
{
path: 'project-editor',
redirectTo: 'edit/general',
2026-07-10 13:43:53 +04:00
pathMatch: 'full'
},
{
path: 'wishlist',
loadComponent: () => import('./features/website/user-experience/wishlist/containers/wishlist-page.component').then(m => m.WishlistPageComponent)
},
{
path: 'compare',
loadComponent: () => import('./features/website/user-experience/compare/containers/compare-page.component').then(m => m.ComparePageComponent)
},
2026-01-18 18:57:06 +04:00
{
path: 'cart',
loadComponent: () => import('./pages/cart/cart.component').then(m => m.CartComponent)
},
{
path: 'page/:key',
loadComponent: () => import('./pages/static-page/static-page.component').then(m => m.StaticPageComponent)
},
{
path: ':staticPath',
loadComponent: () => import('./pages/static-page/static-page.component').then(m => m.StaticPageComponent)
}
];
2026-07-05 00:51:29 +04:00
// TODO(CMS): Resolve informational/legal pages from backend content configuration here.
// Disabled hardcoded pages: about, contacts, faq, delivery, guarantee,
// company-details, payment-terms, return-policy, public-offer, privacy-policy.
const cmsContentRoutes: Routes = [];
2026-07-05 01:43:56 +04:00
// All routes sit under a :lang prefix (e.g. /ru/cart, /en/product/5)
export const routes: Routes = [
2026-07-10 13:34:25 +04:00
...(environment.production ? [] : [{
path: '__diagnostics',
loadComponent: () => import('./features/diagnostics/components/diagnostics-page.component').then(m => m.DiagnosticsPageComponent)
}]),
2026-01-18 18:57:06 +04:00
{
2026-02-26 22:23:08 +04:00
path: ':lang',
canActivate: [languageGuard],
children: [
...coreRoutes,
2026-07-05 00:51:29 +04:00
...cmsContentRoutes,
2026-02-26 22:23:08 +04:00
{ path: '**', redirectTo: '' }
]
},
// URLs without a language prefix → redirect to default language
{ path: '**', redirectTo: 'ru' }
];