From ff8c5ccf09cfe6a469777d4789625f8fdb004408 Mon Sep 17 00:00:00 2001 From: Kimsible Date: Sat, 24 Apr 2021 01:51:11 +0200 Subject: Add shorter URLs for accounts and channels client-side --- client/src/app/+actors/actors.component.ts | 41 ++++++++++++++++++++++++++++++ client/src/app/app-routing.module.ts | 13 ++++++++++ 2 files changed, 54 insertions(+) create mode 100644 client/src/app/+actors/actors.component.ts (limited to 'client/src') diff --git a/client/src/app/+actors/actors.component.ts b/client/src/app/+actors/actors.component.ts new file mode 100644 index 000000000..74fbe7dea --- /dev/null +++ b/client/src/app/+actors/actors.component.ts @@ -0,0 +1,41 @@ +import { Component, OnInit } from '@angular/core' +import { empty } from 'rxjs' +import { catchError } from 'rxjs/operators' +import { RestExtractor } from '@app/core' + +import { ActivatedRoute, Router } from '@angular/router' +import { AccountService } from '@app/shared/shared-main/account' + +@Component({ + selector: 'my-actor', + template: '' +}) +export class ActorsComponent implements OnInit { + constructor ( + private accountService: AccountService, + private route: ActivatedRoute, + private restExtractor: RestExtractor, + private router: Router + ) { + } + + ngOnInit () { + const accountOrChannelName = this.route.snapshot.params['actorName'].replace('@', '') + + this.accountService + .getAccount(accountOrChannelName) + .pipe( + catchError(res => { + if (res.status === 404 && res.message === 'Account not found') { + this.router.navigateByUrl(`/video-channels/${accountOrChannelName}`) + return empty() + } + + return this.restExtractor.handleError(res) + }) + ) + .subscribe(() => { + this.router.navigateByUrl(`/accounts/${accountOrChannelName}`) + }) + } +} diff --git a/client/src/app/app-routing.module.ts b/client/src/app/app-routing.module.ts index 3ea5b7e5e..c0a2d29e4 100644 --- a/client/src/app/app-routing.module.ts +++ b/client/src/app/app-routing.module.ts @@ -5,6 +5,7 @@ import { MenuGuards } from '@app/core/routing/menu-guard.service' import { POSSIBLE_LOCALES } from '@shared/core-utils/i18n' import { PreloadSelectedModulesList } from './core' import { EmptyComponent } from './empty.component' +import { ActorsComponent } from './+actors/actors.component' const routes: Routes = [ { @@ -65,6 +66,18 @@ const routes: Routes = [ path: 'video-playlists/watch', redirectTo: 'videos/watch/playlist' }, + { + path: 'a', + redirectTo: 'accounts' + }, + { + path: 'c', + redirectTo: 'video-channels' + }, + { + path: ':actorName', + component: ActorsComponent + }, { path: '', component: EmptyComponent // Avoid 404, app component will redirect dynamically -- cgit v1.2.3