Skip to content

Commit a799238

Browse files
authored
Supercede PR Media uploadableVariants -> availableVariants (#2901)
This list includes variants that are read only. This list can be used in the UI to provide a unified list, matching existing variants or providing placeholders.
1 parent 2aa89a6 commit a799238

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

src/components/progress-report/media/dto/media-list.dto.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { InputType, ObjectType } from '@nestjs/graphql';
1+
import { Field, InputType, ObjectType } from '@nestjs/graphql';
22
import {
33
PaginatedList,
44
SortablePaginationInput,
@@ -28,3 +28,14 @@ export class ProgressReportMediaList extends PaginatedList(
2828
) {
2929
readonly report: ProgressReport;
3030
}
31+
32+
@ObjectType()
33+
export class AvailableProgressReportMediaVariant {
34+
@Field(() => Variant)
35+
readonly variant: Variant<MediaVariant>;
36+
37+
@Field({
38+
description: 'Whether the user can upload/create media for this variant',
39+
})
40+
readonly canCreate: boolean;
41+
}

src/components/progress-report/media/resolvers/list.resolver.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Parent, ResolveField, Resolver } from '@nestjs/graphql';
22
import { AnonSession, Session, Variant } from '~/common';
33
import { Privileges, withVariant } from '../../../authorization';
44
import {
5+
AvailableProgressReportMediaVariant as AvailableVariant,
56
ProgressReportMedia as ReportMedia,
67
ProgressReportMediaList as ReportMediaList,
78
} from '../dto';
@@ -12,6 +13,7 @@ export class ProgressReportMediaListResolver {
1213

1314
@ResolveField(() => [Variant], {
1415
description: 'The variants the requester has access to upload',
16+
deprecationReason: 'Use `availableVariants` instead',
1517
})
1618
uploadableVariants(
1719
@Parent() { report }: ReportMediaList,
@@ -23,4 +25,25 @@ export class ProgressReportMediaListResolver {
2325
privileges.forContext(withVariant(context, variant)).can('create'),
2426
);
2527
}
28+
29+
@ResolveField(() => [AvailableVariant], {
30+
description: 'The variants available to the requester',
31+
})
32+
availableVariants(
33+
@Parent() { report }: ReportMediaList,
34+
@AnonSession() session: Session,
35+
): readonly AvailableVariant[] {
36+
const context = report as any; // the report is fine for condition context
37+
const privileges = this.privileges.for(session, ReportMedia);
38+
return ReportMedia.Variants.filter((variant) =>
39+
privileges.forContext(withVariant(context, variant)).can('read'),
40+
).map(
41+
(variant): AvailableVariant => ({
42+
variant,
43+
canCreate: privileges
44+
.forContext(withVariant(context, variant))
45+
.can('create'),
46+
}),
47+
);
48+
}
2649
}

0 commit comments

Comments
 (0)