Skip to content

Commit 404c857

Browse files
committed
feat: adds UseFormOptions for formLevelErrorName and recentlySuccessfulTimeoutTime overwrites
1 parent d80b6e0 commit 404c857

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

src/addons/formkit.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import type { AddonExtension } from '../inertia';
55
import { reactive, watchEffect } from 'vue';
66
import { createMessage } from '@formkit/core';
77

8-
export default <F extends RequestPayload>(initialFields?: F) => {
8+
export default <F extends RequestPayload>(initialFields?: F, formLevelErrorName?: string) => {
99
const state = reactive({
1010
node: null as null | FormKitNode,
1111
dirty: false as boolean | null,
@@ -28,7 +28,16 @@ export default <F extends RequestPayload>(initialFields?: F) => {
2828
});
2929

3030
on('error', (errors, node) => {
31-
node.setErrors(node.name in errors ? errors[node.name] : [], errors);
31+
const _formLevelErrorName = formLevelErrorName ? formLevelErrorName : node.name;
32+
33+
let formErrorMessages: string | undefined;
34+
if (_formLevelErrorName in errors) {
35+
formErrorMessages = errors[_formLevelErrorName];
36+
37+
delete errors[_formLevelErrorName];
38+
}
39+
40+
node.setErrors(_formLevelErrorName, errors);
3241
});
3342

3443
on('finish', (_, node) => {

src/inertia.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,15 @@ import { createEventManager } from './eventManager';
77
import { createFormkitAddon, createStateAddon } from './addons/index';
88

99
export type AddonExtension = (on: ReturnType<typeof createEventManager>['on']) => void;
10+
export interface UseFormOptions {
11+
recentlySuccessfulTimeoutTime?: number;
12+
formLevelErrorName?: string;
13+
};
1014

11-
export const useForm = <F extends RequestPayload>(initialFields?: F) => {
15+
export const useForm = <F extends RequestPayload>(initialFields?: F, options?: UseFormOptions) => {
1216
const eventManager = createEventManager();
13-
const { state: addonState, addon: stateAddon } = createStateAddon();
14-
const { state: formkitState, addon: formkitAddon, plugin } = createFormkitAddon(initialFields);
17+
const { state: addonState, addon: stateAddon } = createStateAddon(options?.recentlySuccessfulTimeoutTime);
18+
const { state: formkitState, addon: formkitAddon, plugin } = createFormkitAddon(initialFields, options?.formLevelErrorName);
1519

1620
const addon = (addons: AddonExtension | AddonExtension[]) => {
1721
if (Array.isArray(addons)) addons.forEach((cb) => cb(eventManager.on));

0 commit comments

Comments
 (0)