@wordpress/components
Version:
UI components for WordPress.
90 lines (75 loc) • 2.34 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = AllInputControl;
var _element = require("@wordpress/element");
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _unitControl = _interopRequireDefault(require("./unit-control"));
var _utils = require("./utils");
/**
* Internal dependencies
*/
const noop = () => {};
function AllInputControl(_ref) {
let {
onChange = noop,
onFocus = noop,
onHoverOn = noop,
onHoverOff = noop,
values,
sides,
selectedUnits,
setSelectedUnits,
...props
} = _ref;
const allValue = (0, _utils.getAllValue)(values, selectedUnits, sides);
const hasValues = (0, _utils.isValuesDefined)(values);
const isMixed = hasValues && (0, _utils.isValuesMixed)(values, selectedUnits, sides);
const allPlaceholder = isMixed ? _utils.LABELS.mixed : undefined;
const handleOnFocus = event => {
onFocus(event, {
side: 'all'
});
};
const handleOnChange = next => {
const isNumeric = next !== undefined && !isNaN(parseFloat(next));
const nextValue = isNumeric ? next : undefined;
const nextValues = (0, _utils.applyValueToSides)(values, nextValue, sides);
onChange(nextValues);
}; // Set selected unit so it can be used as fallback by unlinked controls
// when individual sides do not have a value containing a unit.
const handleOnUnitChange = unit => {
const newUnits = (0, _utils.applyValueToSides)(selectedUnits, unit, sides);
setSelectedUnits(newUnits);
};
const handleOnHoverOn = () => {
onHoverOn({
top: true,
bottom: true,
left: true,
right: true
});
};
const handleOnHoverOff = () => {
onHoverOff({
top: false,
bottom: false,
left: false,
right: false
});
};
return (0, _element.createElement)(_unitControl.default, (0, _extends2.default)({}, props, {
disableUnits: isMixed,
isOnly: true,
value: allValue,
onChange: handleOnChange,
onUnitChange: handleOnUnitChange,
onFocus: handleOnFocus,
onHoverOn: handleOnHoverOn,
onHoverOff: handleOnHoverOff,
placeholder: allPlaceholder
}));
}
//# sourceMappingURL=all-input-control.js.map