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/
77 lines (68 loc) • 2.44 kB
text/typescript
import { DataFlowEvent, DataFlowState, EventType, HandleDataFlow } from "../types";
import { handleBlurEvent } from "../data-flow/event-handlers/handleBlurEvent";
import { handleChangeEvent } from "../data-flow/event-handlers/handleChangeEvent";
import { handleResetEvent } from "../data-flow/event-handlers/handleResetEvent";
import { handleSubmitEvent } from "../data-flow/event-handlers/handleSubmitEvent";
import { logError } from "../utils/logError";
import { setDebugData } from "../utils/setDebugData";
// TODO: Consider changing dataFlowState structure to object of getters/setters for cleaner code if no performance impact
export function useDataFlowHandler<Schema>(
options: DataFlowState<Schema>["options"],
formState: DataFlowState<Schema>["formState"],
fieldsData: DataFlowState<Schema>["fieldsData"],
callbacks: DataFlowState<Schema>["callbacks"],
errorData: DataFlowState<Schema>["errorData"],
setErrors: DataFlowState<Schema>["setErrors"],
isDirty: DataFlowState<Schema>["isDirty"],
setIsDirty: DataFlowState<Schema>["setIsDirty"],
setDirtyFields: DataFlowState<Schema>["setDirtyFields"],
resetDirtyState: DataFlowState<Schema>["resetDirtyState"],
): HandleDataFlow<Schema> {
return function handleDataFlow(event: DataFlowEvent<Schema>) {
// An object reference to be passed around to all data flow functions
const dataFlowState: DataFlowState<Schema> = {
hasErrors: errorData.count > 0,
event,
options,
changedData: {},
formState,
fieldsData,
callbacks,
errorData,
setErrors,
isDirty,
setIsDirty,
setDirtyFields,
resetDirtyState,
changeReason: "",
};
switch (event.type) {
case EventType.Submit:
handleSubmitEvent(dataFlowState);
break;
case EventType.Reset:
handleResetEvent(dataFlowState);
break;
case EventType.Change:
handleChangeEvent(dataFlowState);
break;
case EventType.Blur:
handleBlurEvent(dataFlowState);
break;
case EventType.FormInit:
handleResetEvent(dataFlowState);
break;
default:
logError("data-flow", "An unsupported event type provided");
}
setDebugData(
{
formState: dataFlowState.formState,
changeReason: dataFlowState.changeReason,
event: dataFlowState.event,
},
options,
true,
);
};
}