react-bfm
Version:
A basic field / form manager for React using hooks
74 lines (73 loc) • 3.82 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
exports.__esModule = true;
exports.BFMHooksContext = void 0;
var _extends4 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _react = require("react");
var _helpers = require("./helpers");
var _state = require("./state");
var _fieldKeys = require("./constants/field-keys");
var focusField = function focusField(namespace, fieldName) {
(0, _state.updateFieldStateWithCallback)(namespace, fieldName, function (currentState) {
var _ref;
return _ref = {}, _ref[_fieldKeys.FIELD_KEY_FOCUS] = true, _ref[_fieldKeys.FIELD_KEY_VALUE_ON_FOCUS] = currentState[_fieldKeys.FIELD_KEY_VALUE], _ref;
});
};
var changeField = function changeField(namespace, fieldName, value, error, dirtyCheck) {
if (dirtyCheck === void 0) {
dirtyCheck = _helpers.defaultDirtyCheck;
}
(0, _state.updateFieldStateWithCallback)(namespace, fieldName, function (currentState) {
var _extends2;
return (0, _extends4["default"])((_extends2 = {}, _extends2[_fieldKeys.FIELD_KEY_DIRTY] = dirtyCheck(value, currentState[_fieldKeys.FIELD_KEY_VALUE_ON_FOCUS]), _extends2), (0, _helpers.mapFieldValueAndError)(value, error));
});
};
var blurField = function blurField(namespace, fieldName) {
(0, _state.updateFieldStateWithCallback)(namespace, fieldName, function () {
var _ref2;
return _ref2 = {}, _ref2[_fieldKeys.FIELD_KEY_FOCUS] = false, _ref2[_fieldKeys.FIELD_KEY_TOUCHED] = true, _ref2[_fieldKeys.FIELD_KEY_VALUE_ON_FOCUS] = null, _ref2;
});
};
var initField = function initField(namespace, fieldName, value, error) {
if (process.env.NODE_ENV !== 'production') {
if (!(0, _helpers.validateNamespace)(namespace)) {
throw new Error('Expected string with a minimal length of 1 for `namespace`');
}
if (!(0, _helpers.validateFieldName)(fieldName)) {
throw new Error('Expected string with a minimal length of 1 for `fieldName`');
}
}
(0, _state.initFieldState)(namespace, fieldName, value, error);
};
/**
* sets default value only when the field is not touched or has focus
* this way you can still change the input value after first rendering
*/
var initialValueField = function initialValueField(namespace, fieldName, initialValue, error) {
return (0, _state.updateFieldStateWithCallback)(namespace, fieldName, function (currentState) {
var _extends3;
// only update value and error when field is not touched or has focus
var updateState = !currentState[_fieldKeys.FIELD_KEY_TOUCHED] && !currentState[_fieldKeys.FIELD_KEY_FOCUS] && currentState[_fieldKeys.FIELD_KEY_VALUE] !== initialValue ? (0, _helpers.mapFieldValueAndError)(initialValue, error) : {};
// update error if value is still default
if (currentState[_fieldKeys.FIELD_KEY_VALUE] === initialValue && currentState[_fieldKeys.FIELD_KEY_ERROR] !== error) {
updateState.error = error;
updateState.valid = !error;
}
return (0, _extends4["default"])({}, updateState, (_extends3 = {}, _extends3[_fieldKeys.FIELD_KEY_INITIAL_VALUE] = initialValue, _extends3[_fieldKeys.FIELD_KEY_INITIAL_VALUE_ERROR] = error, _extends3));
});
};
var BFMHooksContext = (0, _react.createContext)({
blurField: blurField,
changeField: changeField,
initialValueField: initialValueField,
focusField: focusField,
getFieldState: _state.getFieldState,
getNamespaceState: _state.getNamespaceState,
initField: initField,
removeField: _state.removeField,
createGetSnapshotFieldState: _state.createGetSnapshotFieldState,
createGetSnapshotNamespaceState: _state.createGetSnapshotNamespaceState,
createSubscribeToField: _state.createSubscribeToField,
createSubscribeToNamespace: _state.createSubscribeToNamespace
});
exports.BFMHooksContext = BFMHooksContext;