react-bfm
Version:
A basic field / form manager for React using hooks
126 lines (125 loc) • 5.6 kB
JavaScript
;
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 () {
subscribers[namespace] && subscribers[namespace].has(id) && subscribers[namespace]["delete"](id);
};
};
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) {
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 = _stateCreator.getFieldState,
getNamespaceState = _stateCreator.getNamespaceState,
initFieldState = _stateCreator.initFieldState,
removeField = _stateCreator.removeField,
createGetSnapshotFieldState = _stateCreator.createGetSnapshotFieldState,
createGetSnapshotNamespaceState = _stateCreator.createGetSnapshotNamespaceState,
createSubscribeToField = _stateCreator.createSubscribeToField,
createSubscribeToNamespace = _stateCreator.createSubscribeToNamespace,
updateFieldStateWithCallback = _stateCreator.updateFieldStateWithCallback;
exports.updateFieldStateWithCallback = updateFieldStateWithCallback;
exports.createSubscribeToNamespace = createSubscribeToNamespace;
exports.createSubscribeToField = createSubscribeToField;
exports.createGetSnapshotNamespaceState = createGetSnapshotNamespaceState;
exports.createGetSnapshotFieldState = createGetSnapshotFieldState;
exports.removeField = removeField;
exports.initFieldState = initFieldState;
exports.getNamespaceState = getNamespaceState;
exports.getFieldState = getFieldState;