Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • dlcm/ui/dlcm-portal
1 result
Select Git revision
Show changes
Commits on Source (5)
Showing
with 585 additions and 232 deletions
......@@ -9,6 +9,7 @@
# dependencies
/node_modules
/local_modules
# profiling files
chrome-profiler-events.json
......
......@@ -31,23 +31,27 @@ npm install
In case you are not allowed to access to https://nexus.unige.ch/, you need to build 3 dependencies locally in the following order:
. eslint-plugin-solidify (https://gitlab.unige.ch/solidify/solidify-eslint-plugin)
.. Pull the source code of the lib *with the corresponding tag* used by `dlcm-portal` (see dlcm-portal: package.json > devDependencies > eslint-plugin-solidify)
.. Delete on this library the `package-lock.json` file
.. Run `npm install` on this library
.. Run `npm run build` on this library, the binary should by generated in dist folder
.. On `package.json` from `dlcm-portal`, change the version number of `devDependencies` by a relative path that target dist folder and prefixed with `file:` (`"eslint-plugin-solidify": "file:../solidify-eslint-plugin/dist"`)
.. Pull the source code of the lib `eslint-plugin-solidify` *with the corresponding tag* used by `dlcm-portal` (see dlcm-portal: package.json > devDependencies > eslint-plugin-solidify)
.. Delete on `solidify-eslint-plugin` the `package-lock.json` file
.. Run `npm install` on `solidify-eslint-plugin`
.. Run `npm run build` on `solidify-eslint-plugin`, the binary should by generated in `dist folder
.. Copy the content of `solidify-eslint-plugin/dist` folder inside `dlcm-portal/local_modules/eslint-plugin-solidify` (create the directories)
.. On `package.json` from `dlcm-portal`, change the version number of `devDependencies` for `eslint-plugin-solidify` by `file:./local_modules/eslint-plugin-solidify`)
. solidify-frontend (https://gitlab.unige.ch/solidify/solidify-frontend)
.. Pull the source code of the lib *with the corresponding tag* used by `dlcm-portal` (see dlcm-portal: package.json > dependencies > solidify-frontend)
.. Delete on this library the `package-lock.json` file
.. On `package.json` from `solidify-frontend`, change the version number by a relative path that target dist folder and prefixed with `file:` (`"slint-plugin-solidify": "file:../solidify-eslint-plugin/dist"`)
.. Run `npm install` on this library
.. Run `npm run build` on this library, the binary should by generated in dist folder
.. On `package.json` from `dlcm-portal`, change the version number by a relative path that target dist folder and prefixed with `file:` (`"solidify-frontend": "file:../solidify-frontend/dist/solidify-frontend"`)
.. Pull the source code of the lib `solidify-frontend` *with the corresponding tag* used by `dlcm-portal` (see dlcm-portal: package.json > dependencies > solidify-frontend)
.. Delete on `solidify-frontend` the `package-lock.json` file
.. Copy the content of `solidify-eslint-plugin/dist` folder inside `solidify-frontend/local_modules/eslint-plugin-solidify` (create the directories)
.. On `package.json` from `solidify-frontend`, change the version number of `devDependencies` for `eslint-plugin-solidify` by `file:./local_modules/eslint-plugin-solidify`)
.. Run `npm install` on `solidify-frontend`
.. Run `npm run build` on `solidify-frontend`, the binary should by generated in `dist/solidify-frontend` folder
.. Copy the content of `solidify-frontend/dist/solidify-frontend` folder inside `dlcm-portal/local_modules/solidify-frontend` (create the directories)
.. On `package.json` from `dlcm-portal`, change the version number of `dependencies` for `solidify-frontend` by `file:./local_modules/solidify-frontend`)
. jsmol (https://gitlab.unige.ch/solidify/jsmol)
.. Pull the source code of the lib *with the corresponding tag* used by `dlcm-portal` (see dlcm-portal: package.json > dependencies > jsmol)
.. On `package.json` from `dlcm-portal`, change the version number by a relative path that target root lib folder and prefixed with `file:` (`"jsmol": "file:../jsmol"`)
.. Pull the source code of the lib `jsmol` *with the corresponding tag* used by `dlcm-portal` (see dlcm-portal: package.json > dependencies > jsmol)
.. Copy the content of `jsmol` folder inside `dlcm-portal/local_modules/jsmol` (create the directories)
.. On `package.json` from `dlcm-portal`, change the version number by a relative path that target root lib folder and prefixed with `file:` (`"jsmol": "file:./local_modules/jsmol"`)
To resume, you should have the following line in the `package.json` of `dlcm-portal`:
......@@ -55,14 +59,14 @@ To resume, you should have the following line in the `package.json` of `dlcm-por
----
"dependencies": {
...
"solidify-frontend": "file:../solidify-frontend/dist/solidify-frontend",
"solidify-frontend": "file:./local_modules/solidify-frontend",
...
"jsmol": "file:../jsmol",
"jsmol": "file:./local_modules/jsmol",
...
},
"devDependencies": {
...
"eslint-plugin-solidify": "file:../solidify-eslint-plugin/dist"
"eslint-plugin-solidify": "file:./local_modules/eslint-plugin-solidify"
...
}
----
......
......@@ -620,28 +620,78 @@ export namespace Enums {
}
export namespace Deposit {
export type DuaTypeEnum = DepositPartial.DuaTypeEnum;
export const DuaTypeEnum = DepositPartial.DuaTypeEnum;
export const DuaTypeEnumTranslate: KeyValueInfo[] = [
export type DataUsePolicyEnum = DepositPartial.DataUsePolicyEnum;
export const DataUsePolicyEnum = DepositPartial.DataUsePolicyEnum;
const dataUsePolicyEnumNoneTranslate = MARK_AS_TRANSLATABLE("enum.dataUsePolicy.none");
const dataUsePolicyEnumLicenseTranslate = MARK_AS_TRANSLATABLE("enum.dataUsePolicy.license");
const dataUsePolicyEnumClickThroughDuaTranslate = MARK_AS_TRANSLATABLE("enum.dataUsePolicy.clickThrough");
const dataUsePolicyEnumSignedDuaTranslate = MARK_AS_TRANSLATABLE("enum.dataUsePolicy.signed");
const dataUsePolicyEnumExternalDuaTranslate = MARK_AS_TRANSLATABLE("enum.dataUsePolicy.external");
export const DataUsePolicyEnumTranslate: KeyValueInfo[] = [
{
key: DataUsePolicyEnum.NONE,
value: dataUsePolicyEnumNoneTranslate,
},
{
key: DuaTypeEnum.NONE,
value: MARK_AS_TRANSLATABLE("enum.duaType.none"),
key: DataUsePolicyEnum.LICENSE,
value: dataUsePolicyEnumLicenseTranslate,
},
{
key: DuaTypeEnum.IMPLICIT,
value: MARK_AS_TRANSLATABLE("enum.duaType.implicit"),
key: DataUsePolicyEnum.CLICK_THROUGH_DUA,
value: dataUsePolicyEnumClickThroughDuaTranslate,
},
{
key: DuaTypeEnum.CLICK_THROUGH,
value: MARK_AS_TRANSLATABLE("enum.duaType.clickThrough"),
key: DataUsePolicyEnum.SIGNED_DUA,
value: dataUsePolicyEnumSignedDuaTranslate,
},
{
key: DataUsePolicyEnum.EXTERNAL_DUA,
value: dataUsePolicyEnumExternalDuaTranslate,
},
];
export type DataUsePolicyShowEnum = "NONE" | "LICENSE" | "DUA";
export const DataUsePolicyShowEnum = {
NONE: "NONE" as DataUsePolicyShowEnum,
LICENSE: "LICENSE" as DataUsePolicyShowEnum,
DUA: "DUA" as DataUsePolicyShowEnum,
};
export const DataUsePolicyShowEnumTranslate: KeyValueInfo[] = [
{
key: DataUsePolicyShowEnum.NONE,
value: dataUsePolicyEnumNoneTranslate,
},
{
key: DataUsePolicyShowEnum.LICENSE,
value: dataUsePolicyEnumLicenseTranslate,
},
{
key: DataUsePolicyShowEnum.DUA,
value: MARK_AS_TRANSLATABLE("enum.dataUsePolicy.dua"),
},
];
export type DuaTypeEnum = "CLICK_THROUGH_DUA" | "SIGNED_DUA" | "EXTERNAL_DUA";
export const DuaTypeEnum = {
CLICK_THROUGH_DUA: "CLICK_THROUGH_DUA" as DuaTypeEnum,
SIGNED_DUA: "SIGNED_DUA" as DuaTypeEnum,
EXTERNAL_DUA: "EXTERNAL_DUA" as DuaTypeEnum,
};
export const DuaTypeEnumTranslate: KeyValueInfo[] = [
{
key: DuaTypeEnum.CLICK_THROUGH_DUA,
value: dataUsePolicyEnumClickThroughDuaTranslate,
},
{
key: DuaTypeEnum.SIGNED,
value: MARK_AS_TRANSLATABLE("enum.duaType.signed"),
key: DuaTypeEnum.SIGNED_DUA,
value: dataUsePolicyEnumSignedDuaTranslate,
},
{
key: DuaTypeEnum.EXTERNAL,
value: MARK_AS_TRANSLATABLE("enum.duaType.external"),
key: DuaTypeEnum.EXTERNAL_DUA,
value: dataUsePolicyEnumExternalDuaTranslate,
},
];
......
......@@ -201,7 +201,7 @@ export class AdminArchiveAclFormPresentational extends AbstractFormPresentationa
}
private _computeIsDuaRequired(archive: Archive | undefined): void {
const isDuaRequired = archive?.duaType === Enums.Deposit.DuaTypeEnum.SIGNED;
const isDuaRequired = archive?.dataUsePolicy === Enums.Deposit.DataUsePolicyEnum.SIGNED_DUA;
const formControlNewDuaFile = this.form.get(this.formDefinition.newDuaFile);
if (isNullOrUndefined(formControlNewDuaFile)) {
return;
......
......@@ -21,7 +21,20 @@
</dlcm-shared-data-sensitivity>
{{sensitivityEnumTranslate(data.deposit.dataSensitivity) | translate}}
</div>
<div class="info-wrapper">
<div class="info-wrapper"
*ngIf="isDuaCompatibleWithMetadataVersion()"
>
<b>{{labelTranslateEnum.dataUsePolicy | translate}}:</b>
<dlcm-shared-data-use-policy [dataUsePolicy]="data.deposit.dataUsePolicy"
[withTooltip]="true"
class="icon"
>
</dlcm-shared-data-use-policy>
{{dataUsePolicyEnumTranslate(data.deposit.dataUsePolicy) | translate}}
</div>
<div *ngIf="data.deposit.licenseId | isNotNullNorUndefinedNorWhiteString"
class="info-wrapper"
>
<b>{{labelTranslateEnum.license | translate}}:</b>
<solidify-resource-name-container [state]="sharedLicenceState"
[action]="sharedLicenceStateNameSpace"
......@@ -32,17 +45,6 @@
</solidify-resource-name-container>
</div>
<div class="info-wrapper"
*ngIf="isDuaCompatibleWithMetadataVersion()"
>
<b>{{labelTranslateEnum.duaType | translate}}:</b>
<dlcm-shared-dua-type [duaType]="data.deposit.duaType"
[withTooltip]="true"
class="icon"
>
</dlcm-shared-dua-type>
{{duaTypeEnumTranslate(data.deposit.duaType) | translate}}
</div>
</solidify-base-action-dialog>
<div class="footer"
mat-dialog-actions
......
......@@ -47,7 +47,7 @@ import {
} from "solidify-frontend";
@Component({
selector: "dlcm-deposit-reject-dialog",
selector: "dlcm-deposit-submit-dialog",
templateUrl: "./deposit-submit.dialog.html",
styleUrls: ["./deposit-submit.dialog.scss"],
changeDetection: ChangeDetectionStrategy.OnPush,
......@@ -76,8 +76,8 @@ export class DepositSubmitDialog extends SharedAbstractDialog<DepositSubmitDialo
return EnumUtil.getLabel(Enums.DataSensitivity.DataSensitivityEnumTranslate, value);
}
duaTypeEnumTranslate(value: string): string {
return EnumUtil.getLabel(Enums.Deposit.DuaTypeEnumTranslate, value);
dataUsePolicyEnumTranslate(value: string): string {
return EnumUtil.getLabel(Enums.Deposit.DataUsePolicyEnumTranslate, value);
}
isDuaCompatibleWithMetadataVersion(): boolean {
......
......@@ -93,30 +93,6 @@
></mat-error>
</mat-form-field>
<solidify-searchable-single-select *ngIf="getFormControl(formDefinition.licenseId) as fd"
[solidifyDataTest]="dataTestEnum.depositLicenseId"
[formControl]="fd"
[labelCallback]="licenseCallback"
[labelKey]="'title'"
[matTooltipPosition]="'left'"
[matTooltipShowDelay]="TIME_BEFORE_DISPLAY_TOOLTIP"
[displayCommonValuesListKey]="commonValueLicenseId"
[displayCommonValuesLabel]="labelTranslateEnum.defaultValue"
[matTooltip]="'deposit.tooltips.license' | translate"
[placeholder]="labelTranslateEnum.license | translate"
[readonly]="readonly"
[required]="formValidationHelper.hasRequiredField(fd)"
[resourceNameSpace]="sharedLicenseActionNameSpace"
[sort]="sharedLicenseSort"
[state]="sharedLicenseState"
[urlKey]="'url'"
[valueKey]="'resId'"
[overlayComponent]="$any(licenseOverlayComponent)"
aria-label="license tooltip"
solidifyValidation
>
</solidify-searchable-single-select>
<mat-form-field *ngIf="getFormControl(formDefinition.submissionPolicyId) as fd"
[appearance]="appearanceInputMaterial"
[class.mat-form-field-invalid]="formValidationHelper.displayInvalidWhenRequired(fd, displayEmptyRequiredFieldInError)"
......@@ -453,109 +429,198 @@
</mat-form-field>
</div>
<dlcm-shared-data-sensitivity-input [formControl]="getFormControl(formDefinition.dataSensitivity)"></dlcm-shared-data-sensitivity-input>
<dlcm-shared-data-sensitivity-input [formControl]="getFormControl(formDefinition.dataSensitivity)"
[dataSensitivityEnumValues]="listSensitivityOptions"
></dlcm-shared-data-sensitivity-input>
<div *ngIf="(model | isNullOrUndefined) || (model.metadataVersion !== metadataVersionEnum._1_0
<ng-template [ngIf]="(model | isNullOrUndefined) || (model.metadataVersion !== metadataVersionEnum._1_0
&& model.metadataVersion !== metadataVersionEnum._1_1
&& model.metadataVersion !== metadataVersionEnum._2_0
&& model.metadataVersion !== metadataVersionEnum._2_1
&& model.metadataVersion !== metadataVersionEnum._3_0)"
class="dua-wrapper"
[class.is-file-present]="dataFileDua | isNotNullNorUndefined"
[class.is-buttons-displayed]="displayDuaButtons"
>
<dlcm-shared-dua-type [duaType]="getFormControl(formDefinition.duaType)?.value"
[withTooltip]="true"
class="dua-icon"
>
</dlcm-shared-dua-type>
<mat-form-field *ngIf="getFormControl(formDefinition.duaType) as fd"
[appearance]="appearanceInputMaterial"
[class.mat-form-field-invalid]="formValidationHelper.displayInvalidWhenRequired(fd, displayEmptyRequiredFieldInError)"
[matTooltipPosition]="'left'"
[solidifyTooltip]="'deposit.tooltips.duaType' | translate"
class="dua-type-input"
solidifyTooltipOnEllipsis
>
<mat-label>{{labelTranslateEnum.duaType | translate}}</mat-label>
<mat-select [disabled]="readonly || fd.disabled"
[formControl]="fd"
[required]="formValidationHelper.hasRequiredField(fd)"
[solidifyValidation]="errors"
<div class="data-use-policy-wrapper">
<dlcm-shared-data-use-policy [dataUsePolicy]="getFormControl(formDefinition.dataUsePolicy)?.value"
[withTooltip]="true"
class="icon"
>
<mat-option *ngFor="let duaType of duaTypeEnumTranslate"
[value]="duaType.key"
solidifyTooltipOnEllipsis
</dlcm-shared-data-use-policy>
<mat-form-field *ngIf="getFormControl(formDefinition.dataUsePolicy) as fd"
[appearance]="appearanceInputMaterial"
[class.mat-form-field-invalid]="formValidationHelper.displayInvalidWhenRequired(fd, displayEmptyRequiredFieldInError)"
[matTooltipPosition]="'left'"
[solidifyTooltip]="'deposit.tooltips.dataUsePolicy' | translate"
class="data-use-policy-input"
solidifyTooltipOnEllipsis
>
<mat-label>{{labelTranslateEnum.dataUsePolicy | translate}}</mat-label>
<mat-select [disabled]="readonly || fd.disabled"
[formControl]="fd"
[required]="formValidationHelper.hasRequiredField(fd)"
[solidifyValidation]="errors"
>
{{duaType.value | translate}}
</mat-option>
</mat-select>
<mat-error #errors
solidifyTooltipOnEllipsis
></mat-error>
</mat-form-field>
<mat-option *ngFor="let dataUsePolicy of listDuaPolicyOptions"
[value]="dataUsePolicy.key"
[disabled]="(dataUsePolicy.enabled | isFalse)"
[matTooltip]="((dataUsePolicy.enabled | isFalse) ? labelTranslateEnum.dataUsePolicyIsIncompatibleWithTheSelectedAccessLevelAndDataTag :
dataUsePolicy.infoToTranslate) | translate"
[matTooltipPosition]="'left'"
solidifyTooltipOnEllipsis
>
{{dataUsePolicy.value | translate}}
</mat-option>
</mat-select>
<mat-error #errors
solidifyTooltipOnEllipsis
></mat-error>
</mat-form-field>
</div>
<div *ngIf="displayDuaButtons"
class="dua-buttons-wrapper"
<div *ngIf="getFormControl(formDefinition.dataUsePolicy)?.value === dataUsePolicyShowEnum.DUA"
class="dua-wrapper"
[class.is-file-present]="dataFileDua | isNotNullNorUndefined"
[class.is-buttons-displayed]="displayDuaButtons"
>
<button *ngIf="displayUploadDuaButton"
(click)="fileDuaInput.click()"
[matTooltip]=""
class="load-dua-file-button"
color="primary"
mat-button
mat-icon-button
type="button"
<dlcm-shared-dua-type [duaType]="getFormControl(formDefinition.duaType)?.value"
[withTooltip]="true"
class="dua-icon"
>
<solidify-icon [iconName]="iconNameEnum.uploadFile"
class="icon"
></solidify-icon>
<input #fileDuaInput
(change)="onDuaFileChange($any($event))"
class="hide"
type="file"
</dlcm-shared-dua-type>
<mat-form-field *ngIf="getFormControl(formDefinition.duaType) as fd"
[appearance]="appearanceInputMaterial"
[class.mat-form-field-invalid]="formValidationHelper.displayInvalidWhenRequired(fd, displayEmptyRequiredFieldInError)"
[matTooltipPosition]="'left'"
[solidifyTooltip]="'deposit.tooltips.duaType' | translate"
class="dua-type-input"
solidifyTooltipOnEllipsis
>
<mat-label>{{labelTranslateEnum.duaType | translate}}</mat-label>
<mat-select [disabled]="readonly || fd.disabled"
[formControl]="fd"
[required]="formValidationHelper.hasRequiredField(fd)"
[solidifyValidation]="errors"
>
</button>
<mat-option *ngFor="let duaType of listDuaTypeOptions"
[value]="duaType.key"
[disabled]="(duaType.enabled | isFalse)"
[matTooltip]="((duaType.enabled | isFalse) ? labelTranslateEnum.duaTypeIsIncompatibleWithTheSelectedAccessLevelAndDataTag :
duaType.infoToTranslate) | translate"
[matTooltipPosition]="'left'"
solidifyTooltipOnEllipsis
>
{{duaType.value | translate}}
</mat-option>
</mat-select>
<mat-error #errors
solidifyTooltipOnEllipsis
></mat-error>
</mat-form-field>
<button *ngIf="displayDeleteDuaButton"
[matTooltip]="labelTranslateEnum.delete | translate"
class="delete-dua-file-button"
color="primary"
mat-button
mat-icon-button
type="button"
(click)="deleteDuaFile()"
<div *ngIf="displayDuaButtons"
class="dua-buttons-wrapper"
>
<solidify-icon [iconName]="iconNameEnum.delete"
class="icon"
></solidify-icon>
</button>
<button *ngIf="displayUploadDuaButton"
(click)="fileDuaInput.click()"
[matTooltip]=""
class="load-dua-file-button"
color="primary"
mat-button
mat-icon-button
type="button"
>
<solidify-icon [iconName]="iconNameEnum.uploadFile"
class="icon"
></solidify-icon>
<input #fileDuaInput
(change)="onDuaFileChange($any($event))"
class="hide"
type="file"
>
</button>
<ng-template [ngIf]="dataFileDua | isNotNullNorUndefined">
<button *ngIf="canPreviewDataFileDua; else unableToPreview"
[matTooltip]="labelTranslateEnum.showPreview | translate"
class="preview-dua-file-button"
<button *ngIf="displayDeleteDuaButton"
[matTooltip]="labelTranslateEnum.delete | translate"
class="delete-dua-file-button"
color="primary"
mat-button
mat-icon-button
type="button"
(click)="previewDuaFile()"
(click)="deleteDuaFile()"
>
<solidify-icon [iconName]="iconNameEnum.preview"
<solidify-icon [iconName]="iconNameEnum.delete"
class="icon"
></solidify-icon>
</button>
<ng-template #unableToPreview>
<div *ngIf="!canPreviewDataFileDuaByStatus"
[solidifySpinner]="true"
[solidifySpinnerDiameter]="24"
[solidifySpinnerStrokeWidth]="2"
class="spinner"
></div>
<ng-template [ngIf]="dataFileDua | isNotNullNorUndefined">
<button *ngIf="canPreviewDataFileDua; else unableToPreview"
[matTooltip]="labelTranslateEnum.showPreview | translate"
class="preview-dua-file-button"
color="primary"
mat-button
mat-icon-button
type="button"
(click)="previewDuaFile()"
>
<solidify-icon [iconName]="iconNameEnum.preview"
class="icon"
></solidify-icon>
</button>
<ng-template #unableToPreview>
<div *ngIf="!canPreviewDataFileDuaByStatus"
[solidifySpinner]="true"
[solidifySpinnerDiameter]="24"
[solidifySpinnerStrokeWidth]="2"
class="spinner"
></div>
</ng-template>
</ng-template>
</ng-template>
</div>
</div>
</div>
</ng-template>
<ng-template [ngIf]="displayLicenseSelect()">
<solidify-searchable-single-select *ngIf="getFormControl(formDefinition.licenseId) as fd"
[solidifyDataTest]="dataTestEnum.depositLicenseId"
[formControl]="fd"
[labelCallback]="licenseCallback"
[labelKey]="'title'"
[matTooltipPosition]="'left'"
[matTooltipShowDelay]="TIME_BEFORE_DISPLAY_TOOLTIP"
[displayCommonValuesListKey]="commonValueLicenseId"
[displayCommonValuesLabel]="labelTranslateEnum.defaultValue"
[matTooltip]="'deposit.tooltips.license' | translate"
[placeholder]="labelTranslateEnum.license | translate"
[readonly]="readonly"
[required]="formValidationHelper.hasRequiredField(fd)"
[resourceNameSpace]="sharedLicenseActionNameSpace"
[sort]="sharedLicenseSort"
[state]="sharedLicenseState"
[urlKey]="'url'"
[valueKey]="'resId'"
[overlayComponent]="$any(licenseOverlayComponent)"
aria-label="license tooltip"
solidifyValidation
>
</solidify-searchable-single-select>
</ng-template>
<ng-template [ngIf]="getFormControl(formDefinition.access)?.value !== accessEnum.PUBLIC">
<mat-checkbox *ngIf="getFormControl(formDefinition.structureContentPublic) as fd"
[formControl]="fd"
[matTooltipPosition]="'left'"
[matTooltipShowDelay]="TIME_BEFORE_DISPLAY_TOOLTIP"
[matTooltip]="'deposit.tooltips.structureContentPublic' | translate"
[solidifyValidation]="errors"
aria-label="structure-content-public tooltip"
class="structure-content-public"
color="primary"
>{{labelTranslateEnum.structureContentPublic | translate }}
<mat-error #errors
solidifyTooltipOnEllipsis
></mat-error>
</mat-checkbox>
</ng-template>
<mat-checkbox *ngIf="(getFormControl(formDefinition.hasEmbargo)?.value | isNullOrUndefined) || getFormControl(formDefinition.access)?.value !==
accessEnum.CLOSED"
......@@ -640,23 +705,6 @@
</ng-template>
</ng-container>
<ng-template [ngIf]="getFormControl(formDefinition.access)?.value !== accessEnum.PUBLIC">
<mat-checkbox *ngIf="getFormControl(formDefinition.structureContentPublic) as fd"
[formControl]="fd"
[matTooltipPosition]="'left'"
[matTooltipShowDelay]="TIME_BEFORE_DISPLAY_TOOLTIP"
[matTooltip]="'deposit.tooltips.structureContentPublic' | translate"
[solidifyValidation]="errors"
aria-label="structure-content-public tooltip"
class="structure-content-public"
color="primary"
>{{labelTranslateEnum.structureContentPublic | translate }}
<mat-error #errors
solidifyTooltipOnEllipsis
></mat-error>
</mat-checkbox>
</ng-template>
<div *ngIf="getFormControl(formDefinition.authors) as fd"
class="author-wrapper"
>
......
......@@ -61,7 +61,8 @@
}
.publication-date-wrapper,
.access-level-wrapper {
.access-level-wrapper,
.data-use-policy-wrapper {
display: grid;
grid-template-columns: min-content 1fr;
grid-gap: 10px;
......
......@@ -476,7 +476,7 @@ export class DepositState extends ResourceFileState<DepositStateModel, Deposit>
const newDeposit = action.modelFormControlEvent.model;
const newDuaFile = newDeposit.newDuaFile;
const oldDuaFile = MemoizedUtil.currentSnapshot(this._store, DepositDuaDataFileState) as DepositDataFile;
const isTypeCompatibleWithDuaFile = [Enums.Deposit.DuaTypeEnum.IMPLICIT, Enums.Deposit.DuaTypeEnum.CLICK_THROUGH, Enums.Deposit.DuaTypeEnum.SIGNED].includes(newDeposit.duaType);
const isTypeCompatibleWithDuaFile = [Enums.Deposit.DataUsePolicyEnum.CLICK_THROUGH_DUA, Enums.Deposit.DataUsePolicyEnum.SIGNED_DUA].includes(newDeposit.dataUsePolicy);
const isDuaFileToUpload = isTypeCompatibleWithDuaFile && isNotNullNorUndefined(newDuaFile);
const isDuaFileToDelete = newDuaFile === null || (isNotNullNorUndefined(newDuaFile) && isNotNullNorUndefined(oldDuaFile)) || (!isTypeCompatibleWithDuaFile && isNotNullNorUndefined(oldDuaFile));
......
......@@ -19,10 +19,10 @@
></mat-error>
</mat-form-field>
<div *ngIf="(data.duaType | isNotNullNorUndefined) && data.duaType !== duaTypeEnum.NONE"
<div *ngIf="(data.dataUsePolicy | isNotNullNorUndefined) && data.dataUsePolicy !== dataUsePolicyEnum.NONE"
class="dua-wrapper"
>
<span>{{labelTranslateEnum.thisArchiveIsSubjectToAContractOnDataUse | translate:{type: duaTypeEnumTranslate(data.duaType) | translate} }}</span>
<span>{{labelTranslateEnum.thisArchiveIsSubjectToAContractOnDataUse | translate:{type: dataUsePolicyEnumTranslate(data.dataUsePolicy) | translate} }}</span>
<div *ngIf="data.withDua"
class="dua-file"
>
......@@ -54,14 +54,14 @@
</div>
</div>
<ng-template [ngIf]="data.duaType === duaTypeEnum.CLICK_THROUGH">
<ng-template [ngIf]="data.dataUsePolicy === dataUsePolicyEnum.CLICK_THROUGH_DUA">
<mat-checkbox *ngIf="getFormControl(formDefinition.acceptDua) as fd"
[formControl]="fd"
color="primary"
>{{labelTranslateEnum.iAcceptTheContractOnTheUseOfTheData | translate }}</mat-checkbox>
</ng-template>
<dlcm-shared-file-upload *ngIf="data.duaType === duaTypeEnum.SIGNED"
<dlcm-shared-file-upload *ngIf="data.dataUsePolicy === dataUsePolicyEnum.SIGNED_DUA"
(fileChange)="setFileChange($event)"
[buttonLabelToTranslate]="labelTranslateEnum.duaFile"
class="file-upload"
......@@ -79,7 +79,7 @@
</button>
<button (click)="onSubmit()"
(onEnter)="onSubmit()"
[disabled]="form.invalid || (data.duaType === duaTypeEnum.SIGNED && (duaFileSignedToUpload | isNullOrUndefined))"
[disabled]="form.invalid || (data.dataUsePolicy === dataUsePolicyEnum.SIGNED_DUA && (duaFileSignedToUpload | isNullOrUndefined))"
[solidifyButtonSpinner]="isLoadingObs | async"
color="primary"
mat-flat-button
......
......@@ -54,6 +54,7 @@ import {
DownloadService,
EnumUtil,
FilePreviewDialog,
FileStatusEnum,
FileVisualizerHelper,
FileVisualizerService,
FormValidationHelper,
......@@ -75,8 +76,8 @@ export class HomeArchiveRestrictedRequestAccessDialog extends SharedAbstractDial
form: FormGroup;
formDefinition: FormComponentFormDefinition = new FormComponentFormDefinition();
get duaTypeEnum(): typeof Enums.Deposit.DuaTypeEnum {
return Enums.Deposit.DuaTypeEnum;
get dataUsePolicyEnum(): typeof Enums.Deposit.DataUsePolicyEnum {
return Enums.Deposit.DataUsePolicyEnum;
}
duaFileSignedToUpload: File;
......@@ -103,7 +104,7 @@ export class HomeArchiveRestrictedRequestAccessDialog extends SharedAbstractDial
[this.formDefinition.acceptDua]: [false, [SolidifyValidator]],
});
if (this.data.duaType === Enums.Deposit.DuaTypeEnum.CLICK_THROUGH) {
if (this.data.dataUsePolicy === Enums.Deposit.DataUsePolicyEnum.CLICK_THROUGH_DUA) {
this.form.get(this.formDefinition.acceptDua).addValidators(Validators.requiredTrue);
}
......@@ -116,14 +117,14 @@ export class HomeArchiveRestrictedRequestAccessDialog extends SharedAbstractDial
this.canPreviewDua = false;
if (this.data.withDua) {
this.duaFileUrl = `${ApiEnum.accessPublicMetadata}/${this.data.archiveId}/${ApiActionNameEnum.DUA}`;
this.duaDataFile = undefined;
// { // TODO RETRIEVE DATA FORM BACKEND
// fileName: "dataset.dua",
// fileSize: undefined,
// status: FileStatusEnum.READY,
// mimetype: "application/pdf",
// puid: undefined,
// };
// TODO RETRIEVE DATA FORM BACKEND
this.duaDataFile = {
fileName: "dataset.dua",
fileSize: undefined,
status: FileStatusEnum.READY,
mimetype: "application/pdf",
puid: undefined,
};
this.canPreviewDua = FileVisualizerHelper.canHandle(this._fileVisualizerService.listFileVisualizer, {
dataFile: this.duaDataFile,
});
......@@ -167,14 +168,14 @@ export class HomeArchiveRestrictedRequestAccessDialog extends SharedAbstractDial
this.subscribe(this._downloadService.downloadInMemory(this.duaFileUrl, this.duaDataFile.fileName, true));
}
duaTypeEnumTranslate(value: string): string {
return EnumUtil.getLabel(Enums.Deposit.DuaTypeEnumTranslate, value);
dataUsePolicyEnumTranslate(value: string): string {
return EnumUtil.getLabel(Enums.Deposit.DataUsePolicyEnumTranslate, value);
}
}
export interface HomeArchiveRestrictedRequestAccessDialogData {
archiveId: string;
duaType: Enums.Deposit.DuaTypeEnum;
dataUsePolicy: Enums.Deposit.DataUsePolicyEnum;
withDua: boolean;
}
......
......@@ -187,13 +187,13 @@
<span [matTooltip]="getSensitivityTooltip(archive.dataSensitivity) | translate">{{archive.dataSensitivityToTranslate | translate}}</span>
</div>
<div class="dua">
<dlcm-shared-dua-type [duaType]="archive.duaType"
[withTooltip]="false"
></dlcm-shared-dua-type>
<dlcm-shared-data-use-policy [dataUsePolicy]="archive.dataUsePolicy"
[withTooltip]="false"
></dlcm-shared-data-use-policy>
<span class="label">{{labelTranslateEnum.contractOnTheUseOfData | translate}}</span>
<div class="dua-value-wrapper">
<div class="dua-type">{{enumUtil.getLabel(duaTypeEnumTranslate, archive.duaType) | translate}}</div>
<div *ngIf="(archive.duaType | isNotNullNorUndefined) && archive.duaType !== duaTypeEnum.NONE"
<div class="dua-type">{{enumUtil.getLabel(dataUsePolicyEnumTranslate, archive.dataUsePolicy) | translate}}</div>
<div *ngIf="(duaDataFile | isNotNullNorUndefined)"
class="dua-file"
>
<button [matTooltip]="labelTranslateEnum.showPreview | translate"
......
......@@ -77,6 +77,7 @@ import {
DownloadService,
EnumUtil,
FilePreviewDialog,
FileStatusEnum,
FileVisualizerHelper,
FileVisualizerService,
isNonEmptyArray,
......@@ -138,14 +139,14 @@ export class HomeArchiveDetailPresentational extends SharedAbstractPresentationa
this.canPreviewDua = false;
if (this.archive?.withDua) {
this.duaFileUrl = `${ApiEnum.accessPublicMetadata}/${this.archive.resId}/${ApiActionNameEnum.DUA}`;
this.duaDataFile = undefined;
/*{ // TODO RETRIEVE DATA FORM BACKEND
// TODO RETRIEVE DATA FORM BACKEND
this.duaDataFile = {
fileName: "dataset.dua",
fileSize: undefined,
status: FileStatusEnum.READY,
mimetype: "application/pdf",
puid: undefined,
};*/
};
this.canPreviewDua = FileVisualizerHelper.canHandle(this._fileVisualizerService.listFileVisualizer, {
dataFile: this.duaDataFile,
});
......@@ -226,12 +227,12 @@ export class HomeArchiveDetailPresentational extends SharedAbstractPresentationa
return ImageDisplayModeEnum;
}
get duaTypeEnum(): typeof Enums.Deposit.DuaTypeEnum {
return Enums.Deposit.DuaTypeEnum;
get dataUsePolicyEnum(): typeof Enums.Deposit.DataUsePolicyEnum {
return Enums.Deposit.DataUsePolicyEnum;
}
get duaTypeEnumTranslate(): typeof Enums.Deposit.DuaTypeEnumTranslate {
return Enums.Deposit.DuaTypeEnumTranslate;
get dataUsePolicyEnumTranslate(): typeof Enums.Deposit.DataUsePolicyEnumTranslate {
return Enums.Deposit.DataUsePolicyEnumTranslate;
}
constructor(protected readonly _securityService: SecurityService,
......@@ -405,7 +406,7 @@ export class HomeArchiveDetailPresentational extends SharedAbstractPresentationa
const indexOfSpace = fullName.indexOf(this.CONTRIBUTOR_SEPARATOR);
const lastName = indexOfSpace === -1 ? fullName : fullName.substring(0, indexOfSpace);
const firstName = indexOfSpace === -1 ? "" : fullName.substring(indexOfSpace + this.CONTRIBUTOR_SEPARATOR.length);
const person = {
return {
firstName: firstName,
lastName: lastName,
orcid: contributor.orcid,
......@@ -417,7 +418,6 @@ export class HomeArchiveDetailPresentational extends SharedAbstractPresentationa
} as MappingObject<Enums.IdentifiersEnum, string>,
})),
};
return person;
}
previewDuaFile(): void {
......
......@@ -182,7 +182,7 @@ export class HomeArchiveDetailRoutable extends SharedAbstractRoutable implements
filter(isAuthorized => !isAuthorized),
tap(isAuthorized => {
const queryParams: MappingObject<string, string | undefined> = UrlQueryParamHelper.getQueryParamMappingObjectFromCurrentUrl();
this._archiveAccessRightService.openRequestArchiveDialog(this._resId, archive.organizationalUnitId, archive.duaType, archive.withDua);
this._archiveAccessRightService.openRequestArchiveDialog(this._resId, archive.organizationalUnitId, archive.dataUsePolicy, archive.withDua);
// clean url
if (MappingObjectUtil.has(queryParams, environment.accessRequestRoute)) {
this._router.navigate([RoutesEnum.homeDetail, this._resId], {queryParams: null});
......
......@@ -175,11 +175,11 @@ export class ArchiveAccessRightService extends AbstractBaseService {
const accessRequestRouteParam = environment.nonceStateSeparator + environment.accessRequestRoute + "=true";
this._oauthService.initAuthorizationCodeFlow(LoginMode.STANDARD, RoutesEnum.homeDetail + urlSeparator + archive.resId + accessRequestRouteParam);
} else {
this.openRequestArchiveDialog(archive.resId, archive.organizationalUnitId, archive.duaType, archive.withDua);
this.openRequestArchiveDialog(archive.resId, archive.organizationalUnitId, archive.dataUsePolicy, archive.withDua);
}
}
private _sendRequestAccessDataset(archiveId: string, archiveOrgUnitId: string, duaType: Enums.Deposit.DuaTypeEnum, message: string, duaFileSigned: File): void {
private _sendRequestAccessDataset(archiveId: string, archiveOrgUnitId: string, message: string, duaFileSigned: File): void {
this.subscribe(StoreUtil.dispatchActionAndWaitForSubActionCompletion(this._store, this._actions$, new SharedNotificationAction.Create({
model: {
emitter: MemoizedUtil.currentSnapshot(this._store, AppUserState),
......@@ -205,16 +205,16 @@ export class ArchiveAccessRightService extends AbstractBaseService {
}
openRequestArchiveDialog(archiveId: string, archiveOrgUnitId: string, duaType: Enums.Deposit.DuaTypeEnum, withDua: boolean): void {
openRequestArchiveDialog(archiveId: string, archiveOrgUnitId: string, dataUsePolicy: Enums.Deposit.DataUsePolicyEnum, withDua: boolean): void {
this.subscribe(DialogUtil.open(this._dialog, HomeArchiveRestrictedRequestAccessDialog, {
duaType: duaType,
dataUsePolicy: dataUsePolicy,
archiveId: archiveId,
withDua: withDua,
} as HomeArchiveRestrictedRequestAccessDialogData, {
minWidth: "500px",
takeOne: true,
}, result => {
this._sendRequestAccessDataset(archiveId, archiveOrgUnitId, duaType, result.message, result.duaFileSigned);
this._sendRequestAccessDataset(archiveId, archiveOrgUnitId, result.message, result.duaFileSigned);
}));
}
......
......@@ -150,7 +150,7 @@ export class OrderMyOrderDetailEditRoutable extends AbstractDetailEditCommonRout
archiveMetadata: undefined,
withThumbnail: true,
withDua: false,
duaType: undefined,
dataUsePolicy: undefined,
isCollection: true,
} as Archive);
});
......
......@@ -225,7 +225,7 @@ export class PreservationSpaceOrganizationalUnitArchiveAclFormPresentational ext
}
private _computeIsDuaRequired(archive: Archive | undefined): void {
const isDuaRequired = archive?.duaType === Enums.Deposit.DuaTypeEnum.SIGNED;
const isDuaRequired = archive?.dataUsePolicy === Enums.Deposit.DataUsePolicyEnum.SIGNED_DUA;
const formControlNewDuaFile = this.form.get(this.formDefinition.newDuaFile);
if (isNullOrUndefined(formControlNewDuaFile)) {
return;
......
......@@ -344,7 +344,7 @@ export const icons: IconInfos[] = [
icon: "group",
},
{
name: IconNameEnum.duaImplicit,
name: IconNameEnum.license,
lib: IconLibEnum.image,
icon: "dua-implicit.svg",
},
......
......@@ -195,7 +195,7 @@ export interface Archive {
keywords: string[];
withThumbnail: boolean;
withDua: boolean;
duaType: Enums.Deposit.DuaTypeEnum;
dataUsePolicy: Enums.Deposit.DataUsePolicyEnum;
isCollection: boolean;
}
......@@ -308,7 +308,7 @@ export type DataFileChecksum = OverrideType<DataFileChecksumPartial, {
export type Deposit = OverrideType<DepositPartial, {
access?: Enums.Access.AccessEnum;
dataSensitivity?: Enums.DataSensitivity.DataSensitivityEnum;
duaType?: Enums.Deposit.DuaTypeEnum;
dataUsePolicy?: Enums.Deposit.DataUsePolicyEnum;
complianceLevel?: Enums.ComplianceLevel.ComplianceLevelEnum;
embargo?: EmbargoInfo;
language?: Language;
......