tdesign-react
Version:
TDesign Component for React
112 lines (106 loc) • 3.73 kB
JavaScript
/**
* tdesign v1.15.1
* (c) 2025 tdesign
* @license MIT
*/
;
Object.defineProperty(exports, '__esModule', { value: true });
var slicedToArray = require('../_chunks/dep-8e4d656d.js');
var React = require('react');
var isFunction = require('../_chunks/dep-ec8d2dca.js');
require('../_chunks/dep-00b49251.js');
require('../_chunks/dep-25585736.js');
require('../_chunks/dep-667ac7af.js');
require('../_chunks/dep-fc596d16.js');
var mouseEnterTimer = null;
function useTagScroll(props) {
var tagInputRef = React.useRef(null);
var _props$excessTagsDisp = props.excessTagsDisplayType,
excessTagsDisplayType = _props$excessTagsDisp === void 0 ? "scroll" : _props$excessTagsDisp,
readonly = props.readonly,
disabled = props.disabled;
var _useState = React.useState(0),
_useState2 = slicedToArray._slicedToArray(_useState, 2),
scrollDistance = _useState2[0],
setScrollDistance = _useState2[1];
var _useState3 = React.useState(),
_useState4 = slicedToArray._slicedToArray(_useState3, 2),
scrollElement = _useState4[0],
setScrollElement = _useState4[1];
var updateScrollElement = function updateScrollElement(element) {
var scrollElement2 = element.children[0];
setScrollElement(scrollElement2);
};
var updateScrollDistance = function updateScrollDistance() {
if (!scrollElement) return;
setScrollDistance(scrollElement.scrollWidth - scrollElement.clientWidth);
};
var scrollTo = function scrollTo(distance) {
if (isFunction.isFunction(scrollElement === null || scrollElement === void 0 ? void 0 : scrollElement.scroll)) {
scrollElement.scroll({
left: distance,
behavior: "smooth"
});
}
};
var scrollToRight = function scrollToRight() {
updateScrollDistance();
scrollTo(scrollDistance);
};
var scrollToLeft = function scrollToLeft() {
scrollTo(0);
};
var onWheel = function onWheel(_ref) {
var e = _ref.e;
if (readonly || disabled) return;
if (!scrollElement) return;
if (e.deltaX > 0) {
var distance = Math.min(scrollElement.scrollLeft + 120, scrollDistance);
scrollTo(distance);
} else {
var _distance = Math.max(scrollElement.scrollLeft - 120, 0);
scrollTo(_distance);
}
};
var scrollToRightOnEnter = function scrollToRightOnEnter() {
if (excessTagsDisplayType !== "scroll") return;
mouseEnterTimer = setTimeout(function () {
scrollToRight();
clearTimeout(mouseEnterTimer);
}, 100);
};
var scrollToLeftOnLeave = function scrollToLeftOnLeave() {
if (excessTagsDisplayType !== "scroll") return;
scrollTo(0);
clearTimeout(mouseEnterTimer);
};
var clearScroll = function clearScroll() {
clearTimeout(mouseEnterTimer);
};
var initScroll = function initScroll(element) {
if (!element) return;
updateScrollElement(element);
};
React.useEffect(function () {
var _tagInputRef$current;
initScroll(tagInputRef === null || tagInputRef === void 0 || (_tagInputRef$current = tagInputRef.current) === null || _tagInputRef$current === void 0 ? void 0 : _tagInputRef$current.currentElement);
return clearScroll;
}, []);
return {
initScroll: initScroll,
clearScroll: clearScroll,
tagInputRef: tagInputRef,
scrollElement: scrollElement,
scrollDistance: scrollDistance,
scrollTo: scrollTo,
scrollToRight: scrollToRight,
scrollToLeft: scrollToLeft,
updateScrollElement: updateScrollElement,
updateScrollDistance: updateScrollDistance,
onWheel: onWheel,
scrollToRightOnEnter: scrollToRightOnEnter,
scrollToLeftOnLeave: scrollToLeftOnLeave
};
}
exports["default"] = useTagScroll;
//# sourceMappingURL=useTagScroll.js.map