@base-ui/react
Version:
Base UI is a library of headless ('unstyled') React components and low-level hooks. You gain complete control over your app's CSS and accessibility features.
41 lines (40 loc) • 1.17 kB
JavaScript
;
'use client';
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useRegisterFieldControl = useRegisterFieldControl;
var React = _interopRequireWildcard(require("react"));
var _useIsoLayoutEffect = require("@base-ui/utils/useIsoLayoutEffect");
var _FieldRootContext = require("../field-root-context/FieldRootContext");
function useRegisterFieldControl(controlRef, params) {
const {
enabled = true,
getValue,
id,
value
} = params;
const {
registerFieldControl
} = (0, _FieldRootContext.useFieldRootContext)();
const sourceRef = React.useRef(null);
if (!sourceRef.current) {
sourceRef.current = Symbol();
}
(0, _useIsoLayoutEffect.useIsoLayoutEffect)(() => {
const source = sourceRef.current;
if (!source || !enabled) {
return undefined;
}
registerFieldControl(source, {
controlRef,
getValue,
id,
value
});
return () => {
registerFieldControl(source, undefined);
};
}, [controlRef, enabled, getValue, id, registerFieldControl, value]);
}