Skip to content

Commit c07a223

Browse files
committed
fixup! feat: auto fields management
1 parent b0d4012 commit c07a223

File tree

2 files changed

+7
-8
lines changed

2 files changed

+7
-8
lines changed

packages/conform-dom/form.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,8 @@ export type FormContext<
238238
onInput(event: Event): void;
239239
onBlur(event: Event): void;
240240
onUpdate(options: Partial<FormOptions<Schema, FormError, FormValue>>): void;
241-
observe(stateSnapshot: FormState<FormError>): () => void;
241+
updateFormElement(state: FormState<FormError>): void;
242+
observe(): () => void;
242243
subscribe(
243244
callback: () => void,
244245
getSubject?: () => SubscriptionSubject | undefined,
@@ -1119,7 +1120,7 @@ export function createFormContext<
11191120
}
11201121
}
11211122

1122-
function observe(stateSnapshot: FormState<FormError>) {
1123+
function observe() {
11231124
const observer = new MutationObserver((mutations) => {
11241125
const form = getFormElement();
11251126

@@ -1155,7 +1156,6 @@ export function createFormContext<
11551156
attributes: true,
11561157
attributeFilter: ['form', 'name'],
11571158
});
1158-
updateFormElement(stateSnapshot);
11591159

11601160
return () => {
11611161
observer.disconnect();
@@ -1177,6 +1177,7 @@ export function createFormContext<
11771177
insert: createFormControl('insert'),
11781178
remove: createFormControl('remove'),
11791179
reorder: createFormControl('reorder'),
1180+
updateFormElement,
11801181
subscribe,
11811182
getState,
11821183
getSerializedState,

packages/conform-react/hooks.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,13 @@ export function useForm<
7474
);
7575

7676
useSafeLayoutEffect(() => {
77+
const disconnect = context.observe();
7778
document.addEventListener('input', context.onInput);
7879
document.addEventListener('focusout', context.onBlur);
7980
document.addEventListener('reset', context.onReset);
8081

8182
return () => {
83+
disconnect();
8284
document.removeEventListener('input', context.onInput);
8385
document.removeEventListener('focusout', context.onBlur);
8486
document.removeEventListener('reset', context.onReset);
@@ -101,11 +103,7 @@ export function useForm<
101103
const form = getFormMetadata(context, subjectRef, stateSnapshot, noValidate);
102104

103105
useEffect(() => {
104-
const disconnect = context.observe(stateSnapshot);
105-
106-
return () => {
107-
disconnect();
108-
};
106+
context.updateFormElement(stateSnapshot);
109107
}, [context, stateSnapshot]);
110108

111109
return [form, form.getFieldset()];

0 commit comments

Comments
 (0)