UNPKG

react-bfm

Version:

A basic field / form manager for React using hooks

55 lines 2.85 kB
import { useContext, useMemo, useSyncExternalStore } from 'react'; import { BFMHooksContext } from '../context'; import { validateFieldName, validateNamespace } from '../helpers'; import { FIELD_KEY_DIRTY, FIELD_KEY_ERROR, FIELD_KEY_FOCUS, FIELD_KEY_TOUCHED, FIELD_KEY_VALID, FIELD_KEY_VALUE, FIELD_KEY_VALUE_ON_FOCUS } from '../constants/field-keys'; var getServerSnapshot = function getServerSnapshot() { return undefined; }; export var useFieldState = function useFieldState(namespace, fieldName) { if (process.env.NODE_ENV !== 'production') { if (!validateNamespace(namespace)) { throw new Error('Expected string with a minimal length of 1 for `namespace`'); } if (!validateFieldName(fieldName)) { throw new Error('Expected string with a minimal length of 1 for `fieldName`'); } } var _useContext = useContext(BFMHooksContext), createSubscribeToField = _useContext.createSubscribeToField, createGetSnapshotFieldState = _useContext.createGetSnapshotFieldState; var subscribe = useMemo(function () { return createSubscribeToField(namespace, fieldName); }, [createSubscribeToField, fieldName, namespace]); var getSnapshot = useMemo(function () { return createGetSnapshotFieldState(namespace, fieldName); }, [createGetSnapshotFieldState, fieldName, namespace]); return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot); }; export var useFieldError = function useFieldError(namespace, fieldName) { var fieldState = useFieldState(namespace, fieldName); return fieldState == null ? void 0 : fieldState[FIELD_KEY_ERROR]; }; export var useFieldHasFocus = function useFieldHasFocus(namespace, fieldName) { var fieldState = useFieldState(namespace, fieldName); return fieldState == null ? void 0 : fieldState[FIELD_KEY_FOCUS]; }; export var useFieldIsDirty = function useFieldIsDirty(namespace, fieldName) { var fieldState = useFieldState(namespace, fieldName); return fieldState == null ? void 0 : fieldState[FIELD_KEY_DIRTY]; }; export var useFieldIsTouched = function useFieldIsTouched(namespace, fieldName) { var fieldState = useFieldState(namespace, fieldName); return fieldState == null ? void 0 : fieldState[FIELD_KEY_TOUCHED]; }; export var useFieldIsValid = function useFieldIsValid(namespace, fieldName) { var fieldState = useFieldState(namespace, fieldName); return fieldState == null ? void 0 : fieldState[FIELD_KEY_VALID]; }; export var useFieldValue = function useFieldValue(namespace, fieldName) { var fieldState = useFieldState(namespace, fieldName); return fieldState == null ? void 0 : fieldState[FIELD_KEY_VALUE]; }; export var useFieldValueOnFocus = function useFieldValueOnFocus(namespace, fieldName) { var fieldState = useFieldState(namespace, fieldName); return fieldState == null ? void 0 : fieldState[FIELD_KEY_VALUE_ON_FOCUS]; };