@vue-widget/hooks
Version:
hooks from react to vue
46 lines (45 loc) • 1.48 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useSize = useSize;
var _resizeObserverPolyfill = _interopRequireDefault(require("resize-observer-polyfill"));
var _domTarget = require("../utils/domTarget");
var _useState = require("../useState");
var _vue = require("vue");
var _useEffectWithTarget = _interopRequireDefault(require("../utils/useEffectWithTarget"));
function useSize(target) {
var _target = (0, _vue.toRef)(target);
var _a = (0, _useState.useState)(function () {
var el = (0, _domTarget.getTargetElement)((0, _vue.unref)(target));
return el ? {
width: el.clientWidth,
height: el.clientHeight
} : undefined;
}),
state = _a[0],
setState = _a[1];
(0, _useEffectWithTarget["default"])(function () {
var el = (0, _domTarget.getTargetElement)((0, _vue.unref)(target));
if (!el) {
return;
}
var resizeObserver = new _resizeObserverPolyfill["default"](function (entries) {
entries.forEach(function (entry) {
var _a = entry.target,
clientWidth = _a.clientWidth,
clientHeight = _a.clientHeight;
setState({
width: clientWidth,
height: clientHeight
});
});
});
resizeObserver.observe(el);
return function () {
resizeObserver.disconnect();
};
}, [], _target);
return state;
}