UNPKG

react-bfm

Version:

A basic field / form manager for React using hooks

76 lines (75 loc) 3.94 kB
"use strict"; 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 initial value only when the field is not touched and not focused * 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 and not focused 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)); }); }; /** * @deprecated Will be removed in v3.0.0. This is an internal implementation detail and should not be used directly. */ var BFMHooksContext = exports.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 });