UNPKG

informed

Version:

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

45 lines (37 loc) 1.56 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); var useInformed = require('./useInformed.js'); var useForceUpdate = require('./useForceUpdate.js'); var debug$1 = require('../debug.js'); var utils = require('../utils.js'); var debug = debug$1.Debug('informed:useInformedField' + '\t'); /* ----------------------- useFieldState ----------------------- */ var useInformedField = function useInformedField(name, target) { var _informed$getControll; // Grab informed var informed = useInformed.useInformed(); // Magic trick var forceUpdate = useForceUpdate.useForceUpdate(); // Register for events on our field React.useEffect(function () { var listener = function listener(t) { // 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 (t === '_ALL_' || t === target || t && utils.isChild(target, t)) { debug('Updating', t, name, target); forceUpdate(); } }; informed.emitter.on(name, listener); // When name changes we always force an update! forceUpdate(); return function () { informed.emitter.removeListener(name, listener); }; }, [name]); return (_informed$getControll = informed.getController(name)) === null || _informed$getControll === void 0 ? void 0 : _informed$getControll.getFieldState(target); }; exports.useInformedField = useInformedField;