@@ -8,7 +8,7 @@ import { createItem, createMany, deleteItem, deleteMany, findFirst, findMany, pe
88import { pickNonSpecialProps } from '@rstore/shared'
99import { tryOnScopeDispose } from '@vueuse/core'
1010import { ref , toValue , watch } from 'vue'
11- import { createFormObject , type VueCreateFormObject , type VueUpdateFormObject } from './form'
11+ import { createFormObject , type CreateFormObjectOptions , type VueCreateFormObject , type VueUpdateFormObject } from './form'
1212import { createQuery } from './query'
1313
1414export type QueryType = 'first' | 'many'
@@ -199,7 +199,8 @@ export interface VueCollectionApi<
199199 * @default collection.schema.create
200200 */
201201 schema ?: StandardSchemaV1
202- } & Pick < CreateOptions < TCollection , TCollectionDefaults , TSchema > , 'optimistic' > ,
202+ } & Pick < CreateOptions < TCollection , TCollectionDefaults , TSchema > , 'optimistic' >
203+ & Pick < CreateFormObjectOptions < ResolvedCollectionItem < TCollection , TCollectionDefaults , TSchema > , StandardSchemaV1 , never > , 'resetOnSuccess' | 'validateOnSubmit' | 'transformData' > ,
203204 ) => VueCreateFormObject < TCollection , TCollectionDefaults , TSchema >
204205
205206 /**
@@ -237,7 +238,14 @@ export interface VueCollectionApi<
237238 * @default collection.schema.update
238239 */
239240 schema ?: StandardSchemaV1
240- } & Pick < UpdateOptions < TCollection , TCollectionDefaults , TSchema > , 'optimistic' > ,
241+
242+ /**
243+ * If `true`, only the changed properties will be sent to the `update` method. If `false`, all properties will be sent.
244+ * @default true
245+ */
246+ pickOnlyChanged ?: boolean
247+ } & Pick < UpdateOptions < TCollection , TCollectionDefaults , TSchema > , 'optimistic' >
248+ & Pick < CreateFormObjectOptions < ResolvedCollectionItem < TCollection , TCollectionDefaults , TSchema > , StandardSchemaV1 , never > , 'resetOnSuccess' | 'validateOnSubmit' | 'transformData' > ,
241249 ) => Promise < VueUpdateFormObject < TCollection , TCollectionDefaults , TSchema > >
242250
243251 /**
@@ -485,6 +493,9 @@ export function createCollectionApi<
485493 submit : data => api . create ( data , {
486494 optimistic : formOptions ?. optimistic ,
487495 } ) ,
496+ resetOnSuccess : formOptions ?. resetOnSuccess ,
497+ validateOnSubmit : formOptions ?. validateOnSubmit ,
498+ transformData : formOptions ?. transformData ,
488499 } ) as TReturn
489500 } ,
490501
@@ -526,16 +537,26 @@ export function createCollectionApi<
526537 resetDefaultValues : ( ) => getFormData ( ) ,
527538 // Only use changed props
528539 transformData : ( form ) => {
529- const data = { } as any
530- for ( const key in form . $changedProps ) {
531- data [ key ] = form [ key ]
540+ let data = { } as any
541+ if ( formOptions ?. pickOnlyChanged ?? true ) {
542+ for ( const key in form . $changedProps ) {
543+ data [ key ] = form [ key ]
544+ }
545+ }
546+ else {
547+ data = { ...form }
548+ }
549+ if ( formOptions ?. transformData ) {
550+ data = formOptions . transformData ( data )
532551 }
533552 return data
534553 } ,
535554 submit : data => api . update ( data , {
536555 key : collection . getKey ( initialData ) ,
537556 optimistic : formOptions ?. optimistic ,
538557 } ) ,
558+ resetOnSuccess : formOptions ?. resetOnSuccess ,
559+ validateOnSubmit : formOptions ?. validateOnSubmit ,
539560 } )
540561 return form
541562 } ,
0 commit comments