react-bfm
Version:
A basic field / form manager for React using hooks
55 lines • 2.85 kB
JavaScript
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];
};