Skip to content

Commit a9a761e

Browse files
committed
get contributors for registry moderation cards
1 parent e07af82 commit a9a761e

File tree

9 files changed

+240
-59
lines changed

9 files changed

+240
-59
lines changed

src/app/features/moderation/components/preprint-submission-item/preprint-submission-item.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ export class PreprintSubmissionItemComponent {
5252

5353
hasMoreContributors = computed(() => {
5454
const submission = this.submission();
55+
console.log('submission ', submission);
5556
return submission.contributors.length < submission.totalContributors;
5657
});
5758

Lines changed: 75 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,76 @@
1-
<div class="flex align-items-baseline gap-2 p-3">
2-
<osf-icon [class]="reviewStatusIcon[status()].value" [iconClass]="reviewStatusIcon[status()].icon"></osf-icon>
3-
4-
<div>
5-
@if (isRejected) {
6-
<h4>{{ submission().title }}</h4>
7-
} @else {
8-
<p-button
9-
class="link-btn-no-padding"
10-
link
11-
styleClass="text-left"
12-
[label]="submission().title"
13-
(onClick)="selected.emit()"
14-
/>
15-
}
16-
17-
@if (submission().public && !submission().embargoEndDate) {
18-
<p class="flex flex-wrap gap-1 mt-2">{{ 'registry.overview.statuses.accepted.text' | translate }}</p>
19-
}
20-
21-
@if (submission().embargoEndDate) {
22-
<p class="flex flex-wrap gap-1 mt-2">
23-
{{ 'moderation.registryEmbargoedWithEndDate' | translate }}
24-
{{ submission().embargoEndDate | date: 'MMM d, y' }}
25-
</p>
26-
}
27-
28-
@for (action of showAll ? submission().actions : submission().actions.slice(0, limitValue); track $index) {
29-
<div class="flex flex-wrap gap-1 mt-2">
30-
<span>{{ registryActionLabel[action.toState] | translate }}</span>
31-
<span>{{ action.dateModified | dateAgo }}</span>
32-
<span>{{ 'moderation.submissionReview.by' | translate }}</span>
33-
<span>{{ action.creator?.name }}</span>
34-
35-
@if (action.toState === registryActionState.Accepted) {
36-
<span>{{ 'moderation.withNoEmbargo' | translate }}</span>
37-
}
38-
39-
@if (action.comment.length) {
40-
<osf-truncated-text class="font-italic" [text]="action.comment" />
41-
}
42-
</div>
43-
}
44-
45-
@if (submission().actions.length > 1) {
46-
<p-button
47-
class="link-btn-no-padding block mt-2"
48-
[link]="true"
49-
[label]="(showAll ? 'common.buttons.hide' : 'moderation.showHistory') | translate"
50-
(onClick)="toggleHistory()"
51-
/>
52-
}
53-
</div>
1+
<div class="resource">
2+
<p-accordion (onOpen)="handleOpen()">
3+
<p-accordion-panel value="0">
4+
<p-accordion-header class="flex flex-row align-items-start gap-3 p-3">
5+
<div osfStopPropagation class="flex align-items-baseline gap-2 font-normal">
6+
<osf-icon [class]="reviewStatusIcon[status()].value" [iconClass]="reviewStatusIcon[status()].icon"></osf-icon>
7+
8+
<div>
9+
@if (isRejected) {
10+
<h4>{{ submission().title }}</h4>
11+
} @else {
12+
<p-button
13+
class="link-btn-no-padding"
14+
link
15+
styleClass="text-left"
16+
[label]="submission().title"
17+
(onClick)="selected.emit()"
18+
/>
19+
}
20+
21+
@if (submission().public && !submission().embargoEndDate) {
22+
<p class="flex flex-wrap gap-1 mt-2">{{ 'registry.overview.statuses.accepted.text' | translate }}</p>
23+
}
24+
25+
@if (submission().embargoEndDate) {
26+
<p class="flex flex-wrap gap-1 mt-2">
27+
{{ 'moderation.registryEmbargoedWithEndDate' | translate }}
28+
{{ submission().embargoEndDate | date: 'MMM d, y' }}
29+
</p>
30+
}
31+
32+
@for (action of showAll ? submission().actions : submission().actions.slice(0, limitValue); track $index) {
33+
<div class="flex flex-wrap gap-1 mt-2">
34+
<span>{{ registryActionLabel[action.toState] | translate }}</span>
35+
<span>{{ action.dateModified | dateAgo }}</span>
36+
<span>{{ 'moderation.submissionReview.by' | translate }}</span>
37+
<span>{{ action.creator?.name }}</span>
38+
39+
@if (action.toState === registryActionState.Accepted) {
40+
<span>{{ 'moderation.withNoEmbargo' | translate }}</span>
41+
}
42+
43+
@if (action.comment.length) {
44+
<osf-truncated-text class="font-italic" [text]="action.comment" />
45+
}
46+
</div>
47+
}
48+
49+
@if (submission().actions.length > 1) {
50+
<p-button
51+
class="link-btn-no-padding block mt-2"
52+
[link]="true"
53+
[label]="(showAll ? 'common.buttons.hide' : 'moderation.showHistory') | translate"
54+
(onClick)="toggleHistory()"
55+
/>
56+
}
57+
</div>
58+
</div>
59+
</p-accordion-header>
60+
61+
<p-accordion-content>
62+
<div class="flex align-content-start gap-1 p-3 pt-0 ml-3">
63+
<p>{{ 'common.labels.contributors' | translate }}:</p>
64+
65+
<osf-contributors-list
66+
[contributors]="submission().contributors || []"
67+
[isLoading]="!!submission().contributorsLoading || false"
68+
[hasLoadMore]="hasMoreContributors()"
69+
(loadMoreContributors)="loadMoreContributors.emit()"
70+
>
71+
</osf-contributors-list>
72+
</div>
73+
</p-accordion-content>
74+
</p-accordion-panel>
75+
</p-accordion>
5476
</div>

src/app/features/moderation/components/registry-submission-item/registry-submission-item.component.ts

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import { TranslatePipe } from '@ngx-translate/core';
22

3+
import { Accordion, AccordionContent, AccordionHeader, AccordionPanel } from 'primeng/accordion';
34
import { Button } from 'primeng/button';
45

56
import { DatePipe } from '@angular/common';
6-
import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
7+
import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';
78

9+
import { ContributorsListComponent } from '@osf/shared/components/contributors-list/contributors-list.component';
810
import { IconComponent } from '@osf/shared/components/icon/icon.component';
911
import { TruncatedTextComponent } from '@osf/shared/components/truncated-text/truncated-text.component';
1012
import { DateAgoPipe } from '@osf/shared/pipes/date-ago.pipe';
@@ -15,14 +17,28 @@ import { RegistryModeration } from '../../models';
1517

1618
@Component({
1719
selector: 'osf-registry-submission-item',
18-
imports: [IconComponent, DateAgoPipe, Button, TranslatePipe, DatePipe, TruncatedTextComponent],
20+
imports: [
21+
IconComponent,
22+
DateAgoPipe,
23+
Button,
24+
TranslatePipe,
25+
DatePipe,
26+
TruncatedTextComponent,
27+
Accordion,
28+
AccordionPanel,
29+
AccordionHeader,
30+
AccordionContent,
31+
ContributorsListComponent,
32+
],
1933
templateUrl: './registry-submission-item.component.html',
2034
styleUrl: './registry-submission-item.component.scss',
2135
changeDetection: ChangeDetectionStrategy.OnPush,
2236
})
2337
export class RegistrySubmissionItemComponent {
2438
status = input.required<SubmissionReviewStatus>();
2539
submission = input.required<RegistryModeration>();
40+
loadContributors = output<void>();
41+
loadMoreContributors = output<void>();
2642

2743
selected = output<void>();
2844

@@ -40,4 +56,18 @@ export class RegistrySubmissionItemComponent {
4056
toggleHistory() {
4157
this.showAll = !this.showAll;
4258
}
59+
60+
hasMoreContributors = computed(() => {
61+
console.log('hasMoreContributors');
62+
const submission = this.submission();
63+
console.log('submission');
64+
console.log(submission);
65+
console.log('after submission');
66+
return submission.contributors.length < submission.totalContributors;
67+
});
68+
69+
handleOpen() {
70+
console.log('test test');
71+
this.loadContributors.emit();
72+
}
4373
}

src/app/features/moderation/components/registry-submissions/registry-submissions.component.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
[submission]="item"
4040
[status]="selectedReviewOption()"
4141
(selected)="navigateToRegistration(item)"
42+
(loadContributors)="loadContributors(item)"
43+
(loadMoreContributors)="loadMoreContributors(item)"
4244
></osf-registry-submission-item>
4345
</div>
4446
}

src/app/features/moderation/components/registry-submissions/registry-submissions.component.ts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,12 @@ import { Primitive } from '@osf/shared/helpers/types.helper';
2424
import { REGISTRY_SORT_OPTIONS, SUBMITTED_SUBMISSION_REVIEW_OPTIONS } from '../../constants';
2525
import { RegistrySort, SubmissionReviewStatus } from '../../enums';
2626
import { RegistryModeration } from '../../models';
27-
import { GetRegistrySubmissions, RegistryModerationSelectors } from '../../store/registry-moderation';
27+
import {
28+
GetRegistrySubmissionContributors,
29+
GetRegistrySubmissions,
30+
LoadMoreRegistrySubmissionContributors,
31+
RegistryModerationSelectors,
32+
} from '../../store/registry-moderation';
2833
import { RegistrySubmissionItemComponent } from '..';
2934

3035
@Component({
@@ -54,7 +59,11 @@ export class RegistrySubmissionsComponent implements OnInit {
5459
this.route.parent?.params.pipe(map((params) => params['providerId'])) ?? of(undefined)
5560
);
5661

57-
readonly actions = createDispatchMap({ getRegistrySubmissions: GetRegistrySubmissions });
62+
readonly actions = createDispatchMap({
63+
getRegistrySubmissions: GetRegistrySubmissions,
64+
getRegistrySubmissionContributors: GetRegistrySubmissionContributors,
65+
loadMoreRegistrySubmissionContributors: LoadMoreRegistrySubmissionContributors,
66+
});
5867

5968
readonly submissions = select(RegistryModerationSelectors.getRegistrySubmissions);
6069
readonly isLoading = select(RegistryModerationSelectors.areRegistrySubmissionLoading);
@@ -112,6 +121,14 @@ export class RegistrySubmissionsComponent implements OnInit {
112121
window.open(url, '_blank');
113122
}
114123

124+
loadContributors(item: RegistryModeration) {
125+
this.actions.getRegistrySubmissionContributors(item.id);
126+
}
127+
128+
loadMoreContributors(item: RegistryModeration) {
129+
this.actions.loadMoreRegistrySubmissionContributors(item.id);
130+
}
131+
115132
private getStatusFromQueryParams() {
116133
const queryParams = this.route.snapshot.queryParams;
117134
const statusValues = Object.values(SubmissionReviewStatus);

src/app/features/moderation/mappers/registry-moderation.mapper.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import {
1212

1313
export class RegistryModerationMapper {
1414
static fromResponse(response: RegistryDataJsonApi): RegistryModeration {
15+
console.log(response, 'response mapper');
16+
1517
return {
1618
id: response.id,
1719
title: replaceBadEncodedChars(response.attributes.title),
@@ -22,6 +24,8 @@ export class RegistryModerationMapper {
2224
embargoEndDate: response.attributes.embargo_end_date,
2325
actions: [],
2426
revisionId: response.embeds?.schema_responses?.data?.[0]?.id || null,
27+
totalContributors: 0,
28+
contributors: [],
2529
};
2630
}
2731

src/app/features/moderation/models/registry-moderation.model.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { RegistrationReviewStates } from '@osf/shared/enums/registration-review-
22
import { RevisionReviewStates } from '@osf/shared/enums/revision-review-states.enum';
33

44
import { ReviewAction } from './review-action.model';
5+
import {ContributorModel} from '@shared/models/contributors/contributor.model';
56

67
export interface RegistryModeration {
78
id: string;
@@ -13,4 +14,8 @@ export interface RegistryModeration {
1314
embargoEndDate: string | null;
1415
actions: ReviewAction[];
1516
revisionId?: string | null;
17+
contributorsLoading?: boolean;
18+
contributors: ContributorModel[];
19+
totalContributors: number;
20+
contributorsPage?: number;
1621
}

src/app/features/moderation/store/registry-moderation/registry-moderation.actions.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,18 @@ export class GetRegistrySubmissions {
1212
public sort?: RegistrySort
1313
) {}
1414
}
15+
16+
export class GetRegistrySubmissionContributors {
17+
static readonly type = `${ACTION_SCOPE} Get Registry Submission Contributors`;
18+
19+
constructor(
20+
public registryId: string,
21+
public page = 1
22+
) {}
23+
}
24+
25+
export class LoadMoreRegistrySubmissionContributors {
26+
static readonly type = `${ACTION_SCOPE} Load More Registry Submission Contributors`;
27+
28+
constructor(public registryId: string) {}
29+
}

0 commit comments

Comments
 (0)