Skip to content

Commit 14df4cf

Browse files
committed
fix(ENG-9821): fix
1 parent 29d3897 commit 14df4cf

7 files changed

Lines changed: 77 additions & 51 deletions

File tree

src/app/features/collections/components/add-to-collection/add-to-collection.component.ts

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ export class AddToCollectionComponent implements CanDeactivateComponent {
207207
const payload = {
208208
collectionId: this.primaryCollectionId() || '',
209209
projectId: this.selectedProject()?.id || '',
210-
collectionMetadata: this.isCedarMode() ? {} : this.collectionMetadataForm.value || {},
210+
collectionMetadata: this.collectionMetadataForm.value || {},
211211
userId: this.currentUser()?.id || '',
212212
};
213213

@@ -234,15 +234,17 @@ export class AddToCollectionComponent implements CanDeactivateComponent {
234234
},
235235
});
236236
} else {
237-
this.customDialogService
238-
.open(AddToCollectionConfirmationDialogComponent, {
239-
header: 'collections.addToCollection.confirmationDialogHeader',
240-
width: '500px',
241-
data: { payload, project: this.selectedProject() },
242-
})
243-
.onClose.pipe(
244-
filter((res) => !!res),
245-
switchMap(() => this.saveCedarRecordIfNeeded()),
237+
this.saveCedarRecordIfNeeded()
238+
.pipe(
239+
switchMap(() =>
240+
this.customDialogService
241+
.open(AddToCollectionConfirmationDialogComponent, {
242+
header: 'collections.addToCollection.confirmationDialogHeader',
243+
width: '500px',
244+
data: { payload, project: this.selectedProject() },
245+
})
246+
.onClose.pipe(filter((res) => !!res))
247+
),
246248
takeUntilDestroyed(this.destroyRef)
247249
)
248250
.subscribe({

src/app/features/collections/components/add-to-collection/collection-metadata-step/collection-metadata-step.component.html

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,16 @@ <h3>{{ 'collections.addToCollection.collectionMetadata' | translate }}</h3>
2020
[instanceObject]="cedarFormData()"
2121
></cedar-artifact-viewer>
2222
}
23-
} @else {
24-
@for (filterEntry of availableFilterEntries(); track filterEntry.key) {
25-
<div>
26-
<p class="font-bold">{{ filterEntry.labelKey | translate }}</p>
23+
}
2724

28-
<p class="mt-2">
29-
{{ collectionMetadataForm().get(filterEntry.key)?.value }}
30-
</p>
31-
</div>
32-
}
25+
@for (filterEntry of availableFilterEntries(); track filterEntry.key) {
26+
<div>
27+
<p class="font-bold">{{ filterEntry.labelKey | translate }}</p>
28+
29+
<p class="mt-2">
30+
{{ collectionMetadataForm().get(filterEntry.key)?.value }}
31+
</p>
32+
</div>
3333
}
3434
}
3535

@@ -46,6 +46,21 @@ <h3>{{ 'collections.addToCollection.collectionMetadata' | translate }}</h3>
4646

4747
<p-step-panel [value]="targetStepValue()" class="p-0">
4848
<ng-template class="m-0" #content let-activateCallback="activateCallback">
49+
<form [formGroup]="collectionMetadataForm()" class="grid row-gap-2 mt-3">
50+
@for (filterEntry of availableFilterEntries(); track filterEntry.key) {
51+
<div class="flex flex-column gap-1 col-12 md:col-6">
52+
<label [for]="filterEntry.key">{{ filterEntry.labelKey | translate }}</label>
53+
<p-select
54+
[id]="filterEntry.key"
55+
[options]="filterEntry.options"
56+
[formControlName]="filterEntry.key"
57+
[placeholder]="filterEntry.labelKey | translate"
58+
appendTo="body"
59+
></p-select>
60+
</div>
61+
}
62+
</form>
63+
4964
@if (isCedarMode()) {
5065
@if (cedarTemplate()) {
5166
<div class="cedar-editor-container mt-3">
@@ -65,27 +80,16 @@ <h3>{{ 'collections.addToCollection.collectionMetadata' | translate }}</h3>
6580
[label]="'common.buttons.discardChanges' | translate"
6681
(onClick)="handleDiscardChanges()"
6782
/>
68-
<p-button [label]="'common.buttons.saveAndContinue' | translate" (onClick)="handleSaveCedarMetadata()" />
83+
<p-button
84+
[label]="'common.buttons.saveAndContinue' | translate"
85+
[disabled]="!collectionMetadataForm().valid"
86+
(onClick)="handleSaveCedarMetadata()"
87+
/>
6988
</div>
7089
} @else {
7190
<p class="mt-3">{{ 'collections.addToCollection.cedarFormNotAvailable' | translate }}</p>
7291
}
7392
} @else {
74-
<form [formGroup]="collectionMetadataForm()" class="grid row-gap-2 mt-3">
75-
@for (filterEntry of availableFilterEntries(); track filterEntry.key) {
76-
<div class="flex flex-column gap-1 col-12 md:col-6">
77-
<label [for]="filterEntry.key">{{ filterEntry.labelKey | translate }}</label>
78-
<p-select
79-
[id]="filterEntry.key"
80-
[options]="filterEntry.options"
81-
[formControlName]="filterEntry.key"
82-
[placeholder]="filterEntry.labelKey | translate"
83-
appendTo="body"
84-
></p-select>
85-
</div>
86-
}
87-
</form>
88-
8993
<div class="flex justify-content-end gap-3 mt-4">
9094
<p-button
9195
severity="info"

src/app/features/collections/components/add-to-collection/collection-metadata-step/collection-metadata-step.component.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ export class CollectionMetadataStepComponent {
149149
};
150150

151151
this.collectionMetadataSaved.set(true);
152+
this.metadataSaved.emit(this.collectionMetadataForm());
152153
this.cedarDataSaved.emit(cedarData);
153154
this.stepChange.emit(AddToCollectionSteps.Complete);
154155
}
@@ -207,7 +208,7 @@ export class CollectionMetadataStepComponent {
207208

208209
effect(() => {
209210
const filterEntries = this.availableFilterEntries();
210-
if (filterEntries.length && !this.isCedarMode()) {
211+
if (filterEntries.length) {
211212
this.buildCollectionMetadataForm();
212213
}
213214
});
@@ -223,8 +224,7 @@ export class CollectionMetadataStepComponent {
223224
form.controls &&
224225
Object.keys(form.controls).length > 0 &&
225226
filterEntries.length > 0 &&
226-
!alreadyPopulated &&
227-
!this.isCedarMode()
227+
!alreadyPopulated
228228
) {
229229
this.populateFormFromSubmission(submission.submission);
230230
this.formPopulatedFromSubmission.set(true);
@@ -233,10 +233,8 @@ export class CollectionMetadataStepComponent {
233233

234234
effect(() => {
235235
if (!this.collectionMetadataSaved() && this.stepperActiveValue() !== AddToCollectionSteps.CollectionMetadata) {
236-
if (!this.isCedarMode()) {
237-
this.collectionMetadataForm().reset();
238-
this.formPopulatedFromSubmission.set(false);
239-
}
236+
this.collectionMetadataForm().reset();
237+
this.formPopulatedFromSubmission.set(false);
240238
}
241239
});
242240
}

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)