Merge pull request #4273 from 4Science/task/main/DURACOM-354

Fix missing input fields for integer script parameters
This commit is contained in:
Tim Donohue
2025-04-29 17:06:48 -05:00
committed by GitHub
35 changed files with 265 additions and 25 deletions

View File

@@ -0,0 +1,11 @@
<input [attr.aria-label]="'process.new.parameter.label' | translate" required #integer="ngModel" type="number" step="1" name="integer-value-{{index}}" class="form-control" id="integer-value-{{index}}" [ngModel]="value" (ngModelChange)="setValue($event)"/>
@if (integer.invalid && (integer.dirty || integer.touched)) {
<div
class="alert alert-danger validation-error mb-0">
@if (integer.errors.required) {
<div>
{{'process.new.parameter.integer.required' | translate}}
</div>
}
</div>
}

View File

@@ -0,0 +1,5 @@
:host {
display: flex;
flex-direction: column;
gap: calc(var(--bs-spacer) / 2);
}

View File

@@ -0,0 +1,81 @@
import {
ComponentFixture,
fakeAsync,
TestBed,
tick,
waitForAsync,
} from '@angular/core/testing';
import { FormsModule } from '@angular/forms';
import { By } from '@angular/platform-browser';
import {
TranslateLoader,
TranslateModule,
} from '@ngx-translate/core';
import { TranslateLoaderMock } from '../../../../../shared/mocks/translate-loader.mock';
import { IntegerValueInputComponent } from './integer-value-input.component';
describe('IntegerValueInputComponent', () => {
let component: IntegerValueInputComponent;
let fixture: ComponentFixture<IntegerValueInputComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
FormsModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: TranslateLoaderMock,
},
}),
IntegerValueInputComponent,
],
providers: [],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(IntegerValueInputComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
it('should not show a validation error if the input field was left untouched but left empty', () => {
const validationError = fixture.debugElement.query(By.css('.validation-error'));
expect(validationError).toBeFalsy();
});
it('should show a validation error if the input field was touched but left empty', fakeAsync(() => {
component.value = undefined;
fixture.detectChanges();
tick();
const input = fixture.debugElement.query(By.css('input'));
input.triggerEventHandler('blur', null);
fixture.detectChanges();
const validationError = fixture.debugElement.query(By.css('.validation-error'));
expect(validationError).toBeTruthy();
}));
it('should not show a validation error if the input field was touched but not left empty', fakeAsync(() => {
component.value = 1;
fixture.detectChanges();
tick();
const input = fixture.debugElement.query(By.css('input'));
input.triggerEventHandler('blur', null);
fixture.detectChanges();
const validationError = fixture.debugElement.query(By.css('.validation-error'));
expect(validationError).toBeFalsy();
}));
});

View File

@@ -0,0 +1,49 @@
import {
Component,
Input,
OnInit,
Optional,
} from '@angular/core';
import {
ControlContainer,
FormsModule,
NgForm,
} from '@angular/forms';
import { TranslateModule } from '@ngx-translate/core';
import { controlContainerFactory } from '../../../process-form-factory';
import { ValueInputComponent } from '../value-input.component';
/**
* Represents the user-inputted value of an integer parameter
*/
@Component({
selector: 'ds-integer-value-input',
templateUrl: './integer-value-input.component.html',
styleUrls: ['./integer-value-input.component.scss'],
viewProviders: [{ provide: ControlContainer,
useFactory: controlContainerFactory,
deps: [[new Optional(), NgForm]] }],
standalone: true,
imports: [FormsModule, TranslateModule],
})
export class IntegerValueInputComponent extends ValueInputComponent<number> implements OnInit {
/**
* The current value of the integer
*/
value: number;
/**
* Initial value of the field
*/
@Input() initialValue;
ngOnInit(): void {
this.value = this.initialValue;
}
setValue(value) {
this.value = value;
this.updateValue.emit(value);
}
}

View File

@@ -3,6 +3,9 @@
@case (parameterTypes.STRING) {
<ds-string-value-input [initialValue]="initialValue" (updateValue)="updateValue.emit($event)" [index]="index"></ds-string-value-input>
}
@case (parameterTypes.INTEGER) {
<ds-integer-value-input [initialValue]="initialValue" (updateValue)="updateValue.emit($event)" [index]="index"></ds-integer-value-input>
}
@case (parameterTypes.OUTPUT) {
<ds-string-value-input [initialValue]="initialValue" (updateValue)="updateValue.emit($event)" [index]="index"></ds-string-value-input>
}

