rc-trigger
Version:
base abstract trigger component for react
71 lines (53 loc) • 2 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var React = _interopRequireWildcard(require("react"));
var _default = function _default(stretch) {
var _React$useState = React.useState({
width: 0,
height: 0
}),
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
targetSize = _React$useState2[0],
setTargetSize = _React$useState2[1];
function measureStretch(element) {
var tgtWidth = element.offsetWidth,
tgtHeight = element.offsetHeight;
var _element$getBoundingC = element.getBoundingClientRect(),
width = _element$getBoundingC.width,
height = _element$getBoundingC.height; // Rect is more accurate than offset, use if near
if (Math.abs(tgtWidth - width) < 1 && Math.abs(tgtHeight - height) < 1) {
tgtWidth = width;
tgtHeight = height;
}
setTargetSize({
width: tgtWidth,
height: tgtHeight
});
} // Merge stretch style
var style = React.useMemo(function () {
var sizeStyle = {};
if (stretch) {
var width = targetSize.width,
height = targetSize.height; // Stretch with target
if (stretch.indexOf('height') !== -1 && height) {
sizeStyle.height = height;
} else if (stretch.indexOf('minHeight') !== -1 && height) {
sizeStyle.minHeight = height;
}
if (stretch.indexOf('width') !== -1 && width) {
sizeStyle.width = width;
} else if (stretch.indexOf('minWidth') !== -1 && width) {
sizeStyle.minWidth = width;
}
}
return sizeStyle;
}, [stretch, targetSize]);
return [style, measureStretch];
};
exports.default = _default;