diff --git a/src/app/features/project/project.routes.ts b/src/app/features/project/project.routes.ts index 3496fe3f2..5d7d3bae8 100644 --- a/src/app/features/project/project.routes.ts +++ b/src/app/features/project/project.routes.ts @@ -113,6 +113,11 @@ export const projectRoutes: Routes = [ ), providers: [provideStates([DuplicatesState])], }, + { + path: 'wiki/:wikiName', + loadComponent: () => + import('../project/wiki/legacy-wiki-redirect.component').then((m) => m.LegacyWikiRedirectComponent), + }, { path: 'wiki', loadComponent: () => import('../project/wiki/wiki.component').then((mod) => mod.WikiComponent), diff --git a/src/app/features/project/wiki/legacy-wiki-redirect.component.ts b/src/app/features/project/wiki/legacy-wiki-redirect.component.ts new file mode 100644 index 000000000..090ccb30e --- /dev/null +++ b/src/app/features/project/wiki/legacy-wiki-redirect.component.ts @@ -0,0 +1,53 @@ +import { createDispatchMap, select } from '@ngxs/store'; + +import { map, of, tap } from 'rxjs'; + +import { Component, DestroyRef, inject } from '@angular/core'; +import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop'; +import { ActivatedRoute, Router } from '@angular/router'; + +import { ResourceType } from '@osf/shared/enums'; +import { LoaderService } from '@osf/shared/services'; +import { GetWikiList, WikiSelectors } from '@osf/shared/stores'; + +@Component({ + template: '', +}) +export class LegacyWikiRedirectComponent { + private readonly route = inject(ActivatedRoute); + private readonly router = inject(Router); + private readonly destroyRef = inject(DestroyRef); + private readonly loaderService = inject(LoaderService); + + readonly projectId = toSignal(this.route.parent?.params.pipe(map((params) => params['id'])) ?? of(undefined)); + wikiList = select(WikiSelectors.getWikiList); + + actions = createDispatchMap({ + getWikiList: GetWikiList, + }); + + constructor() { + this.loaderService.show(); + this.redirectWiki(); + } + + redirectWiki() { + const params = this.route.snapshot.params; + const wikiName = params['wikiName']; + + this.actions + .getWikiList(ResourceType.Project, this.projectId()) + .pipe( + takeUntilDestroyed(this.destroyRef), + tap(() => { + const wikiGUID = this.wikiList().find((item) => item.name === wikiName)?.id ?? null; + this.router.navigate([`/${this.projectId()}/wiki`], { + queryParams: { wiki: wikiGUID }, + replaceUrl: true, + }); + this.loaderService.hide(); + }) + ) + .subscribe(); + } +}