element-plus
Version:
A Component Library for Vue 3
1 lines • 4.31 kB
Source Map (JSON)
{"version":3,"file":"use-scrollbar.mjs","sources":["../../../../../../../packages/components/table-v2/src/composables/use-scrollbar.ts"],"sourcesContent":["import { ref, unref, watch } from 'vue'\n\nimport type { Ref } from 'vue'\nimport type { Alignment as ScrollStrategy } from '@element-plus/components/virtual-list'\nimport type { TableV2Props } from '../table'\nimport type { TableGridInstance } from '../table-grid'\n\nexport type ScrollPos = { scrollLeft: number; scrollTop: number }\ntype GridInstanceRef = Ref<TableGridInstance | undefined>\n\ntype UseScrollBarProps = {\n mainTableRef: GridInstanceRef\n leftTableRef: GridInstanceRef\n rightTableRef: GridInstanceRef\n\n onMaybeEndReached: () => void\n}\n\nexport type { ScrollStrategy }\n\nexport const useScrollbar = (\n props: TableV2Props,\n {\n mainTableRef,\n leftTableRef,\n rightTableRef,\n onMaybeEndReached,\n }: UseScrollBarProps\n) => {\n const scrollPos = ref<ScrollPos>({ scrollLeft: 0, scrollTop: 0 })\n\n function doScroll(params: ScrollPos) {\n const { scrollTop } = params\n\n mainTableRef.value?.scrollTo(params)\n leftTableRef.value?.scrollToTop(scrollTop)\n rightTableRef.value?.scrollToTop(scrollTop)\n }\n\n // methods\n function scrollTo(params: ScrollPos) {\n scrollPos.value = params\n\n doScroll(params)\n }\n\n function scrollToTop(scrollTop: number) {\n scrollPos.value.scrollTop = scrollTop\n\n doScroll(unref(scrollPos))\n }\n\n function scrollToLeft(scrollLeft: number) {\n scrollPos.value.scrollLeft = scrollLeft\n\n mainTableRef.value?.scrollTo?.(unref(scrollPos))\n }\n\n function onScroll(params: ScrollPos) {\n scrollTo(params)\n props.onScroll?.(params)\n }\n\n function onVerticalScroll({ scrollTop }: ScrollPos) {\n const { scrollTop: currentScrollTop } = unref(scrollPos)\n if (scrollTop !== currentScrollTop) scrollToTop(scrollTop)\n }\n\n function scrollToRow(row: number, strategy: ScrollStrategy = 'auto') {\n mainTableRef.value?.scrollToRow(row, strategy)\n }\n\n // When scrollTop changes, maybe reaching the bottom\n watch(\n () => unref(scrollPos).scrollTop,\n (cur, prev) => {\n if (cur > prev) onMaybeEndReached()\n }\n )\n\n return {\n scrollPos,\n\n scrollTo,\n scrollToLeft,\n scrollToTop,\n scrollToRow,\n onScroll,\n onVerticalScroll,\n }\n}\n"],"names":[],"mappings":";;AAoBO,MAAM,YAAA,GAAe,CAC1B,KAAA,EACA;AAAA,EACE,YAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,KACG;AACH,EAAA,MAAM,YAAY,GAAA,CAAe,EAAE,YAAY,CAAA,EAAG,SAAA,EAAW,GAAG,CAAA;AAEhE,EAAA,SAAS,SAAS,MAAA,EAAmB;AA/BvC,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAgCI,IAAA,MAAM,EAAE,WAAU,GAAI,MAAA;AAEtB,IAAA,CAAA,EAAA,GAAA,YAAA,CAAa,KAAA,KAAb,mBAAoB,QAAA,CAAS,MAAA,CAAA;AAC7B,IAAA,CAAA,EAAA,GAAA,YAAA,CAAa,KAAA,KAAb,mBAAoB,WAAA,CAAY,SAAA,CAAA;AAChC,IAAA,CAAA,EAAA,GAAA,aAAA,CAAc,KAAA,KAAd,mBAAqB,WAAA,CAAY,SAAA,CAAA;AAAA,EACnC;AAGA,EAAA,SAAS,SAAS,MAAA,EAAmB;AACnC,IAAA,SAAA,CAAU,KAAA,GAAQ,MAAA;AAElB,IAAA,QAAA,CAAS,MAAM,CAAA;AAAA,EACjB;AAEA,EAAA,SAAS,YAAY,SAAA,EAAmB;AACtC,IAAA,SAAA,CAAU,MAAM,SAAA,GAAY,SAAA;AAE5B,IAAA,QAAA,CAAS,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,EAC3B;AAEA,EAAA,SAAS,aAAa,UAAA,EAAoB;AApD5C,IAAA,IAAA,EAAA,EAAA,EAAA;AAqDI,IAAA,SAAA,CAAU,MAAM,UAAA,GAAa,UAAA;AAE7B,IAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,YAAA,CAAa,KAAA,KAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAoB,QAAA,KAApB,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAA+B,MAAM,SAAS,CAAA,CAAA;AAAA,EAChD;AAEA,EAAA,SAAS,SAAS,MAAA,EAAmB;AA1DvC,IAAA,IAAA,EAAA;AA2DI,IAAA,QAAA,CAAS,MAAM,CAAA;AACf,IAAA,CAAA,EAAA,GAAA,KAAA,CAAM,aAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,EAAiB,MAAA,CAAA;AAAA,EACnB;AAEA,EAAA,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAU,EAAc;AAClD,IAAA,MAAM,EAAE,SAAA,EAAW,gBAAA,EAAiB,GAAI,MAAM,SAAS,CAAA;AACvD,IAAA,IAAI,SAAA,KAAc,gBAAA,EAAkB,WAAA,CAAY,SAAS,CAAA;AAAA,EAC3D;AAEA,EAAA,SAAS,WAAA,CAAY,GAAA,EAAa,QAAA,GAA2B,MAAA,EAAQ;AApEvE,IAAA,IAAA,EAAA;AAqEI,IAAA,CAAA,EAAA,GAAA,YAAA,CAAa,KAAA,KAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAoB,WAAA,CAAY,GAAA,EAAK,QAAA,CAAA;AAAA,EACvC;AAGA,EAAA,KAAA;AAAA,IACE,MAAM,KAAA,CAAM,SAAS,CAAA,CAAE,SAAA;AAAA,IACvB,CAAC,KAAK,IAAA,KAAS;AACb,MAAA,IAAI,GAAA,GAAM,MAAM,iBAAA,EAAkB;AAAA,IACpC;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IAEA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}