1
0

Merge pull request #1930 from toniprieto/improve-cc-selector

Fix for Creative Commons jurisdiction chosen is ignored
This commit is contained in:
Tim Donohue
2022-11-03 11:07:40 -05:00
committed by GitHub
3 changed files with 39 additions and 3 deletions

View File

@@ -81,7 +81,7 @@
</ng-template> </ng-template>
<ds-select *ngIf="field.enums?.length > 5"> <ds-select *ngIf="field.enums?.length > 5" [disabled]="field.id === 'jurisdiction' && defaultJurisdiction !== undefined && defaultJurisdiction !== 'none'">
<ng-container class="selection" *ngVar="getSelectedOption(getSelectedCcLicense(), field) as option"> <ng-container class="selection" *ngVar="getSelectedOption(getSelectedCcLicense(), field) as option">
<span *ngIf="option"> <span *ngIf="option">
{{ option.label }} {{ option.label }}

View File

@@ -16,6 +16,8 @@ import { JsonPatchOperationsBuilder } from '../../../core/json-patch/builder/jso
import { SubmissionCcLicenseUrlDataService } from '../../../core/submission/submission-cc-license-url-data.service'; import { SubmissionCcLicenseUrlDataService } from '../../../core/submission/submission-cc-license-url-data.service';
import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils'; import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils';
import { createPaginatedList } from '../../../shared/testing/utils.test'; import { createPaginatedList } from '../../../shared/testing/utils.test';
import {ConfigurationDataService} from '../../../core/data/configuration-data.service';
import {ConfigurationProperty} from '../../../core/shared/configuration-property.model';
describe('SubmissionSectionCcLicensesComponent', () => { describe('SubmissionSectionCcLicensesComponent', () => {
@@ -156,6 +158,14 @@ describe('SubmissionSectionCcLicensesComponent', () => {
remove: undefined, remove: undefined,
}); });
const configurationDataService = jasmine.createSpyObj('configurationDataService', {
findByPropertyName: createSuccessfulRemoteDataObject$({
... new ConfigurationProperty(),
name: 'cc.license.jurisdiction',
values: ['mock-jurisdiction-value'],
}),
});
beforeEach(waitForAsync(() => { beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [ imports: [
@@ -170,6 +180,7 @@ describe('SubmissionSectionCcLicensesComponent', () => {
{ provide: SubmissionCcLicenseUrlDataService, useValue: submissionCcLicenseUrlDataService }, { provide: SubmissionCcLicenseUrlDataService, useValue: submissionCcLicenseUrlDataService },
{ provide: SectionsService, useValue: sectionService }, { provide: SectionsService, useValue: sectionService },
{ provide: JsonPatchOperationsBuilder, useValue: operationsBuilder }, { provide: JsonPatchOperationsBuilder, useValue: operationsBuilder },
{ provide: ConfigurationDataService, useValue: configurationDataService },
{ provide: 'collectionIdProvider', useValue: 'test collection id' }, { provide: 'collectionIdProvider', useValue: 'test collection id' },
{ provide: 'sectionDataProvider', useValue: Object.assign({}, sectionObject) }, { provide: 'sectionDataProvider', useValue: Object.assign({}, sectionObject) },
{ provide: 'submissionIdProvider', useValue: 'test submission id' }, { provide: 'submissionIdProvider', useValue: 'test submission id' },

View File

@@ -1,7 +1,11 @@
import { Component, Inject } from '@angular/core'; import { Component, Inject } from '@angular/core';
import { Observable, of as observableOf, Subscription } from 'rxjs'; import { Observable, of as observableOf, Subscription } from 'rxjs';
import { Field, Option, SubmissionCcLicence } from '../../../core/submission/models/submission-cc-license.model'; import { Field, Option, SubmissionCcLicence } from '../../../core/submission/models/submission-cc-license.model';
import { getFirstSucceededRemoteData, getRemoteDataPayload } from '../../../core/shared/operators'; import {
getFirstCompletedRemoteData,
getFirstSucceededRemoteData,
getRemoteDataPayload
} from '../../../core/shared/operators';
import { distinctUntilChanged, filter, map, take } from 'rxjs/operators'; import { distinctUntilChanged, filter, map, take } from 'rxjs/operators';
import { SubmissionCcLicenseDataService } from '../../../core/submission/submission-cc-license-data.service'; import { SubmissionCcLicenseDataService } from '../../../core/submission/submission-cc-license-data.service';
import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
@@ -15,6 +19,7 @@ import { JsonPatchOperationPathCombiner } from '../../../core/json-patch/builder
import { isNotEmpty } from '../../../shared/empty.util'; import { isNotEmpty } from '../../../shared/empty.util';
import { JsonPatchOperationsBuilder } from '../../../core/json-patch/builder/json-patch-operations-builder'; import { JsonPatchOperationsBuilder } from '../../../core/json-patch/builder/json-patch-operations-builder';
import { SubmissionCcLicenseUrlDataService } from '../../../core/submission/submission-cc-license-url-data.service'; import { SubmissionCcLicenseUrlDataService } from '../../../core/submission/submission-cc-license-url-data.service';
import {ConfigurationDataService} from '../../../core/data/configuration-data.service';
/** /**
* This component represents the submission section to select the Creative Commons license. * This component represents the submission section to select the Creative Commons license.
@@ -60,6 +65,11 @@ export class SubmissionSectionCcLicensesComponent extends SectionModelComponent
*/ */
protected modalRef: NgbModalRef; protected modalRef: NgbModalRef;
/**
* Default jurisdiction configured
*/
defaultJurisdiction: string;
/** /**
* The Creative Commons link saved in the workspace item. * The Creative Commons link saved in the workspace item.
*/ */
@@ -83,6 +93,7 @@ export class SubmissionSectionCcLicensesComponent extends SectionModelComponent
protected submissionCcLicensesDataService: SubmissionCcLicenseDataService, protected submissionCcLicensesDataService: SubmissionCcLicenseDataService,
protected submissionCcLicenseUrlDataService: SubmissionCcLicenseUrlDataService, protected submissionCcLicenseUrlDataService: SubmissionCcLicenseUrlDataService,
protected operationsBuilder: JsonPatchOperationsBuilder, protected operationsBuilder: JsonPatchOperationsBuilder,
protected configService: ConfigurationDataService,
@Inject('collectionIdProvider') public injectedCollectionId: string, @Inject('collectionIdProvider') public injectedCollectionId: string,
@Inject('sectionDataProvider') public injectedSectionData: SectionDataObject, @Inject('sectionDataProvider') public injectedSectionData: SectionDataObject,
@Inject('submissionIdProvider') public injectedSubmissionId: string @Inject('submissionIdProvider') public injectedSubmissionId: string
@@ -156,6 +167,9 @@ export class SubmissionSectionCcLicensesComponent extends SectionModelComponent
* @param field the field for which to get the selected option value. * @param field the field for which to get the selected option value.
*/ */
getSelectedOption(ccLicense: SubmissionCcLicence, field: Field): Option { getSelectedOption(ccLicense: SubmissionCcLicence, field: Field): Option {
if (field.id === 'jurisdiction' && this.defaultJurisdiction !== undefined && this.defaultJurisdiction !== 'none') {
return field.enums.find(option => option.id === this.defaultJurisdiction);
}
return this.data.ccLicense.fields[field.id]; return this.data.ccLicense.fields[field.id];
} }
@@ -256,6 +270,17 @@ export class SubmissionSectionCcLicensesComponent extends SectionModelComponent
).subscribe( ).subscribe(
(licenses) => this.submissionCcLicenses = licenses (licenses) => this.submissionCcLicenses = licenses
), ),
this.configService.findByPropertyName('cc.license.jurisdiction').pipe(
getFirstCompletedRemoteData(),
getRemoteDataPayload()
).subscribe((remoteData) => {
if (remoteData === undefined || remoteData.values.length === 0) {
// No value configured, use blank value (International jurisdiction)
this.defaultJurisdiction = '';
} else {
this.defaultJurisdiction = remoteData.values[0];
}
})
); );
} }