From dc61d5f3f3dba95f4b5f2c90743058207904a570 Mon Sep 17 00:00:00 2001 From: nsemets Date: Mon, 14 Jul 2025 15:27:29 +0300 Subject: [PATCH 1/7] fix(my-reviewing): updated my reviewing page --- .../recent-activity-list.component.html | 11 +++-- .../recent-activity-list.component.ts | 3 +- .../features/moderation/constants/index.ts | 1 + .../constants/my-preprint-reviewing.const.ts | 16 +++++++ .../mappers/preprint-review-action.mapper.ts | 14 +++++- .../preprint-review-action-json-api.model.ts | 44 +++++-------------- .../models/preprint-review-action.model.ts | 7 ++- .../my-preprint-reviewing.component.html | 4 +- .../services/preprint-moderation.service.ts | 2 +- .../registration-card.component.ts | 3 +- src/assets/i18n/en.json | 8 +++- 11 files changed, 62 insertions(+), 51 deletions(-) create mode 100644 src/app/features/moderation/constants/my-preprint-reviewing.const.ts diff --git a/src/app/features/moderation/components/recent-activity-list/recent-activity-list.component.html b/src/app/features/moderation/components/recent-activity-list/recent-activity-list.component.html index e4f3f7525..c0997b0ce 100644 --- a/src/app/features/moderation/components/recent-activity-list/recent-activity-list.component.html +++ b/src/app/features/moderation/components/recent-activity-list/recent-activity-list.component.html @@ -8,15 +8,14 @@ } @else { @for (item of reviews(); track $index) {
-
+
- {{ item.fromState }} - {{ 'moderation.submissionReview.submitted' | translate }} - {{ 'moderation.submissionReview.by' | translate }} - {{ item.trigger }} + {{ item.creator.name }} + {{ preprintReviewStatus[item.toState].label | translate: { name: item.preprint.name } }} + {{ item.provider.name }}

@@ -25,7 +24,7 @@

} - @if (totalCount()) { + @if (totalCount() > 10) { = { + [SubmissionReviewStatus.Pending]: { + label: 'moderation.preprintReviewStatus.submitted', + }, + [SubmissionReviewStatus.Accepted]: { + label: 'moderation.preprintReviewStatus.accepted', + }, + [SubmissionReviewStatus.Rejected]: { + label: 'moderation.preprintReviewStatus.rejected', + }, + [SubmissionReviewStatus.Withdrawn]: { + label: 'moderation.preprintReviewStatus.withdrawn', + }, +}; diff --git a/src/app/features/moderation/mappers/preprint-review-action.mapper.ts b/src/app/features/moderation/mappers/preprint-review-action.mapper.ts index e4fc1964d..c89d49fd0 100644 --- a/src/app/features/moderation/mappers/preprint-review-action.mapper.ts +++ b/src/app/features/moderation/mappers/preprint-review-action.mapper.ts @@ -8,11 +8,21 @@ export class PreprintReviewActionMapper { static fromResponse(response: ReviewActionJsonApi): PreprintReviewActionModel { return { id: response.id, - dateCreated: response.attributes.date_created, dateModified: response.attributes.date_modified, fromState: response.attributes.from_state, toState: response.attributes.to_state, - trigger: response.attributes.trigger, + creator: { + id: response.embeds.creator.data.id, + name: response.embeds.creator.data.attributes.full_name, + }, + preprint: { + id: response.embeds.target.data.id, + name: response.embeds.target.data.attributes.title, + }, + provider: { + id: response.embeds.provider.data.id, + name: response.embeds.provider.data.attributes.name, + }, }; } diff --git a/src/app/features/moderation/models/preprint-review-action-json-api.model.ts b/src/app/features/moderation/models/preprint-review-action-json-api.model.ts index fa043a7f1..a93ba9783 100644 --- a/src/app/features/moderation/models/preprint-review-action-json-api.model.ts +++ b/src/app/features/moderation/models/preprint-review-action-json-api.model.ts @@ -9,6 +9,9 @@ export interface ReviewActionJsonApi { target: { data: PreprintModelJsonApi; }; + provider: { + data: ProviderModelJsonApi; + }; }; } @@ -30,14 +33,6 @@ export interface UserModelJsonApi { export interface UserAttributesJsonApi { full_name: string; - given_name: string; - middle_names: string; - family_name: string; - suffix: string; - date_registered: string; - active: boolean; - timezone: string; - locale: string; } export interface PreprintModelJsonApi { @@ -47,31 +42,12 @@ export interface PreprintModelJsonApi { } export interface PreprintAttributesJsonApi { - date_created: string; - date_modified: string; - date_published: string | null; - original_publication_date: string | null; - custom_publication_citation: string | null; - doi: string | null; title: string; - description: string; - is_published: boolean | null; - is_preprint_orphan: boolean | null; - tags: string[]; - preprint_doi_created: string | null; - date_withdrawn: string; - withdrawal_justification: string; - current_user_permissions: string[]; - public: boolean; - reviews_state: string; - date_last_transitioned: string | null; - version: number; - is_latest_version: boolean; - has_coi: boolean; - conflict_of_interest_statement: string; - has_data_links: 'not_applicable' | 'available' | 'unavailable'; - why_no_data: string | null; - has_prereg_links: 'not_applicable' | 'available' | 'unavailable'; - why_no_prereg: string | null; - prereg_link_info: string | null; +} + +export interface ProviderModelJsonApi { + id: string; + attributes: { + name: string; + }; } diff --git a/src/app/features/moderation/models/preprint-review-action.model.ts b/src/app/features/moderation/models/preprint-review-action.model.ts index f1dbe4e3f..6c811f95e 100644 --- a/src/app/features/moderation/models/preprint-review-action.model.ts +++ b/src/app/features/moderation/models/preprint-review-action.model.ts @@ -1,8 +1,11 @@ +import { IdName } from '@osf/shared/models'; + export interface PreprintReviewActionModel { id: string; - dateCreated: string; dateModified: string; fromState: string; toState: string; - trigger: string; + creator: IdName; + preprint: IdName; + provider: IdName; } diff --git a/src/app/features/moderation/pages/my-preprint-reviewing/my-preprint-reviewing.component.html b/src/app/features/moderation/pages/my-preprint-reviewing/my-preprint-reviewing.component.html index 3a93d6fbf..9c10d5c94 100644 --- a/src/app/features/moderation/pages/my-preprint-reviewing/my-preprint-reviewing.component.html +++ b/src/app/features/moderation/pages/my-preprint-reviewing/my-preprint-reviewing.component.html @@ -1,7 +1,7 @@
-
+

{{ 'project.overview.recentActivity.title' | translate }}

@@ -18,7 +18,7 @@

{{ 'project.overview.recentActivity.title' | translate }}

{{ 'navigation.preprintsSubRoutes.myReviewing' | translate }}

-
+
@if (isPreprintProvidersLoading()) {
diff --git a/src/app/features/moderation/services/preprint-moderation.service.ts b/src/app/features/moderation/services/preprint-moderation.service.ts index a9dbfde67..711b10be1 100644 --- a/src/app/features/moderation/services/preprint-moderation.service.ts +++ b/src/app/features/moderation/services/preprint-moderation.service.ts @@ -28,7 +28,7 @@ export class PreprintModerationService { } getPreprintReviews(page = 1): Observable> { - const baseUrl = `${environment.apiUrl}/actions/reviews/?embed[]=target&page=${page}`; + const baseUrl = `${environment.apiUrl}/actions/reviews/?embed=provider&embed=target&page=${page}`; return this.jsonApiService .get>(baseUrl) diff --git a/src/app/shared/components/registration-card/registration-card.component.ts b/src/app/shared/components/registration-card/registration-card.component.ts index cef9a114c..50215f611 100644 --- a/src/app/shared/components/registration-card/registration-card.component.ts +++ b/src/app/shared/components/registration-card/registration-card.component.ts @@ -2,7 +2,6 @@ import { TranslatePipe } from '@ngx-translate/core'; import { Button } from 'primeng/button'; import { Card } from 'primeng/card'; -import { Tag } from 'primeng/tag'; import { DatePipe } from '@angular/common'; import { ChangeDetectionStrategy, Component, input, output } from '@angular/core'; @@ -13,7 +12,7 @@ import { RegistrationCard } from '@osf/shared/models'; @Component({ selector: 'osf-registration-card', - imports: [Card, Button, Tag, TranslatePipe, DatePipe, RouterLink], + imports: [Card, Button, TranslatePipe, DatePipe, RouterLink], templateUrl: './registration-card.component.html', styleUrl: './registration-card.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 686820c8c..f102187ad 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -1126,6 +1126,12 @@ "rejected": "Rejected", "by": "by" }, + "preprintReviewStatus": { + "submitted": "submitted a preprint \"{{name}}\" to", + "accepted": "accepted a preprint \"{{name}}\" in", + "withdrawn": "withdrawn a preprint \"{{name}}\" from", + "rejected": "rejected a preprint \"{{name}}\" from" + }, "preprintSettings": { "warning": "Notice: Moderation settings can only be changed by an OSF administrator. Contact", "warningForAssistance": "for assistance.", @@ -2117,7 +2123,7 @@ "publicRegistrations": "Public Registrations" }, "institutionUsers": { - "allDepartments": "All departments", + "allDepartments": "All departments", "lastLogin": "Last Login", "lastActive": "Last Active", "accountCreated": "Account Created", From dc21b0e1ecd2a306bb5f1d37683863da3051dcbf Mon Sep 17 00:00:00 2001 From: nsemets Date: Mon, 14 Jul 2025 18:39:22 +0300 Subject: [PATCH 2/7] fix(my-reviewing): updated responsive --- .../my-reviewing-navigation.component.html | 2 +- .../my-reviewing-navigation.component.ts | 1 - .../recent-activity-list.component.html | 34 ++++++++++--------- .../recent-activity-list.component.scss | 8 +++++ .../mappers/preprint-review-action.mapper.ts | 6 +++- src/app/features/moderation/models/index.ts | 1 + .../preprint-related-count-json-api.model.ts | 17 ++++++++++ .../services/preprint-moderation.service.ts | 10 +++++- .../preprint-moderation.model.ts | 2 +- .../preprint-moderation.state.ts | 14 +++++++- .../models/preprint-provider.models.ts | 1 + 11 files changed, 74 insertions(+), 22 deletions(-) create mode 100644 src/app/features/moderation/models/preprint-related-count-json-api.model.ts diff --git a/src/app/features/moderation/components/my-reviewing-navigation/my-reviewing-navigation.component.html b/src/app/features/moderation/components/my-reviewing-navigation/my-reviewing-navigation.component.html index 2d6c91188..b893d2049 100644 --- a/src/app/features/moderation/components/my-reviewing-navigation/my-reviewing-navigation.component.html +++ b/src/app/features/moderation/components/my-reviewing-navigation/my-reviewing-navigation.component.html @@ -2,7 +2,7 @@

{{ provider().name }}

@for (tab of tabOptions; track $index) { - @let badge = tab.value === tabOption.Submissions ? submissionsCount : undefined; + @let badge = tab.value === tabOption.Submissions ? `${provider().submissionCount}` : undefined; (); - submissionsCount = '2'; readonly tabOptions = PREPRINT_REVIEWING_TABS; readonly tabOption = PreprintModerationTab; diff --git a/src/app/features/moderation/components/recent-activity-list/recent-activity-list.component.html b/src/app/features/moderation/components/recent-activity-list/recent-activity-list.component.html index c0997b0ce..6b80baedf 100644 --- a/src/app/features/moderation/components/recent-activity-list/recent-activity-list.component.html +++ b/src/app/features/moderation/components/recent-activity-list/recent-activity-list.component.html @@ -6,23 +6,25 @@
} @else { - @for (item of reviews(); track $index) { -
-
- - {{ item.creator.name }} - {{ preprintReviewStatus[item.toState].label | translate: { name: item.preprint.name } }} - {{ item.provider.name }} -
+
+ @for (item of reviews(); track $index) { +
+
+ + {{ item.creator.name }} + {{ preprintReviewStatus[item.toState].label | translate: { name: item.preprint.name } }} + {{ item.provider.name }} +
-

- {{ item.dateModified | date: 'MMM d, y h:mm a' }} -

-
- } +

+ {{ item.dateModified | date: 'MMM d, y h:mm a' }} +

+
+ } +
@if (totalCount() > 10) { PreprintProvidersMapper.toPreprintProviderShortInfoFromGetResponse(response.data))); } + getPreprintProvider(id: string): Observable { + const baseUrl = `${environment.apiUrl}/providers/preprints/${id}/?related_counts=true`; + + return this.jsonApiService + .get>(baseUrl) + .pipe(map((response) => PreprintReviewActionMapper.fromRelatedCounts(response.data))); + } + getPreprintReviews(page = 1): Observable> { const baseUrl = `${environment.apiUrl}/actions/reviews/?embed=provider&embed=target&page=${page}`; diff --git a/src/app/features/moderation/store/preprint-moderation/preprint-moderation.model.ts b/src/app/features/moderation/store/preprint-moderation/preprint-moderation.model.ts index d60668393..549e9a270 100644 --- a/src/app/features/moderation/store/preprint-moderation/preprint-moderation.model.ts +++ b/src/app/features/moderation/store/preprint-moderation/preprint-moderation.model.ts @@ -8,7 +8,7 @@ export interface PreprintModerationStateModel { reviewActions: AsyncStateWithTotalCount; } -export const PREPRINT_MODERATION_STATE_DEFAULTS = { +export const PREPRINT_MODERATION_STATE_DEFAULTS: PreprintModerationStateModel = { preprintProviders: { data: [], isLoading: false, diff --git a/src/app/features/moderation/store/preprint-moderation/preprint-moderation.state.ts b/src/app/features/moderation/store/preprint-moderation/preprint-moderation.state.ts index e2e3aca95..e05df61e4 100644 --- a/src/app/features/moderation/store/preprint-moderation/preprint-moderation.state.ts +++ b/src/app/features/moderation/store/preprint-moderation/preprint-moderation.state.ts @@ -1,7 +1,7 @@ import { Action, State, StateContext } from '@ngxs/store'; import { patch } from '@ngxs/store/operators'; -import { catchError, tap } from 'rxjs'; +import { catchError, forkJoin, map, switchMap, tap } from 'rxjs'; import { inject, Injectable } from '@angular/core'; @@ -25,6 +25,18 @@ export class PreprintModerationState { ctx.setState(patch({ preprintProviders: patch({ isLoading: true }) })); return this.preprintModerationService.getPreprintProvidersToModerate().pipe( + switchMap((items) => + forkJoin( + items.map((item) => + this.preprintModerationService.getPreprintProvider(item.id).pipe( + map((totalCount) => ({ + ...item, + submissionCount: totalCount, + })) + ) + ) + ) + ), tap((data) => { ctx.setState( patch({ diff --git a/src/app/features/preprints/models/preprint-provider.models.ts b/src/app/features/preprints/models/preprint-provider.models.ts index a0d61d178..994d5d13a 100644 --- a/src/app/features/preprints/models/preprint-provider.models.ts +++ b/src/app/features/preprints/models/preprint-provider.models.ts @@ -26,4 +26,5 @@ export interface PreprintProviderShortInfo { descriptionHtml: string; whiteWideImageUrl: string; squareColorNoTransparentImageUrl: string; + submissionCount?: number; } From d7aacc28deb56c0e341c683f4085cd1c9f122254 Mon Sep 17 00:00:00 2001 From: nsemets Date: Mon, 14 Jul 2025 18:42:50 +0300 Subject: [PATCH 3/7] fix(warning): fixed warning for project files --- .../files/pages/project-files/project-files.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/features/project/files/pages/project-files/project-files.component.html b/src/app/features/project/files/pages/project-files/project-files.component.html index afd79db36..aee373391 100644 --- a/src/app/features/project/files/pages/project-files/project-files.component.html +++ b/src/app/features/project/files/pages/project-files/project-files.component.html @@ -8,7 +8,7 @@ Date: Mon, 14 Jul 2025 18:45:32 +0300 Subject: [PATCH 4/7] fix(format): fixed format --- src/app/features/preprints/preprints.routes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/features/preprints/preprints.routes.ts b/src/app/features/preprints/preprints.routes.ts index 0e8295325..ab5bcffe9 100644 --- a/src/app/features/preprints/preprints.routes.ts +++ b/src/app/features/preprints/preprints.routes.ts @@ -8,8 +8,8 @@ import { PreprintStepperState } from '@osf/features/preprints/store/preprint-ste import { PreprintsDiscoverState } from '@osf/features/preprints/store/preprints-discover'; import { PreprintsResourcesFiltersState } from '@osf/features/preprints/store/preprints-resources-filters'; import { PreprintsResourcesFiltersOptionsState } from '@osf/features/preprints/store/preprints-resources-filters-options'; -import { ConfirmLeavingGuard } from '@shared/guards'; import { ResourceType } from '@shared/enums'; +import { ConfirmLeavingGuard } from '@shared/guards'; import { ContributorsState, SubjectsState } from '@shared/stores'; import { ModeratorsState } from '../moderation/store/moderation'; From 01d3bb558a370d9a9b593c7ec493d254539c48d4 Mon Sep 17 00:00:00 2001 From: nsemets Date: Tue, 15 Jul 2025 13:07:48 +0300 Subject: [PATCH 5/7] fix(update preprint): updated preprint --- .../update-preprint-stepper.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/features/preprints/pages/update-preprint-stepper/update-preprint-stepper.component.ts b/src/app/features/preprints/pages/update-preprint-stepper/update-preprint-stepper.component.ts index 16a6dbd9a..44f167997 100644 --- a/src/app/features/preprints/pages/update-preprint-stepper/update-preprint-stepper.component.ts +++ b/src/app/features/preprints/pages/update-preprint-stepper/update-preprint-stepper.component.ts @@ -98,7 +98,7 @@ export class UpdatePreprintStepperComponent implements OnInit, OnDestroy, CanDea preprintProvider = select(PreprintProvidersSelectors.getPreprintProviderDetails(this.providerId())); isPreprintProviderLoading = select(PreprintProvidersSelectors.isPreprintProviderDetailsLoading); hasBeenSubmitted = select(PreprintStepperSelectors.hasBeenSubmitted); - currentStep = signal(updatePreprintSteps[4]); + currentStep = signal(updatePreprintSteps[0]); isWeb = toSignal(inject(IS_WEB)); readonly PreprintSteps = PreprintSteps; From dc3e53673b2914b271b894320b35ede5f781cbe4 Mon Sep 17 00:00:00 2001 From: nsemets Date: Tue, 15 Jul 2025 13:23:05 +0300 Subject: [PATCH 6/7] fix(moderation): changed tabs to routing --- .../collections/collections.routes.ts | 9 +-- .../collection-moderation.routes.ts | 48 ++++++++++++++ .../moderators-list.component.ts | 9 +-- .../my-reviewing-navigation.component.html | 2 +- .../collection-moderation-tabs.const.ts | 4 +- .../preprint-moderation-tabs.const.ts | 6 +- .../registry-moderation-tabs.const.ts | 4 +- .../enums/collection-moderation-tab.enum.ts | 6 +- .../enums/preprint-moderation-tab.enum.ts | 10 +-- .../enums/registry-moderation-tab.enum.ts | 8 +-- .../collection-moderation.component.html | 15 +---- .../collection-moderation.component.ts | 32 +++++----- .../preprint-moderation.component.html | 23 +------ .../preprint-moderation.component.ts | 36 +++++------ .../registries-moderation.component.html | 19 +----- .../registries-moderation.component.ts | 34 +++++----- .../moderation/preprint-moderation.routes.ts | 64 +++++++++++++++++++ .../moderation/registry-moderation.routes.ts | 54 ++++++++++++++++ .../features/preprints/preprints.routes.ts | 23 +++---- .../features/registries/registries.routes.ts | 9 +-- 20 files changed, 262 insertions(+), 153 deletions(-) create mode 100644 src/app/features/moderation/collection-moderation.routes.ts create mode 100644 src/app/features/moderation/preprint-moderation.routes.ts create mode 100644 src/app/features/moderation/registry-moderation.routes.ts diff --git a/src/app/features/collections/collections.routes.ts b/src/app/features/collections/collections.routes.ts index dbb9388eb..3e5412ab7 100644 --- a/src/app/features/collections/collections.routes.ts +++ b/src/app/features/collections/collections.routes.ts @@ -7,8 +7,6 @@ import { CollectionsState } from '@osf/features/collections/store/collections'; import { ConfirmLeavingGuard } from '@shared/guards'; import { ContributorsState, ProjectsState } from '@shared/stores'; -import { ModeratorsState } from '../moderation/store/moderation'; - export const collectionsRoutes: Routes = [ { path: '', @@ -45,11 +43,8 @@ export const collectionsRoutes: Routes = [ }, { path: ':id/moderation', - loadComponent: () => - import('@osf/features/moderation/pages/collection-moderation/collection-moderation.component').then( - (m) => m.CollectionModerationComponent - ), - providers: [provideStates([ModeratorsState])], + loadChildren: () => + import('@osf/features/moderation/collection-moderation.routes').then((m) => m.collectionModerationRoutes), }, ], }, diff --git a/src/app/features/moderation/collection-moderation.routes.ts b/src/app/features/moderation/collection-moderation.routes.ts new file mode 100644 index 000000000..8a32fd3ba --- /dev/null +++ b/src/app/features/moderation/collection-moderation.routes.ts @@ -0,0 +1,48 @@ +import { provideStates } from '@ngxs/store'; + +import { Routes } from '@angular/router'; + +import { ResourceType } from '@osf/shared/enums'; + +import { ModeratorsState } from './store/moderation'; +import { CollectionModerationTab } from './enums'; + +export const collectionModerationRoutes: Routes = [ + { + path: '', + loadComponent: () => + import('@osf/features/moderation/pages/collection-moderation/collection-moderation.component').then( + (m) => m.CollectionModerationComponent + ), + children: [ + { + path: '', + pathMatch: 'full', + redirectTo: 'all-items', + }, + { + path: 'all-items', + loadComponent: () => + import('./components/collection-moderation-submissions/collection-moderation-submissions.component').then( + (m) => m.CollectionModerationSubmissionsComponent + ), + data: { tab: CollectionModerationTab.AllItems, skipBreadcrumbs: true }, + }, + { + path: 'moderators', + loadComponent: () => + import('./components/moderators-list/moderators-list.component').then((m) => m.ModeratorsListComponent), + data: { resourceType: ResourceType.Collection, tab: CollectionModerationTab.Moderators, skipBreadcrumbs: true }, + providers: [provideStates([ModeratorsState])], + }, + { + path: 'settings', + loadComponent: () => + import('./components/notification-settings/notification-settings.component').then( + (m) => m.NotificationSettingsComponent + ), + data: { tab: CollectionModerationTab.Settings, skipBreadcrumbs: true }, + }, + ], + }, +]; diff --git a/src/app/features/moderation/components/moderators-list/moderators-list.component.ts b/src/app/features/moderation/components/moderators-list/moderators-list.component.ts index 6ea136a84..1cdf5c759 100644 --- a/src/app/features/moderation/components/moderators-list/moderators-list.component.ts +++ b/src/app/features/moderation/components/moderators-list/moderators-list.component.ts @@ -7,7 +7,7 @@ import { DialogService } from 'primeng/dynamicdialog'; import { debounceTime, distinctUntilChanged, filter, forkJoin, map, of, skip } from 'rxjs'; -import { ChangeDetectionStrategy, Component, DestroyRef, effect, inject, input, OnInit, signal } from '@angular/core'; +import { ChangeDetectionStrategy, Component, DestroyRef, effect, inject, OnInit, Signal, signal } from '@angular/core'; import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop'; import { FormControl } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; @@ -39,8 +39,6 @@ import { ModeratorsTableComponent } from '../moderators-table/moderators-table.c providers: [DialogService], }) export class ModeratorsListComponent implements OnInit { - resourceType = input.required(); - protected searchControl = new FormControl(''); private readonly route = inject(ActivatedRoute); @@ -50,7 +48,10 @@ export class ModeratorsListComponent implements OnInit { private readonly dialogService = inject(DialogService); private readonly toastService = inject(ToastService); - providerId = toSignal(this.route.params.pipe(map((params) => params['id'])) ?? of(undefined)); + readonly providerId = toSignal(this.route.parent?.params.pipe(map((params) => params['id'])) ?? of(undefined)); + readonly resourceType: Signal = toSignal( + this.route.data.pipe(map((params) => params['resourceType'])) ?? of(undefined) + ); moderators = signal([]); initialModerators = select(ModeratorsSelectors.getModerators); diff --git a/src/app/features/moderation/components/my-reviewing-navigation/my-reviewing-navigation.component.html b/src/app/features/moderation/components/my-reviewing-navigation/my-reviewing-navigation.component.html index b893d2049..22f41ee90 100644 --- a/src/app/features/moderation/components/my-reviewing-navigation/my-reviewing-navigation.component.html +++ b/src/app/features/moderation/components/my-reviewing-navigation/my-reviewing-navigation.component.html @@ -9,7 +9,7 @@

{{ provider().name }}

[link]="true" [label]="tab.label | translate" [badge]="badge" - [routerLink]="['/preprints', provider().id, 'moderation']" + [routerLink]="['/preprints', provider().id, 'moderation', tab.value]" > }
diff --git a/src/app/features/moderation/constants/collection-moderation-tabs.const.ts b/src/app/features/moderation/constants/collection-moderation-tabs.const.ts index a4975f447..758261f8d 100644 --- a/src/app/features/moderation/constants/collection-moderation-tabs.const.ts +++ b/src/app/features/moderation/constants/collection-moderation-tabs.const.ts @@ -1,8 +1,8 @@ -import { SelectOption, TabOption } from '@osf/shared/models'; +import { CustomOption, SelectOption } from '@osf/shared/models'; import { CollectionModerationTab, ModeratorPermission } from '../enums'; -export const COLLECTION_MODERATION_TABS: TabOption[] = [ +export const COLLECTION_MODERATION_TABS: CustomOption[] = [ { label: 'moderation.allItems', value: CollectionModerationTab.AllItems }, { label: 'moderation.moderators', value: CollectionModerationTab.Moderators }, { label: 'moderation.settings', value: CollectionModerationTab.Settings }, diff --git a/src/app/features/moderation/constants/preprint-moderation-tabs.const.ts b/src/app/features/moderation/constants/preprint-moderation-tabs.const.ts index 5f0b29d68..f12c02823 100644 --- a/src/app/features/moderation/constants/preprint-moderation-tabs.const.ts +++ b/src/app/features/moderation/constants/preprint-moderation-tabs.const.ts @@ -1,8 +1,8 @@ -import { TabOption } from '@osf/shared/models'; +import { CustomOption } from '@osf/shared/models'; import { PreprintModerationTab } from '../enums'; -export const PREPRINT_MODERATION_TABS: TabOption[] = [ +export const PREPRINT_MODERATION_TABS: CustomOption[] = [ { label: 'moderation.submissions', value: PreprintModerationTab.Submissions }, { label: 'moderation.withdrawalRequest', value: PreprintModerationTab.WithdrawalRequests }, { label: 'moderation.moderators', value: PreprintModerationTab.Moderators }, @@ -10,7 +10,7 @@ export const PREPRINT_MODERATION_TABS: TabOption[] = [ { label: 'moderation.settings', value: PreprintModerationTab.Settings }, ]; -export const PREPRINT_REVIEWING_TABS: TabOption[] = [ +export const PREPRINT_REVIEWING_TABS: CustomOption[] = [ { label: 'moderation.submissions', value: PreprintModerationTab.Submissions }, { label: 'moderation.moderators', value: PreprintModerationTab.Moderators }, { label: 'moderation.notifications', value: PreprintModerationTab.Notifications }, diff --git a/src/app/features/moderation/constants/registry-moderation-tabs.const.ts b/src/app/features/moderation/constants/registry-moderation-tabs.const.ts index f30ecdf45..57143a564 100644 --- a/src/app/features/moderation/constants/registry-moderation-tabs.const.ts +++ b/src/app/features/moderation/constants/registry-moderation-tabs.const.ts @@ -1,8 +1,8 @@ -import { TabOption } from '@osf/shared/models'; +import { CustomOption } from '@osf/shared/models'; import { RegistryModerationTab } from '../enums'; -export const REGISTRY_MODERATION_TABS: TabOption[] = [ +export const REGISTRY_MODERATION_TABS: CustomOption[] = [ { label: 'moderation.submitted', value: RegistryModerationTab.Submitted }, { label: 'moderation.pending', value: RegistryModerationTab.Pending }, { label: 'moderation.moderators', value: RegistryModerationTab.Moderators }, diff --git a/src/app/features/moderation/enums/collection-moderation-tab.enum.ts b/src/app/features/moderation/enums/collection-moderation-tab.enum.ts index 609112aa4..9eee39bfc 100644 --- a/src/app/features/moderation/enums/collection-moderation-tab.enum.ts +++ b/src/app/features/moderation/enums/collection-moderation-tab.enum.ts @@ -1,5 +1,5 @@ export enum CollectionModerationTab { - AllItems = 1, - Moderators, - Settings, + AllItems = 'all-items', + Moderators = 'moderators', + Settings = 'settings', } diff --git a/src/app/features/moderation/enums/preprint-moderation-tab.enum.ts b/src/app/features/moderation/enums/preprint-moderation-tab.enum.ts index fb89a566e..ba240716d 100644 --- a/src/app/features/moderation/enums/preprint-moderation-tab.enum.ts +++ b/src/app/features/moderation/enums/preprint-moderation-tab.enum.ts @@ -1,7 +1,7 @@ export enum PreprintModerationTab { - Submissions = 1, - WithdrawalRequests, - Moderators, - Notifications, - Settings, + Submissions = 'submissions', + WithdrawalRequests = 'withdrawals', + Moderators = 'moderators', + Notifications = 'notifications', + Settings = 'settings', } diff --git a/src/app/features/moderation/enums/registry-moderation-tab.enum.ts b/src/app/features/moderation/enums/registry-moderation-tab.enum.ts index 098d63016..26ca6ce6b 100644 --- a/src/app/features/moderation/enums/registry-moderation-tab.enum.ts +++ b/src/app/features/moderation/enums/registry-moderation-tab.enum.ts @@ -1,6 +1,6 @@ export enum RegistryModerationTab { - Submitted = 1, - Pending, - Moderators, - Settings, + Submitted = 'submitted', + Pending = 'pending', + Moderators = 'moderators', + Settings = 'settings', } diff --git a/src/app/features/moderation/pages/collection-moderation/collection-moderation.component.html b/src/app/features/moderation/pages/collection-moderation/collection-moderation.component.html index e42c22b89..b8148af05 100644 --- a/src/app/features/moderation/pages/collection-moderation/collection-moderation.component.html +++ b/src/app/features/moderation/pages/collection-moderation/collection-moderation.component.html @@ -2,7 +2,7 @@
- + @if (isMedium()) { @for (item of tabOptions; track $index) { @@ -18,20 +18,11 @@ [options]="tabOptions" [fullWidth]="true" [(selectedValue)]="selectedTab" + (changeValue)="onTabChange($event)" > } - - - - - - - - - - - +
diff --git a/src/app/features/moderation/pages/collection-moderation/collection-moderation.component.ts b/src/app/features/moderation/pages/collection-moderation/collection-moderation.component.ts index 90bf0c043..99846ce20 100644 --- a/src/app/features/moderation/pages/collection-moderation/collection-moderation.component.ts +++ b/src/app/features/moderation/pages/collection-moderation/collection-moderation.component.ts @@ -1,20 +1,17 @@ import { TranslatePipe } from '@ngx-translate/core'; -import { Tab, TabList, TabPanel, TabPanels, Tabs } from 'primeng/tabs'; +import { Tab, TabList, TabPanels, Tabs } from 'primeng/tabs'; -import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; +import { ChangeDetectionStrategy, Component, inject, OnInit } from '@angular/core'; import { toSignal } from '@angular/core/rxjs-interop'; import { FormsModule } from '@angular/forms'; +import { ActivatedRoute, Router, RouterOutlet } from '@angular/router'; +import { Primitive } from '@osf/core/helpers'; import { SelectComponent, SubHeaderComponent } from '@osf/shared/components'; import { ResourceType } from '@osf/shared/enums'; import { IS_MEDIUM } from '@osf/shared/utils'; -import { - CollectionModerationSubmissionsComponent, - ModeratorsListComponent, - NotificationSettingsComponent, -} from '../../components'; import { COLLECTION_MODERATION_TABS } from '../../constants'; import { CollectionModerationTab } from '../../enums'; @@ -25,29 +22,32 @@ import { CollectionModerationTab } from '../../enums'; TabList, Tabs, Tab, - TabPanel, TabPanels, TranslatePipe, FormsModule, SelectComponent, - NotificationSettingsComponent, - ModeratorsListComponent, - CollectionModerationSubmissionsComponent, + RouterOutlet, ], templateUrl: './collection-moderation.component.html', styleUrl: './collection-moderation.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, }) -export class CollectionModerationComponent { +export class CollectionModerationComponent implements OnInit { readonly resourceType = ResourceType.Collection; + readonly route = inject(ActivatedRoute); + readonly router = inject(Router); readonly tabOptions = COLLECTION_MODERATION_TABS; - readonly tabs = CollectionModerationTab; readonly isMedium = toSignal(inject(IS_MEDIUM)); - selectedTab = this.tabs.AllItems; + selectedTab = CollectionModerationTab.AllItems; - onTabChange(index: number): void { - this.selectedTab = index; + ngOnInit(): void { + this.selectedTab = this.route.snapshot.firstChild?.data['tab']; + } + + onTabChange(value: Primitive): void { + this.selectedTab = value as CollectionModerationTab; + this.router.navigate([this.selectedTab], { relativeTo: this.route }); } } diff --git a/src/app/features/moderation/pages/preprint-moderation/preprint-moderation.component.html b/src/app/features/moderation/pages/preprint-moderation/preprint-moderation.component.html index 55c655ad0..b8148af05 100644 --- a/src/app/features/moderation/pages/preprint-moderation/preprint-moderation.component.html +++ b/src/app/features/moderation/pages/preprint-moderation/preprint-moderation.component.html @@ -2,7 +2,7 @@
- + @if (isMedium()) { @for (item of tabOptions; track $index) { @@ -18,28 +18,11 @@ [options]="tabOptions" [fullWidth]="true" [(selectedValue)]="selectedTab" + (changeValue)="onTabChange($event)" > } - - - - - - - - - - - - - - - - - - - +
diff --git a/src/app/features/moderation/pages/preprint-moderation/preprint-moderation.component.ts b/src/app/features/moderation/pages/preprint-moderation/preprint-moderation.component.ts index 34b0c18d5..501e6cc8f 100644 --- a/src/app/features/moderation/pages/preprint-moderation/preprint-moderation.component.ts +++ b/src/app/features/moderation/pages/preprint-moderation/preprint-moderation.component.ts @@ -1,18 +1,13 @@ import { TranslatePipe } from '@ngx-translate/core'; -import { Tab, TabList, TabPanel, TabPanels, Tabs } from 'primeng/tabs'; +import { Tab, TabList, TabPanels, Tabs } from 'primeng/tabs'; -import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; +import { ChangeDetectionStrategy, Component, inject, OnInit } from '@angular/core'; import { toSignal } from '@angular/core/rxjs-interop'; import { FormsModule } from '@angular/forms'; +import { ActivatedRoute, Router, RouterOutlet } from '@angular/router'; -import { - CollectionModerationSubmissionsComponent, - ModeratorsListComponent, - NotificationSettingsComponent, - PreprintModerationSettingsComponent, - RegistrySubmissionsComponent, -} from '@osf/features/moderation/components'; +import { Primitive } from '@osf/core/helpers'; import { PREPRINT_MODERATION_TABS } from '@osf/features/moderation/constants'; import { PreprintModerationTab } from '@osf/features/moderation/enums'; import { SelectComponent, SubHeaderComponent } from '@osf/shared/components'; @@ -26,31 +21,32 @@ import { IS_MEDIUM } from '@osf/shared/utils'; TabList, Tabs, Tab, - TabPanel, + RouterOutlet, TabPanels, TranslatePipe, FormsModule, SelectComponent, - ModeratorsListComponent, - CollectionModerationSubmissionsComponent, - RegistrySubmissionsComponent, - NotificationSettingsComponent, - PreprintModerationSettingsComponent, ], templateUrl: './preprint-moderation.component.html', styleUrl: './preprint-moderation.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, }) -export class PreprintModerationComponent { +export class PreprintModerationComponent implements OnInit { readonly resourceType = ResourceType.Preprint; + readonly route = inject(ActivatedRoute); + readonly router = inject(Router); readonly tabOptions = PREPRINT_MODERATION_TABS; - readonly tabs = PreprintModerationTab; readonly isMedium = toSignal(inject(IS_MEDIUM)); - selectedTab = this.tabs.Submissions; + selectedTab = PreprintModerationTab.Submissions; - onTabChange(index: number): void { - this.selectedTab = index; + ngOnInit(): void { + this.selectedTab = this.route.snapshot.firstChild?.data['tab'] as PreprintModerationTab; + } + + onTabChange(value: Primitive): void { + this.selectedTab = value as PreprintModerationTab; + this.router.navigate([this.selectedTab], { relativeTo: this.route }); } } diff --git a/src/app/features/moderation/pages/registries-moderation/registries-moderation.component.html b/src/app/features/moderation/pages/registries-moderation/registries-moderation.component.html index 28780f68a..b8148af05 100644 --- a/src/app/features/moderation/pages/registries-moderation/registries-moderation.component.html +++ b/src/app/features/moderation/pages/registries-moderation/registries-moderation.component.html @@ -2,7 +2,7 @@
- + @if (isMedium()) { @for (item of tabOptions; track $index) { @@ -18,24 +18,11 @@ [options]="tabOptions" [fullWidth]="true" [(selectedValue)]="selectedTab" + (changeValue)="onTabChange($event)" > } - - - - - - - - - - - - - - - +
diff --git a/src/app/features/moderation/pages/registries-moderation/registries-moderation.component.ts b/src/app/features/moderation/pages/registries-moderation/registries-moderation.component.ts index fcbc57d3e..983d72504 100644 --- a/src/app/features/moderation/pages/registries-moderation/registries-moderation.component.ts +++ b/src/app/features/moderation/pages/registries-moderation/registries-moderation.component.ts @@ -1,21 +1,17 @@ import { TranslatePipe } from '@ngx-translate/core'; -import { Tab, TabList, TabPanel, TabPanels, Tabs } from 'primeng/tabs'; +import { Tab, TabList, TabPanels, Tabs } from 'primeng/tabs'; -import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; +import { ChangeDetectionStrategy, Component, inject, OnInit } from '@angular/core'; import { toSignal } from '@angular/core/rxjs-interop'; import { FormsModule } from '@angular/forms'; +import { ActivatedRoute, Router, RouterOutlet } from '@angular/router'; +import { Primitive } from '@osf/core/helpers'; import { SelectComponent, SubHeaderComponent } from '@osf/shared/components'; import { ResourceType } from '@osf/shared/enums'; import { IS_MEDIUM } from '@osf/shared/utils'; -import { - CollectionModerationSubmissionsComponent, - ModeratorsListComponent, - RegistrySettingsComponent, - RegistrySubmissionsComponent, -} from '../../components'; import { REGISTRY_MODERATION_TABS } from '../../constants'; import { RegistryModerationTab } from '../../enums'; @@ -26,30 +22,32 @@ import { RegistryModerationTab } from '../../enums'; TabList, Tabs, Tab, - TabPanel, TabPanels, TranslatePipe, FormsModule, SelectComponent, - ModeratorsListComponent, - CollectionModerationSubmissionsComponent, - RegistrySubmissionsComponent, - RegistrySettingsComponent, + RouterOutlet, ], templateUrl: './registries-moderation.component.html', styleUrl: './registries-moderation.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, }) -export class RegistriesModerationComponent { +export class RegistriesModerationComponent implements OnInit { readonly resourceType = ResourceType.Registration; + readonly route = inject(ActivatedRoute); + readonly router = inject(Router); readonly tabOptions = REGISTRY_MODERATION_TABS; - readonly tabs = RegistryModerationTab; readonly isMedium = toSignal(inject(IS_MEDIUM)); - selectedTab = this.tabs.Submitted; + selectedTab = RegistryModerationTab.Submitted; - onTabChange(index: number): void { - this.selectedTab = index; + ngOnInit(): void { + this.selectedTab = this.route.snapshot.firstChild?.data['tab'] as RegistryModerationTab; + } + + onTabChange(value: Primitive): void { + this.selectedTab = value as RegistryModerationTab; + this.router.navigate([this.selectedTab], { relativeTo: this.route }); } } diff --git a/src/app/features/moderation/preprint-moderation.routes.ts b/src/app/features/moderation/preprint-moderation.routes.ts new file mode 100644 index 000000000..b56ef47ce --- /dev/null +++ b/src/app/features/moderation/preprint-moderation.routes.ts @@ -0,0 +1,64 @@ +import { provideStates } from '@ngxs/store'; + +import { Routes } from '@angular/router'; + +import { ResourceType } from '@osf/shared/enums'; + +import { ModeratorsState } from './store/moderation'; +import { PreprintModerationTab } from './enums'; + +export const preprintModerationRoutes: Routes = [ + { + path: '', + loadComponent: () => + import('@osf/features/moderation/pages/preprint-moderation/preprint-moderation.component').then( + (m) => m.PreprintModerationComponent + ), + children: [ + { + path: '', + pathMatch: 'full', + redirectTo: 'submissions', + }, + { + path: 'submissions', + loadComponent: () => + import('./components/registry-submissions/registry-submissions.component').then( + (m) => m.RegistrySubmissionsComponent + ), + data: { tab: PreprintModerationTab.Submissions, skipBreadcrumbs: true }, + }, + { + path: 'withdrawals', + loadComponent: () => + import('./components/collection-moderation-submissions/collection-moderation-submissions.component').then( + (m) => m.CollectionModerationSubmissionsComponent + ), + data: { tab: PreprintModerationTab.WithdrawalRequests, skipBreadcrumbs: true }, + }, + { + path: 'moderators', + loadComponent: () => + import('./components/moderators-list/moderators-list.component').then((m) => m.ModeratorsListComponent), + data: { resourceType: ResourceType.Preprint, tab: PreprintModerationTab.Moderators, skipBreadcrumbs: true }, + providers: [provideStates([ModeratorsState])], + }, + { + path: 'notifications', + loadComponent: () => + import('./components/notification-settings/notification-settings.component').then( + (m) => m.NotificationSettingsComponent + ), + data: { tab: PreprintModerationTab.Notifications, skipBreadcrumbs: true }, + }, + { + path: 'settings', + loadComponent: () => + import('./components/preprint-moderation-settings/preprint-moderation-settings.component').then( + (m) => m.PreprintModerationSettingsComponent + ), + data: { tab: PreprintModerationTab.Settings, skipBreadcrumbs: true }, + }, + ], + }, +]; diff --git a/src/app/features/moderation/registry-moderation.routes.ts b/src/app/features/moderation/registry-moderation.routes.ts new file mode 100644 index 000000000..fa7b39ffd --- /dev/null +++ b/src/app/features/moderation/registry-moderation.routes.ts @@ -0,0 +1,54 @@ +import { provideStates } from '@ngxs/store'; + +import { Routes } from '@angular/router'; + +import { ResourceType } from '@osf/shared/enums'; + +import { ModeratorsState } from './store/moderation'; +import { RegistryModerationTab } from './enums'; + +export const registryModerationRoutes: Routes = [ + { + path: '', + loadComponent: () => + import('@osf/features/moderation/pages/registries-moderation/registries-moderation.component').then( + (m) => m.RegistriesModerationComponent + ), + children: [ + { + path: '', + pathMatch: 'full', + redirectTo: 'submitted', + }, + { + path: 'submitted', + loadComponent: () => + import('./components/registry-submissions/registry-submissions.component').then( + (m) => m.RegistrySubmissionsComponent + ), + data: { tab: RegistryModerationTab.Submitted, skipBreadcrumbs: true }, + }, + { + path: 'pending', + loadComponent: () => + import('./components/collection-moderation-submissions/collection-moderation-submissions.component').then( + (m) => m.CollectionModerationSubmissionsComponent + ), + data: { tab: RegistryModerationTab.Pending, skipBreadcrumbs: true }, + }, + { + path: 'moderators', + loadComponent: () => + import('./components/moderators-list/moderators-list.component').then((m) => m.ModeratorsListComponent), + data: { resourceType: ResourceType.Registration, tab: RegistryModerationTab.Moderators, skipBreadcrumbs: true }, + providers: [provideStates([ModeratorsState])], + }, + { + path: 'settings', + loadComponent: () => + import('./components/registry-settings/registry-settings.component').then((m) => m.RegistrySettingsComponent), + data: { tab: RegistryModerationTab.Settings, skipBreadcrumbs: true }, + }, + ], + }, +]; diff --git a/src/app/features/preprints/preprints.routes.ts b/src/app/features/preprints/preprints.routes.ts index ab5bcffe9..13ba075c5 100644 --- a/src/app/features/preprints/preprints.routes.ts +++ b/src/app/features/preprints/preprints.routes.ts @@ -12,7 +12,6 @@ import { ResourceType } from '@shared/enums'; import { ConfirmLeavingGuard } from '@shared/guards'; import { ContributorsState, SubjectsState } from '@shared/stores'; -import { ModeratorsState } from '../moderation/store/moderation'; import { PreprintModerationState } from '../moderation/store/preprint-moderation'; export const preprintsRoutes: Routes = [ @@ -76,12 +75,17 @@ export const preprintsRoutes: Routes = [ canDeactivate: [ConfirmLeavingGuard], }, { - path: ':id/moderation', + path: ':providerId/edit/:preprintId', loadComponent: () => - import('@osf/features/moderation/pages/preprint-moderation/preprint-moderation.component').then( - (m) => m.PreprintModerationComponent + import('@osf/features/preprints/pages/update-preprint-stepper/update-preprint-stepper.component').then( + (c) => c.UpdatePreprintStepperComponent ), - providers: [provideStates([ModeratorsState])], + canDeactivate: [ConfirmLeavingGuard], + }, + { + path: ':id/moderation', + loadChildren: () => + import('@osf/features/moderation/preprint-moderation.routes').then((mod) => mod.preprintModerationRoutes), }, { path: 'my-reviewing', @@ -89,16 +93,9 @@ export const preprintsRoutes: Routes = [ import('@osf/features/moderation/pages/my-preprint-reviewing/my-preprint-reviewing.component').then( (m) => m.MyPreprintReviewingComponent ), + data: { skipBreadcrumbs: true }, providers: [provideStates([PreprintModerationState])], }, - { - path: ':providerId/edit/:preprintId', - loadComponent: () => - import('@osf/features/preprints/pages/update-preprint-stepper/update-preprint-stepper.component').then( - (c) => c.UpdatePreprintStepperComponent - ), - canDeactivate: [ConfirmLeavingGuard], - }, ], }, ]; diff --git a/src/app/features/registries/registries.routes.ts b/src/app/features/registries/registries.routes.ts index fad5575b9..8dd5e3833 100644 --- a/src/app/features/registries/registries.routes.ts +++ b/src/app/features/registries/registries.routes.ts @@ -6,8 +6,6 @@ import { RegistriesComponent } from '@osf/features/registries/registries.compone import { RegistriesState } from '@osf/features/registries/store'; import { ContributorsState, SubjectsState } from '@osf/shared/stores'; -import { ModeratorsState } from '../moderation/store/moderation'; - import { LicensesHandlers, ProjectsHandlers, ProvidersHandlers } from './store/handlers'; import { LicensesService } from './services'; @@ -38,11 +36,8 @@ export const registriesRoutes: Routes = [ }, { path: ':id/moderation', - loadComponent: () => - import('@osf/features/moderation/pages/registries-moderation/registries-moderation.component').then( - (m) => m.RegistriesModerationComponent - ), - providers: [provideStates([ModeratorsState])], + loadChildren: () => + import('@osf/features/moderation/registry-moderation.routes').then((c) => c.registryModerationRoutes), }, { path: ':providerId/new', From b9435bf7c0cc2140bedcc53db7ddc5855ebd39cd Mon Sep 17 00:00:00 2001 From: nsemets Date: Tue, 15 Jul 2025 14:31:45 +0300 Subject: [PATCH 7/7] fix(bugs): fixed bugs --- src/app/core/constants/nav-items.constant.ts | 5 + .../collection-moderation.routes.ts | 6 +- .../my-preprint-reviewing.component.html | 2 +- .../moderation/preprint-moderation.routes.ts | 10 +- .../moderation/registry-moderation.routes.ts | 8 +- .../select-preprint-service.component.html | 6 +- .../features/preprints/preprints.routes.ts | 1 - .../metadata/project-metadata.component.html | 150 +++++++++--------- .../metadata/project-metadata.component.ts | 3 +- .../components/review/review.component.html | 2 +- .../my-registrations.component.html | 5 +- .../components/stepper/stepper.component.html | 4 +- .../tags-input/tags-input.component.html | 1 + src/assets/i18n/en.json | 6 +- 14 files changed, 106 insertions(+), 103 deletions(-) diff --git a/src/app/core/constants/nav-items.constant.ts b/src/app/core/constants/nav-items.constant.ts index 23c4de5e8..d27777895 100644 --- a/src/app/core/constants/nav-items.constant.ts +++ b/src/app/core/constants/nav-items.constant.ts @@ -60,6 +60,11 @@ export const MENU_ITEMS: MenuItem[] = [ label: 'navigation.preprintsSubRoutes.myPreprints', routerLinkActiveOptions: { exact: false }, }, + { + routerLink: '/preprints/my-reviewing', + label: 'navigation.preprintsSubRoutes.myReviewing', + routerLinkActiveOptions: { exact: true }, + }, ], }, { diff --git a/src/app/features/moderation/collection-moderation.routes.ts b/src/app/features/moderation/collection-moderation.routes.ts index 8a32fd3ba..9b9bc68a1 100644 --- a/src/app/features/moderation/collection-moderation.routes.ts +++ b/src/app/features/moderation/collection-moderation.routes.ts @@ -26,13 +26,13 @@ export const collectionModerationRoutes: Routes = [ import('./components/collection-moderation-submissions/collection-moderation-submissions.component').then( (m) => m.CollectionModerationSubmissionsComponent ), - data: { tab: CollectionModerationTab.AllItems, skipBreadcrumbs: true }, + data: { tab: CollectionModerationTab.AllItems }, }, { path: 'moderators', loadComponent: () => import('./components/moderators-list/moderators-list.component').then((m) => m.ModeratorsListComponent), - data: { resourceType: ResourceType.Collection, tab: CollectionModerationTab.Moderators, skipBreadcrumbs: true }, + data: { resourceType: ResourceType.Collection, tab: CollectionModerationTab.Moderators }, providers: [provideStates([ModeratorsState])], }, { @@ -41,7 +41,7 @@ export const collectionModerationRoutes: Routes = [ import('./components/notification-settings/notification-settings.component').then( (m) => m.NotificationSettingsComponent ), - data: { tab: CollectionModerationTab.Settings, skipBreadcrumbs: true }, + data: { tab: CollectionModerationTab.Settings }, }, ], }, diff --git a/src/app/features/moderation/pages/my-preprint-reviewing/my-preprint-reviewing.component.html b/src/app/features/moderation/pages/my-preprint-reviewing/my-preprint-reviewing.component.html index 9c10d5c94..f2d2847a9 100644 --- a/src/app/features/moderation/pages/my-preprint-reviewing/my-preprint-reviewing.component.html +++ b/src/app/features/moderation/pages/my-preprint-reviewing/my-preprint-reviewing.component.html @@ -16,7 +16,7 @@

{{ 'project.overview.recentActivity.title' | translate }}

-

{{ 'navigation.preprintsSubRoutes.myReviewing' | translate }}

+

{{ 'preprints.providers' | translate }}

@if (isPreprintProvidersLoading()) { diff --git a/src/app/features/moderation/preprint-moderation.routes.ts b/src/app/features/moderation/preprint-moderation.routes.ts index b56ef47ce..1a2e6cef2 100644 --- a/src/app/features/moderation/preprint-moderation.routes.ts +++ b/src/app/features/moderation/preprint-moderation.routes.ts @@ -26,7 +26,7 @@ export const preprintModerationRoutes: Routes = [ import('./components/registry-submissions/registry-submissions.component').then( (m) => m.RegistrySubmissionsComponent ), - data: { tab: PreprintModerationTab.Submissions, skipBreadcrumbs: true }, + data: { tab: PreprintModerationTab.Submissions }, }, { path: 'withdrawals', @@ -34,13 +34,13 @@ export const preprintModerationRoutes: Routes = [ import('./components/collection-moderation-submissions/collection-moderation-submissions.component').then( (m) => m.CollectionModerationSubmissionsComponent ), - data: { tab: PreprintModerationTab.WithdrawalRequests, skipBreadcrumbs: true }, + data: { tab: PreprintModerationTab.WithdrawalRequests }, }, { path: 'moderators', loadComponent: () => import('./components/moderators-list/moderators-list.component').then((m) => m.ModeratorsListComponent), - data: { resourceType: ResourceType.Preprint, tab: PreprintModerationTab.Moderators, skipBreadcrumbs: true }, + data: { resourceType: ResourceType.Preprint, tab: PreprintModerationTab.Moderators }, providers: [provideStates([ModeratorsState])], }, { @@ -49,7 +49,7 @@ export const preprintModerationRoutes: Routes = [ import('./components/notification-settings/notification-settings.component').then( (m) => m.NotificationSettingsComponent ), - data: { tab: PreprintModerationTab.Notifications, skipBreadcrumbs: true }, + data: { tab: PreprintModerationTab.Notifications }, }, { path: 'settings', @@ -57,7 +57,7 @@ export const preprintModerationRoutes: Routes = [ import('./components/preprint-moderation-settings/preprint-moderation-settings.component').then( (m) => m.PreprintModerationSettingsComponent ), - data: { tab: PreprintModerationTab.Settings, skipBreadcrumbs: true }, + data: { tab: PreprintModerationTab.Settings }, }, ], }, diff --git a/src/app/features/moderation/registry-moderation.routes.ts b/src/app/features/moderation/registry-moderation.routes.ts index fa7b39ffd..d78fded4c 100644 --- a/src/app/features/moderation/registry-moderation.routes.ts +++ b/src/app/features/moderation/registry-moderation.routes.ts @@ -26,7 +26,7 @@ export const registryModerationRoutes: Routes = [ import('./components/registry-submissions/registry-submissions.component').then( (m) => m.RegistrySubmissionsComponent ), - data: { tab: RegistryModerationTab.Submitted, skipBreadcrumbs: true }, + data: { tab: RegistryModerationTab.Submitted }, }, { path: 'pending', @@ -34,20 +34,20 @@ export const registryModerationRoutes: Routes = [ import('./components/collection-moderation-submissions/collection-moderation-submissions.component').then( (m) => m.CollectionModerationSubmissionsComponent ), - data: { tab: RegistryModerationTab.Pending, skipBreadcrumbs: true }, + data: { tab: RegistryModerationTab.Pending }, }, { path: 'moderators', loadComponent: () => import('./components/moderators-list/moderators-list.component').then((m) => m.ModeratorsListComponent), - data: { resourceType: ResourceType.Registration, tab: RegistryModerationTab.Moderators, skipBreadcrumbs: true }, + data: { resourceType: ResourceType.Registration, tab: RegistryModerationTab.Moderators }, providers: [provideStates([ModeratorsState])], }, { path: 'settings', loadComponent: () => import('./components/registry-settings/registry-settings.component').then((m) => m.RegistrySettingsComponent), - data: { tab: RegistryModerationTab.Settings, skipBreadcrumbs: true }, + data: { tab: RegistryModerationTab.Settings }, }, ], }, diff --git a/src/app/features/preprints/pages/select-preprint-service/select-preprint-service.component.html b/src/app/features/preprints/pages/select-preprint-service/select-preprint-service.component.html index 35522cf5b..ada04f07c 100644 --- a/src/app/features/preprints/pages/select-preprint-service/select-preprint-service.component.html +++ b/src/app/features/preprints/pages/select-preprint-service/select-preprint-service.component.html @@ -6,9 +6,9 @@

{{ 'preprints.selectService.sectionTitle' | translate }}

{{ 'preprints.selectService.description' | translate }} - {{ - 'preprints.selectService.learnMore' | translate - }} + + {{ 'preprints.selectService.learnMore' | translate }} +

@if (areProvidersLoading()) { diff --git a/src/app/features/preprints/preprints.routes.ts b/src/app/features/preprints/preprints.routes.ts index 13ba075c5..adaa00bbf 100644 --- a/src/app/features/preprints/preprints.routes.ts +++ b/src/app/features/preprints/preprints.routes.ts @@ -93,7 +93,6 @@ export const preprintsRoutes: Routes = [ import('@osf/features/moderation/pages/my-preprint-reviewing/my-preprint-reviewing.component').then( (m) => m.MyPreprintReviewingComponent ), - data: { skipBreadcrumbs: true }, providers: [provideStates([PreprintModerationState])], }, ], diff --git a/src/app/features/project/metadata/project-metadata.component.html b/src/app/features/project/metadata/project-metadata.component.html index 1d7f32b0d..b477e407a 100644 --- a/src/app/features/project/metadata/project-metadata.component.html +++ b/src/app/features/project/metadata/project-metadata.component.html @@ -24,89 +24,83 @@ @for (tab of tabs(); track $index) { @if (tab.type === 'project') { - @if (currentProjectLoading()) { -
- -
- } @else { -
-
- -
-
-

- {{ 'project.overview.metadata.dateCreated' | translate }} -

- -

- {{ currentProject()?.dateCreated | date: 'MMM d, y, h:mm a' }} -

-
- -
-

- {{ 'project.overview.metadata.dateUpdated' | translate }} -

- -

- {{ currentProject()?.dateModified | date: 'MMM d, y, h:mm a' }} -

-
+
+
+ +
+
+

+ {{ 'project.overview.metadata.dateCreated' | translate }} +

+ +

+ {{ currentProject()?.dateCreated | date: 'MMM d, y, h:mm a' }} +

- - - - - - - - - - - -
-
- - - - - -
-

{{ 'project.overview.metadata.tags' | translate }}

- - +
+

+ {{ 'project.overview.metadata.dateUpdated' | translate }} +

+ +

+ {{ currentProject()?.dateModified | date: 'MMM d, y, h:mm a' }} +

- +
+
- -
+ + + + + + + + +
- } + +
+ + + + + +
+

{{ 'project.overview.metadata.tags' | translate }}

+ + +
+
+ + +
+
} @else {
@if (selectedCedarTemplate() && selectedCedarRecord()) { diff --git a/src/app/features/project/metadata/project-metadata.component.ts b/src/app/features/project/metadata/project-metadata.component.ts index a7228f831..e603d6e5e 100644 --- a/src/app/features/project/metadata/project-metadata.component.ts +++ b/src/app/features/project/metadata/project-metadata.component.ts @@ -55,7 +55,7 @@ import { import { ResourceType } from '@osf/shared/enums'; import { ContributorsSelectors, GetAllContributors } from '@osf/shared/stores'; import { LoadingSpinnerComponent, SubHeaderComponent, TagsInputComponent } from '@shared/components'; -import { CustomConfirmationService, ToastService } from '@shared/services'; +import { CustomConfirmationService, LoaderService, ToastService } from '@shared/services'; @Component({ selector: 'osf-project-metadata', @@ -93,6 +93,7 @@ export class ProjectMetadataComponent implements OnInit { private readonly dialogService = inject(DialogService); private readonly translateService = inject(TranslateService); private readonly toastService = inject(ToastService); + private readonly loaderService = inject(LoaderService); private readonly customConfirmationService = inject(CustomConfirmationService); tabs = signal<{ id: string; label: string; type: 'project' | 'cedar' }[]>([]); diff --git a/src/app/features/registries/components/review/review.component.html b/src/app/features/registries/components/review/review.component.html index 9c8aa0981..468e37121 100644 --- a/src/app/features/registries/components/review/review.component.html +++ b/src/app/features/registries/components/review/review.component.html @@ -1,4 +1,4 @@ -
+

{{ 'navigation.registration.metadata' | translate }}

diff --git a/src/app/features/registries/pages/my-registrations/my-registrations.component.html b/src/app/features/registries/pages/my-registrations/my-registrations.component.html index 3ca18a7ef..93e2fc49d 100644 --- a/src/app/features/registries/pages/my-registrations/my-registrations.component.html +++ b/src/app/features/registries/pages/my-registrations/my-registrations.component.html @@ -27,7 +27,7 @@ [(selectedValue)]="selectedTab" > } - + @if (isDraftRegistrationsLoading()) { @for (item of skeletons; track $index) { @@ -50,7 +50,6 @@ } - @if (isSubmittedRegistrationsLoading()) { @for (item of skeletons; track $index) { @@ -60,7 +59,7 @@ @if (submittedRegistrationsTotalCount() === 0) { } - @for (registration of submittedRegistrations(); track registration.registry) { + @for (registration of submittedRegistrations(); track $index) { } @if (submittedRegistrationsTotalCount() > itemsPerPage) { diff --git a/src/app/shared/components/stepper/stepper.component.html b/src/app/shared/components/stepper/stepper.component.html index 3b56e75cd..ba2f5d0f0 100644 --- a/src/app/shared/components/stepper/stepper.component.html +++ b/src/app/shared/components/stepper/stepper.component.html @@ -1,6 +1,6 @@
- @for (step of steps(); track step.value; let i = $index) { + @for (step of steps(); track $index; let i = $index) { @if (currentStep()) {
diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 4c385f236..0a21a5087 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -106,6 +106,9 @@ }, "placeholder": { "addTag": "Add tags" + }, + "hint": { + "tagSeparators": "Use enter or comma to create a tag." } }, "navigation": { @@ -1842,7 +1845,8 @@ } } } - } + }, + "providers": "Providers" }, "registries": { "title": "Registries",