522883fbe27b3e18f9aa8d165775f79b3fdb3424973c4de521433ffb09ddd21fd8156445710ffdd2fe66c22a63be52eff72937d2bd9adc98bd598c2e45ee56 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { ref, watch, unref } from 'vue';
  2. const useScrollbar = (props, {
  3. mainTableRef,
  4. leftTableRef,
  5. rightTableRef,
  6. onMaybeEndReached
  7. }) => {
  8. const scrollPos = ref({ scrollLeft: 0, scrollTop: 0 });
  9. function doScroll(params) {
  10. var _a, _b, _c;
  11. const { scrollTop } = params;
  12. (_a = mainTableRef.value) == null ? void 0 : _a.scrollTo(params);
  13. (_b = leftTableRef.value) == null ? void 0 : _b.scrollToTop(scrollTop);
  14. (_c = rightTableRef.value) == null ? void 0 : _c.scrollToTop(scrollTop);
  15. }
  16. function scrollTo(params) {
  17. scrollPos.value = params;
  18. doScroll(params);
  19. }
  20. function scrollToTop(scrollTop) {
  21. scrollPos.value.scrollTop = scrollTop;
  22. doScroll(unref(scrollPos));
  23. }
  24. function scrollToLeft(scrollLeft) {
  25. var _a, _b;
  26. scrollPos.value.scrollLeft = scrollLeft;
  27. (_b = (_a = mainTableRef.value) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, unref(scrollPos));
  28. }
  29. function onScroll(params) {
  30. var _a;
  31. scrollTo(params);
  32. (_a = props.onScroll) == null ? void 0 : _a.call(props, params);
  33. }
  34. function onVerticalScroll({ scrollTop }) {
  35. const { scrollTop: currentScrollTop } = unref(scrollPos);
  36. if (scrollTop !== currentScrollTop)
  37. scrollToTop(scrollTop);
  38. }
  39. function scrollToRow(row, strategy = "auto") {
  40. var _a;
  41. (_a = mainTableRef.value) == null ? void 0 : _a.scrollToRow(row, strategy);
  42. }
  43. watch(() => unref(scrollPos).scrollTop, (cur, prev) => {
  44. if (cur > prev)
  45. onMaybeEndReached();
  46. });
  47. return {
  48. scrollPos,
  49. scrollTo,
  50. scrollToLeft,
  51. scrollToTop,
  52. scrollToRow,
  53. onScroll,
  54. onVerticalScroll
  55. };
  56. };
  57. export { useScrollbar };
  58. //# sourceMappingURL=use-scrollbar.mjs.map