From 8e9b04546447d168691789b2b1567a8abd729c2e Mon Sep 17 00:00:00 2001 From: Ostap Zherebetskyi Date: Tue, 21 Oct 2025 15:55:13 +0300 Subject: [PATCH 1/4] fix(wiki): add legacy wiki redirect component and route --- src/app/features/project/project.routes.ts | 5 ++ .../wiki/legacy-wiki-redirect.component.ts | 46 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/app/features/project/wiki/legacy-wiki-redirect.component.ts diff --git a/src/app/features/project/project.routes.ts b/src/app/features/project/project.routes.ts index 3496fe3f2..aa4644a1e 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.WikiRedirectComponent), + }, { 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..a54bc70bc --- /dev/null +++ b/src/app/features/project/wiki/legacy-wiki-redirect.component.ts @@ -0,0 +1,46 @@ +// wiki-redirect.component.ts +import { createDispatchMap, select } from '@ngxs/store'; + +import { map, of, tap } from 'rxjs'; + +import { Component, 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 { GetWikiList, WikiSelectors } from '@osf/shared/stores'; + +@Component({ + standalone: true, + template: '', +}) +export class WikiRedirectComponent { + private readonly route = inject(ActivatedRoute); + private readonly router = inject(Router); + + readonly projectId = toSignal(this.route.parent?.params.pipe(map((params) => params['id'])) ?? of(undefined)); + wikiList = select(WikiSelectors.getWikiList); + + actions = createDispatchMap({ + getWikiList: GetWikiList, + }); + + constructor() { + const params = this.route.snapshot.params; + const wikiName = params['wikiName']; + + this.actions + .getWikiList(ResourceType.Project, this.projectId()) + .pipe( + takeUntilDestroyed(), + tap(() => { + const wikiGUID = this.wikiList().find((item) => item.name === wikiName)?.id ?? null; + this.router.navigate([`/${this.projectId()}/wiki`], { + queryParams: { wiki: wikiGUID }, + replaceUrl: true, + }); + }) + ) + .subscribe(); + } +} From 4acd35c3430bda4e0456b46b63a280abfc88f833 Mon Sep 17 00:00:00 2001 From: Ostap Zherebetskyi Date: Tue, 21 Oct 2025 16:53:46 +0300 Subject: [PATCH 2/4] fix(wiki): remove standalone flag and adjust redirect method placement --- .../features/project/wiki/legacy-wiki-redirect.component.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/app/features/project/wiki/legacy-wiki-redirect.component.ts b/src/app/features/project/wiki/legacy-wiki-redirect.component.ts index a54bc70bc..895b60a11 100644 --- a/src/app/features/project/wiki/legacy-wiki-redirect.component.ts +++ b/src/app/features/project/wiki/legacy-wiki-redirect.component.ts @@ -1,4 +1,3 @@ -// wiki-redirect.component.ts import { createDispatchMap, select } from '@ngxs/store'; import { map, of, tap } from 'rxjs'; @@ -11,7 +10,6 @@ import { ResourceType } from '@osf/shared/enums'; import { GetWikiList, WikiSelectors } from '@osf/shared/stores'; @Component({ - standalone: true, template: '', }) export class WikiRedirectComponent { @@ -26,6 +24,10 @@ export class WikiRedirectComponent { }); constructor() { + this.redirectWiki(); + } + + redirectWiki() { const params = this.route.snapshot.params; const wikiName = params['wikiName']; From 35ea214a48ae4f7fce2932bf8e270ac97aaa311a Mon Sep 17 00:00:00 2001 From: Ostap Zherebetskyi Date: Tue, 21 Oct 2025 17:49:08 +0300 Subject: [PATCH 3/4] fix(wiki): Rename WikiRedirectComponent to LegacyWikiRedirectComponent and inject LoaderService --- src/app/features/project/project.routes.ts | 2 +- .../project/wiki/legacy-wiki-redirect.component.ts | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/app/features/project/project.routes.ts b/src/app/features/project/project.routes.ts index aa4644a1e..5d7d3bae8 100644 --- a/src/app/features/project/project.routes.ts +++ b/src/app/features/project/project.routes.ts @@ -116,7 +116,7 @@ export const projectRoutes: Routes = [ { path: 'wiki/:wikiName', loadComponent: () => - import('../project/wiki/legacy-wiki-redirect.component').then((m) => m.WikiRedirectComponent), + import('../project/wiki/legacy-wiki-redirect.component').then((m) => m.LegacyWikiRedirectComponent), }, { path: 'wiki', diff --git a/src/app/features/project/wiki/legacy-wiki-redirect.component.ts b/src/app/features/project/wiki/legacy-wiki-redirect.component.ts index 895b60a11..61baa82ff 100644 --- a/src/app/features/project/wiki/legacy-wiki-redirect.component.ts +++ b/src/app/features/project/wiki/legacy-wiki-redirect.component.ts @@ -2,19 +2,22 @@ import { createDispatchMap, select } from '@ngxs/store'; import { map, of, tap } from 'rxjs'; -import { Component, inject } from '@angular/core'; +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 WikiRedirectComponent { +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); @@ -24,7 +27,9 @@ export class WikiRedirectComponent { }); constructor() { + this.loaderService.show(); this.redirectWiki(); + this.loaderService.hide(); } redirectWiki() { From f98aff8d970ab64ccd7e7192add3854c2a17cb42 Mon Sep 17 00:00:00 2001 From: Ostap Zherebetskyi Date: Tue, 21 Oct 2025 18:05:41 +0300 Subject: [PATCH 4/4] fix(legacy-wiki-redirect): Move loaderService.hide() to redirectWiki --- .../features/project/wiki/legacy-wiki-redirect.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/features/project/wiki/legacy-wiki-redirect.component.ts b/src/app/features/project/wiki/legacy-wiki-redirect.component.ts index 61baa82ff..090ccb30e 100644 --- a/src/app/features/project/wiki/legacy-wiki-redirect.component.ts +++ b/src/app/features/project/wiki/legacy-wiki-redirect.component.ts @@ -29,7 +29,6 @@ export class LegacyWikiRedirectComponent { constructor() { this.loaderService.show(); this.redirectWiki(); - this.loaderService.hide(); } redirectWiki() { @@ -39,13 +38,14 @@ export class LegacyWikiRedirectComponent { this.actions .getWikiList(ResourceType.Project, this.projectId()) .pipe( - takeUntilDestroyed(), + 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();