diff --git a/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.html b/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.html index 620cca1c16a400ba36cd66425361eae6da4dc522..2a7456d09f71a55a19896c52ca61f983fc094883 100644 --- a/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.html +++ b/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.html @@ -175,6 +175,24 @@ > </dlcm-shared-searchable-multi-select> + <dlcm-shared-searchable-single-select *ngIf="getFormControl(formDefinition.defaultLicense) as fd" + solidifyValidation + aria-label="license" + [resourceNameSpace]="sharedLicenseActionNameSpace" + [state]="sharedLicenseState" + [formControl]="fd" + [required]="formValidationHelper.hasRequiredField(fd)" + [labelKey]="'title'" + [valueKey]="'resId'" + [urlKey]="'url'" + [labelCallback]="licenceCallback" + [placeholder]="'admin.organizationalUnit.form.license.title' | translate" + [isWithLink]="true" + [tooltipNavigateToTranslate]="'admin.organizationalUnit.form.license.navigateLinkPlaceholder' | translate" + (navigate)="navigateToLicense($event)" + > + </dlcm-shared-searchable-single-select> + <dlcm-shared-searchable-multi-select *ngIf="getFormControl(formDefinition.researchDomains) as fd" solidifyValidation aria-label="research domain" diff --git a/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.ts b/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.ts index b0546c18dc9cbbdb375f7e5a46026fdbe424a0db..cc572a9978fbdc0180b4801ad39513a2c82be90b 100644 --- a/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.ts +++ b/src/app/features/admin/orgunit/components/presentationals/admin-orgunit-form/admin-orgunit-form.presentational.ts @@ -15,6 +15,7 @@ import { DisseminationPolicy, FundingAgency, Institution, + License, OrganizationalUnit, PreservationPolicy, ResearchDomain, @@ -34,6 +35,8 @@ import {sharedFundingAgencyActionNameSpace} from "@shared/stores/funding-agency/ import {SharedFundingAgencyState} from "@shared/stores/funding-agency/shared-funding-agency.state"; import {sharedInstitutionActionNameSpace} from "@shared/stores/institution/shared-institution.action"; import {SharedInstitutionState} from "@shared/stores/institution/shared-institution.state"; +import {sharedLicenseActionNameSpace} from "@shared/stores/license/shared-license.action"; +import {SharedLicenseState} from "@shared/stores/license/shared-license.state"; import {SharedResearchDomainState} from "@shared/stores/research-domain/shared-research-domain.state"; import {RegexpUtil} from "@shared/utils/regexp.util"; import _ from "lodash"; @@ -93,8 +96,13 @@ export class AdminOrgunitFormPresentational extends SharedAbstractFormPresentati sharedResearchDomainActionNameSpace: ResourceNameSpace = sharedResearchDomainActionNameSpace; sharedResearchDomainState: typeof SharedResearchDomainState = SharedResearchDomainState; + sharedLicenseActionNameSpace: ResourceNameSpace = sharedLicenseActionNameSpace; + sharedLicenseState: typeof SharedLicenseState = SharedLicenseState; + readonly TIME_BEFORE_DISPLAY_TOOLTIP: number = environment.timeBeforeDisplayTooltipOnInput; + licenceCallback: (value: License) => string = (value: License) => value.openLicenseId + " (" + value.title + ")"; + get personOrgUnitRoleMode(): typeof PersonOrgUnitRoleMode { return PersonOrgUnitRoleMode; } @@ -123,6 +131,7 @@ export class AdminOrgunitFormPresentational extends SharedAbstractFormPresentati [this.formDefinition.institutions]: ["", [SolidifyValidator]], [this.formDefinition.researchDomains]: ["", [SolidifyValidator]], [this.formDefinition.keywords]: [[], [SolidifyValidator]], + [this.formDefinition.defaultLicense]: ["", [SolidifyValidator]], }); } @@ -144,6 +153,7 @@ export class AdminOrgunitFormPresentational extends SharedAbstractFormPresentati [this.formDefinition.institutions]: [_.map(this.selectedInstitutions, LocalModelAttributeEnum.resId), [SolidifyValidator]], [this.formDefinition.researchDomains]: [_.map(organizationalUnit.researchDomains, LocalModelAttributeEnum.resId), [SolidifyValidator]], [this.formDefinition.keywords]: [[...organizationalUnit.keywords], [SolidifyValidator]], + [this.formDefinition.defaultLicense]: [organizationalUnit.defaultLicense.resId, [SolidifyValidator]], }); } @@ -183,6 +193,11 @@ export class AdminOrgunitFormPresentational extends SharedAbstractFormPresentati organizationalUnit.researchDomains.push({resId: resId}); }); } + if (this.form.get(this.formDefinition.defaultLicense).value === "") { + organizationalUnit.defaultLicense = null; + } else { + organizationalUnit.defaultLicense = {resId: organizationalUnit.defaultLicense}; + } return organizationalUnit; } @@ -217,6 +232,10 @@ export class AdminOrgunitFormPresentational extends SharedAbstractFormPresentati navigateToResearchDomain(researchDomain: ResearchDomain): void { this.navigate([RoutesEnum.adminResearchDomain]); } + + navigateToLicense(licenseId: string): void { + this.navigate([RoutesEnum.adminLicenseDetail, licenseId]); + } } class FormComponentFormDefinition extends BaseFormDefinition { @@ -236,4 +255,5 @@ class FormComponentFormDefinition extends BaseFormDefinition { @PropertyName() institutions: string; @PropertyName() researchDomains: string; @PropertyName() keywords: string; + @PropertyName() defaultLicense: string; } diff --git a/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts b/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts index 77f20132f70351d82e678ab057b8b9191121248f..f300d9086454f827d59f58d3f1abca27fd536e6a 100644 --- a/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts +++ b/src/app/features/deposit/components/presentationals/deposit-form/deposit-form.presentational.ts @@ -176,7 +176,7 @@ export class DepositFormPresentational extends SharedAbstractFormPresentational< [this.formDefinition.collectionEnd]: [""], [this.formDefinition.access]: [AccessEnum.PUBLIC], [this.formDefinition.hasEmbargo]: [false], - [this.formDefinition.licenseId]: ["", [SolidifyValidator]], + [this.formDefinition.licenseId]: [orgUnit.defaultLicense.resId, [SolidifyValidator]], [this.formDefinition.submissionPolicyId]: ["", [Validators.required, SolidifyValidator]], [this.formDefinition.preservationPolicyId]: ["", [Validators.required, SolidifyValidator]], [this.formDefinition.authors]: ["", [Validators.required, SolidifyValidator]], diff --git a/src/app/models/index.ts b/src/app/models/index.ts index 0b52eb4eab142568fdf01b1599ae4f435a2aade0..0320c3dbad647015ef6902dbfd85a053806a8069 100644 --- a/src/app/models/index.ts +++ b/src/app/models/index.ts @@ -193,6 +193,7 @@ export interface OrganizationalUnit extends OrganizationalUnitPartial { institutions?: Institution[]; researchDomains?: ResearchDomain[]; keywords?: string[]; + defaultLicense: License; } export interface Page extends PagePartial { diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index 6754ec2200df559ac3d4212f731ed5ad8fae07a5..8ef724afb4d8d8f3153fad0e11f31d5cb2fbe316 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -489,6 +489,11 @@ "placeholder": "Click here to add an institution", "title": "Institutions" }, + "license": { + "navigateLinkPlaceholder": "See License details", + "placeholder": "Click here to add a license", + "title": "License" + }, "link": { "seeArchives": "See archives", "seeDeposits": "See deposits" diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 6754ec2200df559ac3d4212f731ed5ad8fae07a5..8ef724afb4d8d8f3153fad0e11f31d5cb2fbe316 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -489,6 +489,11 @@ "placeholder": "Click here to add an institution", "title": "Institutions" }, + "license": { + "navigateLinkPlaceholder": "See License details", + "placeholder": "Click here to add a license", + "title": "License" + }, "link": { "seeArchives": "See archives", "seeDeposits": "See deposits" diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json index 1aafc27fa050371a4c992625ca400f208aa63650..af5c6615a27efc286555edffe3fac02b045d3c71 100644 --- a/src/assets/i18n/fr.json +++ b/src/assets/i18n/fr.json @@ -489,6 +489,11 @@ "placeholder": "Cliquer ici pour ajouter des institutions", "title": "Institutions" }, + "license": { + "navigateLinkPlaceholder": "Voir le détail de la licence", + "placeholder": "Cliquer ici pour ajouter une licence", + "title": "Licence" + }, "link": { "seeArchives": "Voir les archives", "seeDeposits": "Voir les dépôts"