-
Maxime MAKHLOUFI authoredd3b175a7
probative-value-create.component.ts 3.98 KiB
/* tslint:disable:object-literal-key-quotes quotemark */
import {HttpHeaders} from '@angular/common/http';
import {Component, Inject, OnInit} from '@angular/core';
import {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';
import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material';
import {FilingPlanMode} from 'projects/vitamui-library/src/public-api';
import {Subscription} from 'rxjs';
import {ConfirmDialogService, Option} from 'ui-frontend-common';
import {AccessContractService} from '../../access-contract/access-contract.service';
import {ProbativeValueService} from '../probative-value.service';
const PROGRESS_BAR_MULTIPLICATOR = 100;
@Component({
selector: 'app-probative-value-create',
templateUrl: './probative-value-create.component.html',
styleUrls: ['./probative-value-create.component.scss']
})
export class ProbativeValueCreateComponent implements OnInit {
FILLING_PLAN_MODE_INCLUDE = FilingPlanMode.INCLUDE_ONLY;
form: FormGroup;
stepIndex = 0;
allServices = new FormControl(true);
allNodes = new FormControl(true);
selectedNodes = new FormControl();
accessContractSelect = new FormControl(null, Validators.required);
accessContracts: Option[];
usages: Option[] = [
{key: 'BinaryMaster', label: 'Archives numériques originales', info: ''},
{key: 'Dissemination', label: 'Copies de diffusion', info: ''},
{key: 'Thumbnail', label: 'Vignette', info: ''},
{key: 'TextContent', label: 'Contenu textuel', info: ''},
{key: 'PhysicalMaster', label: 'Archives physiques', info: ''}
];
// stepCount is the total number of steps and is used to calculate the advancement of the progress bar.
// We could get the number of steps using ViewChildren(StepComponent) but this triggers a
// "Expression has changed after it was checked" error so we instead manually define the value.
// Make sure to update this value whenever you add or remove a step from the template.
private stepCount = 1;
private keyPressSubscription: Subscription;
constructor(
public dialogRef: MatDialogRef<ProbativeValueCreateComponent>,
@Inject(MAT_DIALOG_DATA) public data: any,
private formBuilder: FormBuilder,
private confirmDialogService: ConfirmDialogService,
private probativeValueService: ProbativeValueService,
protected accessContractService: AccessContractService
) {
}
ngOnInit() {
this.accessContractService.getAll().subscribe((value) => {
this.accessContracts = value.map(x => ({key: x.identifier, label: x.name}));
});
this.form = this.formBuilder.group({
unitId: [null, Validators.required],
accessContract: this.accessContractSelect,
usage: [null, Validators.required],
version: [null, Validators.required]
});
this.keyPressSubscription = this.confirmDialogService.listenToEscapeKeyPress(this.dialogRef).subscribe(() => this.onCancel());
}
ngOnDestroy = () => {
this.keyPressSubscription.unsubscribe();
}
onCancel() {
if (this.form.dirty) {
this.confirmDialogService.confirmBeforeClosing(this.dialogRef);
} else {
this.dialogRef.close();
}
}
onSubmit() {
if (this.form.invalid) {
return;
}
this.probativeValueService.create(
this.createDsl(this.form.value), new HttpHeaders({'X-Access-Contract-Id': this.accessContractSelect.value})).subscribe(
() => {
this.dialogRef.close({success: true, action: 'none'});
},
() => {
this.dialogRef.close({success: false, action: 'none'});
});
}
get stepProgress() {
return ((this.stepIndex + 1) / this.stepCount) * PROGRESS_BAR_MULTIPLICATOR;
}
createDsl(values: any) {
return {
"dslQuery": {
"$query": [
{
"$or": [
{
"$in": {
"#id": [values.unitId]
}
}
]
}
],
"$filter": {},
"$projection": {}
},
"usage": values.usage,
"version": values.version
};
}
}