diff --git a/src/app/features/deposit/components/containers/deposit-document-file/deposit-document-file.container.scss b/src/app/features/deposit/components/containers/deposit-document-file/deposit-document-file.container.scss index 32c9632666ea755d21453431446e90301606e5c3..5f53d26c0317fbd0567e0b1e9d1e2f9fd2ececc5 100644 --- a/src/app/features/deposit/components/containers/deposit-document-file/deposit-document-file.container.scss +++ b/src/app/features/deposit/components/containers/deposit-document-file/deposit-document-file.container.scss @@ -12,6 +12,12 @@ display: grid; justify-content: center; grid-template-columns: 1fr; + + ::ng-deep { + .header-button-and-pagination { + display: none !important; + } + } } .upload-button-wrapper { 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 ae362eda45ff23403b8a53a18accdbe06865f7ed..59a21bdc0b1e52162688d9d0f94c9cd3fa043ee8 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 @@ -102,6 +102,7 @@ import { ConfirmDialog, ConfirmDialogData, isArray, + isFalse, isNonEmptyArray, isNonEmptyString, isNotNullNorUndefined, @@ -195,6 +196,9 @@ export class DepositFormPresentational extends AbstractPresentational implements @Input() model: Deposit; + @Input() + isPdfFilePresent: boolean; + depositFormModel: DepositFormModel; isImported: boolean = false; @@ -688,10 +692,15 @@ export class DepositFormPresentational extends AbstractPresentational implements return; } - if (!force && stepValue === Enums.Deposit.StepEnum.CONTRIBUTORS) { + if (!force && stepValue === Enums.Deposit.StepEnum.FILES && isFalse(this.isPdfFilePresent) && targetRoutingAfterSave > 0) { + this.displayNoPdfFileDialog(targetRoutingAfterSave); + return; + } + + if (!force && stepValue === Enums.Deposit.StepEnum.CONTRIBUTORS && targetRoutingAfterSave > 0) { const check = this.getCheckContributorCondition(); if (check !== ContributorUnigeCheck.OK) { - this.displayConfirmationNoContributors(check, targetRoutingAfterSave); + this.displayConfirmationNoContributorsDialog(check, targetRoutingAfterSave); return; } } @@ -703,7 +712,26 @@ export class DepositFormPresentational extends AbstractPresentational implements this.update(stepValue, targetRoutingAfterSave); } - private displayConfirmationNoContributors(check: ContributorUnigeCheck, targetRoutingAfterSave: Enums.Deposit.TargetRoutingAfterSaveEnum): void { + private displayNoPdfFileDialog(targetRoutingAfterSave: Enums.Deposit.TargetRoutingAfterSaveEnum): void { + this.subscribe(this._dialog.open(ConfirmDialog, { + data: { + titleToTranslate: MARK_AS_TRANSLATABLE("deposit.file.warning.noPdfFile.title"), + messageToTranslate: MARK_AS_TRANSLATABLE("deposit.file.warning.noPdfFile.message"), + cancelButtonToTranslate: LabelTranslateEnum.cancel, + } as ConfirmDialogData, + }).afterClosed().pipe( + tap((isConfirmed: boolean | undefined) => { + if (isNullOrUndefined(isConfirmed)) { + return; + } + if (isTrue(isConfirmed)) { + this.move(Enums.Deposit.publicationStepEnumNumber(Enums.Deposit.StepEnum.FILES), targetRoutingAfterSave, true); + } + }), + )); + } + + private displayConfirmationNoContributorsDialog(check: ContributorUnigeCheck, targetRoutingAfterSave: Enums.Deposit.TargetRoutingAfterSaveEnum): void { let title = SOLIDIFY_CONSTANTS.STRING_EMPTY; let message = SOLIDIFY_CONSTANTS.STRING_EMPTY; let confirmButton = LabelTranslateEnum.yesImSure; diff --git a/src/app/features/deposit/components/routables/deposit-create-edit/deposit-create-edit.routable.html b/src/app/features/deposit/components/routables/deposit-create-edit/deposit-create-edit.routable.html index 2ef4f3557816440ebea4800dcafb73bf4e83c40a..c69c0482ee16f151ba2714e4ac6f70987ba975d1 100644 --- a/src/app/features/deposit/components/routables/deposit-create-edit/deposit-create-edit.routable.html +++ b/src/app/features/deposit/components/routables/deposit-create-edit/deposit-create-edit.routable.html @@ -26,6 +26,7 @@ [listStructure]="listStructureObs | async" [listLanguages]="listLanguagesObs | async" [isLoadingStructure]="isLoadingStructureObs | async" + [isPdfFilePresent]="isPdfFilePresentObs | async" [step]="currentStep" [model]="currentObs | async" (createChange)="create($event)" diff --git a/src/app/features/deposit/components/routables/deposit-create-edit/deposit-create-edit.routable.ts b/src/app/features/deposit/components/routables/deposit-create-edit/deposit-create-edit.routable.ts index b79279c43b15fe5b926453f0e918649fab3dd9dc..bcf2b44e90678e2085225b86484d0f5d4ee46b20 100644 --- a/src/app/features/deposit/components/routables/deposit-create-edit/deposit-create-edit.routable.ts +++ b/src/app/features/deposit/components/routables/deposit-create-edit/deposit-create-edit.routable.ts @@ -93,6 +93,11 @@ export class DepositCreateEditRoutable extends AbstractRoutable implements OnIni listLanguagesObs: Observable<Language[]> = MemoizedUtil.list(this._store, SharedLanguageState); isLoadingStructureObs: Observable<boolean> = MemoizedUtil.isLoading(this._store, SharedStructureState); defaultDataObs: Observable<DepositDefaultData> = MemoizedUtil.select(this._store, DepositState, state => state.defaultData); + isPdfFilePresentObs: Observable<boolean> = MemoizedUtil.select(this._store, DepositDocumentFileState, state => + isNotNullNorUndefined(state.list) + && + state.list.some(file => file.mimetype === "application/pdf" || file.mimetype === "application/x-pdf"), + ); @HostBinding("class.is-edit") resId: string | undefined; diff --git a/src/app/features/deposit/stores/document-file/deposit-document-file.state.ts b/src/app/features/deposit/stores/document-file/deposit-document-file.state.ts index 25f7a238964a201c52108602ac2b2324d64351aa..1f7e34947047a1d0eea2d8b589c1999713e262b1 100644 --- a/src/app/features/deposit/stores/document-file/deposit-document-file.state.ts +++ b/src/app/features/deposit/stores/document-file/deposit-document-file.state.ts @@ -91,6 +91,7 @@ export interface DepositDocumentFileStateModel extends CompositionStateModel<Doc name: StateEnum.deposit_documentFile, defaults: { ...defaultDepositDocumentFileValue(), + queryParameters: new QueryParameters(environment.maximalPageSizeToRetrievePaginationInfo), }, children: [ DepositDocumentFileStatusHistoryState, diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index 47219a67de6597b9eb18a559bc25af90decb10f8..dfd2346fde1e017243bb46c0d8d61ec9fd901fdb 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -244,6 +244,12 @@ }, "success": "deposit.file.upload.notification.success" } + }, + "warning": { + "noPdfFile": { + "message": "deposit.file.warning.noPdfFile.message", + "title": "deposit.file.warning.noPdfFile.title" + } } }, "notification": { diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index c35d80703015283ed43a189740852346ba5298c1..eff7417bcb622c8c50c9dd806f866a670c7340bf 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -244,6 +244,12 @@ }, "success": "Upload successful" } + }, + "warning": { + "noPdfFile": { + "message": "You have not provided any PDF file", + "title": "No PDF file" + } } }, "notification": { diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json index 0f4d1452d3ae94e6409e4ac2b9999c230be8d72a..a7bbdb0286c94ae05e094948be55416b6eefd3c4 100644 --- a/src/assets/i18n/fr.json +++ b/src/assets/i18n/fr.json @@ -244,6 +244,12 @@ }, "success": "Fichier envoyé avec succès" } + }, + "warning": { + "noPdfFile": { + "message": "Vous n'avez fourni aucun fichier PDF", + "title": "Aucun fichier PDF" + } } }, "notification": {