View File

@@ -17,6 +17,7 @@ import { controlContainerFactory } from '../../process-form-factory';
import { BooleanValueInputComponent } from './boolean-value-input/boolean-value-input.component';
import { DateValueInputComponent } from './date-value-input/date-value-input.component';
import { FileValueInputComponent } from './file-value-input/file-value-input.component';
import { IntegerValueInputComponent } from './number-value-input/integer-value-input.component';
import { StringValueInputComponent } from './string-value-input/string-value-input.component';
/**
@@ -30,7 +31,7 @@ import { StringValueInputComponent } from './string-value-input/string-value-inp
useFactory: controlContainerFactory,
deps: [[new Optional(), NgForm]] }],
standalone: true,
imports: [StringValueInputComponent, DateValueInputComponent, FileValueInputComponent, BooleanValueInputComponent],
imports: [StringValueInputComponent, DateValueInputComponent, FileValueInputComponent, BooleanValueInputComponent, IntegerValueInputComponent],
})
export class ParameterValueInputComponent {
@Input() index: number;

View File

@@ -3,6 +3,7 @@
*/
export enum ScriptParameterType {
STRING = 'String',
INTEGER = 'Integer',
DATE = 'date',
BOOLEAN = 'boolean',
FILE = 'InputStream',

View File

@@ -6045,6 +6045,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "يرجى تحديد ملف",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "قيمة المتغير مطلوبة",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "قيمة المتغير مطلوبة",
@@ -11456,4 +11459,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -6525,6 +6525,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "দয়াকরে একটি ফাইল নির্বাচন করুন",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "পরামিতির মান প্রয়োজন",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "পরামিতির মান প্রয়োজন",
@@ -12379,4 +12382,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -5850,6 +5850,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "Si us plau seleccioneu un fitxer",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "Es requereix el valor del paràmetre",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "Es requereix el valor del paràmetre",
@@ -10771,4 +10774,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -6223,6 +6223,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "Vyberte prosím soubor",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "Hodnota parametru je povinná",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "Hodnota parametru je povinná",

View File

@@ -5861,6 +5861,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "Bitte wählen Sie eine Datei aus",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "Parameterwert ist erforderlich",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "Parameterwert ist erforderlich",
@@ -10792,4 +10795,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -6444,6 +6444,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "Επιλέξτε ένα αρχείο",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "Απαιτείται τιμή παραμέτρου",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "Απαιτείται τιμή παραμέτρου",
@@ -12078,4 +12081,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -3858,6 +3858,8 @@
"process.new.parameter.file.required": "Please select a file",
"process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.type.value": "value",

View File

@@ -5848,6 +5848,10 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "Por favor seleccione un archivo",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "Se requiere el valor del parámetro",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "Se requiere el valor del parámetro",
@@ -10768,4 +10772,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -6223,6 +6223,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "Valitse tiedosto, ole hyvä",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "Parametrin arvo on pakollinen tieto",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "Parametrin arvo on pakollinen tieto",
@@ -11699,4 +11702,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -6281,6 +6281,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "Veuillez sélectionner un fichier",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "Veuillez spécifier un paramètre",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "Veuillez spécifier un paramètre",
@@ -11414,4 +11417,4 @@
"embargo.listelement.badge": "Embargo jusqu'à {{ date }}",
}
}

View File

