UNPKG

react-bfm

Version:

A basic field / form manager for React using hooks

85 lines (84 loc) 4.2 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 = 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;