element-plus
Version:
A Component Library for Vue 3
1 lines • 38.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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"}