element-plus
Version:
A Component Library for Vue 3
1 lines • 37.3 kB
Source Map (JSON)
{"version":3,"file":"build-grid.mjs","sources":["../../../../../../../packages/components/virtual-list/src/builders/build-grid.ts"],"sourcesContent":["import {\n Fragment,\n computed,\n defineComponent,\n getCurrentInstance,\n h,\n mergeProps,\n nextTick,\n onMounted,\n ref,\n resolveDynamicComponent,\n unref,\n} from 'vue'\nimport { useEventListener } from '@vueuse/core'\nimport {\n getScrollBarWidth,\n hasOwn,\n isClient,\n isNumber,\n isString,\n} from '@element-plus/utils'\nimport { useNamespace } from '@element-plus/hooks'\nimport Scrollbar from '../components/scrollbar'\nimport { useGridWheel } from '../hooks/use-grid-wheel'\nimport { useCache } from '../hooks/use-cache'\nimport { useGridTouch } from '../hooks/use-grid-touch'\nimport { virtualizedGridProps } from '../props'\nimport { getRTLOffsetType, getScrollDir, isRTL } from '../utils'\nimport {\n AUTO_ALIGNMENT,\n BACKWARD,\n FORWARD,\n ITEM_RENDER_EVT,\n RTL,\n RTL_OFFSET_NAG,\n RTL_OFFSET_POS_ASC,\n RTL_OFFSET_POS_DESC,\n SCROLL_EVT,\n} from '../defaults'\n\nimport type {\n CSSProperties,\n Ref,\n StyleValue,\n UnwrapRef,\n VNode,\n VNodeChild,\n} from 'vue'\nimport type {\n Alignment,\n GridConstructorProps,\n GridScrollOptions,\n GridStates,\n ScrollbarExpose,\n} from '../types'\nimport type { VirtualizedGridProps } from '../props'\nimport type { DynamicSizeGridInstance } from '../components/dynamic-size-grid.ts'\n\nconst createGrid = ({\n name,\n clearCache,\n getColumnPosition,\n getColumnStartIndexForOffset,\n getColumnStopIndexForStartIndex,\n getEstimatedTotalHeight,\n getEstimatedTotalWidth,\n getColumnOffset,\n getRowOffset,\n getRowPosition,\n getRowStartIndexForOffset,\n getRowStopIndexForStartIndex,\n\n initCache,\n injectToInstance,\n validateProps,\n}: GridConstructorProps<VirtualizedGridProps>) => {\n return defineComponent({\n name: name ?? 'ElVirtualList',\n props: virtualizedGridProps,\n emits: [ITEM_RENDER_EVT, SCROLL_EVT],\n setup(props, { emit, expose, slots }) {\n const ns = useNamespace('vl')\n\n validateProps(props)\n const instance = getCurrentInstance()!\n const cache = ref(initCache(props, instance))\n injectToInstance?.(instance, cache)\n // refs\n // here windowRef and innerRef can be type of HTMLElement\n // or user defined component type, depends on the type passed\n // by user\n const windowRef = ref<HTMLElement>()\n const hScrollbar = ref<ScrollbarExpose>()\n const vScrollbar = ref<ScrollbarExpose>()\n // innerRef is the actual container element which contains all the elements\n const innerRef = ref<HTMLElement>()\n const states = ref<GridStates>({\n isScrolling: false,\n scrollLeft: isNumber(props.initScrollLeft) ? props.initScrollLeft : 0,\n scrollTop: isNumber(props.initScrollTop) ? props.initScrollTop : 0,\n updateRequested: false,\n xAxisScrollDir: FORWARD,\n yAxisScrollDir: FORWARD,\n })\n\n const getItemStyleCache = useCache()\n\n // computed\n const parsedHeight = computed(() =>\n Number.parseInt(`${props.height}`, 10)\n )\n const parsedWidth = computed(() => Number.parseInt(`${props.width}`, 10))\n const columnsToRender = computed(() => {\n const { totalColumn, totalRow, columnCache } = props\n const { isScrolling, xAxisScrollDir, scrollLeft } = unref(states)\n\n if (totalColumn === 0 || totalRow === 0) {\n return [0, 0, 0, 0]\n }\n\n const startIndex = getColumnStartIndexForOffset(\n props,\n scrollLeft,\n unref(cache)\n )\n const stopIndex = getColumnStopIndexForStartIndex(\n props,\n startIndex,\n scrollLeft,\n unref(cache)\n )\n\n const cacheBackward =\n !isScrolling || xAxisScrollDir === BACKWARD\n ? Math.max(1, columnCache)\n : 1\n const cacheForward =\n !isScrolling || xAxisScrollDir === FORWARD\n ? Math.max(1, columnCache)\n : 1\n\n return [\n Math.max(0, startIndex - cacheBackward),\n Math.max(0, Math.min(totalColumn! - 1, stopIndex + cacheForward)),\n startIndex,\n stopIndex,\n ]\n })\n\n const rowsToRender = computed(() => {\n const { totalColumn, totalRow, rowCache } = props\n const { isScrolling, yAxisScrollDir, scrollTop } = unref(states)\n\n if (totalColumn === 0 || totalRow === 0) {\n return [0, 0, 0, 0]\n }\n\n const startIndex = getRowStartIndexForOffset(\n props,\n scrollTop,\n unref(cache)\n )\n const stopIndex = getRowStopIndexForStartIndex(\n props,\n startIndex,\n scrollTop,\n unref(cache)\n )\n\n const cacheBackward =\n !isScrolling || yAxisScrollDir === BACKWARD\n ? Math.max(1, rowCache)\n : 1\n const cacheForward =\n !isScrolling || yAxisScrollDir === FORWARD ? Math.max(1, rowCache) : 1\n\n return [\n Math.max(0, startIndex - cacheBackward),\n Math.max(0, Math.min(totalRow! - 1, stopIndex + cacheForward)),\n startIndex,\n stopIndex,\n ]\n })\n\n const estimatedTotalHeight = computed(() =>\n getEstimatedTotalHeight(props, unref(cache))\n )\n const estimatedTotalWidth = computed(() =>\n getEstimatedTotalWidth(props, unref(cache))\n )\n\n const windowStyle = computed<StyleValue>(() => [\n {\n position: 'relative',\n overflow: 'hidden',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n },\n {\n direction: props.direction,\n height: isNumber(props.height) ? `${props.height}px` : props.height,\n width: isNumber(props.width) ? `${props.width}px` : props.width,\n },\n props.style ?? {},\n ])\n\n const innerStyle = computed(() => {\n const width = `${unref(estimatedTotalWidth)}px`\n const height = `${unref(estimatedTotalHeight)}px`\n\n return {\n height,\n pointerEvents: unref(states).isScrolling ? 'none' : undefined,\n width,\n\n // fix scrolling issues in Firefox.\n margin: 0,\n boxSizing: 'border-box',\n }\n })\n\n // methods\n const emitEvents = () => {\n const { totalColumn, totalRow } = props\n\n if (totalColumn! > 0 && totalRow! > 0) {\n const [\n columnCacheStart,\n columnCacheEnd,\n columnVisibleStart,\n columnVisibleEnd,\n ] = unref(columnsToRender)\n const [rowCacheStart, rowCacheEnd, rowVisibleStart, rowVisibleEnd] =\n unref(rowsToRender)\n // emit the render item event with\n // [xAxisInvisibleStart, xAxisInvisibleEnd, xAxisVisibleStart, xAxisVisibleEnd]\n // [yAxisInvisibleStart, yAxisInvisibleEnd, yAxisVisibleStart, yAxisVisibleEnd]\n emit(ITEM_RENDER_EVT, {\n columnCacheStart,\n columnCacheEnd,\n rowCacheStart,\n rowCacheEnd,\n columnVisibleStart,\n columnVisibleEnd,\n rowVisibleStart,\n rowVisibleEnd,\n })\n }\n\n const {\n scrollLeft,\n scrollTop,\n updateRequested,\n xAxisScrollDir,\n yAxisScrollDir,\n } = unref(states)\n emit(SCROLL_EVT, {\n xAxisScrollDir,\n scrollLeft,\n yAxisScrollDir,\n scrollTop,\n updateRequested,\n })\n }\n\n const onScroll = (e: Event) => {\n const {\n clientHeight,\n clientWidth,\n scrollHeight,\n scrollLeft,\n scrollTop,\n scrollWidth,\n } = e.currentTarget as HTMLElement\n\n const _states = unref(states)\n\n if (\n _states.scrollTop === scrollTop &&\n _states.scrollLeft === scrollLeft\n ) {\n return\n }\n\n let _scrollLeft = scrollLeft\n\n if (isRTL(props.direction)) {\n switch (getRTLOffsetType()) {\n case RTL_OFFSET_NAG:\n _scrollLeft = -scrollLeft\n break\n case RTL_OFFSET_POS_DESC:\n _scrollLeft = scrollWidth - clientWidth - scrollLeft\n break\n }\n }\n\n states.value = {\n ..._states,\n isScrolling: true,\n scrollLeft: _scrollLeft,\n scrollTop: Math.max(\n 0,\n Math.min(scrollTop, scrollHeight - clientHeight)\n ),\n updateRequested: true,\n xAxisScrollDir: getScrollDir(_states.scrollLeft, _scrollLeft),\n yAxisScrollDir: getScrollDir(_states.scrollTop, scrollTop),\n }\n\n nextTick(() => resetIsScrolling())\n\n onUpdated()\n emitEvents()\n }\n\n const onVerticalScroll = (distance: number, totalSteps: number) => {\n const height = unref(parsedHeight)\n const offset =\n ((estimatedTotalHeight.value - height) / totalSteps) * distance\n scrollTo({\n scrollTop: Math.min(estimatedTotalHeight.value - height, offset),\n })\n }\n\n const onHorizontalScroll = (distance: number, totalSteps: number) => {\n const width = unref(parsedWidth)\n const offset =\n ((estimatedTotalWidth.value - width) / totalSteps) * distance\n scrollTo({\n scrollLeft: Math.min(estimatedTotalWidth.value - width, offset),\n })\n }\n\n const { onWheel } = useGridWheel(\n {\n atXStartEdge: computed(() => states.value.scrollLeft <= 0),\n atXEndEdge: computed(\n () =>\n states.value.scrollLeft >=\n estimatedTotalWidth.value - unref(parsedWidth)\n ),\n atYStartEdge: computed(() => states.value.scrollTop <= 0),\n atYEndEdge: computed(\n () =>\n states.value.scrollTop >=\n estimatedTotalHeight.value - unref(parsedHeight)\n ),\n },\n (x: number, y: number) => {\n hScrollbar.value?.onMouseUp?.()\n vScrollbar.value?.onMouseUp?.()\n const width = unref(parsedWidth)\n const height = unref(parsedHeight)\n scrollTo({\n scrollLeft: Math.min(\n states.value.scrollLeft + x,\n estimatedTotalWidth.value - width\n ),\n scrollTop: Math.min(\n states.value.scrollTop + y,\n estimatedTotalHeight.value - height\n ),\n })\n }\n )\n\n useEventListener(windowRef, 'wheel', onWheel, {\n passive: false,\n })\n\n const scrollTo = ({\n scrollLeft = states.value.scrollLeft,\n scrollTop = states.value.scrollTop,\n }: GridScrollOptions) => {\n scrollLeft = Math.max(scrollLeft, 0)\n scrollTop = Math.max(scrollTop, 0)\n const _states = unref(states)\n if (\n scrollTop === _states.scrollTop &&\n scrollLeft === _states.scrollLeft\n ) {\n return\n }\n\n states.value = {\n ..._states,\n xAxisScrollDir: getScrollDir(_states.scrollLeft, scrollLeft),\n yAxisScrollDir: getScrollDir(_states.scrollTop, scrollTop),\n scrollLeft,\n scrollTop,\n updateRequested: true,\n }\n\n nextTick(() => resetIsScrolling())\n\n onUpdated()\n emitEvents()\n }\n\n const { touchStartX, touchStartY, handleTouchStart, handleTouchMove } =\n useGridTouch(\n windowRef,\n states,\n scrollTo,\n estimatedTotalWidth,\n estimatedTotalHeight,\n parsedWidth,\n parsedHeight\n )\n\n const scrollToItem = (\n rowIndex = 0,\n columnIdx = 0,\n alignment: Alignment = AUTO_ALIGNMENT\n ) => {\n const _states = unref(states)\n columnIdx = Math.max(0, Math.min(columnIdx, props.totalColumn! - 1))\n rowIndex = Math.max(0, Math.min(rowIndex, props.totalRow! - 1))\n const scrollBarWidth = getScrollBarWidth(ns.namespace.value)\n\n const _cache = unref(cache)\n const estimatedHeight = getEstimatedTotalHeight(props, _cache)\n const estimatedWidth = getEstimatedTotalWidth(props, _cache)\n\n scrollTo({\n scrollLeft: getColumnOffset(\n props,\n columnIdx,\n alignment,\n _states.scrollLeft,\n _cache,\n estimatedWidth > (props.width as number) ? scrollBarWidth : 0\n ),\n scrollTop: getRowOffset(\n props,\n rowIndex,\n alignment,\n _states.scrollTop,\n _cache,\n estimatedHeight > (props.height as number) ? scrollBarWidth : 0\n ),\n })\n }\n\n const getItemStyle = (rowIndex: number, columnIndex: number) => {\n const { columnWidth, direction, rowHeight } = props\n const itemStyleCache = getItemStyleCache.value(\n clearCache && columnWidth,\n clearCache && rowHeight,\n clearCache && direction\n )\n // since there was no need to introduce an nested array into cache object\n // we use row,column to construct the key for indexing the map.\n const key = `${rowIndex},${columnIndex}`\n\n if (hasOwn(itemStyleCache, key)) {\n return itemStyleCache[key] as CSSProperties\n } else {\n const [, left] = getColumnPosition(props, columnIndex, unref(cache))\n const _cache = unref(cache)\n\n const rtl = isRTL(direction)\n const [height, top] = getRowPosition(props, rowIndex, _cache)\n const [width] = getColumnPosition(props, columnIndex, _cache)\n\n itemStyleCache[key] = {\n position: 'absolute',\n left: rtl ? undefined : `${left}px`,\n right: rtl ? `${left}px` : undefined,\n top: `${top}px`,\n height: `${height}px`,\n width: `${width}px`,\n }\n\n return itemStyleCache[key] as CSSProperties\n }\n }\n\n // TODO: debounce setting is scrolling.\n\n const resetIsScrolling = () => {\n states.value.isScrolling = false\n nextTick(() => {\n getItemStyleCache.value(-1, null, null)\n })\n }\n\n // life cycles\n onMounted(() => {\n // for SSR\n if (!isClient) return\n const { initScrollLeft, initScrollTop } = props\n const windowElement = unref(windowRef)\n if (windowElement) {\n if (isNumber(initScrollLeft)) {\n windowElement.scrollLeft = initScrollLeft\n }\n if (isNumber(initScrollTop)) {\n windowElement.scrollTop = initScrollTop\n }\n }\n emitEvents()\n })\n\n const onUpdated = () => {\n const { direction } = props\n const { scrollLeft, scrollTop, updateRequested } = unref(states)\n\n const windowElement = unref(windowRef)\n if (updateRequested && windowElement) {\n if (direction === RTL) {\n switch (getRTLOffsetType()) {\n case RTL_OFFSET_NAG: {\n windowElement.scrollLeft = -scrollLeft\n break\n }\n case RTL_OFFSET_POS_ASC: {\n windowElement.scrollLeft = scrollLeft\n break\n }\n default: {\n const { clientWidth, scrollWidth } = windowElement\n windowElement.scrollLeft =\n scrollWidth - clientWidth - scrollLeft\n break\n }\n }\n } else {\n windowElement.scrollLeft = Math.max(0, scrollLeft)\n }\n\n windowElement.scrollTop = Math.max(0, scrollTop)\n }\n }\n\n const { resetAfterColumnIndex, resetAfterRowIndex, resetAfter } =\n instance.proxy as DynamicSizeGridInstance\n\n expose({\n windowRef,\n innerRef,\n getItemStyleCache,\n touchStartX,\n touchStartY,\n handleTouchStart,\n handleTouchMove,\n scrollTo,\n scrollToItem,\n states,\n resetAfterColumnIndex,\n resetAfterRowIndex,\n resetAfter,\n })\n\n // rendering part\n\n const renderScrollbars = () => {\n const {\n scrollbarAlwaysOn,\n scrollbarStartGap,\n scrollbarEndGap,\n totalColumn,\n totalRow,\n } = props\n\n const width = unref(parsedWidth)\n const height = unref(parsedHeight)\n const estimatedWidth = unref(estimatedTotalWidth)\n const estimatedHeight = unref(estimatedTotalHeight)\n const { scrollLeft, scrollTop } = unref(states)\n const horizontalScrollbar = h(Scrollbar, {\n ref: hScrollbar,\n alwaysOn: scrollbarAlwaysOn,\n startGap: scrollbarStartGap,\n endGap: scrollbarEndGap,\n class: ns.e('horizontal'),\n clientSize: width,\n layout: 'horizontal',\n onScroll: onHorizontalScroll,\n ratio: (width * 100) / estimatedWidth,\n scrollFrom: scrollLeft / (estimatedWidth - width),\n total: totalRow,\n visible: true,\n })\n\n const verticalScrollbar = h(Scrollbar, {\n ref: vScrollbar,\n alwaysOn: scrollbarAlwaysOn,\n startGap: scrollbarStartGap,\n endGap: scrollbarEndGap,\n class: ns.e('vertical'),\n clientSize: height,\n layout: 'vertical',\n onScroll: onVerticalScroll,\n ratio: (height * 100) / estimatedHeight,\n scrollFrom: scrollTop / (estimatedHeight - height),\n\n total: totalColumn,\n visible: true,\n })\n\n return {\n horizontalScrollbar,\n verticalScrollbar,\n }\n }\n\n const renderItems = () => {\n const [columnStart, columnEnd] = unref(columnsToRender)\n const [rowStart, rowEnd] = unref(rowsToRender)\n const { data, totalColumn, totalRow, useIsScrolling, itemKey } = props\n const children: VNodeChild[] = []\n if (totalRow > 0 && totalColumn > 0) {\n for (let row = rowStart; row <= rowEnd; row++) {\n for (let column = columnStart; column <= columnEnd; column++) {\n const key = itemKey({ columnIndex: column, data, rowIndex: row })\n children.push(\n h(\n Fragment,\n { key },\n slots.default?.({\n columnIndex: column,\n data,\n isScrolling: useIsScrolling\n ? unref(states).isScrolling\n : undefined,\n style: getItemStyle(row, column),\n rowIndex: row,\n })\n )\n )\n }\n }\n }\n return children\n }\n\n const renderInner = () => {\n const Inner = resolveDynamicComponent(props.innerElement) as VNode\n const children = renderItems()\n return [\n h(\n Inner,\n mergeProps(props.innerProps, {\n style: unref(innerStyle),\n ref: innerRef,\n }),\n !isString(Inner)\n ? {\n default: () => children,\n }\n : children\n ),\n ]\n }\n\n const renderWindow = () => {\n const Container = resolveDynamicComponent(\n props.containerElement\n ) as VNode\n const { horizontalScrollbar, verticalScrollbar } = renderScrollbars()\n const Inner = renderInner()\n\n return h(\n 'div',\n {\n key: 0,\n class: ns.e('wrapper'),\n role: props.role,\n },\n [\n h(\n Container,\n {\n class: props.className,\n style: unref(windowStyle),\n onScroll,\n ref: windowRef,\n },\n !isString(Container) ? { default: () => Inner } : Inner\n ),\n horizontalScrollbar,\n verticalScrollbar,\n ]\n )\n }\n\n return renderWindow\n },\n })\n}\n\nexport default createGrid\n\nexport type GridInstance = InstanceType<ReturnType<typeof createGrid>> &\n UnwrapRef<{\n windowRef: Ref<HTMLElement>\n innerRef: Ref<HTMLElement>\n getItemStyleCache: ReturnType<typeof useCache>\n scrollTo: (scrollOptions: GridScrollOptions) => void\n scrollToItem: (\n rowIndex: number,\n columnIndex: number,\n alignment: Alignment\n ) => void\n states: Ref<GridStates>\n }>\n"],"names":["Scrollbar"],"mappings":"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"}