@tanstack/form-core 0.2.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/package.json +1 -1
- package/src/FieldApi.ts +53 -29
- package/src/FormApi.ts +14 -7
- package/src/tests/FieldApi.spec.ts +84 -17
- package/src/utils.ts +4 -0
- package/build/legacy/FieldApi.cjs +0 -256
- package/build/legacy/FieldApi.cjs.map +0 -1
- package/build/legacy/FieldApi.d.cts +0 -3
- package/build/legacy/FieldApi.d.ts +0 -3
- package/build/legacy/FieldApi.js +0 -223
- package/build/legacy/FieldApi.js.map +0 -1
- package/build/legacy/FormApi.cjs +0 -255
- package/build/legacy/FormApi.cjs.map +0 -1
- package/build/legacy/FormApi.d.cts +0 -3
- package/build/legacy/FormApi.d.ts +0 -3
- package/build/legacy/FormApi.js +0 -232
- package/build/legacy/FormApi.js.map +0 -1
- package/build/legacy/chunk-4QZDOMDG.js +0 -19
- package/build/legacy/chunk-4QZDOMDG.js.map +0 -1
- package/build/legacy/index.cjs +0 -29
- package/build/legacy/index.cjs.map +0 -1
- package/build/legacy/index.d.cts +0 -171
- package/build/legacy/index.d.ts +0 -171
- package/build/legacy/index.js +0 -5
- package/build/legacy/index.js.map +0 -1
- package/build/legacy/utils.cjs +0 -98
- package/build/legacy/utils.cjs.map +0 -1
- package/build/legacy/utils.d.cts +0 -32
- package/build/legacy/utils.d.ts +0 -32
- package/build/legacy/utils.js +0 -73
- package/build/legacy/utils.js.map +0 -1
- package/build/modern/FieldApi.cjs +0 -238
- package/build/modern/FieldApi.cjs.map +0 -1
- package/build/modern/FieldApi.d.cts +0 -3
- package/build/modern/FieldApi.d.ts +0 -3
- package/build/modern/FieldApi.js +0 -213
- package/build/modern/FieldApi.js.map +0 -1
- package/build/modern/FormApi.cjs +0 -249
- package/build/modern/FormApi.cjs.map +0 -1
- package/build/modern/FormApi.d.cts +0 -3
- package/build/modern/FormApi.d.ts +0 -3
- package/build/modern/FormApi.js +0 -224
- package/build/modern/FormApi.js.map +0 -1
- package/build/modern/index.cjs +0 -29
- package/build/modern/index.cjs.map +0 -1
- package/build/modern/index.d.cts +0 -171
- package/build/modern/index.d.ts +0 -171
- package/build/modern/index.js +0 -5
- package/build/modern/index.js.map +0 -1
- package/build/modern/utils.cjs +0 -98
- package/build/modern/utils.cjs.map +0 -1
- package/build/modern/utils.d.cts +0 -32
- package/build/modern/utils.d.ts +0 -32
- package/build/modern/utils.js +0 -71
- package/build/modern/utils.js.map +0 -1
package/build/legacy/FormApi.cjs
DELETED
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// src/FormApi.ts
|
|
21
|
-
var FormApi_exports = {};
|
|
22
|
-
__export(FormApi_exports, {
|
|
23
|
-
FormApi: () => FormApi
|
|
24
|
-
});
|
|
25
|
-
module.exports = __toCommonJS(FormApi_exports);
|
|
26
|
-
var import_store = require("@tanstack/store");
|
|
27
|
-
var import_utils = require("./utils.cjs");
|
|
28
|
-
function getDefaultFormState(defaultState) {
|
|
29
|
-
return {
|
|
30
|
-
values: defaultState.values ?? {},
|
|
31
|
-
fieldMeta: defaultState.fieldMeta ?? {},
|
|
32
|
-
canSubmit: defaultState.canSubmit ?? true,
|
|
33
|
-
isFieldsValid: defaultState.isFieldsValid ?? false,
|
|
34
|
-
isFieldsValidating: defaultState.isFieldsValidating ?? false,
|
|
35
|
-
isFormValid: defaultState.isFormValid ?? false,
|
|
36
|
-
isFormValidating: defaultState.isFormValidating ?? false,
|
|
37
|
-
isSubmitted: defaultState.isSubmitted ?? false,
|
|
38
|
-
isSubmitting: defaultState.isSubmitting ?? false,
|
|
39
|
-
isTouched: defaultState.isTouched ?? false,
|
|
40
|
-
isValid: defaultState.isValid ?? false,
|
|
41
|
-
isValidating: defaultState.isValidating ?? false,
|
|
42
|
-
submissionAttempts: defaultState.submissionAttempts ?? 0,
|
|
43
|
-
formValidationCount: defaultState.formValidationCount ?? 0
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
var FormApi = class {
|
|
47
|
-
constructor(opts) {
|
|
48
|
-
// // This carries the context for nested fields
|
|
49
|
-
this.options = {};
|
|
50
|
-
this.fieldInfo = {};
|
|
51
|
-
this.validationMeta = {};
|
|
52
|
-
this.update = (options) => {
|
|
53
|
-
if (!options)
|
|
54
|
-
return;
|
|
55
|
-
this.store.batch(() => {
|
|
56
|
-
const shouldUpdateValues = options.defaultValues && options.defaultValues !== this.options.defaultValues && !this.state.isTouched;
|
|
57
|
-
const shouldUpdateState = options.defaultState !== this.options.defaultState && !this.state.isTouched;
|
|
58
|
-
this.store.setState(
|
|
59
|
-
() => getDefaultFormState(
|
|
60
|
-
Object.assign(
|
|
61
|
-
{},
|
|
62
|
-
this.state,
|
|
63
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
64
|
-
shouldUpdateState ? options.defaultState : {},
|
|
65
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
66
|
-
shouldUpdateValues ? {
|
|
67
|
-
values: options.defaultValues
|
|
68
|
-
} : {}
|
|
69
|
-
)
|
|
70
|
-
)
|
|
71
|
-
);
|
|
72
|
-
});
|
|
73
|
-
this.options = options;
|
|
74
|
-
};
|
|
75
|
-
this.reset = () => this.store.setState(
|
|
76
|
-
() => {
|
|
77
|
-
var _a;
|
|
78
|
-
return getDefaultFormState({
|
|
79
|
-
...this.options.defaultState,
|
|
80
|
-
values: this.options.defaultValues ?? ((_a = this.options.defaultState) == null ? void 0 : _a.values)
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
);
|
|
84
|
-
this.validateAllFields = async (cause) => {
|
|
85
|
-
const fieldValidationPromises = [];
|
|
86
|
-
this.store.batch(() => {
|
|
87
|
-
void Object.values(this.fieldInfo).forEach(
|
|
88
|
-
(field) => {
|
|
89
|
-
Object.values(field.instances).forEach((instance) => {
|
|
90
|
-
if (!instance.state.meta.isTouched) {
|
|
91
|
-
instance.setMeta((prev) => ({ ...prev, isTouched: true }));
|
|
92
|
-
fieldValidationPromises.push(
|
|
93
|
-
Promise.resolve().then(() => instance.validate(cause))
|
|
94
|
-
);
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
);
|
|
99
|
-
});
|
|
100
|
-
return Promise.all(fieldValidationPromises);
|
|
101
|
-
};
|
|
102
|
-
this.handleSubmit = async () => {
|
|
103
|
-
var _a, _b, _c, _d, _e, _f;
|
|
104
|
-
this.store.setState((old) => ({
|
|
105
|
-
...old,
|
|
106
|
-
// Submission attempts mark the form as not submitted
|
|
107
|
-
isSubmitted: false,
|
|
108
|
-
// Count submission attempts
|
|
109
|
-
submissionAttempts: old.submissionAttempts + 1
|
|
110
|
-
}));
|
|
111
|
-
if (!this.state.canSubmit)
|
|
112
|
-
return;
|
|
113
|
-
this.store.setState((d) => ({ ...d, isSubmitting: true }));
|
|
114
|
-
const done = () => {
|
|
115
|
-
this.store.setState((prev) => ({ ...prev, isSubmitting: false }));
|
|
116
|
-
};
|
|
117
|
-
await this.validateAllFields("submit");
|
|
118
|
-
if (!this.state.isFieldsValid) {
|
|
119
|
-
done();
|
|
120
|
-
(_b = (_a = this.options).onSubmitInvalid) == null ? void 0 : _b.call(_a, this.state.values, this);
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
if (!this.state.isValid) {
|
|
124
|
-
done();
|
|
125
|
-
(_d = (_c = this.options).onSubmitInvalid) == null ? void 0 : _d.call(_c, this.state.values, this);
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
try {
|
|
129
|
-
await ((_f = (_e = this.options).onSubmit) == null ? void 0 : _f.call(_e, this.state.values, this));
|
|
130
|
-
this.store.batch(() => {
|
|
131
|
-
this.store.setState((prev) => ({ ...prev, isSubmitted: true }));
|
|
132
|
-
done();
|
|
133
|
-
});
|
|
134
|
-
} catch (err) {
|
|
135
|
-
done();
|
|
136
|
-
throw err;
|
|
137
|
-
}
|
|
138
|
-
};
|
|
139
|
-
this.getFieldValue = (field) => (0, import_utils.getBy)(this.state.values, field);
|
|
140
|
-
this.getFieldMeta = (field) => {
|
|
141
|
-
return this.state.fieldMeta[field];
|
|
142
|
-
};
|
|
143
|
-
this.getFieldInfo = (field) => {
|
|
144
|
-
var _a;
|
|
145
|
-
return (_a = this.fieldInfo)[field] || (_a[field] = {
|
|
146
|
-
instances: {}
|
|
147
|
-
});
|
|
148
|
-
};
|
|
149
|
-
this.setFieldMeta = (field, updater) => {
|
|
150
|
-
this.store.setState((prev) => {
|
|
151
|
-
return {
|
|
152
|
-
...prev,
|
|
153
|
-
fieldMeta: {
|
|
154
|
-
...prev.fieldMeta,
|
|
155
|
-
[field]: (0, import_utils.functionalUpdate)(updater, prev.fieldMeta[field])
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
});
|
|
159
|
-
};
|
|
160
|
-
this.setFieldValue = (field, updater, opts) => {
|
|
161
|
-
const touch = opts == null ? void 0 : opts.touch;
|
|
162
|
-
this.store.batch(() => {
|
|
163
|
-
if (touch) {
|
|
164
|
-
this.setFieldMeta(field, (prev) => ({
|
|
165
|
-
...prev,
|
|
166
|
-
isTouched: true
|
|
167
|
-
}));
|
|
168
|
-
}
|
|
169
|
-
this.store.setState((prev) => {
|
|
170
|
-
return {
|
|
171
|
-
...prev,
|
|
172
|
-
values: (0, import_utils.setBy)(prev.values, field, updater)
|
|
173
|
-
};
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
};
|
|
177
|
-
this.pushFieldValue = (field, value, opts) => {
|
|
178
|
-
return this.setFieldValue(
|
|
179
|
-
field,
|
|
180
|
-
(prev) => [...Array.isArray(prev) ? prev : [], value],
|
|
181
|
-
opts
|
|
182
|
-
);
|
|
183
|
-
};
|
|
184
|
-
this.insertFieldValue = (field, index, value, opts) => {
|
|
185
|
-
this.setFieldValue(
|
|
186
|
-
field,
|
|
187
|
-
(prev) => {
|
|
188
|
-
return prev.map(
|
|
189
|
-
(d, i) => i === index ? value : d
|
|
190
|
-
);
|
|
191
|
-
},
|
|
192
|
-
opts
|
|
193
|
-
);
|
|
194
|
-
};
|
|
195
|
-
this.removeFieldValue = (field, index, opts) => {
|
|
196
|
-
this.setFieldValue(
|
|
197
|
-
field,
|
|
198
|
-
(prev) => {
|
|
199
|
-
return prev.filter(
|
|
200
|
-
(_d, i) => i !== index
|
|
201
|
-
);
|
|
202
|
-
},
|
|
203
|
-
opts
|
|
204
|
-
);
|
|
205
|
-
};
|
|
206
|
-
this.swapFieldValues = (field, index1, index2) => {
|
|
207
|
-
this.setFieldValue(field, (prev) => {
|
|
208
|
-
const prev1 = prev[index1];
|
|
209
|
-
const prev2 = prev[index2];
|
|
210
|
-
return (0, import_utils.setBy)((0, import_utils.setBy)(prev, `${index1}`, prev2), `${index2}`, prev1);
|
|
211
|
-
});
|
|
212
|
-
};
|
|
213
|
-
var _a;
|
|
214
|
-
this.store = new import_store.Store(
|
|
215
|
-
getDefaultFormState({
|
|
216
|
-
...opts == null ? void 0 : opts.defaultState,
|
|
217
|
-
values: (opts == null ? void 0 : opts.defaultValues) ?? ((_a = opts == null ? void 0 : opts.defaultState) == null ? void 0 : _a.values),
|
|
218
|
-
isFormValid: true
|
|
219
|
-
}),
|
|
220
|
-
{
|
|
221
|
-
onUpdate: () => {
|
|
222
|
-
let { state } = this.store;
|
|
223
|
-
const fieldMetaValues = Object.values(state.fieldMeta);
|
|
224
|
-
const isFieldsValidating = fieldMetaValues.some(
|
|
225
|
-
(field) => field == null ? void 0 : field.isValidating
|
|
226
|
-
);
|
|
227
|
-
const isFieldsValid = !fieldMetaValues.some((field) => field == null ? void 0 : field.error);
|
|
228
|
-
const isTouched = fieldMetaValues.some((field) => field == null ? void 0 : field.isTouched);
|
|
229
|
-
const isValidating = isFieldsValidating || state.isFormValidating;
|
|
230
|
-
const isFormValid = !state.formError;
|
|
231
|
-
const isValid = isFieldsValid && isFormValid;
|
|
232
|
-
const canSubmit = state.submissionAttempts === 0 && !isTouched || !isValidating && !state.isSubmitting && isValid;
|
|
233
|
-
state = {
|
|
234
|
-
...state,
|
|
235
|
-
isFieldsValidating,
|
|
236
|
-
isFieldsValid,
|
|
237
|
-
isFormValid,
|
|
238
|
-
isValid,
|
|
239
|
-
canSubmit,
|
|
240
|
-
isTouched
|
|
241
|
-
};
|
|
242
|
-
this.store.state = state;
|
|
243
|
-
this.state = state;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
);
|
|
247
|
-
this.state = this.store.state;
|
|
248
|
-
this.update(opts || {});
|
|
249
|
-
}
|
|
250
|
-
};
|
|
251
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
252
|
-
0 && (module.exports = {
|
|
253
|
-
FormApi
|
|
254
|
-
});
|
|
255
|
-
//# sourceMappingURL=FormApi.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/FormApi.ts"],"sourcesContent":["import { Store } from '@tanstack/store'\n//\nimport type { DeepKeys, DeepValue, Updater } from './utils'\nimport { functionalUpdate, getBy, setBy } from './utils'\nimport type { FieldApi, FieldMeta, ValidationCause } from './FieldApi'\n\nexport type FormOptions<TData> = {\n defaultValues?: TData\n defaultState?: Partial<FormState<TData>>\n asyncDebounceMs?: number\n onMount?: (values: TData, formApi: FormApi<TData>) => ValidationError\n onMountAsync?: (\n values: TData,\n formApi: FormApi<TData>,\n ) => ValidationError | Promise<ValidationError>\n onMountAsyncDebounceMs?: number\n onChange?: (values: TData, formApi: FormApi<TData>) => ValidationError\n onChangeAsync?: (\n values: TData,\n formApi: FormApi<TData>,\n ) => ValidationError | Promise<ValidationError>\n onChangeAsyncDebounceMs?: number\n onBlur?: (values: TData, formApi: FormApi<TData>) => ValidationError\n onBlurAsync?: (\n values: TData,\n formApi: FormApi<TData>,\n ) => ValidationError | Promise<ValidationError>\n onBlurAsyncDebounceMs?: number\n onSubmit?: (values: TData, formApi: FormApi<TData>) => any | Promise<any>\n onSubmitInvalid?: (values: TData, formApi: FormApi<TData>) => void\n}\n\nexport type FieldInfo<TFormData> = {\n instances: Record<string, FieldApi<any, TFormData>>\n} & ValidationMeta\n\nexport type ValidationMeta = {\n validationCount?: number\n validationAsyncCount?: number\n validationPromise?: Promise<ValidationError>\n validationResolve?: (error: ValidationError) => void\n validationReject?: (error: unknown) => void\n}\n\nexport type ValidationError = undefined | false | null | string\n\nexport type FormState<TData> = {\n values: TData\n // Form Validation\n isFormValidating: boolean\n formValidationCount: number\n isFormValid: boolean\n formError?: ValidationError\n // Fields\n fieldMeta: Record<DeepKeys<TData>, FieldMeta>\n isFieldsValidating: boolean\n isFieldsValid: boolean\n isSubmitting: boolean\n // General\n isTouched: boolean\n isSubmitted: boolean\n isValidating: boolean\n isValid: boolean\n canSubmit: boolean\n submissionAttempts: number\n}\n\nfunction getDefaultFormState<TData>(\n defaultState: Partial<FormState<TData>>,\n): FormState<TData> {\n return {\n values: defaultState.values ?? ({} as never),\n fieldMeta: defaultState.fieldMeta ?? ({} as never),\n canSubmit: defaultState.canSubmit ?? true,\n isFieldsValid: defaultState.isFieldsValid ?? false,\n isFieldsValidating: defaultState.isFieldsValidating ?? false,\n isFormValid: defaultState.isFormValid ?? false,\n isFormValidating: defaultState.isFormValidating ?? false,\n isSubmitted: defaultState.isSubmitted ?? false,\n isSubmitting: defaultState.isSubmitting ?? false,\n isTouched: defaultState.isTouched ?? false,\n isValid: defaultState.isValid ?? false,\n isValidating: defaultState.isValidating ?? false,\n submissionAttempts: defaultState.submissionAttempts ?? 0,\n formValidationCount: defaultState.formValidationCount ?? 0,\n }\n}\n\nexport class FormApi<TFormData> {\n // // This carries the context for nested fields\n options: FormOptions<TFormData> = {}\n store!: Store<FormState<TFormData>>\n // Do not use __state directly, as it is not reactive.\n // Please use form.useStore() utility to subscribe to state\n state!: FormState<TFormData>\n fieldInfo: Record<DeepKeys<TFormData>, FieldInfo<TFormData>> = {} as any\n fieldName?: string\n validationMeta: ValidationMeta = {}\n\n constructor(opts?: FormOptions<TFormData>) {\n this.store = new Store<FormState<TFormData>>(\n getDefaultFormState({\n ...opts?.defaultState,\n values: opts?.defaultValues ?? opts?.defaultState?.values,\n isFormValid: true,\n }),\n {\n onUpdate: () => {\n let { state } = this.store\n // Computed state\n const fieldMetaValues = Object.values(state.fieldMeta) as (\n | FieldMeta\n | undefined\n )[]\n\n const isFieldsValidating = fieldMetaValues.some(\n (field) => field?.isValidating,\n )\n\n const isFieldsValid = !fieldMetaValues.some((field) => field?.error)\n\n const isTouched = fieldMetaValues.some((field) => field?.isTouched)\n\n const isValidating = isFieldsValidating || state.isFormValidating\n const isFormValid = !state.formError\n const isValid = isFieldsValid && isFormValid\n const canSubmit =\n (state.submissionAttempts === 0 && !isTouched) ||\n (!isValidating && !state.isSubmitting && isValid)\n\n state = {\n ...state,\n isFieldsValidating,\n isFieldsValid,\n isFormValid,\n isValid,\n canSubmit,\n isTouched,\n }\n\n this.store.state = state\n this.state = state\n },\n },\n )\n\n this.state = this.store.state\n\n this.update(opts || {})\n }\n\n update = (options?: FormOptions<TFormData>) => {\n if (!options) return\n\n this.store.batch(() => {\n const shouldUpdateValues =\n options.defaultValues &&\n options.defaultValues !== this.options.defaultValues &&\n !this.state.isTouched\n\n const shouldUpdateState =\n options.defaultState !== this.options.defaultState &&\n !this.state.isTouched\n\n this.store.setState(() =>\n getDefaultFormState(\n Object.assign(\n {},\n this.state,\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n shouldUpdateState ? options.defaultState : {},\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n shouldUpdateValues\n ? {\n values: options.defaultValues,\n }\n : {},\n ),\n ),\n )\n })\n\n this.options = options\n }\n\n reset = () =>\n this.store.setState(() =>\n getDefaultFormState({\n ...this.options.defaultState,\n values: this.options.defaultValues ?? this.options.defaultState?.values,\n }),\n )\n\n validateAllFields = async (cause: ValidationCause) => {\n const fieldValidationPromises: Promise<ValidationError>[] = [] as any\n\n this.store.batch(() => {\n void (Object.values(this.fieldInfo) as FieldInfo<any>[]).forEach(\n (field) => {\n Object.values(field.instances).forEach((instance) => {\n // If any fields are not touched\n if (!instance.state.meta.isTouched) {\n // Mark them as touched\n instance.setMeta((prev) => ({ ...prev, isTouched: true }))\n // Validate the field\n fieldValidationPromises.push(\n Promise.resolve().then(() => instance.validate(cause)),\n )\n }\n })\n },\n )\n })\n\n return Promise.all(fieldValidationPromises)\n }\n\n handleSubmit = async () => {\n // Check to see that the form and all fields have been touched\n // If they have not, touch them all and run validation\n // Run form validation\n // Submit the form\n\n this.store.setState((old) => ({\n ...old,\n // Submission attempts mark the form as not submitted\n isSubmitted: false,\n // Count submission attempts\n submissionAttempts: old.submissionAttempts + 1,\n }))\n\n // Don't let invalid forms submit\n if (!this.state.canSubmit) return\n\n this.store.setState((d) => ({ ...d, isSubmitting: true }))\n\n const done = () => {\n this.store.setState((prev) => ({ ...prev, isSubmitting: false }))\n }\n\n // Validate all fields\n await this.validateAllFields('submit')\n\n // Fields are invalid, do not submit\n if (!this.state.isFieldsValid) {\n done()\n this.options.onSubmitInvalid?.(this.state.values, this)\n return\n }\n\n // Run validation for the form\n // await this.validateForm()\n\n if (!this.state.isValid) {\n done()\n this.options.onSubmitInvalid?.(this.state.values, this)\n return\n }\n\n try {\n // Run the submit code\n await this.options.onSubmit?.(this.state.values, this)\n\n this.store.batch(() => {\n this.store.setState((prev) => ({ ...prev, isSubmitted: true }))\n done()\n })\n } catch (err) {\n done()\n throw err\n }\n }\n\n getFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n ): DeepValue<TFormData, TField> => getBy(this.state.values, field)\n\n getFieldMeta = <TField extends DeepKeys<TFormData>>(\n field: TField,\n ): FieldMeta | undefined => {\n return this.state.fieldMeta[field]\n }\n\n getFieldInfo = <TField extends DeepKeys<TFormData>>(field: TField) => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return (this.fieldInfo[field] ||= {\n instances: {},\n })\n }\n\n setFieldMeta = <TField extends DeepKeys<TFormData>>(\n field: TField,\n updater: Updater<FieldMeta>,\n ) => {\n this.store.setState((prev) => {\n return {\n ...prev,\n fieldMeta: {\n ...prev.fieldMeta,\n [field]: functionalUpdate(updater, prev.fieldMeta[field]),\n },\n }\n })\n }\n\n setFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n updater: Updater<DeepValue<TFormData, TField>>,\n opts?: { touch?: boolean },\n ) => {\n const touch = opts?.touch\n\n this.store.batch(() => {\n if (touch) {\n this.setFieldMeta(field, (prev) => ({\n ...prev,\n isTouched: true,\n }))\n }\n\n this.store.setState((prev) => {\n return {\n ...prev,\n values: setBy(prev.values, field, updater),\n }\n })\n })\n }\n\n pushFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n value: DeepValue<TFormData, TField>[number],\n opts?: { touch?: boolean },\n ) => {\n return this.setFieldValue(\n field,\n (prev) => [...(Array.isArray(prev) ? prev : []), value] as any,\n opts,\n )\n }\n\n insertFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n index: number,\n value: DeepValue<TFormData, TField>[number],\n opts?: { touch?: boolean },\n ) => {\n this.setFieldValue(\n field,\n (prev) => {\n return (prev as DeepValue<TFormData, TField>[]).map((d, i) =>\n i === index ? value : d,\n ) as any\n },\n opts,\n )\n }\n\n removeFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n index: number,\n opts?: { touch?: boolean },\n ) => {\n this.setFieldValue(\n field,\n (prev) => {\n return (prev as DeepValue<TFormData, TField>[]).filter(\n (_d, i) => i !== index,\n ) as any\n },\n opts,\n )\n }\n\n swapFieldValues = <TField extends DeepKeys<TFormData>>(\n field: TField,\n index1: number,\n index2: number,\n ) => {\n this.setFieldValue(field, (prev: any) => {\n const prev1 = prev[index1]!\n const prev2 = prev[index2]!\n return setBy(setBy(prev, `${index1}`, prev2), `${index2}`, prev1)\n })\n }\n}\n"],"mappings":"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","names":[]}
|
package/build/legacy/FormApi.js
DELETED
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
import "./chunk-4QZDOMDG.js";
|
|
2
|
-
|
|
3
|
-
// src/FormApi.ts
|
|
4
|
-
import { Store } from "@tanstack/store";
|
|
5
|
-
import { functionalUpdate, getBy, setBy } from "./utils.js";
|
|
6
|
-
function getDefaultFormState(defaultState) {
|
|
7
|
-
return {
|
|
8
|
-
values: defaultState.values ?? {},
|
|
9
|
-
fieldMeta: defaultState.fieldMeta ?? {},
|
|
10
|
-
canSubmit: defaultState.canSubmit ?? true,
|
|
11
|
-
isFieldsValid: defaultState.isFieldsValid ?? false,
|
|
12
|
-
isFieldsValidating: defaultState.isFieldsValidating ?? false,
|
|
13
|
-
isFormValid: defaultState.isFormValid ?? false,
|
|
14
|
-
isFormValidating: defaultState.isFormValidating ?? false,
|
|
15
|
-
isSubmitted: defaultState.isSubmitted ?? false,
|
|
16
|
-
isSubmitting: defaultState.isSubmitting ?? false,
|
|
17
|
-
isTouched: defaultState.isTouched ?? false,
|
|
18
|
-
isValid: defaultState.isValid ?? false,
|
|
19
|
-
isValidating: defaultState.isValidating ?? false,
|
|
20
|
-
submissionAttempts: defaultState.submissionAttempts ?? 0,
|
|
21
|
-
formValidationCount: defaultState.formValidationCount ?? 0
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
var FormApi = class {
|
|
25
|
-
constructor(opts) {
|
|
26
|
-
// // This carries the context for nested fields
|
|
27
|
-
this.options = {};
|
|
28
|
-
this.fieldInfo = {};
|
|
29
|
-
this.validationMeta = {};
|
|
30
|
-
this.update = (options) => {
|
|
31
|
-
if (!options)
|
|
32
|
-
return;
|
|
33
|
-
this.store.batch(() => {
|
|
34
|
-
const shouldUpdateValues = options.defaultValues && options.defaultValues !== this.options.defaultValues && !this.state.isTouched;
|
|
35
|
-
const shouldUpdateState = options.defaultState !== this.options.defaultState && !this.state.isTouched;
|
|
36
|
-
this.store.setState(
|
|
37
|
-
() => getDefaultFormState(
|
|
38
|
-
Object.assign(
|
|
39
|
-
{},
|
|
40
|
-
this.state,
|
|
41
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
42
|
-
shouldUpdateState ? options.defaultState : {},
|
|
43
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
44
|
-
shouldUpdateValues ? {
|
|
45
|
-
values: options.defaultValues
|
|
46
|
-
} : {}
|
|
47
|
-
)
|
|
48
|
-
)
|
|
49
|
-
);
|
|
50
|
-
});
|
|
51
|
-
this.options = options;
|
|
52
|
-
};
|
|
53
|
-
this.reset = () => this.store.setState(
|
|
54
|
-
() => {
|
|
55
|
-
var _a;
|
|
56
|
-
return getDefaultFormState({
|
|
57
|
-
...this.options.defaultState,
|
|
58
|
-
values: this.options.defaultValues ?? ((_a = this.options.defaultState) == null ? void 0 : _a.values)
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
);
|
|
62
|
-
this.validateAllFields = async (cause) => {
|
|
63
|
-
const fieldValidationPromises = [];
|
|
64
|
-
this.store.batch(() => {
|
|
65
|
-
void Object.values(this.fieldInfo).forEach(
|
|
66
|
-
(field) => {
|
|
67
|
-
Object.values(field.instances).forEach((instance) => {
|
|
68
|
-
if (!instance.state.meta.isTouched) {
|
|
69
|
-
instance.setMeta((prev) => ({ ...prev, isTouched: true }));
|
|
70
|
-
fieldValidationPromises.push(
|
|
71
|
-
Promise.resolve().then(() => instance.validate(cause))
|
|
72
|
-
);
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
);
|
|
77
|
-
});
|
|
78
|
-
return Promise.all(fieldValidationPromises);
|
|
79
|
-
};
|
|
80
|
-
this.handleSubmit = async () => {
|
|
81
|
-
var _a, _b, _c, _d, _e, _f;
|
|
82
|
-
this.store.setState((old) => ({
|
|
83
|
-
...old,
|
|
84
|
-
// Submission attempts mark the form as not submitted
|
|
85
|
-
isSubmitted: false,
|
|
86
|
-
// Count submission attempts
|
|
87
|
-
submissionAttempts: old.submissionAttempts + 1
|
|
88
|
-
}));
|
|
89
|
-
if (!this.state.canSubmit)
|
|
90
|
-
return;
|
|
91
|
-
this.store.setState((d) => ({ ...d, isSubmitting: true }));
|
|
92
|
-
const done = () => {
|
|
93
|
-
this.store.setState((prev) => ({ ...prev, isSubmitting: false }));
|
|
94
|
-
};
|
|
95
|
-
await this.validateAllFields("submit");
|
|
96
|
-
if (!this.state.isFieldsValid) {
|
|
97
|
-
done();
|
|
98
|
-
(_b = (_a = this.options).onSubmitInvalid) == null ? void 0 : _b.call(_a, this.state.values, this);
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
if (!this.state.isValid) {
|
|
102
|
-
done();
|
|
103
|
-
(_d = (_c = this.options).onSubmitInvalid) == null ? void 0 : _d.call(_c, this.state.values, this);
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
try {
|
|
107
|
-
await ((_f = (_e = this.options).onSubmit) == null ? void 0 : _f.call(_e, this.state.values, this));
|
|
108
|
-
this.store.batch(() => {
|
|
109
|
-
this.store.setState((prev) => ({ ...prev, isSubmitted: true }));
|
|
110
|
-
done();
|
|
111
|
-
});
|
|
112
|
-
} catch (err) {
|
|
113
|
-
done();
|
|
114
|
-
throw err;
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
this.getFieldValue = (field) => getBy(this.state.values, field);
|
|
118
|
-
this.getFieldMeta = (field) => {
|
|
119
|
-
return this.state.fieldMeta[field];
|
|
120
|
-
};
|
|
121
|
-
this.getFieldInfo = (field) => {
|
|
122
|
-
var _a;
|
|
123
|
-
return (_a = this.fieldInfo)[field] || (_a[field] = {
|
|
124
|
-
instances: {}
|
|
125
|
-
});
|
|
126
|
-
};
|
|
127
|
-
this.setFieldMeta = (field, updater) => {
|
|
128
|
-
this.store.setState((prev) => {
|
|
129
|
-
return {
|
|
130
|
-
...prev,
|
|
131
|
-
fieldMeta: {
|
|
132
|
-
...prev.fieldMeta,
|
|
133
|
-
[field]: functionalUpdate(updater, prev.fieldMeta[field])
|
|
134
|
-
}
|
|
135
|
-
};
|
|
136
|
-
});
|
|
137
|
-
};
|
|
138
|
-
this.setFieldValue = (field, updater, opts) => {
|
|
139
|
-
const touch = opts == null ? void 0 : opts.touch;
|
|
140
|
-
this.store.batch(() => {
|
|
141
|
-
if (touch) {
|
|
142
|
-
this.setFieldMeta(field, (prev) => ({
|
|
143
|
-
...prev,
|
|
144
|
-
isTouched: true
|
|
145
|
-
}));
|
|
146
|
-
}
|
|
147
|
-
this.store.setState((prev) => {
|
|
148
|
-
return {
|
|
149
|
-
...prev,
|
|
150
|
-
values: setBy(prev.values, field, updater)
|
|
151
|
-
};
|
|
152
|
-
});
|
|
153
|
-
});
|
|
154
|
-
};
|
|
155
|
-
this.pushFieldValue = (field, value, opts) => {
|
|
156
|
-
return this.setFieldValue(
|
|
157
|
-
field,
|
|
158
|
-
(prev) => [...Array.isArray(prev) ? prev : [], value],
|
|
159
|
-
opts
|
|
160
|
-
);
|
|
161
|
-
};
|
|
162
|
-
this.insertFieldValue = (field, index, value, opts) => {
|
|
163
|
-
this.setFieldValue(
|
|
164
|
-
field,
|
|
165
|
-
(prev) => {
|
|
166
|
-
return prev.map(
|
|
167
|
-
(d, i) => i === index ? value : d
|
|
168
|
-
);
|
|
169
|
-
},
|
|
170
|
-
opts
|
|
171
|
-
);
|
|
172
|
-
};
|
|
173
|
-
this.removeFieldValue = (field, index, opts) => {
|
|
174
|
-
this.setFieldValue(
|
|
175
|
-
field,
|
|
176
|
-
(prev) => {
|
|
177
|
-
return prev.filter(
|
|
178
|
-
(_d, i) => i !== index
|
|
179
|
-
);
|
|
180
|
-
},
|
|
181
|
-
opts
|
|
182
|
-
);
|
|
183
|
-
};
|
|
184
|
-
this.swapFieldValues = (field, index1, index2) => {
|
|
185
|
-
this.setFieldValue(field, (prev) => {
|
|
186
|
-
const prev1 = prev[index1];
|
|
187
|
-
const prev2 = prev[index2];
|
|
188
|
-
return setBy(setBy(prev, `${index1}`, prev2), `${index2}`, prev1);
|
|
189
|
-
});
|
|
190
|
-
};
|
|
191
|
-
var _a;
|
|
192
|
-
this.store = new Store(
|
|
193
|
-
getDefaultFormState({
|
|
194
|
-
...opts == null ? void 0 : opts.defaultState,
|
|
195
|
-
values: (opts == null ? void 0 : opts.defaultValues) ?? ((_a = opts == null ? void 0 : opts.defaultState) == null ? void 0 : _a.values),
|
|
196
|
-
isFormValid: true
|
|
197
|
-
}),
|
|
198
|
-
{
|
|
199
|
-
onUpdate: () => {
|
|
200
|
-
let { state } = this.store;
|
|
201
|
-
const fieldMetaValues = Object.values(state.fieldMeta);
|
|
202
|
-
const isFieldsValidating = fieldMetaValues.some(
|
|
203
|
-
(field) => field == null ? void 0 : field.isValidating
|
|
204
|
-
);
|
|
205
|
-
const isFieldsValid = !fieldMetaValues.some((field) => field == null ? void 0 : field.error);
|
|
206
|
-
const isTouched = fieldMetaValues.some((field) => field == null ? void 0 : field.isTouched);
|
|
207
|
-
const isValidating = isFieldsValidating || state.isFormValidating;
|
|
208
|
-
const isFormValid = !state.formError;
|
|
209
|
-
const isValid = isFieldsValid && isFormValid;
|
|
210
|
-
const canSubmit = state.submissionAttempts === 0 && !isTouched || !isValidating && !state.isSubmitting && isValid;
|
|
211
|
-
state = {
|
|
212
|
-
...state,
|
|
213
|
-
isFieldsValidating,
|
|
214
|
-
isFieldsValid,
|
|
215
|
-
isFormValid,
|
|
216
|
-
isValid,
|
|
217
|
-
canSubmit,
|
|
218
|
-
isTouched
|
|
219
|
-
};
|
|
220
|
-
this.store.state = state;
|
|
221
|
-
this.state = state;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
);
|
|
225
|
-
this.state = this.store.state;
|
|
226
|
-
this.update(opts || {});
|
|
227
|
-
}
|
|
228
|
-
};
|
|
229
|
-
export {
|
|
230
|
-
FormApi
|
|
231
|
-
};
|
|
232
|
-
//# sourceMappingURL=FormApi.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/FormApi.ts"],"sourcesContent":["import { Store } from '@tanstack/store'\n//\nimport type { DeepKeys, DeepValue, Updater } from './utils'\nimport { functionalUpdate, getBy, setBy } from './utils'\nimport type { FieldApi, FieldMeta, ValidationCause } from './FieldApi'\n\nexport type FormOptions<TData> = {\n defaultValues?: TData\n defaultState?: Partial<FormState<TData>>\n asyncDebounceMs?: number\n onMount?: (values: TData, formApi: FormApi<TData>) => ValidationError\n onMountAsync?: (\n values: TData,\n formApi: FormApi<TData>,\n ) => ValidationError | Promise<ValidationError>\n onMountAsyncDebounceMs?: number\n onChange?: (values: TData, formApi: FormApi<TData>) => ValidationError\n onChangeAsync?: (\n values: TData,\n formApi: FormApi<TData>,\n ) => ValidationError | Promise<ValidationError>\n onChangeAsyncDebounceMs?: number\n onBlur?: (values: TData, formApi: FormApi<TData>) => ValidationError\n onBlurAsync?: (\n values: TData,\n formApi: FormApi<TData>,\n ) => ValidationError | Promise<ValidationError>\n onBlurAsyncDebounceMs?: number\n onSubmit?: (values: TData, formApi: FormApi<TData>) => any | Promise<any>\n onSubmitInvalid?: (values: TData, formApi: FormApi<TData>) => void\n}\n\nexport type FieldInfo<TFormData> = {\n instances: Record<string, FieldApi<any, TFormData>>\n} & ValidationMeta\n\nexport type ValidationMeta = {\n validationCount?: number\n validationAsyncCount?: number\n validationPromise?: Promise<ValidationError>\n validationResolve?: (error: ValidationError) => void\n validationReject?: (error: unknown) => void\n}\n\nexport type ValidationError = undefined | false | null | string\n\nexport type FormState<TData> = {\n values: TData\n // Form Validation\n isFormValidating: boolean\n formValidationCount: number\n isFormValid: boolean\n formError?: ValidationError\n // Fields\n fieldMeta: Record<DeepKeys<TData>, FieldMeta>\n isFieldsValidating: boolean\n isFieldsValid: boolean\n isSubmitting: boolean\n // General\n isTouched: boolean\n isSubmitted: boolean\n isValidating: boolean\n isValid: boolean\n canSubmit: boolean\n submissionAttempts: number\n}\n\nfunction getDefaultFormState<TData>(\n defaultState: Partial<FormState<TData>>,\n): FormState<TData> {\n return {\n values: defaultState.values ?? ({} as never),\n fieldMeta: defaultState.fieldMeta ?? ({} as never),\n canSubmit: defaultState.canSubmit ?? true,\n isFieldsValid: defaultState.isFieldsValid ?? false,\n isFieldsValidating: defaultState.isFieldsValidating ?? false,\n isFormValid: defaultState.isFormValid ?? false,\n isFormValidating: defaultState.isFormValidating ?? false,\n isSubmitted: defaultState.isSubmitted ?? false,\n isSubmitting: defaultState.isSubmitting ?? false,\n isTouched: defaultState.isTouched ?? false,\n isValid: defaultState.isValid ?? false,\n isValidating: defaultState.isValidating ?? false,\n submissionAttempts: defaultState.submissionAttempts ?? 0,\n formValidationCount: defaultState.formValidationCount ?? 0,\n }\n}\n\nexport class FormApi<TFormData> {\n // // This carries the context for nested fields\n options: FormOptions<TFormData> = {}\n store!: Store<FormState<TFormData>>\n // Do not use __state directly, as it is not reactive.\n // Please use form.useStore() utility to subscribe to state\n state!: FormState<TFormData>\n fieldInfo: Record<DeepKeys<TFormData>, FieldInfo<TFormData>> = {} as any\n fieldName?: string\n validationMeta: ValidationMeta = {}\n\n constructor(opts?: FormOptions<TFormData>) {\n this.store = new Store<FormState<TFormData>>(\n getDefaultFormState({\n ...opts?.defaultState,\n values: opts?.defaultValues ?? opts?.defaultState?.values,\n isFormValid: true,\n }),\n {\n onUpdate: () => {\n let { state } = this.store\n // Computed state\n const fieldMetaValues = Object.values(state.fieldMeta) as (\n | FieldMeta\n | undefined\n )[]\n\n const isFieldsValidating = fieldMetaValues.some(\n (field) => field?.isValidating,\n )\n\n const isFieldsValid = !fieldMetaValues.some((field) => field?.error)\n\n const isTouched = fieldMetaValues.some((field) => field?.isTouched)\n\n const isValidating = isFieldsValidating || state.isFormValidating\n const isFormValid = !state.formError\n const isValid = isFieldsValid && isFormValid\n const canSubmit =\n (state.submissionAttempts === 0 && !isTouched) ||\n (!isValidating && !state.isSubmitting && isValid)\n\n state = {\n ...state,\n isFieldsValidating,\n isFieldsValid,\n isFormValid,\n isValid,\n canSubmit,\n isTouched,\n }\n\n this.store.state = state\n this.state = state\n },\n },\n )\n\n this.state = this.store.state\n\n this.update(opts || {})\n }\n\n update = (options?: FormOptions<TFormData>) => {\n if (!options) return\n\n this.store.batch(() => {\n const shouldUpdateValues =\n options.defaultValues &&\n options.defaultValues !== this.options.defaultValues &&\n !this.state.isTouched\n\n const shouldUpdateState =\n options.defaultState !== this.options.defaultState &&\n !this.state.isTouched\n\n this.store.setState(() =>\n getDefaultFormState(\n Object.assign(\n {},\n this.state,\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n shouldUpdateState ? options.defaultState : {},\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n shouldUpdateValues\n ? {\n values: options.defaultValues,\n }\n : {},\n ),\n ),\n )\n })\n\n this.options = options\n }\n\n reset = () =>\n this.store.setState(() =>\n getDefaultFormState({\n ...this.options.defaultState,\n values: this.options.defaultValues ?? this.options.defaultState?.values,\n }),\n )\n\n validateAllFields = async (cause: ValidationCause) => {\n const fieldValidationPromises: Promise<ValidationError>[] = [] as any\n\n this.store.batch(() => {\n void (Object.values(this.fieldInfo) as FieldInfo<any>[]).forEach(\n (field) => {\n Object.values(field.instances).forEach((instance) => {\n // If any fields are not touched\n if (!instance.state.meta.isTouched) {\n // Mark them as touched\n instance.setMeta((prev) => ({ ...prev, isTouched: true }))\n // Validate the field\n fieldValidationPromises.push(\n Promise.resolve().then(() => instance.validate(cause)),\n )\n }\n })\n },\n )\n })\n\n return Promise.all(fieldValidationPromises)\n }\n\n handleSubmit = async () => {\n // Check to see that the form and all fields have been touched\n // If they have not, touch them all and run validation\n // Run form validation\n // Submit the form\n\n this.store.setState((old) => ({\n ...old,\n // Submission attempts mark the form as not submitted\n isSubmitted: false,\n // Count submission attempts\n submissionAttempts: old.submissionAttempts + 1,\n }))\n\n // Don't let invalid forms submit\n if (!this.state.canSubmit) return\n\n this.store.setState((d) => ({ ...d, isSubmitting: true }))\n\n const done = () => {\n this.store.setState((prev) => ({ ...prev, isSubmitting: false }))\n }\n\n // Validate all fields\n await this.validateAllFields('submit')\n\n // Fields are invalid, do not submit\n if (!this.state.isFieldsValid) {\n done()\n this.options.onSubmitInvalid?.(this.state.values, this)\n return\n }\n\n // Run validation for the form\n // await this.validateForm()\n\n if (!this.state.isValid) {\n done()\n this.options.onSubmitInvalid?.(this.state.values, this)\n return\n }\n\n try {\n // Run the submit code\n await this.options.onSubmit?.(this.state.values, this)\n\n this.store.batch(() => {\n this.store.setState((prev) => ({ ...prev, isSubmitted: true }))\n done()\n })\n } catch (err) {\n done()\n throw err\n }\n }\n\n getFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n ): DeepValue<TFormData, TField> => getBy(this.state.values, field)\n\n getFieldMeta = <TField extends DeepKeys<TFormData>>(\n field: TField,\n ): FieldMeta | undefined => {\n return this.state.fieldMeta[field]\n }\n\n getFieldInfo = <TField extends DeepKeys<TFormData>>(field: TField) => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return (this.fieldInfo[field] ||= {\n instances: {},\n })\n }\n\n setFieldMeta = <TField extends DeepKeys<TFormData>>(\n field: TField,\n updater: Updater<FieldMeta>,\n ) => {\n this.store.setState((prev) => {\n return {\n ...prev,\n fieldMeta: {\n ...prev.fieldMeta,\n [field]: functionalUpdate(updater, prev.fieldMeta[field]),\n },\n }\n })\n }\n\n setFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n updater: Updater<DeepValue<TFormData, TField>>,\n opts?: { touch?: boolean },\n ) => {\n const touch = opts?.touch\n\n this.store.batch(() => {\n if (touch) {\n this.setFieldMeta(field, (prev) => ({\n ...prev,\n isTouched: true,\n }))\n }\n\n this.store.setState((prev) => {\n return {\n ...prev,\n values: setBy(prev.values, field, updater),\n }\n })\n })\n }\n\n pushFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n value: DeepValue<TFormData, TField>[number],\n opts?: { touch?: boolean },\n ) => {\n return this.setFieldValue(\n field,\n (prev) => [...(Array.isArray(prev) ? prev : []), value] as any,\n opts,\n )\n }\n\n insertFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n index: number,\n value: DeepValue<TFormData, TField>[number],\n opts?: { touch?: boolean },\n ) => {\n this.setFieldValue(\n field,\n (prev) => {\n return (prev as DeepValue<TFormData, TField>[]).map((d, i) =>\n i === index ? value : d,\n ) as any\n },\n opts,\n )\n }\n\n removeFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n index: number,\n opts?: { touch?: boolean },\n ) => {\n this.setFieldValue(\n field,\n (prev) => {\n return (prev as DeepValue<TFormData, TField>[]).filter(\n (_d, i) => i !== index,\n ) as any\n },\n opts,\n )\n }\n\n swapFieldValues = <TField extends DeepKeys<TFormData>>(\n field: TField,\n index1: number,\n index2: number,\n ) => {\n this.setFieldValue(field, (prev: any) => {\n const prev1 = prev[index1]!\n const prev2 = prev[index2]!\n return setBy(setBy(prev, `${index1}`, prev2), `${index2}`, prev1)\n })\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
var __accessCheck = (obj, member, msg) => {
|
|
2
|
-
if (!member.has(obj))
|
|
3
|
-
throw TypeError("Cannot " + msg);
|
|
4
|
-
};
|
|
5
|
-
var __privateGet = (obj, member, getter) => {
|
|
6
|
-
__accessCheck(obj, member, "read from private field");
|
|
7
|
-
return getter ? getter.call(obj) : member.get(obj);
|
|
8
|
-
};
|
|
9
|
-
var __privateAdd = (obj, member, value) => {
|
|
10
|
-
if (member.has(obj))
|
|
11
|
-
throw TypeError("Cannot add the same private member more than once");
|
|
12
|
-
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export {
|
|
16
|
-
__privateGet,
|
|
17
|
-
__privateAdd
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=chunk-4QZDOMDG.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/build/legacy/index.cjs
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __copyProps = (to, from, except, desc) => {
|
|
7
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
-
for (let key of __getOwnPropNames(from))
|
|
9
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
-
}
|
|
12
|
-
return to;
|
|
13
|
-
};
|
|
14
|
-
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
15
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
16
|
-
|
|
17
|
-
// src/index.ts
|
|
18
|
-
var src_exports = {};
|
|
19
|
-
module.exports = __toCommonJS(src_exports);
|
|
20
|
-
__reExport(src_exports, require("./FormApi.cjs"), module.exports);
|
|
21
|
-
__reExport(src_exports, require("./FieldApi.cjs"), module.exports);
|
|
22
|
-
__reExport(src_exports, require("./utils.cjs"), module.exports);
|
|
23
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
24
|
-
0 && (module.exports = {
|
|
25
|
-
...require("./FormApi.cjs"),
|
|
26
|
-
...require("./FieldApi.cjs"),
|
|
27
|
-
...require("./utils.cjs")
|
|
28
|
-
});
|
|
29
|
-
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export * from './FormApi'\nexport * from './FieldApi'\nexport * from './utils'\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wBAAc,0BAAd;AACA,wBAAc,2BADd;AAEA,wBAAc,wBAFd;","names":[]}
|