diff --git a/packages/effect-fc/src/Form.ts b/packages/effect-fc/src/Form.ts index c681ce1..e0829cb 100644 --- a/packages/effect-fc/src/Form.ts +++ b/packages/effect-fc/src/Form.ts @@ -26,7 +26,7 @@ extends Pipeable.Pipeable { readonly debounce: Option.Option readonly value: Subscribable.Subscribable> - readonly encodedValue: Subscribable.Subscribable + readonly encodedValue: SubscriptionRef.SubscriptionRef readonly error: Subscribable.Subscribable> readonly validationFiber: Subscribable.Subscribable>> diff --git a/packages/example/src/lib/form/TextFieldFormInput.tsx b/packages/example/src/lib/form/TextFieldFormInput.tsx index d263583..ffa83d8 100644 --- a/packages/example/src/lib/form/TextFieldFormInput.tsx +++ b/packages/example/src/lib/form/TextFieldFormInput.tsx @@ -29,9 +29,9 @@ export class TextFieldFormInput extends Component.makeUntraced("TextFieldFormInp : { optional: false, ...yield* Form.useInput(props.field, props) } const [issues, isValidating, isSubmitting] = yield* Subscribable.useSubscribables([ - props.field.issuesSubscribable, - props.field.isValidatingSubscribable, - props.field.isSubmittingSubscribable, + props.field.issues, + props.field.isValidating, + props.field.isSubmitting, ]) return ( diff --git a/packages/example/src/routes/form.tsx b/packages/example/src/routes/form.tsx index fed5fcc..b0bfef9 100644 --- a/packages/example/src/routes/form.tsx +++ b/packages/example/src/routes/form.tsx @@ -54,7 +54,7 @@ class RegisterForm extends Effect.Service()("RegisterForm", { ), initialEncodedValue: { email: "", password: "", birth: Option.none() }, - onSubmit: Effect.fnUntraced(function*(v) { + f: Effect.fnUntraced(function*([v]) { yield* Effect.sleep("500 millis") return yield* Schema.decode(RegisterFormSubmitSchema)(v) }), @@ -65,8 +65,8 @@ class RegisterForm extends Effect.Service()("RegisterForm", { class RegisterFormView extends Component.makeUntraced("RegisterFormView")(function*() { const form = yield* RegisterForm const [canSubmit, submitResult] = yield* Subscribable.useSubscribables([ - form.canSubmitSubscribable, - form.submitResultRef, + form.canSubmit, + form.mutation.result, ]) const runPromise = yield* Component.useRunPromise() @@ -82,21 +82,21 @@ class RegisterFormView extends Component.makeUntraced("RegisterFormView")(functi
{ e.preventDefault() - void runPromise(Form.submit(form)) + void runPromise(form.submit) }}> diff --git a/packages/example/src/todo/Todo.tsx b/packages/example/src/todo/Todo.tsx index b974c33..cf4a46f 100644 --- a/packages/example/src/todo/Todo.tsx +++ b/packages/example/src/todo/Todo.tsx @@ -54,17 +54,15 @@ export class Todo extends Component.makeUntraced("Todo")(function*(props: TodoPr Match.exhaustive, ) ), - onSubmit: function(todo) { - return Match.value(props).pipe( - Match.tag("new", () => Ref.update(state.ref, Chunk.prepend(todo)).pipe( - Effect.andThen(makeTodo), - Effect.andThen(Schema.encode(TodoFormSchema)), - Effect.andThen(v => Ref.set(this.encodedValueRef, v)), - )), - Match.tag("edit", ({ id }) => Ref.set(state.getElementRef(id), todo)), - Match.exhaustive, - ) - }, + f: ([todo, form]) => Match.value(props).pipe( + Match.tag("new", () => Ref.update(state.ref, Chunk.prepend(todo)).pipe( + Effect.andThen(makeTodo), + Effect.andThen(Schema.encode(TodoFormSchema)), + Effect.andThen(v => Ref.set(form.encodedValue, v)), + )), + Match.tag("edit", ({ id }) => Ref.set(state.getElementRef(id), todo)), + Match.exhaustive, + ), autosubmit: props._tag === "edit", debounce: "250 millis", }) @@ -72,15 +70,15 @@ export class Todo extends Component.makeUntraced("Todo")(function*(props: TodoPr return [ indexRef, form, - yield* Form.field(form, ["content"]), - yield* Form.field(form, ["completedAt"]), + yield* form.field(["content"]), + yield* form.field(["completedAt"]), ] as const }), [props._tag, props._tag === "edit" ? props.id : undefined]) const [index, size, canSubmit] = yield* Subscribable.useSubscribables([ indexRef, state.sizeSubscribable, - form.canSubmitSubscribable, + form.canSubmit, ]) const runSync = yield* Component.useRunSync() @@ -103,7 +101,7 @@ export class Todo extends Component.makeUntraced("Todo")(function*(props: TodoPr /> {props._tag === "new" && - }