informed
Version:
A lightweight framework and utility for building powerful forms in React applications
50 lines (40 loc) • 1.66 kB
JavaScript
;
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;