UNPKG

react-bfm

Version:

A basic field / form manager for React using hooks

122 lines (121 loc) 5.54 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; exports.__esModule = true; exports.updateFieldStateWithCallback = exports.removeField = exports.initFieldState = exports.getNamespaceState = exports.getFieldState = exports.createSubscribeToNamespace = exports.createSubscribeToField = exports.createGetSnapshotNamespaceState = exports.createGetSnapshotFieldState = void 0; var _extends4 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _stateDefaults = require("./constants/state-defaults"); var _helpers = require("./helpers"); var stateCreator = function stateCreator() { var state = {}; var subscribers = {}; var idCounter = 0; var getFieldState = function getFieldState(namespace, fieldName) { var _state$namespace; return (_state$namespace = state[namespace]) == null ? void 0 : _state$namespace[fieldName]; }; var getNamespaceState = function getNamespaceState(namespace) { return state[namespace]; }; var createGetSnapshotFieldState = function createGetSnapshotFieldState(namespace, fieldName) { return function () { return getFieldState(namespace, fieldName); }; }; var createGetSnapshotNamespaceState = function createGetSnapshotNamespaceState(namespace) { return function () { return getNamespaceState(namespace); }; }; var subscribe = function subscribe(listener, namespace, fieldName) { if (!subscribers[namespace]) { subscribers[namespace] = new Map(); } var id = ++idCounter; subscribers[namespace].set(id, { listener: listener, fieldName: fieldName }); return function () { if (subscribers[namespace] && subscribers[namespace].has(id)) { subscribers[namespace]["delete"](id); if (subscribers[namespace].size === 0) { delete subscribers[namespace]; } } }; }; var createSubscribeToField = function createSubscribeToField(namespace, fieldName) { return function (listener) { return subscribe(listener, namespace, fieldName); }; }; var createSubscribeToNamespace = function createSubscribeToNamespace(namespace) { return function (listener) { return subscribe(listener, namespace); }; }; var triggerSubscribers = function triggerSubscribers(namespace, _fieldName) { var namespaceSubscribers = subscribers[namespace]; if (namespaceSubscribers) { namespaceSubscribers.forEach(function (_ref) { var listener = _ref.listener, fieldName = _ref.fieldName; if (!fieldName) { listener(); } if (fieldName === _fieldName) { listener(); } }); } }; var initFieldState = function initFieldState(namespace, fieldName, value, error) { var _extends2; state[namespace] = (0, _extends4["default"])({}, state[namespace], (_extends2 = {}, _extends2[fieldName] = (0, _extends4["default"])({}, _stateDefaults.FIELD_STATE_DEFAULT, (0, _helpers.mapFieldValueAndError)(value, error)), _extends2)); triggerSubscribers(namespace, fieldName); }; var updateFieldStateWithCallback = function updateFieldStateWithCallback(namespace, fieldName, callback) { var currentFieldState = getFieldState(namespace, fieldName); if (currentFieldState) { var update = callback(currentFieldState); if (update && typeof update === 'object') { var _extends3; state[namespace] = (0, _extends4["default"])({}, state[namespace], (_extends3 = {}, _extends3[fieldName] = (0, _extends4["default"])({}, currentFieldState, update), _extends3)); triggerSubscribers(namespace, fieldName); } } }; var removeField = function removeField(namespace, fieldName) { var _state$namespace2; if ((_state$namespace2 = state[namespace]) != null && _state$namespace2[fieldName]) { delete state[namespace][fieldName]; // immutable state state[namespace] = (0, _extends4["default"])({}, state[namespace]); if (Object.keys(state[namespace]).length === 0) { delete state[namespace]; } triggerSubscribers(namespace, fieldName); } }; return { getFieldState: getFieldState, getNamespaceState: getNamespaceState, initFieldState: initFieldState, removeField: removeField, createGetSnapshotFieldState: createGetSnapshotFieldState, createGetSnapshotNamespaceState: createGetSnapshotNamespaceState, createSubscribeToField: createSubscribeToField, createSubscribeToNamespace: createSubscribeToNamespace, updateFieldStateWithCallback: updateFieldStateWithCallback }; }; var _stateCreator = stateCreator(), getFieldState = exports.getFieldState = _stateCreator.getFieldState, getNamespaceState = exports.getNamespaceState = _stateCreator.getNamespaceState, initFieldState = exports.initFieldState = _stateCreator.initFieldState, removeField = exports.removeField = _stateCreator.removeField, createGetSnapshotFieldState = exports.createGetSnapshotFieldState = _stateCreator.createGetSnapshotFieldState, createGetSnapshotNamespaceState = exports.createGetSnapshotNamespaceState = _stateCreator.createGetSnapshotNamespaceState, createSubscribeToField = exports.createSubscribeToField = _stateCreator.createSubscribeToField, createSubscribeToNamespace = exports.createSubscribeToNamespace = _stateCreator.createSubscribeToNamespace, updateFieldStateWithCallback = exports.updateFieldStateWithCallback = _stateCreator.updateFieldStateWithCallback;