UNPKG

informed

Version:

A lightweight framework and utility for building powerful forms in React applications

50 lines (40 loc) 1.66 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); var useFormController = require('./useFormController.js'); var useForceUpdate = require('./useForceUpdate.js'); var utils = require('../utils.js'); var debug$1 = require('../debug.js'); var useScope = require('./useScope.js'); var debug = debug$1.Debug('informed:useFieldState' + '\t'); /* ----------------------- useFieldState ----------------------- */ var useFieldState = function useFieldState(n) { var scoped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; // Create name var name = scoped ? useScope.useScope(n) : n; // Grab the form controller var formController = useFormController.useFormController(); // Magic trick var forceUpdate = useForceUpdate.useForceUpdate(); // Register for events on our field React.useEffect(function () { var listener = function listener(target) { // either // 1. All fields are supposed to update // 2. This is a specific registration "foo" === "foo" // 3. This field is a child of registration "friends[0].name" is a child of name="friends[0]" if (target === '_ALL_' || target === name || target && utils.isChild(name, target)) { debug('Updating', name); forceUpdate(); } }; formController.emitter.on('field', listener); // When name changes we always force an update! forceUpdate(); return function () { formController.emitter.removeListener('field', listener); }; }, [name]); return formController.getFieldState(name); }; exports.useFieldState = useFieldState;