react-formal
Version:
Classy HTML form management for React
45 lines (44 loc) • 1.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = require("react");
var _BindingContext = require("./BindingContext");
function extractTargetValue(eventOrValue) {
if (!eventOrValue || typeof eventOrValue !== 'object' || !('target' in eventOrValue)) return eventOrValue;
const {
type,
value,
checked,
multiple,
files
} = eventOrValue.target;
if (type === 'file') return multiple ? files : files && files[0];
if (/number|range/.test(type)) {
let parsed = parseFloat(value);
return isNaN(parsed) ? null : parsed;
}
return /checkbox|radio/.test(type) ? checked : value;
}
function useBinding(bindTo, mapValue = extractTargetValue) {
const {
updateBindingValue,
getValue
} = (0, _BindingContext.useBindingContext)();
const value = getValue(bindTo);
const handleEvent = (0, _react.useCallback)((...args) => {
let mapper = mapValue;
if (typeof bindTo === 'string' && typeof mapValue !== 'object') {
mapper = {
[bindTo]: mapValue
};
}
if (mapper) {
updateBindingValue(mapper, args);
}
}, [bindTo, mapValue, updateBindingValue]);
return [value, handleEvent];
}
var _default = useBinding;
exports.default = _default;