@lucas-barake/effect-form-react 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/FormReact.js +95 -183
- package/dist/cjs/FormReact.js.map +1 -1
- package/dist/dts/FormReact.d.ts +93 -69
- package/dist/dts/FormReact.d.ts.map +1 -1
- package/dist/esm/FormReact.js +94 -183
- package/dist/esm/FormReact.js.map +1 -1
- package/package.json +2 -2
- package/src/FormReact.tsx +194 -306
package/dist/dts/FormReact.d.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import * as Atom from "@effect-atom/atom/Atom";
|
|
2
|
-
import type * as Result from "@effect-atom/atom/Result";
|
|
1
|
+
import type * as Atom from "@effect-atom/atom/Atom";
|
|
3
2
|
import { Field, FormAtoms, Mode } from "@lucas-barake/effect-form";
|
|
4
3
|
import type * as FormBuilder from "@lucas-barake/effect-form/FormBuilder";
|
|
5
|
-
import * as Effect from "effect/Effect";
|
|
4
|
+
import type * as Effect from "effect/Effect";
|
|
6
5
|
import * as Option from "effect/Option";
|
|
6
|
+
import * as ParseResult from "effect/ParseResult";
|
|
7
7
|
import type * as Schema from "effect/Schema";
|
|
8
8
|
import * as React from "react";
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* Form-controlled state passed to field components.
|
|
11
11
|
*
|
|
12
12
|
* @since 1.0.0
|
|
13
13
|
* @category Models
|
|
14
14
|
*/
|
|
15
|
-
export interface
|
|
15
|
+
export interface FieldState<S extends Schema.Schema.Any> {
|
|
16
16
|
readonly value: Schema.Schema.Encoded<S>;
|
|
17
17
|
readonly onChange: (value: Schema.Schema.Encoded<S>) => void;
|
|
18
18
|
readonly onBlur: () => void;
|
|
@@ -21,6 +21,24 @@ export interface FieldComponentProps<S extends Schema.Schema.Any> {
|
|
|
21
21
|
readonly isValidating: boolean;
|
|
22
22
|
readonly isDirty: boolean;
|
|
23
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Props passed to field components.
|
|
26
|
+
* Contains form-controlled state in `field` and user-defined props in `props`.
|
|
27
|
+
*
|
|
28
|
+
* @since 1.0.0
|
|
29
|
+
* @category Models
|
|
30
|
+
*/
|
|
31
|
+
export interface FieldComponentProps<S extends Schema.Schema.Any, P extends Record<string, unknown> = Record<string, never>> {
|
|
32
|
+
readonly field: FieldState<S>;
|
|
33
|
+
readonly props: P;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Extracts the extra props type from a field component.
|
|
37
|
+
*
|
|
38
|
+
* @since 1.0.0
|
|
39
|
+
* @category Type-level utilities
|
|
40
|
+
*/
|
|
41
|
+
export type ExtractExtraProps<C> = C extends React.FC<FieldComponentProps<any, infer P>> ? P : Record<string, never>;
|
|
24
42
|
/**
|
|
25
43
|
* Extracts field component map for array item schemas.
|
|
26
44
|
* - For Struct schemas: returns a map of field names to components
|
|
@@ -30,8 +48,8 @@ export interface FieldComponentProps<S extends Schema.Schema.Any> {
|
|
|
30
48
|
* @category Models
|
|
31
49
|
*/
|
|
32
50
|
export type ArrayItemComponentMap<S extends Schema.Schema.Any> = S extends Schema.Struct<infer Fields> ? {
|
|
33
|
-
readonly [K in keyof Fields]: Fields[K] extends Schema.Schema.Any ? React.FC<FieldComponentProps<Fields[K]>> : never;
|
|
34
|
-
} : React.FC<FieldComponentProps<S>>;
|
|
51
|
+
readonly [K in keyof Fields]: Fields[K] extends Schema.Schema.Any ? React.FC<FieldComponentProps<Fields[K], any>> : never;
|
|
52
|
+
} : React.FC<FieldComponentProps<S, any>>;
|
|
35
53
|
/**
|
|
36
54
|
* Maps field names to their React components.
|
|
37
55
|
*
|
|
@@ -39,7 +57,7 @@ export type ArrayItemComponentMap<S extends Schema.Schema.Any> = S extends Schem
|
|
|
39
57
|
* @category Models
|
|
40
58
|
*/
|
|
41
59
|
export type FieldComponentMap<TFields extends Field.FieldsRecord> = {
|
|
42
|
-
readonly [K in keyof TFields]: TFields[K] extends Field.FieldDef<any, infer S> ? React.FC<FieldComponentProps<S>> : TFields[K] extends Field.ArrayFieldDef<any, infer S> ? ArrayItemComponentMap<S> : never;
|
|
60
|
+
readonly [K in keyof TFields]: TFields[K] extends Field.FieldDef<any, infer S> ? React.FC<FieldComponentProps<S, any>> : TFields[K] extends Field.ArrayFieldDef<any, infer S> ? ArrayItemComponentMap<S> : never;
|
|
43
61
|
};
|
|
44
62
|
/**
|
|
45
63
|
* Maps field names to their type-safe Field references for setValue operations.
|
|
@@ -61,24 +79,6 @@ export interface ArrayFieldOperations<TItem> {
|
|
|
61
79
|
readonly swap: (indexA: number, indexB: number) => void;
|
|
62
80
|
readonly move: (from: number, to: number) => void;
|
|
63
81
|
}
|
|
64
|
-
/**
|
|
65
|
-
* State exposed to form.Subscribe render prop.
|
|
66
|
-
*
|
|
67
|
-
* @since 1.0.0
|
|
68
|
-
* @category Models
|
|
69
|
-
*/
|
|
70
|
-
export interface SubscribeState<TFields extends Field.FieldsRecord> {
|
|
71
|
-
readonly values: Field.EncodedFromFields<TFields>;
|
|
72
|
-
readonly isDirty: boolean;
|
|
73
|
-
readonly hasChangedSinceSubmit: boolean;
|
|
74
|
-
readonly lastSubmittedValues: Option.Option<Field.EncodedFromFields<TFields>>;
|
|
75
|
-
readonly submitResult: Result.Result<unknown, unknown>;
|
|
76
|
-
readonly submit: () => void;
|
|
77
|
-
readonly reset: () => void;
|
|
78
|
-
readonly revertToLastSubmit: () => void;
|
|
79
|
-
readonly setValue: <S>(field: FormBuilder.FieldRef<S>, update: S | ((prev: S) => S)) => void;
|
|
80
|
-
readonly setValues: (values: Field.EncodedFromFields<TFields>) => void;
|
|
81
|
-
}
|
|
82
82
|
/**
|
|
83
83
|
* The result of building a form, containing all components and utilities needed
|
|
84
84
|
* for form rendering and submission.
|
|
@@ -86,36 +86,32 @@ export interface SubscribeState<TFields extends Field.FieldsRecord> {
|
|
|
86
86
|
* @since 1.0.0
|
|
87
87
|
* @category Models
|
|
88
88
|
*/
|
|
89
|
-
export type BuiltForm<TFields extends Field.FieldsRecord, R> = {
|
|
90
|
-
readonly
|
|
89
|
+
export type BuiltForm<TFields extends Field.FieldsRecord, R, A = void, E = never, CM extends FieldComponentMap<TFields> = FieldComponentMap<TFields>> = {
|
|
90
|
+
readonly isDirty: Atom.Atom<boolean>;
|
|
91
|
+
readonly hasChangedSinceSubmit: Atom.Atom<boolean>;
|
|
92
|
+
readonly lastSubmittedValues: Atom.Atom<Option.Option<Field.EncodedFromFields<TFields>>>;
|
|
93
|
+
readonly submitCount: Atom.Atom<number>;
|
|
91
94
|
readonly schema: Schema.Schema<Field.DecodedFromFields<TFields>, Field.EncodedFromFields<TFields>, R>;
|
|
92
95
|
readonly fields: FieldRefs<TFields>;
|
|
93
|
-
readonly
|
|
96
|
+
readonly Initialize: React.FC<{
|
|
94
97
|
readonly defaultValues: Field.EncodedFromFields<TFields>;
|
|
95
|
-
readonly onSubmit: Atom.AtomResultFn<Field.DecodedFromFields<TFields>, unknown, unknown>;
|
|
96
98
|
readonly children: React.ReactNode;
|
|
97
99
|
}>;
|
|
98
|
-
readonly
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
readonly
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
readonly hasChangedSinceSubmit: boolean;
|
|
107
|
-
readonly lastSubmittedValues: Option.Option<Field.EncodedFromFields<TFields>>;
|
|
108
|
-
readonly submitResult: Result.Result<unknown, unknown>;
|
|
109
|
-
readonly values: Field.EncodedFromFields<TFields>;
|
|
110
|
-
readonly setValue: <S>(field: FormBuilder.FieldRef<S>, update: S | ((prev: S) => S)) => void;
|
|
111
|
-
readonly setValues: (values: Field.EncodedFromFields<TFields>) => void;
|
|
112
|
-
};
|
|
113
|
-
readonly submit: <A>(fn: (values: Field.DecodedFromFields<TFields>, get: Atom.FnContext) => A) => Atom.AtomResultFn<Field.DecodedFromFields<TFields>, A extends Effect.Effect<infer T, any, any> ? T : A, A extends Effect.Effect<any, infer E, any> ? E : never>;
|
|
114
|
-
} & FieldComponents<TFields>;
|
|
115
|
-
type FieldComponents<TFields extends Field.FieldsRecord> = {
|
|
116
|
-
readonly [K in keyof TFields]: TFields[K] extends Field.FieldDef<any, any> ? React.FC : TFields[K] extends Field.ArrayFieldDef<any, infer S> ? ArrayFieldComponent<S> : never;
|
|
100
|
+
readonly submit: Atom.AtomResultFn<void, A, E | ParseResult.ParseError>;
|
|
101
|
+
readonly reset: Atom.Writable<void, void>;
|
|
102
|
+
readonly revertToLastSubmit: Atom.Writable<void, void>;
|
|
103
|
+
readonly setValues: Atom.Writable<void, Field.EncodedFromFields<TFields>>;
|
|
104
|
+
readonly setValue: <S>(field: FormBuilder.FieldRef<S>) => Atom.Writable<void, S | ((prev: S) => S)>;
|
|
105
|
+
} & FieldComponents<TFields, CM>;
|
|
106
|
+
type FieldComponents<TFields extends Field.FieldsRecord, CM extends FieldComponentMap<TFields>> = {
|
|
107
|
+
readonly [K in keyof TFields]: TFields[K] extends Field.FieldDef<any, any> ? React.FC<ExtractExtraProps<CM[K]>> : TFields[K] extends Field.ArrayFieldDef<any, infer S> ? ArrayFieldComponent<S, ExtractArrayItemExtraProps<CM[K], S>> : never;
|
|
117
108
|
};
|
|
118
|
-
type
|
|
109
|
+
type ExtractArrayItemExtraProps<CM, S extends Schema.Schema.Any> = S extends Schema.Struct<infer Fields> ? {
|
|
110
|
+
readonly [K in keyof Fields]: CM extends {
|
|
111
|
+
readonly [P in K]: infer C;
|
|
112
|
+
} ? ExtractExtraProps<C> : never;
|
|
113
|
+
} : CM extends React.FC<FieldComponentProps<any, infer P>> ? P : never;
|
|
114
|
+
type ArrayFieldComponent<S extends Schema.Schema.Any, ExtraPropsMap> = React.FC<{
|
|
119
115
|
readonly children: (ops: ArrayFieldOperations<Schema.Schema.Encoded<S>>) => React.ReactNode;
|
|
120
116
|
}> & {
|
|
121
117
|
readonly Item: React.FC<{
|
|
@@ -125,18 +121,20 @@ type ArrayFieldComponent<S extends Schema.Schema.Any> = React.FC<{
|
|
|
125
121
|
}) => React.ReactNode);
|
|
126
122
|
}>;
|
|
127
123
|
} & (S extends Schema.Struct<infer Fields> ? {
|
|
128
|
-
readonly [K in keyof Fields]: React.FC
|
|
124
|
+
readonly [K in keyof Fields]: React.FC<ExtraPropsMap extends {
|
|
125
|
+
readonly [P in K]: infer EP;
|
|
126
|
+
} ? EP : Record<string, never>>;
|
|
129
127
|
} : unknown);
|
|
130
128
|
/**
|
|
131
129
|
* Builds a React form from a FormBuilder.
|
|
132
130
|
*
|
|
133
131
|
* @example
|
|
134
132
|
* ```tsx
|
|
135
|
-
* import {
|
|
133
|
+
* import { FormBuilder } from "@lucas-barake/effect-form"
|
|
136
134
|
* import { FormReact } from "@lucas-barake/effect-form-react"
|
|
135
|
+
* import { useAtomValue, useAtomSet } from "@effect-atom/atom-react"
|
|
137
136
|
* import * as Atom from "@effect-atom/atom/Atom"
|
|
138
137
|
* import * as Schema from "effect/Schema"
|
|
139
|
-
* import * as Effect from "effect/Effect"
|
|
140
138
|
* import * as Layer from "effect/Layer"
|
|
141
139
|
*
|
|
142
140
|
* const runtime = Atom.runtime(Layer.empty)
|
|
@@ -148,26 +146,28 @@ type ArrayFieldComponent<S extends Schema.Schema.Any> = React.FC<{
|
|
|
148
146
|
* const form = FormReact.build(loginForm, {
|
|
149
147
|
* runtime,
|
|
150
148
|
* fields: { email: TextInput, password: PasswordInput },
|
|
149
|
+
* onSubmit: (values) => Effect.log(`Login: ${values.email}`),
|
|
151
150
|
* })
|
|
152
151
|
*
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
152
|
+
* // Subscribe to atoms anywhere in the tree
|
|
153
|
+
* function SubmitButton() {
|
|
154
|
+
* const isDirty = useAtomValue(form.isDirty)
|
|
155
|
+
* const submit = useAtomValue(form.submit)
|
|
156
|
+
* const callSubmit = useAtomSet(form.submit)
|
|
157
|
+
* return (
|
|
158
|
+
* <button onClick={() => callSubmit()} disabled={!isDirty || submit.waiting}>
|
|
159
|
+
* {submit.waiting ? "Validating..." : "Login"}
|
|
160
|
+
* </button>
|
|
159
161
|
* )
|
|
162
|
+
* }
|
|
160
163
|
*
|
|
164
|
+
* function LoginDialog({ onClose }) {
|
|
161
165
|
* return (
|
|
162
|
-
* <form.
|
|
166
|
+
* <form.Initialize defaultValues={{ email: "", password: "" }}>
|
|
163
167
|
* <form.email />
|
|
164
168
|
* <form.password />
|
|
165
|
-
* <
|
|
166
|
-
*
|
|
167
|
-
* <button onClick={submit} disabled={!isDirty}>Login</button>
|
|
168
|
-
* )}
|
|
169
|
-
* </form.Subscribe>
|
|
170
|
-
* </form.Form>
|
|
169
|
+
* <SubmitButton />
|
|
170
|
+
* </form.Initialize>
|
|
171
171
|
* )
|
|
172
172
|
* }
|
|
173
173
|
* ```
|
|
@@ -175,10 +175,34 @@ type ArrayFieldComponent<S extends Schema.Schema.Any> = React.FC<{
|
|
|
175
175
|
* @since 1.0.0
|
|
176
176
|
* @category Constructors
|
|
177
177
|
*/
|
|
178
|
-
export declare const build: <TFields extends Field.FieldsRecord, R, ER = never>(self: FormBuilder.FormBuilder<TFields, R>, options: {
|
|
178
|
+
export declare const build: <TFields extends Field.FieldsRecord, R, A, E, ER = never, CM extends FieldComponentMap<TFields> = FieldComponentMap<TFields>>(self: FormBuilder.FormBuilder<TFields, R>, options: {
|
|
179
179
|
readonly runtime: Atom.AtomRuntime<R, ER>;
|
|
180
|
-
readonly fields:
|
|
180
|
+
readonly fields: CM;
|
|
181
181
|
readonly mode?: Mode.FormMode;
|
|
182
|
-
|
|
182
|
+
readonly onSubmit: (decoded: Field.DecodedFromFields<TFields>, get: Atom.FnContext) => A | Effect.Effect<A, E, R>;
|
|
183
|
+
}) => BuiltForm<TFields, R, A, E, CM>;
|
|
184
|
+
/**
|
|
185
|
+
* A curried helper that infers the schema type from the field definition.
|
|
186
|
+
* Provides ergonomic type inference when defining field components.
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
* ```tsx
|
|
190
|
+
* import { FormReact } from "@lucas-barake/effect-form-react"
|
|
191
|
+
*
|
|
192
|
+
* // Without extra props - schema inferred from field
|
|
193
|
+
* const TextInput = FormReact.forField(EmailField)(({ field }) => (
|
|
194
|
+
* <input value={field.value} onChange={e => field.onChange(e.target.value)} />
|
|
195
|
+
* ))
|
|
196
|
+
*
|
|
197
|
+
* // With extra props - just specify the props type
|
|
198
|
+
* const TextInput = FormReact.forField(EmailField)<{ placeholder?: string }>(({ field, props }) => (
|
|
199
|
+
* <input value={field.value} placeholder={props.placeholder} ... />
|
|
200
|
+
* ))
|
|
201
|
+
* ```
|
|
202
|
+
*
|
|
203
|
+
* @since 1.0.0
|
|
204
|
+
* @category Constructors
|
|
205
|
+
*/
|
|
206
|
+
export declare const forField: <K extends string, S extends Schema.Schema.Any>(_field: Field.FieldDef<K, S>) => <P extends Record<string, unknown> = Record<string, never>>(component: React.FC<FieldComponentProps<S, P>>) => React.FC<FieldComponentProps<S, P>>;
|
|
183
207
|
export {};
|
|
184
208
|
//# sourceMappingURL=FormReact.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormReact.d.ts","sourceRoot":"","sources":["../../src/FormReact.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,IAAI,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"FormReact.d.ts","sourceRoot":"","sources":["../../src/FormReact.tsx"],"names":[],"mappings":"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"}
|