2017-06-16 14:32:15 +02:00
|
|
|
import { NgModule } from '@angular/core'
|
2021-04-28 22:17:02 +02:00
|
|
|
import { RouteReuseStrategy, RouterModule, Routes, UrlMatchResult, UrlSegment } from '@angular/router'
|
2019-03-21 16:49:46 +01:00
|
|
|
import { CustomReuseStrategy } from '@app/core/routing/custom-reuse-strategy'
|
2020-03-07 13:50:26 +01:00
|
|
|
import { MenuGuards } from '@app/core/routing/menu-guard.service'
|
2021-01-14 14:13:23 +01:00
|
|
|
import { POSSIBLE_LOCALES } from '@shared/core-utils/i18n'
|
2021-05-14 16:12:45 +02:00
|
|
|
import { MetaGuard, PreloadSelectedModulesList } from './core'
|
2020-06-23 14:49:20 +02:00
|
|
|
import { EmptyComponent } from './empty.component'
|
2021-05-28 10:21:39 +02:00
|
|
|
import { USER_USERNAME_REGEX_CHARACTERS } from './shared/form-validators/user-validators'
|
|
|
|
import { ActorRedirectGuard } from './shared/shared-main'
|
2016-11-20 17:18:15 +01:00
|
|
|
|
|
|
|
const routes: Routes = [
|
2018-05-17 15:25:50 +02:00
|
|
|
{
|
|
|
|
path: 'admin',
|
2020-03-07 13:50:26 +01:00
|
|
|
canActivate: [ MenuGuards.close() ],
|
|
|
|
canDeactivate: [ MenuGuards.open() ],
|
2021-05-14 16:12:45 +02:00
|
|
|
loadChildren: () => import('./+admin/admin.module').then(m => m.AdminModule),
|
|
|
|
canActivateChild: [ MetaGuard ]
|
2018-05-17 15:25:50 +02:00
|
|
|
},
|
2021-05-27 15:59:55 +02:00
|
|
|
{
|
|
|
|
path: 'home',
|
2021-05-28 10:21:39 +02:00
|
|
|
loadChildren: () => import('./+home/home.module').then(m => m.HomeModule),
|
|
|
|
canActivateChild: [ MetaGuard ]
|
2018-05-17 15:25:50 +02:00
|
|
|
},
|
|
|
|
{
|
|
|
|
path: 'my-account',
|
2021-05-14 16:12:45 +02:00
|
|
|
loadChildren: () => import('./+my-account/my-account.module').then(m => m.MyAccountModule),
|
|
|
|
canActivateChild: [ MetaGuard ]
|
2018-05-17 15:25:50 +02:00
|
|
|
},
|
2020-11-12 15:28:54 +01:00
|
|
|
{
|
|
|
|
path: 'my-library',
|
2021-05-14 16:12:45 +02:00
|
|
|
loadChildren: () => import('./+my-library/my-library.module').then(m => m.MyLibraryModule),
|
|
|
|
canActivateChild: [ MetaGuard ]
|
2020-11-12 15:28:54 +01:00
|
|
|
},
|
2018-08-31 09:18:19 +02:00
|
|
|
{
|
|
|
|
path: 'verify-account',
|
2021-05-14 16:12:45 +02:00
|
|
|
loadChildren: () => import('./+signup/+verify-account/verify-account.module').then(m => m.VerifyAccountModule),
|
|
|
|
canActivateChild: [ MetaGuard ]
|
2018-08-31 09:18:19 +02:00
|
|
|
},
|
2021-05-28 11:36:33 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
path: 'accounts',
|
|
|
|
redirectTo: 'a'
|
|
|
|
},
|
2018-05-17 15:25:50 +02:00
|
|
|
{
|
2021-04-28 23:45:23 +02:00
|
|
|
path: 'a',
|
2021-05-14 16:12:45 +02:00
|
|
|
loadChildren: () => import('./+accounts/accounts.module').then(m => m.AccountsModule),
|
|
|
|
canActivateChild: [ MetaGuard ]
|
2018-05-17 15:25:50 +02:00
|
|
|
},
|
2021-05-28 11:36:33 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
path: 'video-channels',
|
|
|
|
redirectTo: 'c'
|
|
|
|
},
|
2018-05-17 15:25:50 +02:00
|
|
|
{
|
2021-04-28 23:45:23 +02:00
|
|
|
path: 'c',
|
2021-05-14 16:12:45 +02:00
|
|
|
loadChildren: () => import('./+video-channels/video-channels.module').then(m => m.VideoChannelsModule),
|
|
|
|
canActivateChild: [ MetaGuard ]
|
2018-05-31 11:35:01 +02:00
|
|
|
},
|
2021-05-28 11:36:33 +02:00
|
|
|
|
2018-06-27 14:21:03 +02:00
|
|
|
{
|
|
|
|
path: 'about',
|
2021-05-14 16:12:45 +02:00
|
|
|
loadChildren: () => import('./+about/about.module').then(m => m.AboutModule),
|
|
|
|
canActivateChild: [ MetaGuard ]
|
2018-06-27 14:21:03 +02:00
|
|
|
},
|
2019-05-29 14:39:49 +02:00
|
|
|
{
|
|
|
|
path: 'signup',
|
2021-05-14 16:12:45 +02:00
|
|
|
loadChildren: () => import('./+signup/+register/register.module').then(m => m.RegisterModule),
|
|
|
|
canActivateChild: [ MetaGuard ]
|
2019-05-29 14:39:49 +02:00
|
|
|
},
|
2020-06-23 14:49:20 +02:00
|
|
|
{
|
|
|
|
path: 'reset-password',
|
2021-05-14 16:12:45 +02:00
|
|
|
loadChildren: () => import('./+reset-password/reset-password.module').then(m => m.ResetPasswordModule),
|
|
|
|
canActivateChild: [ MetaGuard ]
|
2020-06-23 14:49:20 +02:00
|
|
|
},
|
|
|
|
{
|
|
|
|
path: 'login',
|
2021-05-14 16:12:45 +02:00
|
|
|
loadChildren: () => import('./+login/login.module').then(m => m.LoginModule),
|
|
|
|
canActivateChild: [ MetaGuard ]
|
2020-06-23 14:49:20 +02:00
|
|
|
},
|
|
|
|
{
|
|
|
|
path: 'search',
|
2021-05-14 16:12:45 +02:00
|
|
|
loadChildren: () => import('./+search/search.module').then(m => m.SearchModule),
|
|
|
|
canActivateChild: [ MetaGuard ]
|
2020-06-23 14:49:20 +02:00
|
|
|
},
|
2021-05-28 11:36:33 +02:00
|
|
|
|
2020-06-23 14:49:20 +02:00
|
|
|
{
|
2021-05-28 11:36:33 +02:00
|
|
|
path: 'videos/upload',
|
|
|
|
loadChildren: () => import('@app/+videos/+video-edit/video-add.module').then(m => m.VideoAddModule),
|
|
|
|
data: {
|
|
|
|
meta: {
|
|
|
|
title: $localize`Upload a video`
|
|
|
|
}
|
|
|
|
}
|
2020-06-23 14:49:20 +02:00
|
|
|
},
|
2021-01-14 14:13:23 +01:00
|
|
|
{
|
2021-05-28 11:36:33 +02:00
|
|
|
path: 'videos/update/:uuid',
|
|
|
|
loadChildren: () => import('@app/+videos/+video-edit/video-update.module').then(m => m.VideoUpdateModule),
|
|
|
|
data: {
|
|
|
|
meta: {
|
|
|
|
title: $localize`Edit a video`
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
path: 'videos/watch/playlist',
|
|
|
|
redirectTo: 'w/p'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
path: 'videos/watch',
|
|
|
|
redirectTo: 'w'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
path: 'w',
|
|
|
|
loadChildren: () => import('@app/+videos/+video-watch/video-watch.module').then(m => m.VideoWatchModule),
|
|
|
|
data: {
|
|
|
|
preload: 3000
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
path: 'videos',
|
|
|
|
loadChildren: () => import('./+videos/videos.module').then(m => m.VideosModule),
|
2021-05-14 16:12:45 +02:00
|
|
|
canActivateChild: [ MetaGuard ]
|
2021-01-14 14:13:23 +01:00
|
|
|
},
|
2021-03-04 09:04:10 +01:00
|
|
|
{
|
|
|
|
path: 'video-playlists/watch',
|
|
|
|
redirectTo: 'videos/watch/playlist'
|
|
|
|
},
|
2021-05-28 11:36:33 +02:00
|
|
|
|
2021-04-24 01:51:11 +02:00
|
|
|
{
|
2021-05-28 11:36:33 +02:00
|
|
|
path: 'remote-interaction',
|
|
|
|
loadChildren: () => import('./+remote-interaction/remote-interaction.module').then(m => m.RemoteInteractionModule),
|
|
|
|
canActivateChild: [ MetaGuard ]
|
2021-04-24 01:51:11 +02:00
|
|
|
},
|
2021-05-28 11:36:33 +02:00
|
|
|
|
|
|
|
// Matches /@:actorName
|
2021-04-24 01:51:11 +02:00
|
|
|
{
|
2021-04-28 22:17:02 +02:00
|
|
|
matcher: (url): UrlMatchResult => {
|
2021-05-28 10:21:39 +02:00
|
|
|
const regex = new RegExp(`^@(${USER_USERNAME_REGEX_CHARACTERS}+)$`)
|
|
|
|
if (url.length !== 1) return null
|
|
|
|
|
|
|
|
const matchResult = url[0].path.match(regex)
|
|
|
|
if (!matchResult) return null
|
|
|
|
|
|
|
|
return {
|
|
|
|
consumed: url,
|
|
|
|
posParams: {
|
|
|
|
actorName: new UrlSegment(matchResult[1], {})
|
2021-04-28 22:17:02 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
2021-05-28 10:21:39 +02:00
|
|
|
pathMatch: 'full',
|
|
|
|
canActivate: [ ActorRedirectGuard ],
|
|
|
|
component: EmptyComponent
|
2021-04-24 01:51:11 +02:00
|
|
|
},
|
2021-05-28 11:36:33 +02:00
|
|
|
|
2018-06-28 17:16:22 +02:00
|
|
|
{
|
|
|
|
path: '',
|
2020-06-23 14:49:20 +02:00
|
|
|
component: EmptyComponent // Avoid 404, app component will redirect dynamically
|
2018-05-17 15:25:50 +02:00
|
|
|
}
|
2017-06-16 14:32:15 +02:00
|
|
|
]
|
2016-11-20 17:18:15 +01:00
|
|
|
|
2020-08-26 08:54:19 +02:00
|
|
|
// Avoid 404 when changing language
|
|
|
|
for (const locale of POSSIBLE_LOCALES) {
|
|
|
|
routes.push({
|
|
|
|
path: locale,
|
|
|
|
component: EmptyComponent
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
routes.push({
|
|
|
|
path: '**',
|
|
|
|
loadChildren: () => import('./+page-not-found/page-not-found.module').then(m => m.PageNotFoundModule)
|
|
|
|
})
|
|
|
|
|
2016-11-20 17:18:15 +01:00
|
|
|
@NgModule({
|
2017-09-06 21:48:15 +02:00
|
|
|
imports: [
|
|
|
|
RouterModule.forRoot(routes, {
|
|
|
|
useHash: Boolean(history.pushState) === false,
|
2019-03-21 16:49:46 +01:00
|
|
|
scrollPositionRestoration: 'disabled',
|
2019-01-08 15:06:58 +01:00
|
|
|
preloadingStrategy: PreloadSelectedModulesList,
|
2019-03-21 16:49:46 +01:00
|
|
|
anchorScrolling: 'disabled'
|
2017-09-06 21:48:15 +02:00
|
|
|
})
|
|
|
|
],
|
2018-03-01 13:57:29 +01:00
|
|
|
providers: [
|
2020-03-07 13:50:26 +01:00
|
|
|
MenuGuards.guards,
|
2019-03-21 16:49:46 +01:00
|
|
|
PreloadSelectedModulesList,
|
|
|
|
{ provide: RouteReuseStrategy, useClass: CustomReuseStrategy }
|
2018-03-01 13:57:29 +01:00
|
|
|
],
|
2016-11-20 17:18:15 +01:00
|
|
|
exports: [ RouterModule ]
|
|
|
|
})
|
|
|
|
export class AppRoutingModule {}
|