react-browser-form
Version:
<div align="center"> <a href="https://deniskabana.github.io/react-browser-form/introduction" title="React Browser Form - Form management in React made simple for browsers."> <img src="https://raw.githubusercontent.com/deniskabana/react-browser-form/
20 lines (16 loc) • 969 B
text/typescript
import { DataFlowState } from "../types";
import { transformValueType } from "./transformValueType";
export function hydrateFormState<Schema>(dataFlowState: DataFlowState<Schema>, subset?: string[]): void {
// Explicit "any" because of TS issue - https://github.com/microsoft/TypeScript/issues/19437
const domFormElem = (document.forms as any)[dataFlowState.options.name];
// Use defaultValues instead of formState when hydrating formState
Object.keys(dataFlowState.options.defaultValues).forEach(key => {
// If a subset is provided, only update those values
if (subset && subset.length && !subset.includes(key)) return;
const domInputElem = domFormElem.elements[key] as HTMLInputElement | undefined;
if (domInputElem) {
const value = domInputElem.type === "checkbox" ? domInputElem.checked : domInputElem.value;
(dataFlowState.formState as any)[key] = transformValueType(key as keyof Schema, value, dataFlowState);
}
});
}