tdesign-react
Version:
TDesign Component for React
105 lines (101 loc) • 3.48 kB
JavaScript
/**
* tdesign v1.15.1
* (c) 2025 tdesign
* @license MIT
*/
import { _ as _slicedToArray } from '../_chunks/dep-48805ab8.js';
import { isFunction } from 'lodash-es';
import { useRef, useState, useEffect } from 'react';
import '../_chunks/dep-026a4c6b.js';
var mouseEnterTimer = null;
function useTagScroll(props) {
var tagInputRef = useRef(null);
var _props$excessTagsDisp = props.excessTagsDisplayType,
excessTagsDisplayType = _props$excessTagsDisp === void 0 ? "scroll" : _props$excessTagsDisp,
readonly = props.readonly,
disabled = props.disabled;
var _useState = useState(0),
_useState2 = _slicedToArray(_useState, 2),
scrollDistance = _useState2[0],
setScrollDistance = _useState2[1];
var _useState3 = useState(),
_useState4 = _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(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);
};
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
};
}
export { useTagScroll as default };
//# sourceMappingURL=useTagScroll.js.map