Skip to content

Commit 3372faa

Browse files
committed
types(form): allow void in submit
1 parent c19fd47 commit 3372faa

File tree

2 files changed

+10
-8
lines changed

2 files changed

+10
-8
lines changed

packages/playground/app/pages/todo/bulk.vue

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ const createTodo = createFormObject({
1313
const data = { text: values.text ?? '' }
1414
const texts = data.text.split(',').map(t => t.trim()).filter(t => t.length > 0)
1515
await store.Todo.createMany(texts.map(text => ({ text })))
16-
return data
1716
},
1817
})
1918
const createInput = useTemplateRef('input')

packages/vue/src/form.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export interface CreateFormObjectOptions<
77
TData extends Record<string, any>,
88
TSchema extends StandardSchemaV1,
99
TAdditionalProps,
10-
TResult = TData,
10+
TResult extends TData | void = TData,
1111
> {
1212
defaultValues?: (() => Partial<TData>) | undefined
1313
resetDefaultValues?: (() => Awaitable<Partial<TData>>) | undefined
@@ -26,14 +26,15 @@ export type FormObjectChanged<TData> = {
2626

2727
export interface FormObjectAdditionalProps<
2828
TData extends Record<string, any>,
29+
TResult extends TData | void = TData,
2930
> {
3031
$changedProps: FormObjectChanged<TData>
3132
$hasChanges: () => boolean
3233
/**
3334
* @deprecated Use `$onSuccess` instead
3435
*/
35-
$onSaved: EventHookOn<TData>
36-
$onSuccess: EventHookOn<TData>
36+
$onSaved: EventHookOn<TResult>
37+
$onSuccess: EventHookOn<TResult>
3738
$onError: EventHookOn<Error>
3839
$onChange: EventHookOn<FormObjectChanged<TData>>
3940
}
@@ -42,7 +43,8 @@ type VueFormObject<
4243
TData extends Record<string, any>,
4344
TSchema extends StandardSchemaV1 = StandardSchemaV1,
4445
TAdditionalProps = Record<string, never>,
45-
> = FormObjectBase<TData, TSchema> & FormObjectAdditionalProps<TData> & TAdditionalProps & Partial<TData> & (() => Promise<TData>)
46+
TResult extends TData | void = TData,
47+
> = FormObjectBase<TResult, TSchema> & FormObjectAdditionalProps<TData, TResult> & TAdditionalProps & Partial<TData> & (() => Promise<TData>)
4648

4749
/**
4850
* Object returned by `store.<Collection>.createForm()`
@@ -66,7 +68,8 @@ export function createFormObject<
6668
TData extends Record<string, any> = Record<string, any>,
6769
TSchema extends StandardSchemaV1 = StandardSchemaV1,
6870
const TAdditionalProps = Record<string, never>,
69-
>(options: CreateFormObjectOptions<TData, TSchema, TAdditionalProps>) {
71+
TResult extends TData | void = TData,
72+
>(options: CreateFormObjectOptions<TData, TSchema, TAdditionalProps, TResult>) {
7073
let initialData = pickNonSpecialProps(options.defaultValues?.() ?? {}, true) as Partial<TData>
7174

7275
const onSuccess = createEventHook()
@@ -135,7 +138,7 @@ export function createFormObject<
135138
return this.$onSaved(...args)
136139
},
137140
$onChange: onChange.on,
138-
} satisfies FormObjectBase<TData, TSchema> & FormObjectAdditionalProps<TData>) as FormObjectBase<TData, TSchema> & FormObjectAdditionalProps<TData>
141+
} satisfies FormObjectBase<TResult, TSchema> & FormObjectAdditionalProps<TData>) as FormObjectBase<TResult, TSchema> & FormObjectAdditionalProps<TData>
139142

140143
// On change
141144

@@ -185,7 +188,7 @@ export function createFormObject<
185188
// Validate initially (don't await for it)
186189
queueChange()
187190

188-
return proxy as VueFormObject<TData, TSchema, TAdditionalProps>
191+
return proxy as VueFormObject<TData, TSchema, TAdditionalProps, TResult>
189192
}
190193

191194
/**

0 commit comments

Comments
 (0)