UNPKG

react-bfm

Version:

A basic field / form manager for React using hooks

74 lines (73 loc) 4.01 kB
"use strict"; 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); };