@@ -6588,6 +6588,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "Tagh faidhle",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "Feum air luach parameatair",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "Feum air luach parameatair",
@@ -12471,4 +12474,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -6440,6 +6440,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "कृपया एक फ़ाइल चुनें",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "पैरामीटर मान आवश्यक है",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "पैरामीटर मान आवश्यक है",
@@ -12073,4 +12076,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -6667,6 +6667,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "Kérem válasszon egy fájlt",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "Szüséges egy paraméter érték",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "Szüséges egy paraméter érték",
@@ -12624,4 +12627,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -6256,6 +6256,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "Seleziona un file",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "Il valore del parametro è obbligatorio",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "Il valore del parametro è obbligatorio",
@@ -11749,4 +11752,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -7714,6 +7714,10 @@
// TODO New key - Add a translation
"process.new.parameter.file.required": "Please select a file",
// "process.new.parameter.integer.required": "Parameter value is required",
// TODO New key - Add a translation
"process.new.parameter.integer.required": "Parameter value is required",
// "process.new.parameter.string.required": "Parameter value is required",
// TODO New key - Add a translation
"process.new.parameter.string.required": "Parameter value is required",
@@ -14194,4 +14198,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -6444,6 +6444,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "Файлды таңдаңыз",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "Параметр мәні қажет",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "Параметр мәні қажет",
@@ -12098,4 +12101,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -6958,6 +6958,10 @@
// TODO New key - Add a translation
"process.new.parameter.file.required": "Please select a file",
// "process.new.parameter.integer.required": "Parameter value is required",
// TODO New key - Add a translation
"process.new.parameter.integer.required": "Parameter value is required",
// "process.new.parameter.string.required": "Parameter value is required",
// TODO New key - Add a translation
"process.new.parameter.string.required": "Parameter value is required",
@@ -13161,4 +13165,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -7200,6 +7200,10 @@
// TODO New key - Add a translation
"process.new.parameter.file.required": "Please select a file",
// "process.new.parameter.integer.required": "Parameter value is required",
// TODO New key - Add a translation
"process.new.parameter.integer.required": "Parameter value is required",
// "process.new.parameter.string.required": "Parameter value is required",
// TODO New key - Add a translation
"process.new.parameter.string.required": "Parameter value is required",
@@ -13500,4 +13504,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -5786,6 +5786,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "Proszę wybrać plik",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "Wartość parametru jest wymagana",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "Wartość parametru jest wymagana",

View File

@@ -5869,6 +5869,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "Por favor, selecione um arquivo",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "Valor do parâmetro é obrigatório",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "Valor do parâmetro é obrigatório",
@@ -10812,4 +10815,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -5904,6 +5904,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "Selecione um ficheiro",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "É necessário um valor no parâmetro",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "É necessário um valor no parâmetro",
@@ -11130,4 +11133,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -6255,6 +6255,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "Молимо изаберите фајл",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "Вредност параметра је обавезна",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "Вредност параметра је обавезна",
@@ -11719,4 +11722,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -6253,6 +6253,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "Molimo izaberite fajl",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "Vrednost parametra je obavezna",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "Vrednost parametra je obavezna",
@@ -11716,4 +11719,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -6596,6 +6596,10 @@
// TODO New key - Add a translation
"process.new.parameter.file.required": "Please select a file",
// "process.new.parameter.integer.required": "Parameter value is required",
// TODO New key - Add a translation
"process.new.parameter.integer.required": "Parameter value is required",
// "process.new.parameter.string.required": "Parameter value is required",
// TODO New key - Add a translation
"process.new.parameter.string.required": "Parameter value is required",
@@ -12527,4 +12531,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -7714,6 +7714,10 @@
// TODO New key - Add a translation
"process.new.parameter.file.required": "Please select a file",
// "process.new.parameter.integer.required": "Parameter value is required",
// TODO New key - Add a translation
"process.new.parameter.integer.required": "Parameter value is required",
// "process.new.parameter.string.required": "Parameter value is required",
// TODO New key - Add a translation
"process.new.parameter.string.required": "Parameter value is required",
@@ -14194,4 +14198,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -6740,6 +6740,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "Lütfen dosya seçiniz.",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "Parametre değeri gerekli",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "Parametre değeri gerekli",
@@ -12721,4 +12724,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}

View File

@@ -6768,6 +6768,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "Виберіть файл",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "Цей параметр є обв'язковим",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "Цей параметр є обв'язковим",

View File

@@ -6344,6 +6344,9 @@
// "process.new.parameter.file.required": "Please select a file",
"process.new.parameter.file.required": "Vui lòng chọn một tệp tin",
// "process.new.parameter.integer.required": "Parameter value is required",
"process.new.parameter.integer.required": "Giá trị tham số là bắt buộc",
// "process.new.parameter.string.required": "Parameter value is required",
"process.new.parameter.string.required": "Giá trị tham số là bắt buộc",
@@ -11942,4 +11945,4 @@
"embargo.listelement.badge": "Embargo until {{ date }}",
}
}