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

@@ -6,7 +6,7 @@
"name": "@effect-fc/monorepo",
"devDependencies": {
"@biomejs/biome": "^2.4.9",
"@effect/language-service": "^0.84.1",
"@effect/language-service": "^0.84.2",
"@types/bun": "^1.3.11",
"npm-check-updates": "^19.6.6",
"npm-sort": "^0.0.4",
@@ -37,7 +37,7 @@
"name": "effect-fc",
"version": "0.2.4",
"dependencies": {
"effect-lens": "^0.1.2",
"effect-lens": "^0.1.3",
},
"devDependencies": {
"@effect/platform-browser": "^0.76.0",
@@ -502,7 +502,7 @@
"@effect-fc/example": ["@effect-fc/example@workspace:packages/example"],
"@effect/language-service": ["@effect/language-service@0.84.1", "", { "bin": { "effect-language-service": "cli.js" } }, "sha512-YUqjJU24HeYgPV453cR2fDqkZ+zZKMuxGnmxWAPscWJ6gt6FB7JZohMCOczRTIOGPrQMcloJX7BjCaPu+RNhpw=="],
"@effect/language-service": ["@effect/language-service@0.84.2", "", { "bin": { "effect-language-service": "cli.js" } }, "sha512-l04qNxpiA8rY5yXWckRPJ7Mk5MNerXuNymSFf+IdflfI5i8jgL1bpBNLuP6ijg7wgjdHc/KmTnCj2kT0SCntuA=="],
"@effect/platform": ["@effect/platform@0.96.0", "", { "dependencies": { "find-my-way-ts": "^0.1.6", "msgpackr": "^1.11.4", "multipasta": "^0.2.7" }, "peerDependencies": { "effect": "^3.21.0" } }, "sha512-U7PLhkVzg7zzrgFvyWATOzD6reL87KG/fcdOxgLWBQ/J5CCU6qdPAVG+0o6o+IxcsLoqGwxs+rFxaFzrdtDV1A=="],
@@ -1380,7 +1380,7 @@
"effect-fc": ["effect-fc@workspace:packages/effect-fc"],
"effect-lens": ["effect-lens@0.1.2", "", { "peerDependencies": { "effect": "^3.21.0" } }, "sha512-1HdT+xv+Nmy7sQlsK6tBjqKtTZbzb/OPco66/45QnRtdXUGDjFrGMn2jpm/yC5Wxyhb7sNea791aVVq3YgAuwQ=="],
"effect-lens": ["effect-lens@0.1.3", "", { "peerDependencies": { "effect": "^3.21.0" } }, "sha512-LtGugMzJehYlQfD9GAbvAOFolVj6UOokqA2EI3M43GC2+wqTDloQjyiW3hrpH3UlayDor7Yg1ZG05Do5a0knsA=="],
"electron-to-chromium": ["electron-to-chromium@1.5.313", "", {}, "sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA=="],

View File

@@ -16,7 +16,7 @@
},
"devDependencies": {
"@biomejs/biome": "^2.4.9",
"@effect/language-service": "^0.84.1",
"@effect/language-service": "^0.84.2",
"@types/bun": "^1.3.11",
"npm-check-updates": "^19.6.6",
"npm-sort": "^0.0.4",

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,
)
}