react-bfm
Version:
A basic field / form manager for React using hooks
74 lines (73 loc) • 4.01 kB
JavaScript
;
exports.__esModule = true;
exports.useNamespaceValuesOnFocus = exports.useNamespaceValues = exports.useNamespaceState = exports.useNamespaceKeyValues = exports.useNamespaceKeyIsSome = exports.useNamespaceKeyIsEvery = exports.useNamespaceIsValid = exports.useNamespaceIsTouched = exports.useNamespaceIsDirty = exports.useNamespaceHasFocus = exports.useNamespaceErrors = void 0;
var _react = require("react");
var _context = require("../context");
var _helpers = require("../helpers");
var _fieldKeys = require("../constants/field-keys");
var _stateDefaults = require("../constants/state-defaults");
var getServerSnapshot = function getServerSnapshot() {
return undefined;
};
var useNamespaceState = exports.useNamespaceState = function useNamespaceState(namespace) {
if (process.env.NODE_ENV !== 'production') {
if (!(0, _helpers.validateNamespace)(namespace)) {
throw new Error('Expected string with a minimal length of 1 for `namespace`');
}
}
var _useContext = (0, _react.useContext)(_context.BFMHooksContext),
createSubscribeToNamespace = _useContext.createSubscribeToNamespace,
createGetSnapshotNamespaceState = _useContext.createGetSnapshotNamespaceState;
var subscribe = (0, _react.useMemo)(function () {
return createSubscribeToNamespace(namespace);
}, [createSubscribeToNamespace, namespace]);
var getSnapshot = (0, _react.useMemo)(function () {
return createGetSnapshotNamespaceState(namespace);
}, [createGetSnapshotNamespaceState, namespace]);
return (0, _react.useSyncExternalStore)(subscribe, getSnapshot, getServerSnapshot);
};
var useNamespaceKeyValues = exports.useNamespaceKeyValues = function useNamespaceKeyValues(namespace, key) {
var namespaceState = useNamespaceState(namespace);
return namespaceState && Object.entries(namespaceState).reduce(function (values, _ref) {
var fieldName = _ref[0],
fieldState = _ref[1];
values[fieldName] = fieldState[key];
return values;
}, {});
};
var useNamespaceKeyIsEvery = exports.useNamespaceKeyIsEvery = function useNamespaceKeyIsEvery(namespace, key) {
var namespaceState = useNamespaceState(namespace);
return namespaceState && Object.values(namespaceState || _stateDefaults.NAMESPACE_STATE_DEFAULT).every(function (fieldState) {
return fieldState[key] || false;
});
};
var useNamespaceKeyIsSome = exports.useNamespaceKeyIsSome = function useNamespaceKeyIsSome(namespace, key) {
var namespaceState = useNamespaceState(namespace);
return namespaceState && Object.values(namespaceState || _stateDefaults.NAMESPACE_STATE_DEFAULT).some(function (fieldState) {
return fieldState[key] || false;
});
};
/**
* Error values reflect the stored field error; falsy errors are normalized when mapped into field state.
*/
var useNamespaceErrors = exports.useNamespaceErrors = function useNamespaceErrors(namespace) {
return useNamespaceKeyValues(namespace, _fieldKeys.FIELD_KEY_ERROR);
};
var useNamespaceHasFocus = exports.useNamespaceHasFocus = function useNamespaceHasFocus(namespace) {
return useNamespaceKeyIsSome(namespace, _fieldKeys.FIELD_KEY_FOCUS);
};
var useNamespaceIsDirty = exports.useNamespaceIsDirty = function useNamespaceIsDirty(namespace) {
return useNamespaceKeyIsSome(namespace, _fieldKeys.FIELD_KEY_DIRTY);
};
var useNamespaceIsTouched = exports.useNamespaceIsTouched = function useNamespaceIsTouched(namespace) {
return useNamespaceKeyIsSome(namespace, _fieldKeys.FIELD_KEY_TOUCHED);
};
var useNamespaceIsValid = exports.useNamespaceIsValid = function useNamespaceIsValid(namespace) {
return useNamespaceKeyIsEvery(namespace, _fieldKeys.FIELD_KEY_VALID);
};
var useNamespaceValues = exports.useNamespaceValues = function useNamespaceValues(namespace) {
return useNamespaceKeyValues(namespace, _fieldKeys.FIELD_KEY_VALUE);
};
var useNamespaceValuesOnFocus = exports.useNamespaceValuesOnFocus = function useNamespaceValuesOnFocus(namespace) {
return useNamespaceKeyValues(namespace, _fieldKeys.FIELD_KEY_VALUE_ON_FOCUS);
};