diff --git a/packages/effect-fc/src/Form.ts b/packages/effect-fc/src/Form.ts index b8206b6..c19f782 100644 --- a/packages/effect-fc/src/Form.ts +++ b/packages/effect-fc/src/Form.ts @@ -324,6 +324,32 @@ export const focusTupleAt: { ) }) +export const focusChunkAt: { +

( + self: Form, Chunk.Chunk, ER, EW>, + index: number, + ): Form +

( + index: number, + ): (self: Form, Chunk.Chunk, ER, EW>) => Form +} = Function.dual(2,

( + self: Form, Chunk.Chunk, ER, EW>, + index: number, +): Form => { + const form = self as FormImpl, Chunk.Chunk, ER, EW> + const path = [...form.path, index] as const + + return new FormImpl( + path, + Subscribable.mapOptionEffect(form.value, Chunk.get(index)), + Lens.focusChunkAt(form.encodedValue, index), + Subscribable.map(form.issues, issues => filterIssuesByPath(issues, path)), + form.isValidating, + form.canSubmit, + form.isSubmitting, + ) +}) + export namespace useInput { export interface Options {