Skip to content
Snippets Groups Projects
Commit a5b33732 authored by Alicia.DeDiosFuente's avatar Alicia.DeDiosFuente Committed by Florent Poittevin
Browse files

Adf 735 validation banner

parent 5d74a3ce
No related branches found
No related tags found
No related merge requests found
<div *ngIf="!(isLoadingObs| async) && !(isLoadingDataFileObs | async) && !canSubmit(listDataFileObs | async)"
class="alert"
>
{{message| translate}}
</div>
<div class="button-toolbar">
<button *ngIf="(currentObs| async)?.status === statusEnum.INPROGRESS ||
(currentObs| async)?.status === statusEnum.INERROR"
......@@ -18,7 +24,7 @@
</button>
<button *ngIf="(currentObs| async)?.status === statusEnum.INPROGRESS
&& formPresentational?.isValidWhenDisable
&& (listDataFileObs | async) | allDataFileReady"
&& canSubmit(listDataFileObs | async)"
mat-flat-button
color="primary"
[disabled]="!(currentObs| async)"
......
@import "../../../../../../sass/abstracts/variables";
@import "../../../../../../sass/abstracts/mixins";
@import "../../../../../shared/components/routables/shared-abstract-detail/shared-abstract-detail.routable.scss";
.alert {
background-color: $warning;
color: $white;
font-weight: bold;
text-align: center;
margin: -25px -25px 15px;
padding: 5px;
box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.05);
animation: appear 1s;
}
@-webkit-keyframes appear {
0% {
-webkit-transform: scaleY(0);
height: 0;
padding: 0;
opacity: 0;
display: none;
-webkit-animation-play-state: paused;
}
100% {
-webkit-transform: scaleY(1);
opacity: 1;
}
}
......@@ -6,7 +6,10 @@ import {
} from "@angular/core";
import {MatDialog} from "@angular/material";
import {ActivatedRoute} from "@angular/router";
import {DepositDataFile} from "@app/features/deposit/models/deposit-data-file.model";
import {
DepositDataFile,
DepositDataFileStateEnum,
} from "@app/features/deposit/models/deposit-data-file.model";
import {DepositExtended} from "@app/features/deposit/models/deposits-extended.model";
import {DepositDataFileAction} from "@app/features/deposit/stores/data-file/deposit-data-file.action";
import {
......@@ -37,6 +40,8 @@ import {Observable} from "rxjs";
import {tap} from "rxjs/internal/operators/tap";
import {take} from "rxjs/operators";
import {
isEmptyArray,
isNullOrUndefined,
StoreUtil,
TRANSLATE,
} from "solidify-frontend";
......@@ -44,11 +49,12 @@ import {
@Component({
selector: "dlcm-deposit-detail-routable",
templateUrl: "./deposit-detail.routable.html",
styleUrls: ["../../../../../shared/components/routables/shared-abstract-detail/shared-abstract-detail.routable.scss"],
styleUrls: ["./deposit-detail.routable.scss"],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class DepositDetailRoutable extends SharedAbstractDetailRoutable<DepositExtended, DepositStateModel> implements OnInit {
@Select((state: LocalStateModel) => StoreUtil.isLoadingState(state.deposit.deposit_person)) isLoadingPersonObs: Observable<boolean>;
@Select((state: LocalStateModel) => StoreUtil.isLoadingState(state.deposit.deposit_dataFile)) isLoadingDataFileObs: Observable<boolean>;
@Select((state: LocalStateModel) => state.shared.shared_language.list) languagesObs: Observable<Language[]>;
@Select((state: LocalStateModel) => state.shared.shared_license.list) licensesObs: Observable<License[]>;
@Select((state: LocalStateModel) => state.shared.shared_submissionPolicy.list) submissionPoliciesObs: Observable<SubmissionPolicy[]>;
......@@ -61,6 +67,8 @@ export class DepositDetailRoutable extends SharedAbstractDetailRoutable<DepositE
@ViewChild("formPresentational", {static: false})
readonly formPresentational: DepositFormPresentational;
message: string;
readonly KEY_PARAM_NAME: string = "title";
readonly KEY_DELETE_BUTTON: string = TRANSLATE("deposit.delete");
readonly KEY_EDIT_BUTTON: string = TRANSLATE("deposit.edit");
......@@ -80,6 +88,22 @@ export class DepositDetailRoutable extends SharedAbstractDetailRoutable<DepositE
this.store.dispatch(new SharedOrgUnitAction.GetAll());
}
canSubmit(list: DepositDataFile[]): boolean {
if (isNullOrUndefined(list) || isEmptyArray(list)) {
this.message = TRANSLATE("deposit.error.noFile");
return false;
}
const result = !list.some(d => {
if (d.status === DepositDataFileStateEnum.IN_ERROR) {
this.message = TRANSLATE("deposit.error.fileInError");
return true;
}
return false;
});
return result;
}
getSubResourceWithParentId(id: string): void {
this.store.dispatch(new DepositDataFileAction.GetAll(id));
this.store.dispatch(new DepositPersonAction.GetAll(id));
......
@import "../../../../../sass/abstracts/variables";
@import "../../../../../sass/abstracts/mixins";
@import "../shared-abstract-resource/shared-abstract-resource.routable";
.tab-content {
......
import {
Pipe,
PipeTransform,
} from "@angular/core";
import {
DepositDataFile,
DepositDataFileStateEnum,
} from "@deposit/models/deposit-data-file.model";
import {SharedAbstractPipe} from "@shared/pipes/shared-abstract/shared-abstract.pipe";
@Pipe({
name: "allDataFileReady",
})
export class AllDataFileReadyPipe extends SharedAbstractPipe implements PipeTransform {
transform(list: DepositDataFile[]): boolean {
if (list === undefined || list === null) {
return false;
}
if (list.length === 0) {
return false;
}
Array.from(list).forEach(d => {
if (d.status === DepositDataFileStateEnum.READY) {
return false;
}
});
return true;
}
}
......@@ -26,7 +26,6 @@ import {library} from "@fortawesome/fontawesome-svg-core";
import {fas} from "@fortawesome/free-solid-svg-icons";
import {TranslateModule} from "@ngx-translate/core";
import {NgxsModule} from "@ngxs/store";
import {AllDataFileReadyPipe} from "@shared/pipes/all-data-file-ready.pipe";
import {TableModule} from "primeng/table";
import {SolidifyFrontendModule} from "solidify-frontend";
import {SharedBreadcrumbPresentational} from "./components/presentationals/shared-breadcrumb/shared-breadcrumb.presentational";
......@@ -43,10 +42,10 @@ const presentationals = [
SharedMultiSelectPresentational,
SharedMultiSelectDefaultValuePresentational,
SharedFieldErrorPresentational,
SharedErrorPresentational,
SharedErrorPresentational
];
const directives = [SharedValidationDirective];
const pipes = [FileSizePipe, AllDataFileReadyPipe];
const pipes = [FileSizePipe];
const modules = [
CommonModule,
FormsModule,
......
......@@ -673,6 +673,10 @@
"datafiles": "Data Files",
"details": "Details"
},
"error": {
"fileInError": "The data file has an Error",
"noFile": "You have to upload a file to submit the deposit"
},
"table": {
"header": {
"creation": {
......
......@@ -673,6 +673,10 @@
"datafiles": "Data Files",
"details": "Details"
},
"error": {
"fileInError": "The data file has an Error",
"noFile": "You have to upload a file to submit the deposit"
},
"table": {
"header": {
"creation": {
......
......@@ -673,6 +673,10 @@
"datafiles": "Fichiers",
"details": "Détails"
},
"error": {
"fileInError": "Le fichier de données contient une erreur",
"noFile": "Vous devez télécharger un fichier pour pouvoir soumettre le dépôt"
},
"table": {
"header": {
"creation": {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment