informed
Version:
A lightweight framework and utility for building powerful forms in React applications
41 lines (35 loc) • 1.43 kB
JavaScript
import { useEffect } from 'react';
import { useInformed } from './useInformed.js';
import { useForceUpdate } from './useForceUpdate.js';
import { Debug } from '../debug.js';
import { isChild } from '../utils.js';
var debug = Debug('informed:useInformedField' + '\t');
/* ----------------------- useFieldState ----------------------- */
var useInformedField = function useInformedField(name, target) {
var _informed$getControll;
// Grab informed
var informed = useInformed();
// Magic trick
var forceUpdate = useForceUpdate();
// Register for events on our field
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 && 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);
};
export { useInformedField };