diff --git a/web/projects/ui/src/app/services/api/api.fixures.ts b/web/projects/ui/src/app/services/api/api.fixures.ts index 626a8981f..a6f8b9f69 100644 --- a/web/projects/ui/src/app/services/api/api.fixures.ts +++ b/web/projects/ui/src/app/services/api/api.fixures.ts @@ -1719,6 +1719,7 @@ export module Mock { ISB.List.text( { name: 'RPC Auth', + minLength: 3, description: 'api keys that are authorized to access your Bitcoin node.', }, diff --git a/web/projects/ui/src/app/services/form.service.ts b/web/projects/ui/src/app/services/form.service.ts index f00fead22..80721380b 100644 --- a/web/projects/ui/src/app/services/form.service.ts +++ b/web/projects/ui/src/app/services/form.service.ts @@ -55,7 +55,10 @@ export class FormService { getListItem(spec: IST.ValueSpecList, entry?: any) { if (IST.isValueSpecListOf(spec, 'text')) { - return this.formBuilder.control(entry, stringValidators(spec.spec)) + return this.formBuilder.control(entry, [ + ...stringValidators(spec.spec), + Validators.required, + ]) } else if (IST.isValueSpecListOf(spec, 'object')) { return this.getFormGroup(spec.spec.spec, [], entry) } @@ -116,12 +119,15 @@ export class FormService { case 'object': return this.getFormGroup(spec.spec, [], currentValue) case 'list': - const mapped = ( - Array.isArray(currentValue) ? currentValue : (spec.default as any[]) - ).map(entry => { - return this.getListItem(spec, entry) - }) - return this.formBuilder.array(mapped, listValidators(spec)) + const array = Array.isArray(currentValue) ? currentValue : spec.default + const length = Math.max(array.length, spec.minLength || 0) + + return this.formBuilder.array( + Array.from({ length }).map((_, index) => + this.getListItem(spec, array[index]), + ), + listValidators(spec), + ) case 'file': return this.formBuilder.control( currentValue || null,