Skip to content
This repository has been archived by the owner on Jul 22, 2023. It is now read-only.

Commit

Permalink
fixed edit search result modification check (#310)
Browse files Browse the repository at this point in the history
  • Loading branch information
crapStone authored Mar 14, 2021
1 parent 07d1d3d commit a0613e0
Showing 1 changed file with 17 additions and 65 deletions.
82 changes: 17 additions & 65 deletions src/app/search/edit-search-results/edit-search-results.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { Subscription } from 'rxjs';

import {
Amount,
Data,
SubstanceData,
TemperatureUnit,
Expand Down Expand Up @@ -67,14 +66,7 @@ export class EditSearchResultsComponent implements OnInit {
}

initControls(): FormGroup {
let amount;
let amountDirty = false;
if (this.data.amount) {
amount = this.data.amount;
amountDirty = true;
} else {
amount = { value: '', unit: Unit.GRAM };
}
const amount = this.data.amount ?? { value: '', unit: Unit.GRAM };

const group = this.formBuilder.group({
name: [this.modifiedOrOriginal(this.data.name), Validators.required],
Expand All @@ -100,10 +92,6 @@ export class EditSearchResultsComponent implements OnInit {
}),
});

if (amountDirty) {
group.get('amount')?.markAsDirty();
}

return group;
}

Expand Down Expand Up @@ -195,21 +183,13 @@ export class EditSearchResultsComponent implements OnInit {
if (!this.abort) {
const newData: SubstanceData = {
...this.data,
name: this.evaluateForm('name', this.data.name, (value) => value.length === 0),
cas: this.evaluateForm('cas', this.data.cas, (value) => value?.length === 0),
molecularFormula: this.evaluateForm(
'molecularFormula',
this.data.molecularFormula,
(value) => value.length === 0,
),
molarMass: this.evaluateForm('molarMass', this.data.molarMass, (value) => value?.length === 0),
meltingPoint: this.evaluateForm('meltingPoint', this.data.meltingPoint, (value) => value?.length === 0),
boilingPoint: this.evaluateForm('boilingPoint', this.data.boilingPoint, (value) => value?.length === 0),
waterHazardClass: this.evaluateForm(
'waterHazardClass',
this.data.waterHazardClass,
(value) => value?.length === 0,
),
name: this.evaluateForm('name', this.data.name),
cas: this.evaluateForm('cas', this.data.cas),
molecularFormula: this.evaluateForm('molecularFormula', this.data.molecularFormula),
molarMass: this.evaluateForm('molarMass', this.data.molarMass),
meltingPoint: this.evaluateForm('meltingPoint', this.data.meltingPoint),
boilingPoint: this.evaluateForm('boilingPoint', this.data.boilingPoint),
waterHazardClass: this.evaluateForm('waterHazardClass', this.data.waterHazardClass),
hPhrases: this.evaluateFormArray(
this.hPhrases,
(value) => [value.get('hNumber')?.value, value.get('hPhrase')?.value],
Expand All @@ -220,16 +200,16 @@ export class EditSearchResultsComponent implements OnInit {
(value) => [value.get('pNumber')?.value, value.get('pPhrase')?.value],
this.data.pPhrases,
),
signalWord: this.evaluateForm('signalWord', this.data.signalWord, (value) => value?.length === 0),
signalWord: this.evaluateForm('signalWord', this.data.signalWord),
symbols: this.evaluateFormArray(this.symbols, (symbol) => symbol?.value, this.data.symbols),
lethalDose: this.evaluateForm('lethalDose', this.data.lethalDose, (value) => value?.length === 0),
mak: this.evaluateForm('mak', this.data.mak, (value) => value?.length === 0),
lethalDose: this.evaluateForm('lethalDose', this.data.lethalDose),
mak: this.evaluateForm('mak', this.data.mak),
amount: this.amount.dirty
? {
value: this.amount.get('value')?.value,
unit: this.amount.get('unit')?.value,
}
: undefined,
: this.data.amount,
};

if (!this.form.invalid) {
Expand All @@ -244,19 +224,13 @@ export class EditSearchResultsComponent implements OnInit {
this.dialogRef.close(returnData);
}

private evaluateForm<T>(
formControlName: string,
currentData: Data<T>,
emptyCallback: (value: T) => boolean,
): Data<T> {
private evaluateForm<T>(formControlName: string, currentData: Data<T>): Data<T> {
const control = this.form?.get(formControlName);

if (control?.dirty) {
let retData: Data<T> = { originalData: currentData.originalData };
if (control.value !== (currentData.modifiedData ?? '')) {
if (!emptyCallback(control.value)) {
retData = { ...retData, modifiedData: control.value };
}
if (control.value !== (currentData.modifiedData ?? currentData.originalData)) {
retData = { ...retData, modifiedData: control.value };
}
return retData;
}
Expand All @@ -271,30 +245,8 @@ export class EditSearchResultsComponent implements OnInit {
if (formArray.touched) {
const newArray = formArray.controls.map(mapCallback);
let retData: Data<T[]> = { originalData: currentData.originalData };
if (newArray !== (currentData.modifiedData ?? [])) {
if (newArray.length !== 0) {
retData = { ...retData, modifiedData: newArray };
}
}
return retData;
}
return currentData;
}

private evaluateFormGroup<T>(
formGroup: FormGroup,
mapCallback: (value: AbstractControl) => T,
cmpCallback: (newObj: T, oldObj: Data<T>) => boolean,
emptyCallback: (obj: T) => boolean,
currentData: Data<T>,
): Data<T> {
if (formGroup.dirty) {
const newObject = mapCallback(formGroup);
let retData: Data<T> = { originalData: currentData.originalData };
if (cmpCallback(newObject, currentData)) {
if (!emptyCallback(newObject)) {
retData = { ...retData, modifiedData: newObject };
}
if (newArray !== (currentData.modifiedData ?? currentData.originalData)) {
retData = { ...retData, modifiedData: newArray };
}
return retData;
}
Expand Down

0 comments on commit a0613e0

Please sign in to comment.