react-bfm
Version:
A basic field / form manager for React using hooks
85 lines (84 loc) • 4.2 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 = 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);
};
exports.useNamespaceState = useNamespaceState;
var 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;
}, {});
};
exports.useNamespaceKeyValues = useNamespaceKeyValues;
var 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;
});
};
exports.useNamespaceKeyIsEvery = useNamespaceKeyIsEvery;
var 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;
});
};
/**
* Falsy error values are always returned as null
*/
exports.useNamespaceKeyIsSome = useNamespaceKeyIsSome;
var useNamespaceErrors = function useNamespaceErrors(namespace) {
return useNamespaceKeyValues(namespace, _fieldKeys.FIELD_KEY_ERROR);
};
exports.useNamespaceErrors = useNamespaceErrors;
var useNamespaceHasFocus = function useNamespaceHasFocus(namespace) {
return useNamespaceKeyIsSome(namespace, _fieldKeys.FIELD_KEY_FOCUS);
};
exports.useNamespaceHasFocus = useNamespaceHasFocus;
var useNamespaceIsDirty = function useNamespaceIsDirty(namespace) {
return useNamespaceKeyIsSome(namespace, _fieldKeys.FIELD_KEY_DIRTY);
};
exports.useNamespaceIsDirty = useNamespaceIsDirty;
var useNamespaceIsTouched = function useNamespaceIsTouched(namespace) {
return useNamespaceKeyIsSome(namespace, _fieldKeys.FIELD_KEY_TOUCHED);
};
exports.useNamespaceIsTouched = useNamespaceIsTouched;
var useNamespaceIsValid = function useNamespaceIsValid(namespace) {
return useNamespaceKeyIsEvery(namespace, _fieldKeys.FIELD_KEY_VALID);
};
exports.useNamespaceIsValid = useNamespaceIsValid;
var useNamespaceValues = function useNamespaceValues(namespace) {
return useNamespaceKeyValues(namespace, _fieldKeys.FIELD_KEY_VALUE);
};
exports.useNamespaceValues = useNamespaceValues;
var useNamespaceValuesOnFocus = function useNamespaceValuesOnFocus(namespace) {
return useNamespaceKeyValues(namespace, _fieldKeys.FIELD_KEY_VALUE_ON_FOCUS);
};
exports.useNamespaceValuesOnFocus = useNamespaceValuesOnFocus;