@@ -46,6 +46,6 @@
|
||||
"react": "^19.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"effect-lens": "^0.1.2"
|
||||
"effect-lens": "^0.1.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user