Skip to content

Commit 2035cb6

Browse files
committed
[form] Swap ctx and API values in createForm2 result
1 parent f24dcdd commit 2035cb6

File tree

1 file changed

+64
-61
lines changed

1 file changed

+64
-61
lines changed

packages/form/src/form/use-form.svelte.ts

Lines changed: 64 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,8 @@ type Value = SchemaValue | undefined;
140140
export function createForm<T, E>(
141141
options: UseFormOptions<T, E>
142142
): [FormContext, FormAPI<T, E>] {
143-
return createForm2(options);
143+
const [api, ctx] = createForm2(options);
144+
return [ctx, api];
144145
}
145146

146147
type FormValueFromOptions<O extends UseFormOptions2<any, any>> =
@@ -149,6 +150,8 @@ type FormValueFromOptions<O extends UseFormOptions2<any, any>> =
149150
type ValidatorErrorFromOptions<O extends UseFormOptions2<any, any>> =
150151
O extends UseFormOptions2<any, infer E> ? E : never;
151152

153+
export type FormApiAndContext<T, E> = [FormAPI<T, E>, FormContext];
154+
152155
export function createForm2<
153156
O extends UseFormOptions2<any, any>,
154157
T = FormValueFromOptions<O>,
@@ -158,7 +161,7 @@ export function createForm2<
158161
}
159162
? VE | AdditionalPropertyKeyError
160163
: VE,
161-
>(options: O): [FormContext, FormAPI<T, E>] {
164+
>(options: O): FormApiAndContext<T, E> {
162165
const merger = $derived(
163166
options.merger ?? new DefaultFormMerger(options.validator, options.schema)
164167
);
@@ -280,6 +283,64 @@ export function createForm2<
280283
);
281284

282285
return [
286+
{
287+
get value() {
288+
return getSnapshot() as T | undefined;
289+
},
290+
set value(v) {
291+
value = merger.mergeFormDataAndSchemaDefaults(
292+
v as Value,
293+
options.schema
294+
);
295+
},
296+
get formValue() {
297+
return value;
298+
},
299+
set formValue(v) {
300+
value = v;
301+
},
302+
get errors() {
303+
return errors;
304+
},
305+
set errors(v) {
306+
errors = v;
307+
},
308+
get isSubmitted() {
309+
return isSubmitted;
310+
},
311+
set isSubmitted(v) {
312+
isSubmitted = v;
313+
},
314+
get isChanged() {
315+
return isChanged;
316+
},
317+
set isChanged(v) {
318+
isChanged = v;
319+
},
320+
validate() {
321+
return validateSnapshot(getSnapshot());
322+
},
323+
submit,
324+
reset,
325+
updateErrorsByPath(path, update) {
326+
const instanceId = pathToId(idPrefix, idSeparator, path);
327+
const list = errors.get(instanceId);
328+
errors.set(
329+
instanceId,
330+
update(list ?? []).map((e) => ({ ...e, instanceId }))
331+
);
332+
},
333+
enhance(node) {
334+
$effect(() => {
335+
node.addEventListener("submit", submitHandler);
336+
node.addEventListener("reset", resetHandler);
337+
return () => {
338+
node.removeEventListener("submit", submitHandler);
339+
node.removeEventListener("reset", resetHandler);
340+
};
341+
});
342+
},
343+
},
283344
{
284345
get inputsValidationMode() {
285346
return inputsValidationMode;
@@ -365,64 +426,6 @@ export function createForm2<
365426
);
366427
}) as unknown as Snippet<[IconOrTranslationData]>,
367428
},
368-
{
369-
get value() {
370-
return getSnapshot() as T | undefined;
371-
},
372-
set value(v) {
373-
value = merger.mergeFormDataAndSchemaDefaults(
374-
v as Value,
375-
options.schema
376-
);
377-
},
378-
get formValue() {
379-
return value;
380-
},
381-
set formValue(v) {
382-
value = v;
383-
},
384-
get errors() {
385-
return errors;
386-
},
387-
set errors(v) {
388-
errors = v;
389-
},
390-
get isSubmitted() {
391-
return isSubmitted;
392-
},
393-
set isSubmitted(v) {
394-
isSubmitted = v;
395-
},
396-
get isChanged() {
397-
return isChanged;
398-
},
399-
set isChanged(v) {
400-
isChanged = v;
401-
},
402-
validate() {
403-
return validateSnapshot(getSnapshot());
404-
},
405-
submit,
406-
reset,
407-
updateErrorsByPath(path, update) {
408-
const instanceId = pathToId(idPrefix, idSeparator, path);
409-
const list = errors.get(instanceId);
410-
errors.set(
411-
instanceId,
412-
update(list ?? []).map((e) => ({ ...e, instanceId }))
413-
);
414-
},
415-
enhance(node) {
416-
$effect(() => {
417-
node.addEventListener("submit", submitHandler);
418-
node.addEventListener("reset", resetHandler);
419-
return () => {
420-
node.removeEventListener("submit", submitHandler);
421-
node.removeEventListener("reset", resetHandler);
422-
};
423-
});
424-
},
425-
},
426429
];
427430
}
428431

@@ -438,7 +441,7 @@ export function useForm<T, E>(options: UseFormOptions<T, E>): FormAPI<T, E> {
438441
* Create a FormAPI and set form context
439442
*/
440443
export function useForm2<O extends UseFormOptions2<any, any>>(options: O) {
441-
const [ctx, api] = createForm2(options);
444+
const [api, ctx] = createForm2(options);
442445
setFromContext(ctx);
443446
return api;
444447
}

0 commit comments

Comments
 (0)