Skip to content
Snippets Groups Projects
Commit a3b53b10 authored by Alicia.DeDiosFuente's avatar Alicia.DeDiosFuente
Browse files

fix: check all validation to enabled submit button in deposit form

parent ca3e5934
No related branches found
No related tags found
No related merge requests found
Showing
with 86 additions and 14 deletions
......@@ -45,6 +45,9 @@ export class DepositFormPresentational extends SharedAbstractFormPresentational<
accessEnumValues: string[] = [...Object.values(AccessEnum)];
@Input()
isReady: boolean = false;
@Input()
languages: Language[];
......@@ -126,6 +129,7 @@ export class DepositFormPresentational extends SharedAbstractFormPresentational<
[this.formDefinition.preservationPolicyId]: [deposit.preservationPolicyId],
[this.formDefinition.authors]: [_.map(this.selectedPersons, LocalModelAttributeEnum.resId), [Validators.required, SolidifyValidator]],
});
this.isValidWhenDisable = this.form.valid;
}
protected treatmentBeforeSubmit(deposit: DepositExtended): DepositExtended {
......
......@@ -16,9 +16,9 @@
>
{{KEY_DELETE_BUTTON | translate}}
</button>
<button *ngIf="((currentObs| async)?.status === statusEnum.INPROGRESS ||
(currentObs| async)?.status === statusEnum.INERROR)
&& (listDataFileObs | async) | isNonEmptyArray"
<button *ngIf="(currentObs| async)?.status === statusEnum.INPROGRESS
&& formPresentational?.isValidWhenDisable
&& (listDataFileObs | async) | allDataFileReady"
mat-flat-button
color="primary"
[disabled]="!(currentObs| async)"
......@@ -37,10 +37,12 @@
<mat-tab-group mat-align-tabs="center"
animationDuration="0ms"
[selectedIndex]="1"
>
<mat-tab [label]="'deposit.tab.details' | translate">
<div class="tab-content">
<dlcm-deposit-form *ngIf="(currentObs| async) != null"
<dlcm-deposit-form #formPresentational
*ngIf="(currentObs | async) && !(isLoadingObs | async) && !(isLoadingPersonObs | async)"
[model]="currentObs| async"
[languages]="languagesObs | async"
[licenses]="licensesObs | async"
......@@ -50,7 +52,8 @@
[listPersons]="listPersonObs | async"
[selectedPersons]="selectedPersonObs | async"
[readonly]="true"
></dlcm-deposit-form>
>
</dlcm-deposit-form>
</div>
</mat-tab>
<mat-tab [label]="'deposit.tab.datafiles' | translate">
......
......@@ -2,6 +2,7 @@ import {
ChangeDetectionStrategy,
Component,
OnInit,
ViewChild,
} from "@angular/core";
import {MatDialog} from "@angular/material";
import {ActivatedRoute} from "@angular/router";
......@@ -27,6 +28,7 @@ import {SharedAbstractDetailRoutable} from "@app/shared/components/routables/sha
import {LocalStateEnum} from "@app/shared/enums/local-state.enum";
import {LocalStateModel} from "@app/shared/models/local-state.model";
import {SharedOrgUnitAction} from "@app/shared/stores/organizational-unit/shared-organizational-unit.action";
import {DepositFormPresentational} from "@deposit/components/presentationals/deposit-form/deposit-form.presentational";
import {
Select,
Store,
......@@ -56,6 +58,9 @@ export class DepositDetailRoutable extends SharedAbstractDetailRoutable<DepositE
@Select((state: LocalStateModel) => state.deposit.deposit_dataFile.list) listDataFileObs: Observable<DepositDataFile[]>;
@Select((state: LocalStateModel) => state.deposit.deposit_person.selected) selectedPersonObs: Observable<Person[]>;
@ViewChild("formPresentational", {static: false})
readonly formPresentational: DepositFormPresentational;
readonly KEY_PARAM_NAME: string = "title";
readonly KEY_DELETE_BUTTON: string = TRANSLATE("deposit.delete");
readonly KEY_EDIT_BUTTON: string = TRANSLATE("deposit.edit");
......
......@@ -6,10 +6,11 @@
</div>
<mat-tab-group mat-align-tabs="center"
animationDuration="0ms"
[selectedIndex]="1"
>
<mat-tab [label]="'deposit.tab.details' | translate">
<div class="tab-content">
<dlcm-deposit-form *ngIf="(currentObs | async) && !(isLoadingObs | async) && !(isLoadingPersonObs | async)"
<dlcm-deposit-form #formPresentational *ngIf="(currentObs | async) && !(isLoadingObs | async) && !(isLoadingPersonObs | async)"
[model]="currentObs | async"
[languages]="languagesObs | async"
[licenses]="licensesObs | async"
......
......@@ -2,6 +2,7 @@ import {
ChangeDetectionStrategy,
Component,
OnInit,
ViewChild,
} from "@angular/core";
import {ActivatedRoute} from "@angular/router";
import {DepositExtended} from "@app/features/deposit/models/deposits-extended.model";
......@@ -21,6 +22,7 @@ import {SharedAbstractEditRoutable} from "@app/shared/components/routables/share
import {LocalStateEnum} from "@app/shared/enums/local-state.enum";
import {LocalStateModel} from "@app/shared/models/local-state.model";
import {SharedOrgUnitAction} from "@app/shared/stores/organizational-unit/shared-organizational-unit.action";
import {DepositFormPresentational} from "@deposit/components/presentationals/deposit-form/deposit-form.presentational";
import {
Select,
Store,
......@@ -44,6 +46,9 @@ export class DepositEditRoutable extends SharedAbstractEditRoutable<DepositExten
@Select((state: LocalStateModel) => state.shared.shared_organizationalUnit.list) organizationalUnitsObs: Observable<AccessOrganizationalUnit[]>;
@Select((state: LocalStateModel) => state.deposit.deposit_person.selected) selectedPersonObs: Observable<Person[]>;
@ViewChild("formPresentational", {static: false})
readonly formPresentational: DepositFormPresentational;
constructor(protected store: Store,
protected route: ActivatedRoute) {
super(store, route, LocalStateEnum.deposit, depositActionNameSpace);
......
......@@ -4,7 +4,18 @@ import {
ChangeInfo,
Deposit,
} from "@app/generated-api";
import StatusEnum = Deposit.StatusEnum;
export enum DepositDataFileStateEnum {
IN_ERROR = "IN_ERROR",
READY = "READY",
RECEIVED = "RECEIVED",
CHANGE_RELATIVE_LOCATION = "CHANGE_RELATIVE_LOCATION",
TO_PROCESS = "TO_PROCESS",
PROCESSED = "PROCESSED",
FILE_FORMAT_IDENTIFIED = "FILE_FORMAT_IDENTIFIED",
FILE_FORMAT_UNKNOWN = "FILE_FORMAT_UNKNOWN",
VIRUS_CHECKED = "VIRUS_CHECKED"
}
export interface DepositDataFile {
resId?: string;
......@@ -15,7 +26,7 @@ export interface DepositDataFile {
relativeLocation?: string;
finalData?: string;
fileSize?: number;
status?: StatusEnum;
status?: DepositDataFileStateEnum;
statusMessage?: string;
dataCategory?: string; // Enum get with ApiActionEnum.LIST_DATA_CATEGORY
dataType?: string; // Enum get with ApiActionEnum.LIST_DATA_TYPE
......
......@@ -32,6 +32,8 @@ export abstract class SharedAbstractFormPresentational<T> extends SharedAbstract
@Input()
readonly: boolean;
isValidWhenDisable: boolean;
private readonly _submitBS: BehaviorSubject<ModelFormControlEvent<T> | undefined> = new BehaviorSubject<ModelFormControlEvent<T> | undefined>(undefined);
@Output("submitChange")
......
@import "../../../../../sass/abstracts/variables";
@import "../../../../../sass/abstracts/mixins";
$fontFamily: Helvetica, Arial, sans-serif;
$fontSize: 1em;
......@@ -57,16 +58,19 @@ $invalidInputBorderColor: #ff0084;
$inputGroupTextColor: #444444;
.data-table {
.no-datas {
text-align: center;
}
tbody tr:nth-child(odd) {
// Allow pyjama
background-color: $background-grey !important;
tbody{
tr:nth-child(odd) {
// Allow pyjama
background-color: $background-grey !important;
}
td {
@include truncate-with-ellipsis();
}
}
@import "./base/table";
// OVERRIDE RULE PRIME NG THEME BELOW
......@@ -93,6 +97,7 @@ $inputGroupTextColor: #444444;
color: $headerTextColor !important;
}
.data-table-filter {
padding: 4px !important;
......
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;
}
list.forEach(d => {
if (d.status === DepositDataFileStateEnum.READY) {
return false;
}
});
return true;
}
}
......@@ -26,6 +26,7 @@ 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";
......@@ -45,7 +46,7 @@ const presentationals = [
SharedErrorPresentational,
];
const directives = [SharedValidationDirective];
const pipes = [FileSizePipe];
const pipes = [FileSizePipe, AllDataFileReadyPipe];
const modules = [
CommonModule,
FormsModule,
......
......@@ -102,3 +102,9 @@ $breakpoints-media-interval: (
opacity: 0.5;
}
}
@mixin truncate-with-ellipsis(){
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
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