UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 10.1 kB
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/infinite-scroll/src/index.ts"],"sourcesContent":["// @ts-nocheck\nimport { nextTick } from 'vue'\nimport { throttle } from 'lodash-unified'\nimport {\n getOffsetTopDistance,\n getScrollContainer,\n isFunction,\n throwError,\n} from '@element-plus/utils'\nimport { useDeprecated } from '@element-plus/hooks'\n\nimport type { ComponentPublicInstance, ObjectDirective } from 'vue'\n\nexport const SCOPE = 'ElInfiniteScroll'\nexport const CHECK_INTERVAL = 50\nexport const DEFAULT_DELAY = 200\nexport const DEFAULT_DISTANCE = 0\n\nconst attributes = {\n delay: {\n type: Number,\n default: DEFAULT_DELAY,\n },\n distance: {\n type: Number,\n default: DEFAULT_DISTANCE,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n immediate: {\n type: Boolean,\n default: true,\n },\n}\n\ntype Attrs = typeof attributes\ntype ScrollOptions = { [K in keyof Attrs]: Attrs[K]['default'] }\ntype InfiniteScrollCallback = () => void\ntype InfiniteScrollEl = HTMLElement & {\n [SCOPE]: {\n container: HTMLElement | Window\n containerEl: HTMLElement\n instance: ComponentPublicInstance\n delay: number // export for test\n lastScrollTop: number\n cb: InfiniteScrollCallback\n onScroll: () => void\n observer?: MutationObserver\n }\n}\n\nconst getScrollOptions = (\n el: HTMLElement,\n instance: ComponentPublicInstance\n): ScrollOptions => {\n return Object.entries(attributes).reduce((acm, [name, option]) => {\n const { type, default: defaultValue } = option\n const attrVal = el.getAttribute(`infinite-scroll-${name}`)\n let value = instance[attrVal] ?? attrVal ?? defaultValue\n value = value === 'false' ? false : value\n value = type(value)\n acm[name] = Number.isNaN(value) ? defaultValue : value\n return acm\n }, {} as ScrollOptions)\n}\n\nconst destroyObserver = (el: InfiniteScrollEl) => {\n const { observer } = el[SCOPE]\n\n if (observer) {\n observer.disconnect()\n delete el[SCOPE].observer\n }\n}\n\nconst handleScroll = (el: InfiniteScrollEl, cb: InfiniteScrollCallback) => {\n const { container, containerEl, instance, observer, lastScrollTop } =\n el[SCOPE]\n const { disabled, distance } = getScrollOptions(el, instance)\n const { clientHeight, scrollHeight, scrollTop } = containerEl\n const delta = scrollTop - lastScrollTop\n\n el[SCOPE].lastScrollTop = scrollTop\n\n // trigger only if full check has done and not disabled and scroll down\n if (observer || disabled || delta < 0) return\n\n let shouldTrigger = false\n\n if (container === el) {\n shouldTrigger = scrollHeight - (clientHeight + scrollTop) <= distance\n } else {\n // get the scrollHeight since el might be visible overflow\n const { clientTop, scrollHeight: height } = el\n const offsetTop = getOffsetTopDistance(el, containerEl)\n shouldTrigger =\n scrollTop + clientHeight >= offsetTop + clientTop + height - distance\n }\n\n if (shouldTrigger) {\n cb.call(instance)\n }\n}\n\nfunction checkFull(el: InfiniteScrollEl, cb: InfiniteScrollCallback) {\n const { containerEl, instance } = el[SCOPE]\n const { disabled } = getScrollOptions(el, instance)\n\n if (disabled || containerEl.clientHeight === 0) return\n\n if (containerEl.scrollHeight <= containerEl.clientHeight) {\n cb.call(instance)\n } else {\n destroyObserver(el)\n }\n}\n\nconst InfiniteScroll: ObjectDirective<\n InfiniteScrollEl,\n InfiniteScrollCallback\n> = {\n async mounted(el, binding) {\n const { instance, value: cb } = binding\n\n useDeprecated(\n {\n scope: SCOPE,\n from: 'the directive v-infinite-scroll',\n replacement: 'the el-scrollbar infinite scroll',\n version: '3.0.0',\n ref: 'https://element-plus.org/en-US/component/scrollbar#infinite-scroll',\n },\n true\n )\n\n if (!isFunction(cb)) {\n throwError(SCOPE, \"'v-infinite-scroll' binding value must be a function\")\n }\n\n // ensure parentNode mounted\n await nextTick()\n\n const { delay, immediate } = getScrollOptions(el, instance)\n const container = getScrollContainer(el, true)\n const containerEl =\n container === window\n ? document.documentElement\n : (container as HTMLElement)\n const onScroll = throttle(handleScroll.bind(null, el, cb), delay)\n\n if (!container) return\n\n el[SCOPE] = {\n instance,\n container,\n containerEl,\n delay,\n cb,\n onScroll,\n lastScrollTop: containerEl.scrollTop,\n }\n\n if (immediate) {\n const observer = new MutationObserver(\n throttle(checkFull.bind(null, el, cb), CHECK_INTERVAL)\n )\n el[SCOPE].observer = observer\n observer.observe(el, { childList: true, subtree: true })\n checkFull(el, cb)\n }\n\n container.addEventListener('scroll', onScroll)\n },\n unmounted(el) {\n if (!el[SCOPE]) return\n const { container, onScroll } = el[SCOPE]\n\n container?.removeEventListener('scroll', onScroll)\n destroyObserver(el)\n },\n async updated(el) {\n if (!el[SCOPE]) {\n await nextTick()\n } else {\n const { containerEl, cb, observer } = el[SCOPE]\n if (containerEl.clientHeight && observer) {\n checkFull(el, cb)\n }\n }\n },\n}\n\nexport default InfiniteScroll\n"],"names":[],"mappings":"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"}