Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
1c2e5bd
fix(share): updated share social button
nsemets Oct 20, 2025
a2c7f0e
fix(preprint-details): updated views and downloads
nsemets Oct 20, 2025
2f93fff
fix(preprint-details): updated order
nsemets Oct 20, 2025
5cb40d6
fix(preprint-details): fixed buttons width
nsemets Oct 20, 2025
687de18
fix(preprint-submission): updated contributors
nsemets Oct 20, 2025
02a1382
Merge pull request #682 from nsemets/fix/ANG-1065
brianjgeiger Oct 20, 2025
f47c730
Merge remote-tracking branch 'origin/feature/pbs-25.01' into fix/ENG-…
nsemets Oct 20, 2025
1450c1a
fix(unit-tests): added new unit tests
nsemets Oct 20, 2025
142e931
Merge pull request #681 from nsemets/fix/ENG-9257
brianjgeiger Oct 20, 2025
c041c0f
fix(schemas): updated schemas text display
nsemets Oct 20, 2025
923b301
fix(make-decision): added counter for comment
nsemets Oct 20, 2025
5d39ed5
Merge remote-tracking branch 'origin/feature/pbs-25.01' into fix/9227
nsemets Oct 20, 2025
772628d
Merge pull request #684 from nsemets/fix/9227
brianjgeiger Oct 20, 2025
2c0c849
fix(block-type): removed block types
nsemets Oct 21, 2025
e65d926
Merge pull request #683 from nsemets/fix/ENG-9250
nsemets Oct 21, 2025
9e4c835
fix(contributors): changed to bibliographic
nsemets Oct 21, 2025
1953864
fix(provider-logo): updated provider log size
nsemets Oct 21, 2025
78c33a1
Merge pull request #686 from nsemets/fix/ANG-1065
brianjgeiger Oct 21, 2025
8e9b045
fix(wiki): add legacy wiki redirect component and route
Ostap-Zherebetskyi Oct 21, 2025
c3eee8d
fix(preprints): added check for review workflow null
nsemets Oct 21, 2025
4acd35c
fix(wiki): remove standalone flag and adjust redirect method placement
Ostap-Zherebetskyi Oct 21, 2025
e8da054
Merge pull request #689 from nsemets/fix/ANG-9613
brianjgeiger Oct 21, 2025
f7258fb
Merge pull request #687 from nsemets/fix/ANG-9235
brianjgeiger Oct 21, 2025
35ea214
fix(wiki): Rename WikiRedirectComponent to LegacyWikiRedirectComponen…
Ostap-Zherebetskyi Oct 21, 2025
f98aff8
fix(legacy-wiki-redirect): Move loaderService.hide() to redirectWiki
Ostap-Zherebetskyi Oct 21, 2025
c5ad651
Merge pull request #688 from Ostap-Zherebetskyi/fix/legacy_wiki_redirect
nsemets Oct 21, 2025
15d7bef
fix(components): added load more button
nsemets Oct 21, 2025
6702b09
Merge remote-tracking branch 'origin/feature/pbs-25.01' into fix/ENG-…
nsemets Oct 21, 2025
859ad4e
Merge pull request #691 from nsemets/fix/ENG-9230
brianjgeiger Oct 21, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,14 @@
>
<div class="flex gap-3">
@let provider = collectionProvider();
@if (provider && provider.brand) {
<img class="collections-logo" alt="Collections Logo" height="64" [src]="provider.brand.heroLogoImageUrl" />

@if (provider && provider.assets) {
<img
class="collections-logo"
alt="Collections Logo"
height="80"
[src]="provider.assets.squareColorNoTransparent"
/>
}

<h1 class="collections-heading flex align-items-center">{{ collectionProvider()?.name }}</h1>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
@for (institution of institutions(); track $index) {
<a class="dark-blue-link" [routerLink]="[institution.id]">
<div class="border-1 border-round-xl grey-border-color px-5 py-4 flex align-items-center gap-4">
<img class="fit-contain" [ngSrc]="institution.assets.logo" [alt]="'Logo'" width="60" height="60" />
<img class="fit-contain" [ngSrc]="institution.assets.logo" [alt]="'Logo'" width="80" height="80" />

<h2>{{ institution.name }}</h2>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
<img
[ngSrc]="institution().assets.logo"
[alt]="institution().name"
width="60"
height="60"
width="80"
height="80"
class="fit-contain"
/>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,35 +1,54 @@
<div class="flex align-items-baseline gap-2 p-3">
<osf-icon [class]="reviewStatusIcon[status()].value" [iconClass]="reviewStatusIcon[status()].icon"></osf-icon>
<div class="resource">
<p-accordion (onOpen)="handleOpen()">
<p-accordion-panel value="0">
<p-accordion-header class="flex flex-row align-items-start gap-3 p-3">
<div osfStopPropagation class="flex align-items-baseline gap-2 font-normal">
<osf-icon [class]="reviewStatusIcon[status()].value" [iconClass]="reviewStatusIcon[status()].icon"></osf-icon>

<div>
<p-button
class="link-btn-no-padding"
styleClass="text-left"
link
[label]="submission().title"
(onClick)="selected.emit()"
/>
<div>
<p-button
class="link-btn-no-padding"
styleClass="text-left"
link
[label]="submission().title"
(onClick)="selected.emit()"
/>
@for (action of showAll ? submission().actions : submission().actions.slice(0, limitValue); track $index) {
<div class="flex flex-wrap align-items-baseline gap-1 mt-2">
<span>{{ actionLabel[action.toState] | translate }}</span>
<span>{{ action.dateModified | dateAgo }}</span>
<span>{{ 'moderation.submissionReview.by' | translate }}</span>
<span>{{ action.creator?.name }}</span>

@for (action of showAll ? submission().actions : submission().actions.slice(0, limitValue); track $index) {
<div class="flex flex-wrap gap-1 mt-2">
<span>{{ actionLabel[action.toState] | translate }}</span>
<span>{{ action.dateModified | dateAgo }}</span>
<span>{{ 'moderation.submissionReview.by' | translate }}</span>
<span>{{ action.creator?.name }}</span>
@if (action.comment.length) {
<osf-truncated-text class="font-italic" [text]="'- ' + action.comment" />
}
</div>
}

@if (action.comment.length) {
<osf-truncated-text class="font-italic" [text]="action.comment" />
}
</div>
}
@if (submission().actions.length > 1) {
<p-button
class="link-btn-no-padding block mt-2"
[link]="true"
[label]="(showAll ? 'common.buttons.hide' : 'moderation.showHistory') | translate"
(onClick)="toggleHistory()"
/>
}
</div>
</div>
</p-accordion-header>

@if (submission().actions.length > 1) {
<p-button
class="link-btn-no-padding block mt-2"
[link]="true"
[label]="(showAll ? 'common.buttons.hide' : 'moderation.showHistory') | translate"
(onClick)="toggleHistory()"
/>
}
</div>
<p-accordion-content>
<div class="flex align-items-center gap-1 p-3 pt-0 ml-3">
<p>{{ 'common.labels.contributors' | translate }}:</p>

@if (submission().contributorsLoading) {
<p-skeleton width="10rem" height="1.25rem" />
} @else {
<osf-contributors-list [contributors]="submission().contributors"></osf-contributors-list>
}
</div>
</p-accordion-content>
</p-accordion-panel>
</p-accordion>
</div>
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ import { MockComponents, MockPipes } from 'ng-mocks';

import { ComponentFixture, TestBed } from '@angular/core/testing';

import { IconComponent } from '@osf/shared/components';
import { ContributorsListComponent, IconComponent } from '@osf/shared/components';
import { DateAgoPipe } from '@osf/shared/pipes';

import { SubmissionReviewStatus } from '../../enums';
import { PreprintSubmission } from '../../models';
import { PreprintSubmissionModel } from '../../models';

import { PreprintSubmissionItemComponent } from './preprint-submission-item.component';

Expand All @@ -18,14 +18,14 @@ describe('PreprintSubmissionItemComponent', () => {
let component: PreprintSubmissionItemComponent;
let fixture: ComponentFixture<PreprintSubmissionItemComponent>;

const mockSubmission: PreprintSubmission = MOCK_PREPRINT_SUBMISSION;
const mockSubmission: PreprintSubmissionModel = MOCK_PREPRINT_SUBMISSION;

beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [
PreprintSubmissionItemComponent,
OSFTestingModule,
...MockComponents(IconComponent),
...MockComponents(IconComponent, ContributorsListComponent),
MockPipes(DateAgoPipe, TranslatePipe),
],
}).compileComponents();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,44 @@
import { TranslatePipe } from '@ngx-translate/core';

import { Accordion, AccordionContent, AccordionHeader, AccordionPanel } from 'primeng/accordion';
import { Button } from 'primeng/button';
import { Skeleton } from 'primeng/skeleton';

import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';

import { IconComponent, TruncatedTextComponent } from '@osf/shared/components';
import { ContributorsListComponent, IconComponent, TruncatedTextComponent } from '@osf/shared/components';
import { StopPropagationDirective } from '@osf/shared/directives';
import { DateAgoPipe } from '@osf/shared/pipes';

import { PREPRINT_ACTION_LABEL, ReviewStatusIcon } from '../../constants';
import { ActionStatus, SubmissionReviewStatus } from '../../enums';
import { PreprintSubmission, PreprintWithdrawalSubmission } from '../../models';
import { PreprintSubmissionModel, PreprintWithdrawalSubmission } from '../../models';

@Component({
selector: 'osf-preprint-submission-item',
imports: [IconComponent, DateAgoPipe, Button, TranslatePipe, TruncatedTextComponent],
imports: [
IconComponent,
DateAgoPipe,
Button,
TranslatePipe,
TruncatedTextComponent,
Accordion,
AccordionPanel,
AccordionHeader,
AccordionContent,
ContributorsListComponent,
Skeleton,
StopPropagationDirective,
],
templateUrl: './preprint-submission-item.component.html',
styleUrl: './preprint-submission-item.component.scss',
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class PreprintSubmissionItemComponent {
status = input.required<SubmissionReviewStatus>();
submission = input.required<PreprintSubmission | PreprintWithdrawalSubmission>();
submission = input.required<PreprintSubmissionModel | PreprintWithdrawalSubmission>();
selected = output<void>();
loadContributors = output<void>();

readonly reviewStatusIcon = ReviewStatusIcon;
readonly actionLabel = PREPRINT_ACTION_LABEL;
Expand All @@ -33,4 +50,8 @@ export class PreprintSubmissionItemComponent {
toggleHistory() {
this.showAll = !this.showAll;
}

handleOpen() {
this.loadContributors.emit();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
[submission]="item"
[status]="selectedReviewOption()"
(selected)="navigateToPreprint(item)"
(loadContributors)="loadContributors(item)"
></osf-preprint-submission-item>
</div>
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,12 @@ import {
} from '@osf/shared/components';
import { Primitive } from '@osf/shared/helpers';

import { PreprintSubmission } from '../../models';
import { GetPreprintSubmissions, PreprintModerationSelectors } from '../../store/preprint-moderation';
import { PreprintSubmissionModel } from '../../models';
import {
GetPreprintSubmissionContributors,
GetPreprintSubmissions,
PreprintModerationSelectors,
} from '../../store/preprint-moderation';

@Component({
selector: 'osf-preprint-submissions',
Expand Down Expand Up @@ -53,7 +57,10 @@ export class PreprintSubmissionsComponent implements OnInit {
this.route.parent?.params.pipe(map((params) => params['providerId'])) ?? of(undefined)
);

readonly actions = createDispatchMap({ getPreprintSubmissions: GetPreprintSubmissions });
readonly actions = createDispatchMap({
getPreprintSubmissions: GetPreprintSubmissions,
getPreprintSubmissionContributors: GetPreprintSubmissionContributors,
});

readonly submissions = select(PreprintModerationSelectors.getPreprintSubmissions);
readonly isLoading = select(PreprintModerationSelectors.arePreprintSubmissionsLoading);
Expand Down Expand Up @@ -112,14 +119,18 @@ export class PreprintSubmissionsComponent implements OnInit {
this.fetchSubmissions();
}

navigateToPreprint(item: PreprintSubmission) {
navigateToPreprint(item: PreprintSubmissionModel) {
const url = this.router.serializeUrl(
this.router.createUrlTree(['/preprints/', this.providerId(), item.id], { queryParams: { mode: 'moderator' } })
);

window.open(url, '_blank');
}

loadContributors(item: PreprintSubmissionModel) {
this.actions.getPreprintSubmissionContributors(item.id);
}

private getStatusFromQueryParams() {
const queryParams = this.route.snapshot.queryParams;
const statusValues = Object.values(SubmissionReviewStatus);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
[submission]="item"
[status]="selectedReviewOption()"
(selected)="navigateToPreprint(item)"
(loadContributors)="loadContributors(item)"
></osf-preprint-submission-item>
</div>
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,11 @@ import {
import { Primitive } from '@osf/shared/helpers';

import { PreprintWithdrawalSubmission } from '../../models';
import { GetPreprintWithdrawalSubmissions, PreprintModerationSelectors } from '../../store/preprint-moderation';
import {
GetPreprintWithdrawalSubmissionContributors,
GetPreprintWithdrawalSubmissions,
PreprintModerationSelectors,
} from '../../store/preprint-moderation';
import { PreprintSubmissionItemComponent } from '../preprint-submission-item/preprint-submission-item.component';

@Component({
Expand Down Expand Up @@ -53,7 +57,10 @@ export class PreprintWithdrawalSubmissionsComponent implements OnInit {
this.route.parent?.params.pipe(map((params) => params['providerId'])) ?? of(undefined)
);

readonly actions = createDispatchMap({ getPreprintWithdrawalSubmissions: GetPreprintWithdrawalSubmissions });
readonly actions = createDispatchMap({
getPreprintWithdrawalSubmissions: GetPreprintWithdrawalSubmissions,
getPreprintWithdrawalSubmissionContributors: GetPreprintWithdrawalSubmissionContributors,
});

readonly submissions = select(PreprintModerationSelectors.getPreprintWithdrawalSubmissions);
readonly isLoading = select(PreprintModerationSelectors.arePreprintWithdrawalSubmissionsLoading);
Expand Down Expand Up @@ -117,6 +124,10 @@ export class PreprintWithdrawalSubmissionsComponent implements OnInit {
window.open(url, '_blank');
}

loadContributors(item: PreprintWithdrawalSubmission) {
this.actions.getPreprintWithdrawalSubmissionContributors(item.id, item.preprintId);
}

private getStatusFromQueryParams() {
const queryParams = this.route.snapshot.queryParams;
const statusValues = Object.values(SubmissionReviewStatus);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ export class PreprintModerationMapper {
public: x.attributes.public,
reviewsState: x.attributes.reviews_state,
actions: [],
contributors: [],
totalContributors: 0,
})),
totalCount: response.meta.total,
pageSize: response.meta.per_page,
Expand All @@ -85,6 +87,8 @@ export class PreprintModerationMapper {
title: x.embeds.target.data.attributes.title,
preprintId: x.embeds.target.data.id,
actions: [],
contributors: [],
totalContributors: 0,
})),
totalCount: response.meta.total,
pageSize: response.meta.per_page,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
import { PaginatedData } from '@osf/shared/models';
import { ContributorModel, PaginatedData } from '@osf/shared/models';

import { ReviewAction } from './review-action.model';

export interface PreprintSubmissionPaginatedData extends PaginatedData<PreprintSubmission[]> {
export interface PreprintSubmissionPaginatedData extends PaginatedData<PreprintSubmissionModel[]> {
pendingCount: number;
acceptedCount: number;
rejectedCount: number;
withdrawnCount: number;
}

export interface PreprintSubmission {
export interface PreprintSubmissionModel {
id: string;
title: string;
reviewsState: string;
public: boolean;
actions: ReviewAction[];
contributors: ContributorModel[];
totalContributors: number;
contributorsLoading?: boolean;
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { PaginatedData } from '@osf/shared/models';
import { ContributorModel, PaginatedData } from '@osf/shared/models';

import { ReviewAction } from './review-action.model';

Expand All @@ -13,4 +13,7 @@ export interface PreprintWithdrawalSubmission {
title: string;
preprintId: string;
actions: ReviewAction[];
contributors: ContributorModel[];
totalContributors: number;
contributorsLoading?: boolean;
}
Loading
Loading