@lucas-barake/effect-form 0.1.0 → 0.3.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/Field/package.json +6 -0
- package/dist/cjs/Field.js +171 -0
- package/dist/cjs/Field.js.map +1 -0
- package/dist/cjs/Form.js +11 -132
- package/dist/cjs/Form.js.map +1 -1
- package/dist/cjs/FormAtoms.js +45 -22
- package/dist/cjs/FormAtoms.js.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/dts/Field.d.ts +145 -0
- package/dist/dts/Field.d.ts.map +1 -0
- package/dist/dts/Form.d.ts +8 -126
- package/dist/dts/Form.d.ts.map +1 -1
- package/dist/dts/FormAtoms.d.ts +20 -41
- package/dist/dts/FormAtoms.d.ts.map +1 -1
- package/dist/dts/index.d.ts +6 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/esm/Field.js +137 -0
- package/dist/esm/Field.js.map +1 -0
- package/dist/esm/Form.js +7 -121
- package/dist/esm/Form.js.map +1 -1
- package/dist/esm/FormAtoms.js +45 -22
- package/dist/esm/FormAtoms.js.map +1 -1
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/package.json +9 -1
- package/src/Field.ts +220 -0
- package/src/Form.ts +19 -197
- package/src/FormAtoms.ts +95 -81
- package/src/index.ts +7 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field definitions for type-safe forms.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
import * as Schema from "effect/Schema";
|
|
7
|
+
/**
|
|
8
|
+
* Unique identifier for Field instances.
|
|
9
|
+
*
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
* @category Symbols
|
|
12
|
+
*/
|
|
13
|
+
export declare const TypeId: unique symbol;
|
|
14
|
+
/**
|
|
15
|
+
* @since 1.0.0
|
|
16
|
+
* @category Symbols
|
|
17
|
+
*/
|
|
18
|
+
export type TypeId = typeof TypeId;
|
|
19
|
+
/**
|
|
20
|
+
* A scalar field definition containing the key and schema.
|
|
21
|
+
*
|
|
22
|
+
* @since 1.0.0
|
|
23
|
+
* @category Models
|
|
24
|
+
*/
|
|
25
|
+
export interface FieldDef<K extends string, S extends Schema.Schema.Any> {
|
|
26
|
+
readonly _tag: "field";
|
|
27
|
+
readonly key: K;
|
|
28
|
+
readonly schema: S;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* An array field definition containing a schema for items.
|
|
32
|
+
*
|
|
33
|
+
* @since 1.0.0
|
|
34
|
+
* @category Models
|
|
35
|
+
*/
|
|
36
|
+
export interface ArrayFieldDef<K extends string, S extends Schema.Schema.Any> {
|
|
37
|
+
readonly _tag: "array";
|
|
38
|
+
readonly key: K;
|
|
39
|
+
readonly itemSchema: S;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Union of all field definition types.
|
|
43
|
+
*
|
|
44
|
+
* @since 1.0.0
|
|
45
|
+
* @category Models
|
|
46
|
+
*/
|
|
47
|
+
export type AnyFieldDef = FieldDef<string, Schema.Schema.Any> | ArrayFieldDef<string, Schema.Schema.Any>;
|
|
48
|
+
/**
|
|
49
|
+
* A record of field definitions.
|
|
50
|
+
*
|
|
51
|
+
* @since 1.0.0
|
|
52
|
+
* @category Models
|
|
53
|
+
*/
|
|
54
|
+
export type FieldsRecord = Record<string, AnyFieldDef>;
|
|
55
|
+
/**
|
|
56
|
+
* Checks if a field definition is an array field.
|
|
57
|
+
*
|
|
58
|
+
* @since 1.0.0
|
|
59
|
+
* @category Guards
|
|
60
|
+
*/
|
|
61
|
+
export declare const isArrayFieldDef: (def: AnyFieldDef) => def is ArrayFieldDef<string, Schema.Schema.Any>;
|
|
62
|
+
/**
|
|
63
|
+
* Checks if a field definition is a scalar field.
|
|
64
|
+
*
|
|
65
|
+
* @since 1.0.0
|
|
66
|
+
* @category Guards
|
|
67
|
+
*/
|
|
68
|
+
export declare const isFieldDef: (def: AnyFieldDef) => def is FieldDef<string, Schema.Schema.Any>;
|
|
69
|
+
/**
|
|
70
|
+
* Creates a scalar field definition.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```ts
|
|
74
|
+
* import * as Field from "@lucas-barake/effect-form/Field"
|
|
75
|
+
* import * as Schema from "effect/Schema"
|
|
76
|
+
*
|
|
77
|
+
* const NameField = Field.makeField("name", Schema.String)
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* @since 1.0.0
|
|
81
|
+
* @category Constructors
|
|
82
|
+
*/
|
|
83
|
+
export declare const makeField: <K extends string, S extends Schema.Schema.Any>(key: K, schema: S) => FieldDef<K, S>;
|
|
84
|
+
/**
|
|
85
|
+
* Creates an array field definition.
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```ts
|
|
89
|
+
* import * as Field from "@lucas-barake/effect-form/Field"
|
|
90
|
+
* import * as Schema from "effect/Schema"
|
|
91
|
+
*
|
|
92
|
+
* // Array of primitives
|
|
93
|
+
* const TagsField = Field.makeArrayField("tags", Schema.String)
|
|
94
|
+
*
|
|
95
|
+
* // Array of objects
|
|
96
|
+
* const ItemsField = Field.makeArrayField("items", Schema.Struct({
|
|
97
|
+
* name: Schema.String,
|
|
98
|
+
* quantity: Schema.Number
|
|
99
|
+
* }))
|
|
100
|
+
* ```
|
|
101
|
+
*
|
|
102
|
+
* @since 1.0.0
|
|
103
|
+
* @category Constructors
|
|
104
|
+
*/
|
|
105
|
+
export declare const makeArrayField: <K extends string, S extends Schema.Schema.Any>(key: K, itemSchema: S) => ArrayFieldDef<K, S>;
|
|
106
|
+
/**
|
|
107
|
+
* Extracts the encoded (input) type from a fields record.
|
|
108
|
+
*
|
|
109
|
+
* @since 1.0.0
|
|
110
|
+
* @category Type Helpers
|
|
111
|
+
*/
|
|
112
|
+
export type EncodedFromFields<T extends FieldsRecord> = {
|
|
113
|
+
readonly [K in keyof T]: T[K] extends FieldDef<any, infer S> ? Schema.Schema.Encoded<S> : T[K] extends ArrayFieldDef<any, infer S> ? ReadonlyArray<Schema.Schema.Encoded<S>> : never;
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Extracts the decoded (output) type from a fields record.
|
|
117
|
+
*
|
|
118
|
+
* @since 1.0.0
|
|
119
|
+
* @category Type Helpers
|
|
120
|
+
*/
|
|
121
|
+
export type DecodedFromFields<T extends FieldsRecord> = {
|
|
122
|
+
readonly [K in keyof T]: T[K] extends FieldDef<any, infer S> ? Schema.Schema.Type<S> : T[K] extends ArrayFieldDef<any, infer S> ? ReadonlyArray<Schema.Schema.Type<S>> : never;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Gets a default encoded value from a schema.
|
|
126
|
+
*
|
|
127
|
+
* @since 1.0.0
|
|
128
|
+
* @category Helpers
|
|
129
|
+
*/
|
|
130
|
+
export declare const getDefaultFromSchema: (schema: Schema.Schema.Any) => unknown;
|
|
131
|
+
/**
|
|
132
|
+
* Gets default encoded values for a fields record.
|
|
133
|
+
*
|
|
134
|
+
* @since 1.0.0
|
|
135
|
+
* @category Helpers
|
|
136
|
+
*/
|
|
137
|
+
export declare const getDefaultEncodedValues: (fields: FieldsRecord) => Record<string, unknown>;
|
|
138
|
+
/**
|
|
139
|
+
* Creates a touched record with all fields set to the given value.
|
|
140
|
+
*
|
|
141
|
+
* @since 1.0.0
|
|
142
|
+
* @category Helpers
|
|
143
|
+
*/
|
|
144
|
+
export declare const createTouchedRecord: (fields: FieldsRecord, value: boolean) => Record<string, boolean>;
|
|
145
|
+
//# sourceMappingURL=Field.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../src/Field.ts"],"names":[],"mappings":"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"}
|
package/dist/dts/Form.d.ts
CHANGED
|
@@ -2,19 +2,9 @@
|
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
4
|
import type * as Effect from "effect/Effect";
|
|
5
|
+
import type * as Option from "effect/Option";
|
|
5
6
|
import * as Schema from "effect/Schema";
|
|
6
|
-
|
|
7
|
-
* Unique identifier for FormBuilder instances.
|
|
8
|
-
*
|
|
9
|
-
* @since 1.0.0
|
|
10
|
-
* @category Symbols
|
|
11
|
-
*/
|
|
12
|
-
export declare const TypeId: unique symbol;
|
|
13
|
-
/**
|
|
14
|
-
* @since 1.0.0
|
|
15
|
-
* @category Symbols
|
|
16
|
-
*/
|
|
17
|
-
export type TypeId = typeof TypeId;
|
|
7
|
+
import type { ArrayFieldDef, DecodedFromFields, EncodedFromFields, FieldDef, FieldsRecord } from "./Field.js";
|
|
18
8
|
/**
|
|
19
9
|
* A field reference carrying type and path info for type-safe setValue operations.
|
|
20
10
|
*
|
|
@@ -27,91 +17,17 @@ export interface Field<S> {
|
|
|
27
17
|
readonly key: string;
|
|
28
18
|
}
|
|
29
19
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* @since 1.0.0
|
|
33
|
-
* @category Models
|
|
34
|
-
*/
|
|
35
|
-
export interface FieldDef<K extends string, S extends Schema.Schema.Any> {
|
|
36
|
-
readonly _tag: "field";
|
|
37
|
-
readonly key: K;
|
|
38
|
-
readonly schema: S;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* An array field definition containing a schema for items.
|
|
42
|
-
*
|
|
43
|
-
* @since 1.0.0
|
|
44
|
-
* @category Models
|
|
45
|
-
*/
|
|
46
|
-
export interface ArrayFieldDef<K extends string, S extends Schema.Schema.Any> {
|
|
47
|
-
readonly _tag: "array";
|
|
48
|
-
readonly key: K;
|
|
49
|
-
readonly itemSchema: S;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Union of all field definition types.
|
|
53
|
-
*
|
|
54
|
-
* @since 1.0.0
|
|
55
|
-
* @category Models
|
|
56
|
-
*/
|
|
57
|
-
export type AnyFieldDef = FieldDef<string, Schema.Schema.Any> | ArrayFieldDef<string, Schema.Schema.Any>;
|
|
58
|
-
/**
|
|
59
|
-
* Creates a scalar field definition.
|
|
60
|
-
*
|
|
61
|
-
* @example
|
|
62
|
-
* ```ts
|
|
63
|
-
* const NameField = Form.makeField("name", Schema.String)
|
|
64
|
-
* const form = Form.empty.addField(NameField)
|
|
65
|
-
* ```
|
|
66
|
-
*
|
|
67
|
-
* @since 1.0.0
|
|
68
|
-
* @category Constructors
|
|
69
|
-
*/
|
|
70
|
-
export declare const makeField: <K extends string, S extends Schema.Schema.Any>(key: K, schema: S) => FieldDef<K, S>;
|
|
71
|
-
/**
|
|
72
|
-
* Creates an array field definition.
|
|
73
|
-
*
|
|
74
|
-
* @example
|
|
75
|
-
* ```ts
|
|
76
|
-
* // Array of primitives
|
|
77
|
-
* const TagsField = Form.makeArrayField("tags", Schema.String)
|
|
78
|
-
*
|
|
79
|
-
* // Array of objects
|
|
80
|
-
* const ItemsField = Form.makeArrayField("items", Schema.Struct({
|
|
81
|
-
* name: Schema.String,
|
|
82
|
-
* quantity: Schema.Number
|
|
83
|
-
* }))
|
|
84
|
-
* ```
|
|
85
|
-
*
|
|
86
|
-
* @since 1.0.0
|
|
87
|
-
* @category Constructors
|
|
88
|
-
*/
|
|
89
|
-
export declare const makeArrayField: <K extends string, S extends Schema.Schema.Any>(key: K, itemSchema: S) => ArrayFieldDef<K, S>;
|
|
90
|
-
/**
|
|
91
|
-
* A record of field definitions.
|
|
92
|
-
*
|
|
93
|
-
* @since 1.0.0
|
|
94
|
-
* @category Models
|
|
95
|
-
*/
|
|
96
|
-
export type FieldsRecord = Record<string, AnyFieldDef>;
|
|
97
|
-
/**
|
|
98
|
-
* Extracts the encoded (input) type from a fields record.
|
|
20
|
+
* Unique identifier for FormBuilder instances.
|
|
99
21
|
*
|
|
100
22
|
* @since 1.0.0
|
|
101
|
-
* @category
|
|
23
|
+
* @category Symbols
|
|
102
24
|
*/
|
|
103
|
-
export
|
|
104
|
-
readonly [K in keyof T]: T[K] extends FieldDef<any, infer S> ? Schema.Schema.Encoded<S> : T[K] extends ArrayFieldDef<any, infer S> ? ReadonlyArray<Schema.Schema.Encoded<S>> : never;
|
|
105
|
-
};
|
|
25
|
+
export declare const TypeId: unique symbol;
|
|
106
26
|
/**
|
|
107
|
-
* Extracts the decoded (output) type from a fields record.
|
|
108
|
-
*
|
|
109
27
|
* @since 1.0.0
|
|
110
|
-
* @category
|
|
28
|
+
* @category Symbols
|
|
111
29
|
*/
|
|
112
|
-
export type
|
|
113
|
-
readonly [K in keyof T]: T[K] extends FieldDef<any, infer S> ? Schema.Schema.Type<S> : T[K] extends ArrayFieldDef<any, infer S> ? ReadonlyArray<Schema.Schema.Type<S>> : never;
|
|
114
|
-
};
|
|
30
|
+
export type TypeId = typeof TypeId;
|
|
115
31
|
/**
|
|
116
32
|
* The state of a form at runtime.
|
|
117
33
|
*
|
|
@@ -121,6 +37,7 @@ export type DecodedFromFields<T extends FieldsRecord> = {
|
|
|
121
37
|
export interface FormState<TFields extends FieldsRecord> {
|
|
122
38
|
readonly values: EncodedFromFields<TFields>;
|
|
123
39
|
readonly initialValues: EncodedFromFields<TFields>;
|
|
40
|
+
readonly lastSubmittedValues: Option.Option<EncodedFromFields<TFields>>;
|
|
124
41
|
readonly touched: {
|
|
125
42
|
readonly [K in keyof TFields]: boolean;
|
|
126
43
|
};
|
|
@@ -246,27 +163,6 @@ export interface FormBuilder<TFields extends FieldsRecord, R> {
|
|
|
246
163
|
* @category Guards
|
|
247
164
|
*/
|
|
248
165
|
export declare const isFormBuilder: (u: unknown) => u is FormBuilder<any, any>;
|
|
249
|
-
/**
|
|
250
|
-
* Checks if a field definition is an array field.
|
|
251
|
-
*
|
|
252
|
-
* @since 1.0.0
|
|
253
|
-
* @category Guards
|
|
254
|
-
*/
|
|
255
|
-
export declare const isArrayFieldDef: (def: AnyFieldDef) => def is ArrayFieldDef<string, any>;
|
|
256
|
-
/**
|
|
257
|
-
* Checks if a field definition is a simple field.
|
|
258
|
-
*
|
|
259
|
-
* @since 1.0.0
|
|
260
|
-
* @category Guards
|
|
261
|
-
*/
|
|
262
|
-
export declare const isFieldDef: (def: AnyFieldDef) => def is FieldDef<string, Schema.Schema.Any>;
|
|
263
|
-
/**
|
|
264
|
-
* Gets a default encoded value from a schema.
|
|
265
|
-
*
|
|
266
|
-
* @since 1.0.0
|
|
267
|
-
* @category Helpers
|
|
268
|
-
*/
|
|
269
|
-
export declare const getDefaultFromSchema: (schema: Schema.Schema.Any) => unknown;
|
|
270
166
|
/**
|
|
271
167
|
* An empty `FormBuilder` to start building a form.
|
|
272
168
|
*
|
|
@@ -299,19 +195,5 @@ export declare const empty: FormBuilder<{}, never>;
|
|
|
299
195
|
* @category Schema
|
|
300
196
|
*/
|
|
301
197
|
export declare const buildSchema: <TFields extends FieldsRecord, R>(self: FormBuilder<TFields, R>) => Schema.Schema<DecodedFromFields<TFields>, EncodedFromFields<TFields>, R>;
|
|
302
|
-
/**
|
|
303
|
-
* Gets default encoded values for a fields record.
|
|
304
|
-
*
|
|
305
|
-
* @since 1.0.0
|
|
306
|
-
* @category Helpers
|
|
307
|
-
*/
|
|
308
|
-
export declare const getDefaultEncodedValues: (fields: FieldsRecord) => Record<string, unknown>;
|
|
309
|
-
/**
|
|
310
|
-
* Creates a touched record with all fields set to the given value.
|
|
311
|
-
*
|
|
312
|
-
* @since 1.0.0
|
|
313
|
-
* @category Helpers
|
|
314
|
-
*/
|
|
315
|
-
export declare const createTouchedRecord: (fields: FieldsRecord, value: boolean) => Record<string, boolean>;
|
|
316
198
|
export {};
|
|
317
199
|
//# sourceMappingURL=Form.d.ts.map
|
package/dist/dts/Form.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../src/Form.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../src/Form.ts"],"names":[],"mappings":"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"}
|
package/dist/dts/FormAtoms.d.ts
CHANGED
|
@@ -11,7 +11,8 @@ import type * as Registry from "@effect-atom/atom/Registry";
|
|
|
11
11
|
import * as Option from "effect/Option";
|
|
12
12
|
import type * as ParseResult from "effect/ParseResult";
|
|
13
13
|
import * as Schema from "effect/Schema";
|
|
14
|
-
import
|
|
14
|
+
import * as Field from "./Field.js";
|
|
15
|
+
import * as Form from "./Form.js";
|
|
15
16
|
import { type WeakRegistry } from "./internal/weak-registry.js";
|
|
16
17
|
/**
|
|
17
18
|
* Atoms for a single field.
|
|
@@ -31,7 +32,7 @@ export interface FieldAtoms {
|
|
|
31
32
|
* @since 1.0.0
|
|
32
33
|
* @category Models
|
|
33
34
|
*/
|
|
34
|
-
export interface FormAtomsConfig<TFields extends
|
|
35
|
+
export interface FormAtomsConfig<TFields extends Field.FieldsRecord, R> {
|
|
35
36
|
readonly runtime: Atom.AtomRuntime<R, any>;
|
|
36
37
|
readonly formBuilder: Form.FormBuilder<TFields, R>;
|
|
37
38
|
}
|
|
@@ -41,8 +42,8 @@ export interface FormAtomsConfig<TFields extends Form.FieldsRecord, R> {
|
|
|
41
42
|
* @since 1.0.0
|
|
42
43
|
* @category Models
|
|
43
44
|
*/
|
|
44
|
-
export type FieldRefs<TFields extends
|
|
45
|
-
readonly [K in keyof TFields]: TFields[K] extends
|
|
45
|
+
export type FieldRefs<TFields extends Field.FieldsRecord> = {
|
|
46
|
+
readonly [K in keyof TFields]: TFields[K] extends Field.FieldDef<any, infer S> ? Form.Field<Schema.Schema.Encoded<S>> : TFields[K] extends Field.ArrayFieldDef<any, infer S> ? Form.Field<ReadonlyArray<Schema.Schema.Encoded<S>>> : never;
|
|
46
47
|
};
|
|
47
48
|
/**
|
|
48
49
|
* The complete form atoms infrastructure.
|
|
@@ -50,15 +51,18 @@ export type FieldRefs<TFields extends Form.FieldsRecord> = {
|
|
|
50
51
|
* @since 1.0.0
|
|
51
52
|
* @category Models
|
|
52
53
|
*/
|
|
53
|
-
export interface FormAtoms<TFields extends
|
|
54
|
+
export interface FormAtoms<TFields extends Field.FieldsRecord, R> {
|
|
54
55
|
readonly stateAtom: Atom.Writable<Option.Option<Form.FormState<TFields>>, Option.Option<Form.FormState<TFields>>>;
|
|
55
56
|
readonly crossFieldErrorsAtom: Atom.Writable<Map<string, string>, Map<string, string>>;
|
|
56
57
|
readonly dirtyFieldsAtom: Atom.Atom<ReadonlySet<string>>;
|
|
57
58
|
readonly isDirtyAtom: Atom.Atom<boolean>;
|
|
58
59
|
readonly submitCountAtom: Atom.Atom<number>;
|
|
59
|
-
readonly
|
|
60
|
-
readonly
|
|
61
|
-
readonly
|
|
60
|
+
readonly lastSubmittedValuesAtom: Atom.Atom<Option.Option<Field.EncodedFromFields<TFields>>>;
|
|
61
|
+
readonly changedSinceSubmitFieldsAtom: Atom.Atom<ReadonlySet<string>>;
|
|
62
|
+
readonly hasChangedSinceSubmitAtom: Atom.Atom<boolean>;
|
|
63
|
+
readonly onSubmitAtom: Atom.Writable<Atom.AtomResultFn<Field.DecodedFromFields<TFields>, unknown, unknown> | null, Atom.AtomResultFn<Field.DecodedFromFields<TFields>, unknown, unknown> | null>;
|
|
64
|
+
readonly decodeAndSubmit: Atom.AtomResultFn<Field.EncodedFromFields<TFields>, unknown, unknown>;
|
|
65
|
+
readonly combinedSchema: Schema.Schema<Field.DecodedFromFields<TFields>, Field.EncodedFromFields<TFields>, R>;
|
|
62
66
|
readonly fieldRefs: FieldRefs<TFields>;
|
|
63
67
|
readonly validationAtomsRegistry: WeakRegistry<Atom.AtomResultFn<unknown, void, ParseResult.ParseError>>;
|
|
64
68
|
readonly fieldAtomsRegistry: WeakRegistry<FieldAtoms>;
|
|
@@ -73,47 +77,22 @@ export interface FormAtoms<TFields extends Form.FieldsRecord, R> {
|
|
|
73
77
|
* @since 1.0.0
|
|
74
78
|
* @category Models
|
|
75
79
|
*/
|
|
76
|
-
export interface FormOperations<TFields extends
|
|
77
|
-
|
|
78
|
-
* Creates the initial form state from default values.
|
|
79
|
-
*/
|
|
80
|
-
readonly createInitialState: (defaultValues: Form.EncodedFromFields<TFields>) => Form.FormState<TFields>;
|
|
81
|
-
/**
|
|
82
|
-
* Creates a reset state (back to initial values).
|
|
83
|
-
*/
|
|
80
|
+
export interface FormOperations<TFields extends Field.FieldsRecord> {
|
|
81
|
+
readonly createInitialState: (defaultValues: Field.EncodedFromFields<TFields>) => Form.FormState<TFields>;
|
|
84
82
|
readonly createResetState: (state: Form.FormState<TFields>) => Form.FormState<TFields>;
|
|
85
|
-
/**
|
|
86
|
-
* Creates state with all fields marked as touched and submit count incremented.
|
|
87
|
-
*/
|
|
88
83
|
readonly createSubmitState: (state: Form.FormState<TFields>) => Form.FormState<TFields>;
|
|
89
|
-
/**
|
|
90
|
-
* Updates a single field value in the state.
|
|
91
|
-
*/
|
|
92
84
|
readonly setFieldValue: (state: Form.FormState<TFields>, fieldPath: string, value: unknown) => Form.FormState<TFields>;
|
|
93
|
-
|
|
94
|
-
* Sets all form values, recalculating dirty fields.
|
|
95
|
-
*/
|
|
96
|
-
readonly setFormValues: (state: Form.FormState<TFields>, values: Form.EncodedFromFields<TFields>) => Form.FormState<TFields>;
|
|
97
|
-
/**
|
|
98
|
-
* Sets a field as touched.
|
|
99
|
-
*/
|
|
85
|
+
readonly setFormValues: (state: Form.FormState<TFields>, values: Field.EncodedFromFields<TFields>) => Form.FormState<TFields>;
|
|
100
86
|
readonly setFieldTouched: (state: Form.FormState<TFields>, fieldPath: string, touched: boolean) => Form.FormState<TFields>;
|
|
101
|
-
/**
|
|
102
|
-
* Appends an item to an array field.
|
|
103
|
-
*/
|
|
104
87
|
readonly appendArrayItem: (state: Form.FormState<TFields>, arrayPath: string, itemSchema: Schema.Schema.Any, value?: unknown) => Form.FormState<TFields>;
|
|
105
|
-
/**
|
|
106
|
-
* Removes an item from an array field.
|
|
107
|
-
*/
|
|
108
88
|
readonly removeArrayItem: (state: Form.FormState<TFields>, arrayPath: string, index: number) => Form.FormState<TFields>;
|
|
109
|
-
/**
|
|
110
|
-
* Swaps two items in an array field.
|
|
111
|
-
*/
|
|
112
89
|
readonly swapArrayItems: (state: Form.FormState<TFields>, arrayPath: string, indexA: number, indexB: number) => Form.FormState<TFields>;
|
|
90
|
+
readonly moveArrayItem: (state: Form.FormState<TFields>, arrayPath: string, fromIndex: number, toIndex: number) => Form.FormState<TFields>;
|
|
113
91
|
/**
|
|
114
|
-
*
|
|
92
|
+
* Reverts values to the last submitted state.
|
|
93
|
+
* No-op if form has never been submitted or is already in sync.
|
|
115
94
|
*/
|
|
116
|
-
readonly
|
|
95
|
+
readonly revertToLastSubmit: (state: Form.FormState<TFields>) => Form.FormState<TFields>;
|
|
117
96
|
}
|
|
118
97
|
/**
|
|
119
98
|
* Creates the complete form atoms infrastructure.
|
|
@@ -141,5 +120,5 @@ export interface FormOperations<TFields extends Form.FieldsRecord> {
|
|
|
141
120
|
* @since 1.0.0
|
|
142
121
|
* @category Constructors
|
|
143
122
|
*/
|
|
144
|
-
export declare const make: <TFields extends
|
|
123
|
+
export declare const make: <TFields extends Field.FieldsRecord, R>(config: FormAtomsConfig<TFields, R>) => FormAtoms<TFields, R>;
|
|
145
124
|
//# sourceMappingURL=FormAtoms.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormAtoms.d.ts","sourceRoot":"","sources":["../../src/FormAtoms.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,IAAI,MAAM,wBAAwB,CAAA;AAC9C,OAAO,KAAK,KAAK,QAAQ,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"FormAtoms.d.ts","sourceRoot":"","sources":["../../src/FormAtoms.ts"],"names":[],"mappings":"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"}
|
package/dist/dts/index.d.ts
CHANGED
package/dist/dts/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC;;;;;;;GAOG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;;;GAIG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC;;;;GAIG;AACH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC;;GAEG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC;;;;;;;GAOG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;;;GAIG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC;;;;GAIG;AACH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field definitions for type-safe forms.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
import * as Schema from "effect/Schema";
|
|
7
|
+
/**
|
|
8
|
+
* Unique identifier for Field instances.
|
|
9
|
+
*
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
* @category Symbols
|
|
12
|
+
*/
|
|
13
|
+
export const TypeId = /*#__PURE__*/Symbol.for("@lucas-barake/effect-form/Field");
|
|
14
|
+
/**
|
|
15
|
+
* Checks if a field definition is an array field.
|
|
16
|
+
*
|
|
17
|
+
* @since 1.0.0
|
|
18
|
+
* @category Guards
|
|
19
|
+
*/
|
|
20
|
+
export const isArrayFieldDef = def => def._tag === "array";
|
|
21
|
+
/**
|
|
22
|
+
* Checks if a field definition is a scalar field.
|
|
23
|
+
*
|
|
24
|
+
* @since 1.0.0
|
|
25
|
+
* @category Guards
|
|
26
|
+
*/
|
|
27
|
+
export const isFieldDef = def => def._tag === "field";
|
|
28
|
+
/**
|
|
29
|
+
* Creates a scalar field definition.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* import * as Field from "@lucas-barake/effect-form/Field"
|
|
34
|
+
* import * as Schema from "effect/Schema"
|
|
35
|
+
*
|
|
36
|
+
* const NameField = Field.makeField("name", Schema.String)
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* @since 1.0.0
|
|
40
|
+
* @category Constructors
|
|
41
|
+
*/
|
|
42
|
+
export const makeField = (key, schema) => ({
|
|
43
|
+
_tag: "field",
|
|
44
|
+
key,
|
|
45
|
+
schema
|
|
46
|
+
});
|
|
47
|
+
/**
|
|
48
|
+
* Creates an array field definition.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```ts
|
|
52
|
+
* import * as Field from "@lucas-barake/effect-form/Field"
|
|
53
|
+
* import * as Schema from "effect/Schema"
|
|
54
|
+
*
|
|
55
|
+
* // Array of primitives
|
|
56
|
+
* const TagsField = Field.makeArrayField("tags", Schema.String)
|
|
57
|
+
*
|
|
58
|
+
* // Array of objects
|
|
59
|
+
* const ItemsField = Field.makeArrayField("items", Schema.Struct({
|
|
60
|
+
* name: Schema.String,
|
|
61
|
+
* quantity: Schema.Number
|
|
62
|
+
* }))
|
|
63
|
+
* ```
|
|
64
|
+
*
|
|
65
|
+
* @since 1.0.0
|
|
66
|
+
* @category Constructors
|
|
67
|
+
*/
|
|
68
|
+
export const makeArrayField = (key, itemSchema) => ({
|
|
69
|
+
_tag: "array",
|
|
70
|
+
key,
|
|
71
|
+
itemSchema
|
|
72
|
+
});
|
|
73
|
+
/**
|
|
74
|
+
* Gets a default encoded value from a schema.
|
|
75
|
+
*
|
|
76
|
+
* @since 1.0.0
|
|
77
|
+
* @category Helpers
|
|
78
|
+
*/
|
|
79
|
+
export const getDefaultFromSchema = schema => {
|
|
80
|
+
const ast = schema.ast;
|
|
81
|
+
switch (ast._tag) {
|
|
82
|
+
case "StringKeyword":
|
|
83
|
+
case "TemplateLiteral":
|
|
84
|
+
return "";
|
|
85
|
+
case "NumberKeyword":
|
|
86
|
+
return 0;
|
|
87
|
+
case "BooleanKeyword":
|
|
88
|
+
return false;
|
|
89
|
+
case "TypeLiteral":
|
|
90
|
+
{
|
|
91
|
+
const result = {};
|
|
92
|
+
for (const prop of ast.propertySignatures) {
|
|
93
|
+
result[prop.name] = getDefaultFromSchema(Schema.make(prop.type));
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
case "Transformation":
|
|
98
|
+
return getDefaultFromSchema(Schema.make(ast.from));
|
|
99
|
+
case "Refinement":
|
|
100
|
+
return getDefaultFromSchema(Schema.make(ast.from));
|
|
101
|
+
case "Suspend":
|
|
102
|
+
return getDefaultFromSchema(Schema.make(ast.f()));
|
|
103
|
+
default:
|
|
104
|
+
return "";
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Gets default encoded values for a fields record.
|
|
109
|
+
*
|
|
110
|
+
* @since 1.0.0
|
|
111
|
+
* @category Helpers
|
|
112
|
+
*/
|
|
113
|
+
export const getDefaultEncodedValues = fields => {
|
|
114
|
+
const result = {};
|
|
115
|
+
for (const [key, def] of Object.entries(fields)) {
|
|
116
|
+
if (isArrayFieldDef(def)) {
|
|
117
|
+
result[key] = [];
|
|
118
|
+
} else {
|
|
119
|
+
result[key] = "";
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return result;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Creates a touched record with all fields set to the given value.
|
|
126
|
+
*
|
|
127
|
+
* @since 1.0.0
|
|
128
|
+
* @category Helpers
|
|
129
|
+
*/
|
|
130
|
+
export const createTouchedRecord = (fields, value) => {
|
|
131
|
+
const result = {};
|
|
132
|
+
for (const key of Object.keys(fields)) {
|
|
133
|
+
result[key] = value;
|
|
134
|
+
}
|
|
135
|
+
return result;
|
|
136
|
+
};
|
|
137
|
+
//# sourceMappingURL=Field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Field.js","names":["Schema","TypeId","Symbol","for","isArrayFieldDef","def","_tag","isFieldDef","makeField","key","schema","makeArrayField","itemSchema","getDefaultFromSchema","ast","result","prop","propertySignatures","name","make","type","from","f","getDefaultEncodedValues","fields","Object","entries","createTouchedRecord","value","keys"],"sources":["../../src/Field.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;AAKA,OAAO,KAAKA,MAAM,MAAM,eAAe;AAEvC;;;;;;AAMA,OAAO,MAAMC,MAAM,gBAAkBC,MAAM,CAACC,GAAG,CAAC,iCAAiC,CAAC;AAgDlF;;;;;;AAMA,OAAO,MAAMC,eAAe,GAAIC,GAAgB,IAC9CA,GAAG,CAACC,IAAI,KAAK,OAAO;AAEtB;;;;;;AAMA,OAAO,MAAMC,UAAU,GAAIF,GAAgB,IAAiDA,GAAG,CAACC,IAAI,KAAK,OAAO;AAEhH;;;;;;;;;;;;;;AAcA,OAAO,MAAME,SAAS,GAAGA,CACvBC,GAAM,EACNC,MAAS,MACW;EACpBJ,IAAI,EAAE,OAAO;EACbG,GAAG;EACHC;CACD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;AAqBA,OAAO,MAAMC,cAAc,GAAGA,CAC5BF,GAAM,EACNG,UAAa,MACY;EACzBN,IAAI,EAAE,OAAO;EACbG,GAAG;EACHG;CACD,CAAC;AA0BF;;;;;;AAMA,OAAO,MAAMC,oBAAoB,GAAIH,MAAyB,IAAa;EACzE,MAAMI,GAAG,GAAGJ,MAAM,CAACI,GAAG;EACtB,QAAQA,GAAG,CAACR,IAAI;IACd,KAAK,eAAe;IACpB,KAAK,iBAAiB;MACpB,OAAO,EAAE;IACX,KAAK,eAAe;MAClB,OAAO,CAAC;IACV,KAAK,gBAAgB;MACnB,OAAO,KAAK;IACd,KAAK,aAAa;MAAE;QAClB,MAAMS,MAAM,GAA4B,EAAE;QAC1C,KAAK,MAAMC,IAAI,IAAIF,GAAG,CAACG,kBAAkB,EAAE;UACzCF,MAAM,CAACC,IAAI,CAACE,IAAc,CAAC,GAAGL,oBAAoB,CAACb,MAAM,CAACmB,IAAI,CAACH,IAAI,CAACI,IAAI,CAAC,CAAC;QAC5E;QACA,OAAOL,MAAM;MACf;IACA,KAAK,gBAAgB;MACnB,OAAOF,oBAAoB,CAACb,MAAM,CAACmB,IAAI,CAACL,GAAG,CAACO,IAAI,CAAC,CAAC;IACpD,KAAK,YAAY;MACf,OAAOR,oBAAoB,CAACb,MAAM,CAACmB,IAAI,CAACL,GAAG,CAACO,IAAI,CAAC,CAAC;IACpD,KAAK,SAAS;MACZ,OAAOR,oBAAoB,CAACb,MAAM,CAACmB,IAAI,CAACL,GAAG,CAACQ,CAAC,EAAE,CAAC,CAAC;IACnD;MACE,OAAO,EAAE;EACb;AACF,CAAC;AAED;;;;;;AAMA,OAAO,MAAMC,uBAAuB,GAAIC,MAAoB,IAA6B;EACvF,MAAMT,MAAM,GAA4B,EAAE;EAC1C,KAAK,MAAM,CAACN,GAAG,EAAEJ,GAAG,CAAC,IAAIoB,MAAM,CAACC,OAAO,CAACF,MAAM,CAAC,EAAE;IAC/C,IAAIpB,eAAe,CAACC,GAAG,CAAC,EAAE;MACxBU,MAAM,CAACN,GAAG,CAAC,GAAG,EAAE;IAClB,CAAC,MAAM;MACLM,MAAM,CAACN,GAAG,CAAC,GAAG,EAAE;IAClB;EACF;EACA,OAAOM,MAAM;AACf,CAAC;AAED;;;;;;AAMA,OAAO,MAAMY,mBAAmB,GAAGA,CAACH,MAAoB,EAAEI,KAAc,KAA6B;EACnG,MAAMb,MAAM,GAA4B,EAAE;EAC1C,KAAK,MAAMN,GAAG,IAAIgB,MAAM,CAACI,IAAI,CAACL,MAAM,CAAC,EAAE;IACrCT,MAAM,CAACN,GAAG,CAAC,GAAGmB,KAAK;EACrB;EACA,OAAOb,MAAM;AACf,CAAC","ignoreList":[]}
|