@@ -140,7 +140,8 @@ type Value = SchemaValue | undefined;
140140export 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
146147type FormValueFromOptions < O extends UseFormOptions2 < any , any > > =
@@ -149,6 +150,8 @@ type FormValueFromOptions<O extends UseFormOptions2<any, any>> =
149150type 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+
152155export 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 */
440443export 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