Refactor Form
Some checks failed
Lint / lint (push) Failing after 13s

This commit is contained in:
Julien Valverdé
2026-03-28 21:36:43 +01:00
parent 8cc8aa4b56
commit c6655ba168
4 changed files with 22 additions and 22 deletions

View File

@@ -46,6 +46,6 @@
"react": "^19.2.0"
},
"dependencies": {
"effect-lens": "^0.1.2"
"effect-lens": "^0.1.3"
}
}

View File

@@ -19,7 +19,7 @@ extends Pipeable.Pipeable {
readonly value: Subscribable.Subscribable<Option.Option<A>, ER, never>
readonly encodedValue: Lens.Lens<I, ER, EW, never, never>
readonly error: Subscribable.Subscribable<Option.Option<ParseResult.ParseError>, ER, never>
readonly validationFiber: Subscribable.Subscribable<Option.Option<Fiber.Fiber<A, ParseResult.ParseError>>, ER, never>
readonly isValidating: Subscribable.Subscribable<boolean, ER, never>
readonly canSubmit: Subscribable.Subscribable<boolean, never, never>
}
@@ -33,10 +33,10 @@ extends Pipeable.Class() implements Form<P, A, I, ER, EW> {
constructor(
readonly path: P,
readonly value: Lens.Lens<Option.Option<A>, ER, EW, never, never>,
readonly value: Subscribable.Subscribable<Option.Option<A>, ER, never>,
readonly encodedValue: Lens.Lens<I, ER, EW, never, never>,
readonly error: Lens.Lens<Option.Option<ParseResult.ParseError>, ER, EW, never, never>,
readonly validationFiber: Lens.Lens<Option.Option<Fiber.Fiber<A, ParseResult.ParseError>>, ER, EW, never, never>,
readonly error: Subscribable.Subscribable<Option.Option<ParseResult.ParseError>, ER, never>,
readonly isValidating: Subscribable.Subscribable<boolean, never, never>,
readonly canSubmit: Subscribable.Subscribable<boolean, never, never>,
) {
super()
@@ -57,6 +57,8 @@ extends Form<readonly [], A, I, never, never> {
>
readonly autosubmit: boolean
readonly validationFiber: Subscribable.Subscribable<Option.Option<Fiber.Fiber<A, ParseResult.ParseError>>, never, never>
readonly run: Effect.Effect<void>
readonly submit: Effect.Effect<Option.Option<Result.Final<MA, ME, MP>>, Cause.NoSuchElementException>
}
@@ -74,11 +76,12 @@ extends FormImpl<readonly [], A, I> implements RootForm<A, I, R, MA, ME, MR, MP>
>,
readonly autosubmit: boolean,
value: Lens.Lens<Option.Option<A>, never, never, never, never>,
encodedValue: Lens.Lens<I, never, never, never, never>,
error: Lens.Lens<Option.Option<ParseResult.ParseError>, never, never, never, never>,
validationFiber: Lens.Lens<Option.Option<Fiber.Fiber<A, ParseResult.ParseError>>, never, never, never, never>,
canSubmit: Subscribable.Subscribable<boolean, never, never>,
readonly value: Lens.Lens<Option.Option<A>, never, never, never, never>,
readonly encodedValue: Lens.Lens<I, never, never, never, never>,
readonly error: Lens.Lens<Option.Option<ParseResult.ParseError>, never, never, never, never>,
readonly validationFiber: Lens.Lens<Option.Option<Fiber.Fiber<A, ParseResult.ParseError>>, never, never, never, never>,
readonly isValidating: Subscribable.Subscribable<boolean, never, never>,
readonly canSubmit: Subscribable.Subscribable<boolean, never, never>,
readonly runSemaphore: Effect.Semaphore,
) {
@@ -87,7 +90,7 @@ extends FormImpl<readonly [], A, I> implements RootForm<A, I, R, MA, ME, MR, MP>
value,
encodedValue,
error,
validationFiber,
isValidating,
canSubmit,
)
}
@@ -202,6 +205,7 @@ export const make = Effect.fnUntraced(function* <A, I = A, R = never, MA = void,
Lens.fromSubscriptionRef(yield* SubscriptionRef.make(options.initialEncodedValue)),
errorLens,
validationFiberLens,
Subscribable.map(validationFiberLens, Option.isSome),
Subscribable.map(
Subscribable.zipLatestAll(valueLens, errorLens, validationFiberLens, mutation.result),
([value, error, validationFiber, result]) => (
@@ -241,14 +245,10 @@ export const focusObjectField = <P extends readonly PropertyKey[], A extends obj
return new FormImpl(
path,
Lens.map(
form.value,
a => Option.map(a, v => v[key]),
(a, b) => Option.map(),
),
Subscribable.map(form.value, Option.map(a => a[key])),
Lens.focusObjectField(form.encodedValue, key),
form.error,
form.validationFiber,
form.isValidating,
form.canSubmit,
)
}