Skip to content

Commit 91de4a0

Browse files
committed
feat(ENG-9821): update fetching cedar_metadata_templates data
1 parent 29d3897 commit 91de4a0

4 files changed

Lines changed: 31 additions & 9 deletions

File tree

src/app/shared/mappers/collections/collections.mapper.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export class CollectionsMapper {
7171
backgroundColor: response.embeds.brand.data.attributes.background_color,
7272
}
7373
: null,
74-
requiredMetadataTemplate: response.embeds.required_metadata_template?.data ?? null,
74+
requiredMetadataTemplate: null,
7575
};
7676
}
7777

src/app/shared/models/collections/collections-json-api.model.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { CedarMetadataDataTemplateJsonApi } from '@osf/features/metadata/models';
21
import { CollectionSubmissionReviewState } from '@osf/shared/enums/collection-submission-review-state.enum';
32

43
import { BrandDataJsonApi } from '../brand/brand.json-api.model';
@@ -15,9 +14,6 @@ export interface CollectionProviderResponseJsonApi {
1514
brand: {
1615
data?: BrandDataJsonApi;
1716
};
18-
required_metadata_template?: {
19-
data?: CedarMetadataDataTemplateJsonApi | null;
20-
};
2117
};
2218
relationships: {
2319
primary_collection: {
@@ -26,6 +22,12 @@ export interface CollectionProviderResponseJsonApi {
2622
type: string;
2723
};
2824
};
25+
required_metadata_template?: {
26+
data?: {
27+
id: string;
28+
type: string;
29+
} | null;
30+
};
2931
};
3032
}
3133

src/app/shared/services/collections.service.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,15 @@ import { ReviewActionPayloadJsonApi } from '../models/review-action/review-actio
4141
import { SetTotalSubmissions } from '../stores/collections/collections.actions';
4242

4343
import { JsonApiService } from './json-api.service';
44+
import { MetadataService } from './metadata.service';
4445

4546
@Injectable({
4647
providedIn: 'root',
4748
})
4849
export class CollectionsService {
4950
private readonly jsonApiService = inject(JsonApiService);
5051
private readonly environment = inject(ENVIRONMENT);
52+
private readonly metadataService = inject(MetadataService);
5153

5254
get apiUrl() {
5355
return `${this.environment.apiDomainUrl}/v2`;
@@ -56,11 +58,22 @@ export class CollectionsService {
5658
private actions = createDispatchMap({ setTotalSubmissions: SetTotalSubmissions });
5759

5860
getCollectionProvider(collectionName: string): Observable<CollectionProvider> {
59-
const url = `${this.apiUrl}/providers/collections/${collectionName}/?embed=brand,required_metadata_template`;
61+
const url = `${this.apiUrl}/providers/collections/${collectionName}/?embed=brand`;
6062

61-
return this.jsonApiService
62-
.get<JsonApiResponse<CollectionProviderResponseJsonApi, null>>(url)
63-
.pipe(map((response) => CollectionsMapper.fromGetCollectionProviderResponse(response.data)));
63+
return this.jsonApiService.get<JsonApiResponse<CollectionProviderResponseJsonApi, null>>(url).pipe(
64+
switchMap((response) => {
65+
const provider = CollectionsMapper.fromGetCollectionProviderResponse(response.data);
66+
const templateId = response.data.relationships.required_metadata_template?.data?.id;
67+
68+
if (!templateId) {
69+
return of(provider);
70+
}
71+
72+
return this.metadataService
73+
.getCedarMetadataTemplateDetail(templateId)
74+
.pipe(map((template) => ({ ...provider, requiredMetadataTemplate: template })));
75+
})
76+
);
6477
}
6578

6679
getCollectionDetails(collectionId: string): Observable<CollectionDetails> {

src/app/shared/services/metadata.service.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { inject, Injectable } from '@angular/core';
66
import { ENVIRONMENT } from '@core/provider/environment.provider';
77
import { CedarRecordsMapper, MetadataMapper, RorMapper } from '@osf/features/metadata/mappers';
88
import {
9+
CedarMetadataDataTemplateJsonApi,
910
CedarMetadataRecord,
1011
CedarMetadataRecordJsonApi,
1112
CedarMetadataTemplateJsonApi,
@@ -102,6 +103,12 @@ export class MetadataService {
102103
);
103104
}
104105

106+
getCedarMetadataTemplateDetail(templateId: string): Observable<CedarMetadataDataTemplateJsonApi> {
107+
return this.jsonApiService
108+
.get<{ data: CedarMetadataDataTemplateJsonApi }>(`${this.apiDomainUrl}/_/cedar_metadata_templates/${templateId}/`)
109+
.pipe(map((response) => response.data));
110+
}
111+
105112
getMetadataCedarRecords(
106113
resourceId: string,
107114
resourceType: ResourceType,

0 commit comments

Comments
 (0)