@lucas-barake/effect-form 0.2.0 → 0.4.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/FormBuilder/package.json +6 -0
- package/dist/cjs/FormAtoms.js +43 -21
- package/dist/cjs/FormAtoms.js.map +1 -1
- package/dist/cjs/{Form.js → FormBuilder.js} +9 -9
- package/dist/cjs/FormBuilder.js.map +1 -0
- package/dist/cjs/index.js +3 -3
- package/dist/dts/FormAtoms.d.ts +23 -45
- package/dist/dts/FormAtoms.d.ts.map +1 -1
- package/dist/dts/{Form.d.ts → FormBuilder.d.ts} +20 -18
- package/dist/dts/FormBuilder.d.ts.map +1 -0
- package/dist/dts/index.d.ts +4 -4
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/esm/FormAtoms.js +43 -21
- package/dist/esm/FormAtoms.js.map +1 -1
- package/dist/esm/{Form.js → FormBuilder.js} +9 -9
- package/dist/esm/FormBuilder.js.map +1 -0
- package/dist/esm/index.js +4 -4
- package/dist/esm/index.js.map +1 -1
- package/package.json +9 -9
- package/src/FormAtoms.ts +98 -79
- package/src/{Form.ts → FormBuilder.ts} +20 -18
- package/src/index.ts +5 -5
- package/Form/package.json +0 -6
- package/dist/cjs/Form.js.map +0 -1
- package/dist/dts/Form.d.ts.map +0 -1
- package/dist/esm/Form.js.map +0 -1
package/dist/esm/FormAtoms.js
CHANGED
|
@@ -8,13 +8,11 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import * as Atom from "@effect-atom/atom/Atom";
|
|
10
10
|
import * as Effect from "effect/Effect";
|
|
11
|
-
import * as Equal from "effect/Equal";
|
|
12
11
|
import { pipe } from "effect/Function";
|
|
13
12
|
import * as Option from "effect/Option";
|
|
14
13
|
import * as Schema from "effect/Schema";
|
|
15
|
-
import * as Utils from "effect/Utils";
|
|
16
14
|
import * as Field from "./Field.js";
|
|
17
|
-
import * as
|
|
15
|
+
import * as FormBuilder from "./FormBuilder.js";
|
|
18
16
|
import { recalculateDirtyFieldsForArray, recalculateDirtySubtree } from "./internal/dirty.js";
|
|
19
17
|
import { getNestedValue, setNestedValue } from "./internal/path.js";
|
|
20
18
|
import { createWeakRegistry } from "./internal/weak-registry.js";
|
|
@@ -30,9 +28,9 @@ import { createWeakRegistry } from "./internal/weak-registry.js";
|
|
|
30
28
|
*
|
|
31
29
|
* const runtime = Atom.runtime(Layer.empty)
|
|
32
30
|
*
|
|
33
|
-
* const loginForm =
|
|
34
|
-
* .addField(
|
|
35
|
-
* .addField(
|
|
31
|
+
* const loginForm = FormBuilder.empty
|
|
32
|
+
* .addField(FormBuilder.makeField("email", Schema.String))
|
|
33
|
+
* .addField(FormBuilder.makeField("password", Schema.String))
|
|
36
34
|
*
|
|
37
35
|
* const atoms = FormAtoms.make({
|
|
38
36
|
* runtime,
|
|
@@ -52,24 +50,27 @@ export const make = config => {
|
|
|
52
50
|
const {
|
|
53
51
|
fields
|
|
54
52
|
} = formBuilder;
|
|
55
|
-
const combinedSchema =
|
|
53
|
+
const combinedSchema = FormBuilder.buildSchema(formBuilder);
|
|
56
54
|
const stateAtom = Atom.make(Option.none()).pipe(Atom.setIdleTTL(0));
|
|
57
55
|
const crossFieldErrorsAtom = Atom.make(new Map()).pipe(Atom.setIdleTTL(0));
|
|
58
56
|
const dirtyFieldsAtom = Atom.readable(get => Option.getOrThrow(get(stateAtom)).dirtyFields).pipe(Atom.setIdleTTL(0));
|
|
59
57
|
const isDirtyAtom = Atom.readable(get => Option.getOrThrow(get(stateAtom)).dirtyFields.size > 0).pipe(Atom.setIdleTTL(0));
|
|
60
58
|
const submitCountAtom = Atom.readable(get => Option.getOrThrow(get(stateAtom)).submitCount).pipe(Atom.setIdleTTL(0));
|
|
59
|
+
const lastSubmittedValuesAtom = Atom.readable(get => Option.getOrThrow(get(stateAtom)).lastSubmittedValues).pipe(Atom.setIdleTTL(0));
|
|
60
|
+
const changedSinceSubmitFieldsAtom = Atom.readable(get => {
|
|
61
|
+
const state = Option.getOrThrow(get(stateAtom));
|
|
62
|
+
return Option.match(state.lastSubmittedValues, {
|
|
63
|
+
onNone: () => new Set(),
|
|
64
|
+
onSome: lastSubmitted => recalculateDirtySubtree(new Set(), lastSubmitted, state.values, "")
|
|
65
|
+
});
|
|
66
|
+
}).pipe(Atom.setIdleTTL(0));
|
|
67
|
+
const hasChangedSinceSubmitAtom = Atom.readable(get => {
|
|
68
|
+
const state = Option.getOrThrow(get(stateAtom));
|
|
69
|
+
if (Option.isNone(state.lastSubmittedValues)) return false;
|
|
70
|
+
if (state.values === state.lastSubmittedValues.value) return false;
|
|
71
|
+
return get(changedSinceSubmitFieldsAtom).size > 0;
|
|
72
|
+
}).pipe(Atom.setIdleTTL(0));
|
|
61
73
|
const onSubmitAtom = Atom.make(null).pipe(Atom.setIdleTTL(0));
|
|
62
|
-
const updateDirtyFields = (state, fieldPath, newValue) => {
|
|
63
|
-
const initialValue = getNestedValue(state.initialValues, fieldPath);
|
|
64
|
-
const isEqual = Utils.structuralRegion(() => Equal.equals(newValue, initialValue));
|
|
65
|
-
const newDirtyFields = new Set(state.dirtyFields);
|
|
66
|
-
if (!isEqual) {
|
|
67
|
-
newDirtyFields.add(fieldPath);
|
|
68
|
-
} else {
|
|
69
|
-
newDirtyFields.delete(fieldPath);
|
|
70
|
-
}
|
|
71
|
-
return newDirtyFields;
|
|
72
|
-
};
|
|
73
74
|
const validationAtomsRegistry = createWeakRegistry();
|
|
74
75
|
const fieldAtomsRegistry = createWeakRegistry();
|
|
75
76
|
const getOrCreateValidationAtom = (fieldPath, schema) => {
|
|
@@ -84,10 +85,11 @@ export const make = config => {
|
|
|
84
85
|
if (existing) return existing;
|
|
85
86
|
const valueAtom = Atom.writable(get => getNestedValue(Option.getOrThrow(get(stateAtom)).values, fieldPath), (ctx, value) => {
|
|
86
87
|
const currentState = Option.getOrThrow(ctx.get(stateAtom));
|
|
88
|
+
const newValues = setNestedValue(currentState.values, fieldPath, value);
|
|
87
89
|
ctx.set(stateAtom, Option.some({
|
|
88
90
|
...currentState,
|
|
89
|
-
values:
|
|
90
|
-
dirtyFields:
|
|
91
|
+
values: newValues,
|
|
92
|
+
dirtyFields: recalculateDirtySubtree(currentState.dirtyFields, currentState.initialValues, newValues, fieldPath)
|
|
91
93
|
}));
|
|
92
94
|
}).pipe(Atom.setIdleTTL(0));
|
|
93
95
|
const initialValueAtom = Atom.readable(get => getNestedValue(Option.getOrThrow(get(stateAtom)).initialValues, fieldPath)).pipe(Atom.setIdleTTL(0));
|
|
@@ -127,11 +129,12 @@ export const make = config => {
|
|
|
127
129
|
suspendOnWaiting: true
|
|
128
130
|
});
|
|
129
131
|
})).pipe(Atom.setIdleTTL(0));
|
|
130
|
-
const fieldRefs = Object.fromEntries(Object.keys(fields).map(key => [key,
|
|
132
|
+
const fieldRefs = Object.fromEntries(Object.keys(fields).map(key => [key, FormBuilder.makeFieldRef(key)]));
|
|
131
133
|
const operations = {
|
|
132
134
|
createInitialState: defaultValues => ({
|
|
133
135
|
values: defaultValues,
|
|
134
136
|
initialValues: defaultValues,
|
|
137
|
+
lastSubmittedValues: Option.none(),
|
|
135
138
|
touched: Field.createTouchedRecord(fields, false),
|
|
136
139
|
submitCount: 0,
|
|
137
140
|
dirtyFields: new Set()
|
|
@@ -139,12 +142,14 @@ export const make = config => {
|
|
|
139
142
|
createResetState: state => ({
|
|
140
143
|
values: state.initialValues,
|
|
141
144
|
initialValues: state.initialValues,
|
|
145
|
+
lastSubmittedValues: Option.none(),
|
|
142
146
|
touched: Field.createTouchedRecord(fields, false),
|
|
143
147
|
submitCount: 0,
|
|
144
148
|
dirtyFields: new Set()
|
|
145
149
|
}),
|
|
146
150
|
createSubmitState: state => ({
|
|
147
151
|
...state,
|
|
152
|
+
lastSubmittedValues: Option.some(state.values),
|
|
148
153
|
touched: Field.createTouchedRecord(fields, true),
|
|
149
154
|
submitCount: state.submitCount + 1
|
|
150
155
|
}),
|
|
@@ -216,6 +221,20 @@ export const make = config => {
|
|
|
216
221
|
values: setNestedValue(state.values, arrayPath, newItems),
|
|
217
222
|
dirtyFields: recalculateDirtyFieldsForArray(state.dirtyFields, state.initialValues, arrayPath, newItems)
|
|
218
223
|
};
|
|
224
|
+
},
|
|
225
|
+
revertToLastSubmit: state => {
|
|
226
|
+
if (Option.isNone(state.lastSubmittedValues)) {
|
|
227
|
+
return state;
|
|
228
|
+
}
|
|
229
|
+
if (state.values === state.lastSubmittedValues.value) {
|
|
230
|
+
return state;
|
|
231
|
+
}
|
|
232
|
+
const newDirtyFields = recalculateDirtySubtree(state.dirtyFields, state.initialValues, state.lastSubmittedValues.value, "");
|
|
233
|
+
return {
|
|
234
|
+
...state,
|
|
235
|
+
values: state.lastSubmittedValues.value,
|
|
236
|
+
dirtyFields: newDirtyFields
|
|
237
|
+
};
|
|
219
238
|
}
|
|
220
239
|
};
|
|
221
240
|
return {
|
|
@@ -224,6 +243,9 @@ export const make = config => {
|
|
|
224
243
|
dirtyFieldsAtom,
|
|
225
244
|
isDirtyAtom,
|
|
226
245
|
submitCountAtom,
|
|
246
|
+
lastSubmittedValuesAtom,
|
|
247
|
+
changedSinceSubmitFieldsAtom,
|
|
248
|
+
hasChangedSinceSubmitAtom,
|
|
227
249
|
onSubmitAtom,
|
|
228
250
|
decodeAndSubmit,
|
|
229
251
|
combinedSchema,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormAtoms.js","names":["Atom","Effect","Equal","pipe","Option","Schema","Utils","Field","Form","recalculateDirtyFieldsForArray","recalculateDirtySubtree","getNestedValue","setNestedValue","createWeakRegistry","make","config","formBuilder","runtime","fields","combinedSchema","buildSchema","stateAtom","none","setIdleTTL","crossFieldErrorsAtom","Map","dirtyFieldsAtom","readable","get","getOrThrow","dirtyFields","isDirtyAtom","size","submitCountAtom","submitCount","onSubmitAtom","updateDirtyFields","state","fieldPath","newValue","initialValue","initialValues","isEqual","structuralRegion","equals","newDirtyFields","Set","add","delete","validationAtomsRegistry","fieldAtomsRegistry","getOrCreateValidationAtom","schema","existing","validationAtom","fn","value","decodeUnknown","asVoid","set","getOrCreateFieldAtoms","valueAtom","writable","values","ctx","currentState","some","initialValueAtom","touchedAtom","touched","crossFieldErrorAtom","errors","error","undefined","atoms","resetValidationAtoms","registry","Reset","clear","decodeAndSubmit","gen","decoded","onSubmit","result","suspendOnWaiting","fieldRefs","Object","fromEntries","keys","map","key","makeFieldRef","operations","createInitialState","defaultValues","createTouchedRecord","createResetState","createSubmitState","setFieldValue","newValues","setFormValues","setFieldTouched","appendArrayItem","arrayPath","itemSchema","newItem","getDefaultFromSchema","currentItems","newItems","removeArrayItem","index","filter","_","i","swapArrayItems","indexA","indexB","length","temp","moveArrayItem","fromIndex","toIndex","item","splice"],"sources":["../../src/FormAtoms.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"FormAtoms.js","names":["Atom","Effect","pipe","Option","Schema","Field","FormBuilder","recalculateDirtyFieldsForArray","recalculateDirtySubtree","getNestedValue","setNestedValue","createWeakRegistry","make","config","formBuilder","runtime","fields","combinedSchema","buildSchema","stateAtom","none","setIdleTTL","crossFieldErrorsAtom","Map","dirtyFieldsAtom","readable","get","getOrThrow","dirtyFields","isDirtyAtom","size","submitCountAtom","submitCount","lastSubmittedValuesAtom","lastSubmittedValues","changedSinceSubmitFieldsAtom","state","match","onNone","Set","onSome","lastSubmitted","values","hasChangedSinceSubmitAtom","isNone","value","onSubmitAtom","validationAtomsRegistry","fieldAtomsRegistry","getOrCreateValidationAtom","fieldPath","schema","existing","validationAtom","fn","decodeUnknown","asVoid","set","getOrCreateFieldAtoms","valueAtom","writable","ctx","currentState","newValues","some","initialValues","initialValueAtom","touchedAtom","touched","crossFieldErrorAtom","errors","error","undefined","atoms","resetValidationAtoms","registry","Reset","clear","decodeAndSubmit","gen","decoded","onSubmit","result","suspendOnWaiting","fieldRefs","Object","fromEntries","keys","map","key","makeFieldRef","operations","createInitialState","defaultValues","createTouchedRecord","createResetState","createSubmitState","setFieldValue","newDirtyFields","setFormValues","setFieldTouched","appendArrayItem","arrayPath","itemSchema","newItem","getDefaultFromSchema","currentItems","newItems","removeArrayItem","index","filter","_","i","swapArrayItems","indexA","indexB","length","temp","moveArrayItem","fromIndex","toIndex","item","splice","revertToLastSubmit"],"sources":["../../src/FormAtoms.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -75,14 +75,14 @@ const FormBuilderProto = {
|
|
|
75
75
|
*
|
|
76
76
|
* @example
|
|
77
77
|
* ```ts
|
|
78
|
-
* import
|
|
78
|
+
* import { FormBuilder } from "@lucas-barake/effect-form"
|
|
79
79
|
*
|
|
80
|
-
* const builder =
|
|
80
|
+
* const builder = FormBuilder.empty
|
|
81
81
|
*
|
|
82
|
-
* console.log(
|
|
82
|
+
* console.log(FormBuilder.isFormBuilder(builder))
|
|
83
83
|
* // Output: true
|
|
84
84
|
*
|
|
85
|
-
* console.log(
|
|
85
|
+
* console.log(FormBuilder.isFormBuilder({}))
|
|
86
86
|
* // Output: false
|
|
87
87
|
* ```
|
|
88
88
|
*
|
|
@@ -100,13 +100,13 @@ export const isFormBuilder = u => Predicate.hasProperty(u, TypeId);
|
|
|
100
100
|
*
|
|
101
101
|
* @example
|
|
102
102
|
* ```ts
|
|
103
|
-
* import
|
|
103
|
+
* import { Field, FormBuilder } from "@lucas-barake/effect-form"
|
|
104
104
|
* import * as Schema from "effect/Schema"
|
|
105
105
|
*
|
|
106
|
-
* const EmailField =
|
|
107
|
-
* const PasswordField =
|
|
106
|
+
* const EmailField = Field.makeField("email", Schema.String)
|
|
107
|
+
* const PasswordField = Field.makeField("password", Schema.String)
|
|
108
108
|
*
|
|
109
|
-
* const loginForm =
|
|
109
|
+
* const loginForm = FormBuilder.empty
|
|
110
110
|
* .addField(EmailField)
|
|
111
111
|
* .addField(PasswordField)
|
|
112
112
|
* ```
|
|
@@ -146,4 +146,4 @@ export const buildSchema = self => {
|
|
|
146
146
|
}
|
|
147
147
|
return schema;
|
|
148
148
|
};
|
|
149
|
-
//# sourceMappingURL=
|
|
149
|
+
//# sourceMappingURL=FormBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormBuilder.js","names":["Predicate","Schema","isArrayFieldDef","isFieldDef","FieldTypeId","Symbol","for","makeFieldRef","key","_S","undefined","TypeId","FormBuilderProto","addField","field","newSelf","Object","create","fields","refinements","merge","other","refine","predicate","_tag","fn","values","refineEffect","isFormBuilder","u","hasProperty","empty","self","buildSchema","schemaFields","def","entries","Array","itemSchema","schema","Struct","refinement","pipe","filter","filterEffect"],"sources":["../../src/FormBuilder.ts"],"sourcesContent":[null],"mappings":"AAKA,OAAO,KAAKA,SAAS,MAAM,kBAAkB;AAC7C,OAAO,KAAKC,MAAM,MAAM,eAAe;AAUvC,SAASC,eAAe,EAAEC,UAAU,QAAQ,YAAY;AAExD;;;;;;;AAOA,OAAO,MAAMC,WAAW,gBAAkBC,MAAM,CAACC,GAAG,CAAC,iCAAiC,CAAC;AAqBvF;;;;;;;AAOA,OAAO,MAAMC,YAAY,GAAOC,GAAW,KAAmB;EAC5D,CAACJ,WAAW,GAAGA,WAAW;EAC1BK,EAAE,EAAEC,SAAgB;EACpBF;CACD,CAAC;AAEF;AACA;AACA;AAEA;;;;;;AAMA,OAAO,MAAMG,MAAM,gBAAkBN,MAAM,CAACC,GAAG,CAAC,gCAAgC,CAAC;AA8IjF,MAAMM,gBAAgB,GAAG;EACvB,CAACD,MAAM,GAAGA,MAAM;EAChBE,QAAQA,CAENC,KAAkB;IAElB,MAAMC,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,gBAAgB,CAAC;IAC/CG,OAAO,CAACG,MAAM,GAAG;MAAE,GAAG,IAAI,CAACA,MAAM;MAAE,CAACJ,KAAK,CAACN,GAAG,GAAGM;IAAK,CAAE;IACvDC,OAAO,CAACI,WAAW,GAAG,IAAI,CAACA,WAAW;IACtC,OAAOJ,OAAO;EAChB,CAAC;EACDK,KAAKA,CAEHC,KAAgC;IAEhC,MAAMN,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,gBAAgB,CAAC;IAC/CG,OAAO,CAACG,MAAM,GAAG;MAAE,GAAG,IAAI,CAACA,MAAM;MAAE,GAAGG,KAAK,CAACH;IAAM,CAAE;IACpDH,OAAO,CAACI,WAAW,GAAG,CAAC,GAAG,IAAI,CAACA,WAAW,EAAE,GAAGE,KAAK,CAACF,WAAW,CAAC;IACjE,OAAOJ,OAAO;EAChB,CAAC;EACDO,MAAMA,CAEJC,SAAsE;IAEtE,MAAMR,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,gBAAgB,CAAC;IAC/CG,OAAO,CAACG,MAAM,GAAG,IAAI,CAACA,MAAM;IAC5BH,OAAO,CAACI,WAAW,GAAG,CACpB,GAAG,IAAI,CAACA,WAAW,EACnB;MAAEK,IAAI,EAAE,MAAe;MAAEC,EAAE,EAAGC,MAAe,IAAKH,SAAS,CAACG,MAAoC;IAAC,CAAE,CACpG;IACD,OAAOX,OAAO;EAChB,CAAC;EACDY,YAAYA,CAEVJ,SAAgG;IAEhG,MAAMR,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,gBAAgB,CAAC;IAC/CG,OAAO,CAACG,MAAM,GAAG,IAAI,CAACA,MAAM;IAC5BH,OAAO,CAACI,WAAW,GAAG,CACpB,GAAG,IAAI,CAACA,WAAW,EACnB;MAAEK,IAAI,EAAE,OAAgB;MAAEC,EAAE,EAAGC,MAAe,IAAKH,SAAS,CAACG,MAAoC;IAAC,CAAE,CACrG;IACD,OAAOX,OAAO;EAChB;CACD;AAED;;;;;;;;;;;;;;;;;;;AAmBA,OAAO,MAAMa,aAAa,GAAIC,CAAU,IAAiC7B,SAAS,CAAC8B,WAAW,CAACD,CAAC,EAAElB,MAAM,CAAC;AAEzG;;;;;;;;;;;;;;;;;;;;;;;;AAwBA;AACA,OAAO,MAAMoB,KAAK,gBAA2B,CAAC,MAAK;EACjD,MAAMC,IAAI,gBAAGhB,MAAM,CAACC,MAAM,CAACL,gBAAgB,CAAC;EAC5CoB,IAAI,CAACd,MAAM,GAAG,EAAE;EAChBc,IAAI,CAACb,WAAW,GAAG,EAAE;EACrB,OAAOa,IAAI;AACb,CAAC,EAAC,CAAE;AAEJ;;;;;;AAMA,OAAO,MAAMC,WAAW,GACtBD,IAA6B,IAC+C;EAC5E,MAAME,YAAY,GAAsC,EAAE;EAC1D,KAAK,MAAM,CAAC1B,GAAG,EAAE2B,GAAG,CAAC,IAAInB,MAAM,CAACoB,OAAO,CAACJ,IAAI,CAACd,MAAM,CAAC,EAAE;IACpD,IAAIhB,eAAe,CAACiC,GAAG,CAAC,EAAE;MACxBD,YAAY,CAAC1B,GAAG,CAAC,GAAGP,MAAM,CAACoC,KAAK,CAACF,GAAG,CAACG,UAAU,CAAC;IAClD,CAAC,MAAM,IAAInC,UAAU,CAACgC,GAAG,CAAC,EAAE;MAC1BD,YAAY,CAAC1B,GAAG,CAAC,GAAG2B,GAAG,CAACI,MAAM;IAChC;EACF;EAEA,IAAIA,MAAM,GAAiCtC,MAAM,CAACuC,MAAM,CAACN,YAAY,CAAC;EAEtE,KAAK,MAAMO,UAAU,IAAIT,IAAI,CAACb,WAAW,EAAE;IACzC,IAAIsB,UAAU,CAACjB,IAAI,KAAK,MAAM,EAAE;MAC9Be,MAAM,GAAGA,MAAM,CAACG,IAAI,CAACzC,MAAM,CAAC0C,MAAM,CAACF,UAAU,CAAChB,EAAE,CAAC,CAAC;IACpD,CAAC,MAAM;MACLc,MAAM,GAAGA,MAAM,CAACG,IAAI,CAACzC,MAAM,CAAC2C,YAAY,CAACH,UAAU,CAAChB,EAAE,CAAC,CAAC;IAC1D;EACF;EAEA,OAAOc,MAIN;AACH,CAAC","ignoreList":[]}
|
package/dist/esm/index.js
CHANGED
|
@@ -4,10 +4,6 @@
|
|
|
4
4
|
* @since 1.0.0
|
|
5
5
|
*/
|
|
6
6
|
export * as Field from "./Field.js";
|
|
7
|
-
/**
|
|
8
|
-
* @since 1.0.0
|
|
9
|
-
*/
|
|
10
|
-
export * as Form from "./Form.js";
|
|
11
7
|
/**
|
|
12
8
|
* Atom infrastructure for form state management.
|
|
13
9
|
*
|
|
@@ -17,6 +13,10 @@ export * as Form from "./Form.js";
|
|
|
17
13
|
* @since 1.0.0
|
|
18
14
|
*/
|
|
19
15
|
export * as FormAtoms from "./FormAtoms.js";
|
|
16
|
+
/**
|
|
17
|
+
* @since 1.0.0
|
|
18
|
+
*/
|
|
19
|
+
export * as FormBuilder from "./FormBuilder.js";
|
|
20
20
|
/**
|
|
21
21
|
* Form validation mode configuration.
|
|
22
22
|
*
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Field","
|
|
1
|
+
{"version":3,"file":"index.js","names":["Field","FormAtoms","FormBuilder","Mode","Validation"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;AAKA,OAAO,KAAKA,KAAK,MAAM,YAAY;AAEnC;;;;;;;;AAQA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,WAAW,MAAM,kBAAkB;AAE/C;;;;;AAKA,OAAO,KAAKC,IAAI,MAAM,WAAW;AAEjC;;;;;AAKA,OAAO,KAAKC,UAAU,MAAM,iBAAiB","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lucas-barake/effect-form",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Type-safe form builder powered by Effect Schema",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -29,16 +29,16 @@
|
|
|
29
29
|
"import": "./dist/esm/Field.js",
|
|
30
30
|
"default": "./dist/cjs/Field.js"
|
|
31
31
|
},
|
|
32
|
-
"./Form": {
|
|
33
|
-
"types": "./dist/dts/Form.d.ts",
|
|
34
|
-
"import": "./dist/esm/Form.js",
|
|
35
|
-
"default": "./dist/cjs/Form.js"
|
|
36
|
-
},
|
|
37
32
|
"./FormAtoms": {
|
|
38
33
|
"types": "./dist/dts/FormAtoms.d.ts",
|
|
39
34
|
"import": "./dist/esm/FormAtoms.js",
|
|
40
35
|
"default": "./dist/cjs/FormAtoms.js"
|
|
41
36
|
},
|
|
37
|
+
"./FormBuilder": {
|
|
38
|
+
"types": "./dist/dts/FormBuilder.d.ts",
|
|
39
|
+
"import": "./dist/esm/FormBuilder.js",
|
|
40
|
+
"default": "./dist/cjs/FormBuilder.js"
|
|
41
|
+
},
|
|
42
42
|
"./Mode": {
|
|
43
43
|
"types": "./dist/dts/Mode.d.ts",
|
|
44
44
|
"import": "./dist/esm/Mode.js",
|
|
@@ -55,12 +55,12 @@
|
|
|
55
55
|
"Field": [
|
|
56
56
|
"./dist/dts/Field.d.ts"
|
|
57
57
|
],
|
|
58
|
-
"Form": [
|
|
59
|
-
"./dist/dts/Form.d.ts"
|
|
60
|
-
],
|
|
61
58
|
"FormAtoms": [
|
|
62
59
|
"./dist/dts/FormAtoms.d.ts"
|
|
63
60
|
],
|
|
61
|
+
"FormBuilder": [
|
|
62
|
+
"./dist/dts/FormBuilder.d.ts"
|
|
63
|
+
],
|
|
64
64
|
"Mode": [
|
|
65
65
|
"./dist/dts/Mode.d.ts"
|
|
66
66
|
],
|
package/src/FormAtoms.ts
CHANGED
|
@@ -9,14 +9,12 @@
|
|
|
9
9
|
import * as Atom from "@effect-atom/atom/Atom"
|
|
10
10
|
import type * as Registry from "@effect-atom/atom/Registry"
|
|
11
11
|
import * as Effect from "effect/Effect"
|
|
12
|
-
import * as Equal from "effect/Equal"
|
|
13
12
|
import { pipe } from "effect/Function"
|
|
14
13
|
import * as Option from "effect/Option"
|
|
15
14
|
import type * as ParseResult from "effect/ParseResult"
|
|
16
15
|
import * as Schema from "effect/Schema"
|
|
17
|
-
import * as Utils from "effect/Utils"
|
|
18
16
|
import * as Field from "./Field.js"
|
|
19
|
-
import * as
|
|
17
|
+
import * as FormBuilder from "./FormBuilder.js"
|
|
20
18
|
import { recalculateDirtyFieldsForArray, recalculateDirtySubtree } from "./internal/dirty.js"
|
|
21
19
|
import { getNestedValue, setNestedValue } from "./internal/path.js"
|
|
22
20
|
import { createWeakRegistry, type WeakRegistry } from "./internal/weak-registry.js"
|
|
@@ -42,7 +40,7 @@ export interface FieldAtoms {
|
|
|
42
40
|
*/
|
|
43
41
|
export interface FormAtomsConfig<TFields extends Field.FieldsRecord, R> {
|
|
44
42
|
readonly runtime: Atom.AtomRuntime<R, any>
|
|
45
|
-
readonly formBuilder:
|
|
43
|
+
readonly formBuilder: FormBuilder.FormBuilder<TFields, R>
|
|
46
44
|
}
|
|
47
45
|
|
|
48
46
|
/**
|
|
@@ -52,8 +50,10 @@ export interface FormAtomsConfig<TFields extends Field.FieldsRecord, R> {
|
|
|
52
50
|
* @category Models
|
|
53
51
|
*/
|
|
54
52
|
export type FieldRefs<TFields extends Field.FieldsRecord> = {
|
|
55
|
-
readonly [K in keyof TFields]: TFields[K] extends Field.FieldDef<any, infer S> ?
|
|
56
|
-
|
|
53
|
+
readonly [K in keyof TFields]: TFields[K] extends Field.FieldDef<any, infer S> ?
|
|
54
|
+
FormBuilder.FieldRef<Schema.Schema.Encoded<S>>
|
|
55
|
+
: TFields[K] extends Field.ArrayFieldDef<any, infer S> ?
|
|
56
|
+
FormBuilder.FieldRef<ReadonlyArray<Schema.Schema.Encoded<S>>>
|
|
57
57
|
: never
|
|
58
58
|
}
|
|
59
59
|
|
|
@@ -64,11 +64,17 @@ export type FieldRefs<TFields extends Field.FieldsRecord> = {
|
|
|
64
64
|
* @category Models
|
|
65
65
|
*/
|
|
66
66
|
export interface FormAtoms<TFields extends Field.FieldsRecord, R> {
|
|
67
|
-
readonly stateAtom: Atom.Writable<
|
|
67
|
+
readonly stateAtom: Atom.Writable<
|
|
68
|
+
Option.Option<FormBuilder.FormState<TFields>>,
|
|
69
|
+
Option.Option<FormBuilder.FormState<TFields>>
|
|
70
|
+
>
|
|
68
71
|
readonly crossFieldErrorsAtom: Atom.Writable<Map<string, string>, Map<string, string>>
|
|
69
72
|
readonly dirtyFieldsAtom: Atom.Atom<ReadonlySet<string>>
|
|
70
73
|
readonly isDirtyAtom: Atom.Atom<boolean>
|
|
71
74
|
readonly submitCountAtom: Atom.Atom<number>
|
|
75
|
+
readonly lastSubmittedValuesAtom: Atom.Atom<Option.Option<Field.EncodedFromFields<TFields>>>
|
|
76
|
+
readonly changedSinceSubmitFieldsAtom: Atom.Atom<ReadonlySet<string>>
|
|
77
|
+
readonly hasChangedSinceSubmitAtom: Atom.Atom<boolean>
|
|
72
78
|
readonly onSubmitAtom: Atom.Writable<
|
|
73
79
|
Atom.AtomResultFn<Field.DecodedFromFields<TFields>, unknown, unknown> | null,
|
|
74
80
|
Atom.AtomResultFn<Field.DecodedFromFields<TFields>, unknown, unknown> | null
|
|
@@ -102,85 +108,61 @@ export interface FormAtoms<TFields extends Field.FieldsRecord, R> {
|
|
|
102
108
|
* @category Models
|
|
103
109
|
*/
|
|
104
110
|
export interface FormOperations<TFields extends Field.FieldsRecord> {
|
|
105
|
-
|
|
106
|
-
* Creates the initial form state from default values.
|
|
107
|
-
*/
|
|
108
|
-
readonly createInitialState: (defaultValues: Field.EncodedFromFields<TFields>) => Form.FormState<TFields>
|
|
111
|
+
readonly createInitialState: (defaultValues: Field.EncodedFromFields<TFields>) => FormBuilder.FormState<TFields>
|
|
109
112
|
|
|
110
|
-
|
|
111
|
-
* Creates a reset state (back to initial values).
|
|
112
|
-
*/
|
|
113
|
-
readonly createResetState: (state: Form.FormState<TFields>) => Form.FormState<TFields>
|
|
113
|
+
readonly createResetState: (state: FormBuilder.FormState<TFields>) => FormBuilder.FormState<TFields>
|
|
114
114
|
|
|
115
|
-
|
|
116
|
-
* Creates state with all fields marked as touched and submit count incremented.
|
|
117
|
-
*/
|
|
118
|
-
readonly createSubmitState: (state: Form.FormState<TFields>) => Form.FormState<TFields>
|
|
115
|
+
readonly createSubmitState: (state: FormBuilder.FormState<TFields>) => FormBuilder.FormState<TFields>
|
|
119
116
|
|
|
120
|
-
/**
|
|
121
|
-
* Updates a single field value in the state.
|
|
122
|
-
*/
|
|
123
117
|
readonly setFieldValue: (
|
|
124
|
-
state:
|
|
118
|
+
state: FormBuilder.FormState<TFields>,
|
|
125
119
|
fieldPath: string,
|
|
126
120
|
value: unknown,
|
|
127
|
-
) =>
|
|
121
|
+
) => FormBuilder.FormState<TFields>
|
|
128
122
|
|
|
129
|
-
/**
|
|
130
|
-
* Sets all form values, recalculating dirty fields.
|
|
131
|
-
*/
|
|
132
123
|
readonly setFormValues: (
|
|
133
|
-
state:
|
|
124
|
+
state: FormBuilder.FormState<TFields>,
|
|
134
125
|
values: Field.EncodedFromFields<TFields>,
|
|
135
|
-
) =>
|
|
126
|
+
) => FormBuilder.FormState<TFields>
|
|
136
127
|
|
|
137
|
-
/**
|
|
138
|
-
* Sets a field as touched.
|
|
139
|
-
*/
|
|
140
128
|
readonly setFieldTouched: (
|
|
141
|
-
state:
|
|
129
|
+
state: FormBuilder.FormState<TFields>,
|
|
142
130
|
fieldPath: string,
|
|
143
131
|
touched: boolean,
|
|
144
|
-
) =>
|
|
132
|
+
) => FormBuilder.FormState<TFields>
|
|
145
133
|
|
|
146
|
-
/**
|
|
147
|
-
* Appends an item to an array field.
|
|
148
|
-
*/
|
|
149
134
|
readonly appendArrayItem: (
|
|
150
|
-
state:
|
|
135
|
+
state: FormBuilder.FormState<TFields>,
|
|
151
136
|
arrayPath: string,
|
|
152
137
|
itemSchema: Schema.Schema.Any,
|
|
153
138
|
value?: unknown,
|
|
154
|
-
) =>
|
|
139
|
+
) => FormBuilder.FormState<TFields>
|
|
155
140
|
|
|
156
|
-
/**
|
|
157
|
-
* Removes an item from an array field.
|
|
158
|
-
*/
|
|
159
141
|
readonly removeArrayItem: (
|
|
160
|
-
state:
|
|
142
|
+
state: FormBuilder.FormState<TFields>,
|
|
161
143
|
arrayPath: string,
|
|
162
144
|
index: number,
|
|
163
|
-
) =>
|
|
145
|
+
) => FormBuilder.FormState<TFields>
|
|
164
146
|
|
|
165
|
-
/**
|
|
166
|
-
* Swaps two items in an array field.
|
|
167
|
-
*/
|
|
168
147
|
readonly swapArrayItems: (
|
|
169
|
-
state:
|
|
148
|
+
state: FormBuilder.FormState<TFields>,
|
|
170
149
|
arrayPath: string,
|
|
171
150
|
indexA: number,
|
|
172
151
|
indexB: number,
|
|
173
|
-
) =>
|
|
152
|
+
) => FormBuilder.FormState<TFields>
|
|
174
153
|
|
|
175
|
-
/**
|
|
176
|
-
* Moves an item in an array field.
|
|
177
|
-
*/
|
|
178
154
|
readonly moveArrayItem: (
|
|
179
|
-
state:
|
|
155
|
+
state: FormBuilder.FormState<TFields>,
|
|
180
156
|
arrayPath: string,
|
|
181
157
|
fromIndex: number,
|
|
182
158
|
toIndex: number,
|
|
183
|
-
) =>
|
|
159
|
+
) => FormBuilder.FormState<TFields>
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Reverts values to the last submitted state.
|
|
163
|
+
* No-op if form has never been submitted or is already in sync.
|
|
164
|
+
*/
|
|
165
|
+
readonly revertToLastSubmit: (state: FormBuilder.FormState<TFields>) => FormBuilder.FormState<TFields>
|
|
184
166
|
}
|
|
185
167
|
|
|
186
168
|
/**
|
|
@@ -195,9 +177,9 @@ export interface FormOperations<TFields extends Field.FieldsRecord> {
|
|
|
195
177
|
*
|
|
196
178
|
* const runtime = Atom.runtime(Layer.empty)
|
|
197
179
|
*
|
|
198
|
-
* const loginForm =
|
|
199
|
-
* .addField(
|
|
200
|
-
* .addField(
|
|
180
|
+
* const loginForm = FormBuilder.empty
|
|
181
|
+
* .addField(FormBuilder.makeField("email", Schema.String))
|
|
182
|
+
* .addField(FormBuilder.makeField("password", Schema.String))
|
|
201
183
|
*
|
|
202
184
|
* const atoms = FormAtoms.make({
|
|
203
185
|
* runtime,
|
|
@@ -215,9 +197,9 @@ export const make = <TFields extends Field.FieldsRecord, R>(
|
|
|
215
197
|
const { formBuilder, runtime } = config
|
|
216
198
|
const { fields } = formBuilder
|
|
217
199
|
|
|
218
|
-
const combinedSchema =
|
|
200
|
+
const combinedSchema = FormBuilder.buildSchema(formBuilder)
|
|
219
201
|
|
|
220
|
-
const stateAtom = Atom.make(Option.none<
|
|
202
|
+
const stateAtom = Atom.make(Option.none<FormBuilder.FormState<TFields>>()).pipe(Atom.setIdleTTL(0))
|
|
221
203
|
const crossFieldErrorsAtom = Atom.make<Map<string, string>>(new Map()).pipe(Atom.setIdleTTL(0))
|
|
222
204
|
|
|
223
205
|
const dirtyFieldsAtom = Atom.readable((get) => Option.getOrThrow(get(stateAtom)).dirtyFields).pipe(
|
|
@@ -232,27 +214,29 @@ export const make = <TFields extends Field.FieldsRecord, R>(
|
|
|
232
214
|
Atom.setIdleTTL(0),
|
|
233
215
|
)
|
|
234
216
|
|
|
217
|
+
const lastSubmittedValuesAtom = Atom.readable(
|
|
218
|
+
(get) => Option.getOrThrow(get(stateAtom)).lastSubmittedValues,
|
|
219
|
+
).pipe(Atom.setIdleTTL(0))
|
|
220
|
+
|
|
221
|
+
const changedSinceSubmitFieldsAtom = Atom.readable((get) => {
|
|
222
|
+
const state = Option.getOrThrow(get(stateAtom))
|
|
223
|
+
return Option.match(state.lastSubmittedValues, {
|
|
224
|
+
onNone: () => new Set<string>(),
|
|
225
|
+
onSome: (lastSubmitted) => recalculateDirtySubtree(new Set(), lastSubmitted, state.values, ""),
|
|
226
|
+
})
|
|
227
|
+
}).pipe(Atom.setIdleTTL(0))
|
|
228
|
+
|
|
229
|
+
const hasChangedSinceSubmitAtom = Atom.readable((get) => {
|
|
230
|
+
const state = Option.getOrThrow(get(stateAtom))
|
|
231
|
+
if (Option.isNone(state.lastSubmittedValues)) return false
|
|
232
|
+
if (state.values === state.lastSubmittedValues.value) return false
|
|
233
|
+
return get(changedSinceSubmitFieldsAtom).size > 0
|
|
234
|
+
}).pipe(Atom.setIdleTTL(0))
|
|
235
|
+
|
|
235
236
|
const onSubmitAtom = Atom.make<Atom.AtomResultFn<Field.DecodedFromFields<TFields>, unknown, unknown> | null>(
|
|
236
237
|
null,
|
|
237
238
|
).pipe(Atom.setIdleTTL(0))
|
|
238
239
|
|
|
239
|
-
const updateDirtyFields = (
|
|
240
|
-
state: Form.FormState<TFields>,
|
|
241
|
-
fieldPath: string,
|
|
242
|
-
newValue: unknown,
|
|
243
|
-
): ReadonlySet<string> => {
|
|
244
|
-
const initialValue = getNestedValue(state.initialValues, fieldPath)
|
|
245
|
-
const isEqual = Utils.structuralRegion(() => Equal.equals(newValue, initialValue))
|
|
246
|
-
|
|
247
|
-
const newDirtyFields = new Set(state.dirtyFields)
|
|
248
|
-
if (!isEqual) {
|
|
249
|
-
newDirtyFields.add(fieldPath)
|
|
250
|
-
} else {
|
|
251
|
-
newDirtyFields.delete(fieldPath)
|
|
252
|
-
}
|
|
253
|
-
return newDirtyFields
|
|
254
|
-
}
|
|
255
|
-
|
|
256
240
|
const validationAtomsRegistry = createWeakRegistry<Atom.AtomResultFn<unknown, void, ParseResult.ParseError>>()
|
|
257
241
|
const fieldAtomsRegistry = createWeakRegistry<FieldAtoms>()
|
|
258
242
|
|
|
@@ -282,12 +266,18 @@ export const make = <TFields extends Field.FieldsRecord, R>(
|
|
|
282
266
|
(get) => getNestedValue(Option.getOrThrow(get(stateAtom)).values, fieldPath),
|
|
283
267
|
(ctx, value) => {
|
|
284
268
|
const currentState = Option.getOrThrow(ctx.get(stateAtom))
|
|
269
|
+
const newValues = setNestedValue(currentState.values, fieldPath, value)
|
|
285
270
|
ctx.set(
|
|
286
271
|
stateAtom,
|
|
287
272
|
Option.some({
|
|
288
273
|
...currentState,
|
|
289
|
-
values:
|
|
290
|
-
dirtyFields:
|
|
274
|
+
values: newValues,
|
|
275
|
+
dirtyFields: recalculateDirtySubtree(
|
|
276
|
+
currentState.dirtyFields,
|
|
277
|
+
currentState.initialValues,
|
|
278
|
+
newValues,
|
|
279
|
+
fieldPath,
|
|
280
|
+
),
|
|
291
281
|
}),
|
|
292
282
|
)
|
|
293
283
|
},
|
|
@@ -344,13 +334,14 @@ export const make = <TFields extends Field.FieldsRecord, R>(
|
|
|
344
334
|
).pipe(Atom.setIdleTTL(0)) as Atom.AtomResultFn<Field.EncodedFromFields<TFields>, unknown, unknown>
|
|
345
335
|
|
|
346
336
|
const fieldRefs = Object.fromEntries(
|
|
347
|
-
Object.keys(fields).map((key) => [key,
|
|
337
|
+
Object.keys(fields).map((key) => [key, FormBuilder.makeFieldRef(key)]),
|
|
348
338
|
) as FieldRefs<TFields>
|
|
349
339
|
|
|
350
340
|
const operations: FormOperations<TFields> = {
|
|
351
341
|
createInitialState: (defaultValues) => ({
|
|
352
342
|
values: defaultValues,
|
|
353
343
|
initialValues: defaultValues,
|
|
344
|
+
lastSubmittedValues: Option.none(),
|
|
354
345
|
touched: Field.createTouchedRecord(fields, false) as { readonly [K in keyof TFields]: boolean },
|
|
355
346
|
submitCount: 0,
|
|
356
347
|
dirtyFields: new Set(),
|
|
@@ -359,6 +350,7 @@ export const make = <TFields extends Field.FieldsRecord, R>(
|
|
|
359
350
|
createResetState: (state) => ({
|
|
360
351
|
values: state.initialValues,
|
|
361
352
|
initialValues: state.initialValues,
|
|
353
|
+
lastSubmittedValues: Option.none(),
|
|
362
354
|
touched: Field.createTouchedRecord(fields, false) as { readonly [K in keyof TFields]: boolean },
|
|
363
355
|
submitCount: 0,
|
|
364
356
|
dirtyFields: new Set(),
|
|
@@ -366,6 +358,7 @@ export const make = <TFields extends Field.FieldsRecord, R>(
|
|
|
366
358
|
|
|
367
359
|
createSubmitState: (state) => ({
|
|
368
360
|
...state,
|
|
361
|
+
lastSubmittedValues: Option.some(state.values),
|
|
369
362
|
touched: Field.createTouchedRecord(fields, true) as { readonly [K in keyof TFields]: boolean },
|
|
370
363
|
submitCount: state.submitCount + 1,
|
|
371
364
|
}),
|
|
@@ -463,6 +456,29 @@ export const make = <TFields extends Field.FieldsRecord, R>(
|
|
|
463
456
|
dirtyFields: recalculateDirtyFieldsForArray(state.dirtyFields, state.initialValues, arrayPath, newItems),
|
|
464
457
|
}
|
|
465
458
|
},
|
|
459
|
+
|
|
460
|
+
revertToLastSubmit: (state) => {
|
|
461
|
+
if (Option.isNone(state.lastSubmittedValues)) {
|
|
462
|
+
return state
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
if (state.values === state.lastSubmittedValues.value) {
|
|
466
|
+
return state
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
const newDirtyFields = recalculateDirtySubtree(
|
|
470
|
+
state.dirtyFields,
|
|
471
|
+
state.initialValues,
|
|
472
|
+
state.lastSubmittedValues.value,
|
|
473
|
+
"",
|
|
474
|
+
)
|
|
475
|
+
|
|
476
|
+
return {
|
|
477
|
+
...state,
|
|
478
|
+
values: state.lastSubmittedValues.value,
|
|
479
|
+
dirtyFields: newDirtyFields,
|
|
480
|
+
}
|
|
481
|
+
},
|
|
466
482
|
}
|
|
467
483
|
|
|
468
484
|
return {
|
|
@@ -471,6 +487,9 @@ export const make = <TFields extends Field.FieldsRecord, R>(
|
|
|
471
487
|
dirtyFieldsAtom,
|
|
472
488
|
isDirtyAtom,
|
|
473
489
|
submitCountAtom,
|
|
490
|
+
lastSubmittedValuesAtom,
|
|
491
|
+
changedSinceSubmitFieldsAtom,
|
|
492
|
+
hasChangedSinceSubmitAtom,
|
|
474
493
|
onSubmitAtom,
|
|
475
494
|
decodeAndSubmit,
|
|
476
495
|
combinedSchema,
|