element-plus
Version:
A Component Library for Vue 3
1 lines • 20.4 kB
Source Map (JSON)
{"version":3,"file":"dynamic-size-grid.mjs","sources":["../../../../../../../packages/components/virtual-list/src/components/dynamic-size-grid.ts"],"sourcesContent":["import {\n isFunction,\n isNumber,\n isUndefined,\n throwError,\n} from '@element-plus/utils'\nimport createGrid from '../builders/build-grid'\nimport {\n AUTO_ALIGNMENT,\n CENTERED_ALIGNMENT,\n DEFAULT_DYNAMIC_LIST_ITEM_SIZE,\n END_ALIGNMENT,\n SMART_ALIGNMENT,\n START_ALIGNMENT,\n} from '../defaults'\n\nimport type { GridInstance } from '../builders/build-grid'\nimport type { VirtualizedGridProps } from '../props'\nimport type { Alignment, GridCache, ItemSize } from '../types'\n\nconst { max, min, floor } = Math\nconst SCOPE = 'ElDynamicSizeGrid'\n\ntype Props = VirtualizedGridProps\ntype CacheItemType = 'column' | 'row'\ntype Indices = {\n columnIndex?: number\n rowIndex?: number\n}\n\n// generates props access key via type\nconst ACCESS_SIZER_KEY_MAP = {\n column: 'columnWidth',\n row: 'rowHeight',\n} as const\n\n// generates cache access key via type\nconst ACCESS_LAST_VISITED_KEY_MAP = {\n column: 'lastVisitedColumnIndex',\n row: 'lastVisitedRowIndex',\n} as const\n\nconst getItemFromCache = (\n props: Props,\n index: number,\n gridCache: GridCache,\n type: CacheItemType\n) => {\n const [cachedItems, sizer, lastVisited] = [\n gridCache[type],\n props[ACCESS_SIZER_KEY_MAP[type]] as ItemSize,\n gridCache[ACCESS_LAST_VISITED_KEY_MAP[type]],\n ]\n\n if (index > lastVisited) {\n let offset = 0\n if (lastVisited >= 0) {\n const item = cachedItems[lastVisited]\n offset = item.offset + item.size\n }\n\n for (let i = lastVisited + 1; i <= index; i++) {\n const size = sizer(i)\n\n cachedItems[i] = {\n offset,\n size,\n }\n\n offset += size\n }\n\n gridCache[ACCESS_LAST_VISITED_KEY_MAP[type]] = index\n }\n\n return cachedItems[index]\n}\n\nconst bs = (\n props: Props,\n gridCache: GridCache,\n low: number,\n high: number,\n offset: number,\n type: CacheItemType\n) => {\n while (low <= high) {\n const mid = low + floor((high - low) / 2)\n const currentOffset = getItemFromCache(props, mid, gridCache, type).offset\n\n if (currentOffset === offset) {\n return mid\n } else if (currentOffset < offset) {\n low = mid + 1\n } else {\n high = mid - 1\n }\n }\n\n return max(0, low - 1)\n}\n\nconst es = (\n props: Props,\n gridCache: GridCache,\n idx: number,\n offset: number,\n type: CacheItemType\n) => {\n const total = type === 'column' ? props.totalColumn : props.totalRow\n let exponent = 1\n\n while (\n idx < total &&\n getItemFromCache(props, idx, gridCache, type).offset < offset\n ) {\n idx += exponent\n exponent *= 2\n }\n\n return bs(props, gridCache, floor(idx / 2), min(idx, total - 1), offset, type)\n}\n\nconst findItem = (\n props: Props,\n gridCache: GridCache,\n offset: number,\n type: CacheItemType\n) => {\n const [cache, lastVisitedIndex] = [\n gridCache[type],\n gridCache[ACCESS_LAST_VISITED_KEY_MAP[type]],\n ]\n\n const lastVisitedItemOffset =\n lastVisitedIndex > 0 ? cache[lastVisitedIndex].offset : 0\n\n if (lastVisitedItemOffset >= offset) {\n return bs(props, gridCache, 0, lastVisitedIndex, offset, type)\n }\n\n return es(props, gridCache, max(0, lastVisitedIndex), offset, type)\n}\n\nconst getEstimatedTotalHeight = (\n { totalRow }: Props,\n { estimatedRowHeight, lastVisitedRowIndex, row }: GridCache\n) => {\n let sizeOfVisitedRows = 0\n\n if (lastVisitedRowIndex >= totalRow) {\n lastVisitedRowIndex = totalRow - 1\n }\n\n if (lastVisitedRowIndex >= 0) {\n const item = row[lastVisitedRowIndex]\n sizeOfVisitedRows = item.offset + item.size\n }\n\n const unvisitedItems = totalRow - lastVisitedRowIndex - 1\n const sizeOfUnvisitedItems = unvisitedItems * estimatedRowHeight\n\n return sizeOfVisitedRows + sizeOfUnvisitedItems\n}\nconst getEstimatedTotalWidth = (\n { totalColumn }: Props,\n { column, estimatedColumnWidth, lastVisitedColumnIndex }: GridCache\n) => {\n let sizeOfVisitedColumns = 0\n\n if (lastVisitedColumnIndex > totalColumn) {\n lastVisitedColumnIndex = totalColumn - 1\n }\n\n if (lastVisitedColumnIndex >= 0) {\n const item = column[lastVisitedColumnIndex]\n sizeOfVisitedColumns = item.offset + item.size\n }\n\n const unvisitedItems = totalColumn - lastVisitedColumnIndex - 1\n const sizeOfUnvisitedItems = unvisitedItems * estimatedColumnWidth\n\n return sizeOfVisitedColumns + sizeOfUnvisitedItems\n}\n\nconst ACCESS_ESTIMATED_SIZE_KEY_MAP = {\n column: getEstimatedTotalWidth,\n row: getEstimatedTotalHeight,\n}\n\nconst getOffset = (\n props: Props,\n index: number,\n alignment: Alignment,\n scrollOffset: number,\n cache: GridCache,\n type: CacheItemType,\n scrollBarWidth: number\n) => {\n const [size, estimatedSizeAssociates] = [\n type === 'row' ? props.height : props.width,\n ACCESS_ESTIMATED_SIZE_KEY_MAP[type],\n ] as [number, (props: Props, cache: GridCache) => number]\n const item = getItemFromCache(props, index, cache, type)\n\n const estimatedSize = estimatedSizeAssociates(props, cache)\n\n const maxOffset = max(0, min(estimatedSize - size, item.offset))\n const minOffset = max(0, item.offset - size + scrollBarWidth + item.size)\n\n if (alignment === SMART_ALIGNMENT) {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n alignment = AUTO_ALIGNMENT\n } else {\n alignment = CENTERED_ALIGNMENT\n }\n }\n\n switch (alignment) {\n case START_ALIGNMENT: {\n return maxOffset\n }\n case END_ALIGNMENT: {\n return minOffset\n }\n case CENTERED_ALIGNMENT: {\n return Math.round(minOffset + (maxOffset - minOffset) / 2)\n }\n case AUTO_ALIGNMENT:\n default: {\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset\n } else if (minOffset > maxOffset) {\n return minOffset\n } else if (scrollOffset < minOffset) {\n return minOffset\n } else {\n return maxOffset\n }\n }\n }\n}\n\nconst DynamicSizeGrid = createGrid({\n name: 'ElDynamicSizeGrid',\n getColumnPosition: (props, idx, cache) => {\n const item = getItemFromCache(props, idx, cache, 'column')\n return [item.size, item.offset]\n },\n\n getRowPosition: (props, idx, cache) => {\n const item = getItemFromCache(props, idx, cache, 'row')\n return [item.size, item.offset]\n },\n\n getColumnOffset: (\n props,\n columnIndex,\n alignment,\n scrollLeft,\n cache,\n scrollBarWidth\n ) =>\n getOffset(\n props,\n columnIndex,\n alignment,\n scrollLeft,\n cache,\n 'column',\n scrollBarWidth\n ),\n\n getRowOffset: (\n props,\n rowIndex,\n alignment,\n scrollTop,\n cache,\n scrollBarWidth: number\n ) =>\n getOffset(\n props,\n rowIndex,\n alignment,\n scrollTop,\n cache,\n 'row',\n scrollBarWidth\n ),\n\n getColumnStartIndexForOffset: (props, scrollLeft, cache) =>\n findItem(props, cache, scrollLeft, 'column'),\n\n getColumnStopIndexForStartIndex: (props, startIndex, scrollLeft, cache) => {\n const item = getItemFromCache(props, startIndex, cache, 'column')\n\n const maxOffset = scrollLeft + (props.width as number)\n\n let offset = item.offset + item.size\n let stopIndex = startIndex\n while (stopIndex < props.totalColumn - 1 && offset < maxOffset) {\n stopIndex++\n offset += getItemFromCache(props, startIndex, cache, 'column').size\n }\n return stopIndex\n },\n\n getEstimatedTotalHeight,\n getEstimatedTotalWidth,\n\n getRowStartIndexForOffset: (props, scrollTop, cache) =>\n findItem(props, cache, scrollTop, 'row'),\n\n getRowStopIndexForStartIndex: (props, startIndex, scrollTop, cache) => {\n const { totalRow, height } = props\n const item = getItemFromCache(props, startIndex, cache, 'row')\n const maxOffset = scrollTop + (height as number)\n\n let offset = item.size + item.offset\n let stopIndex = startIndex\n\n while (stopIndex < totalRow - 1 && offset < maxOffset) {\n stopIndex++\n offset += getItemFromCache(props, stopIndex, cache, 'row').size\n }\n\n return stopIndex\n },\n injectToInstance: (instance, cache) => {\n const resetAfter = (\n { columnIndex, rowIndex }: Indices,\n forceUpdate?: boolean\n ) => {\n forceUpdate = isUndefined(forceUpdate) ? true : forceUpdate\n\n if (isNumber(columnIndex)) {\n cache.value.lastVisitedColumnIndex = Math.min(\n cache.value.lastVisitedColumnIndex,\n columnIndex - 1\n )\n }\n\n if (isNumber(rowIndex)) {\n cache.value.lastVisitedRowIndex = Math.min(\n cache.value.lastVisitedRowIndex,\n rowIndex - 1\n )\n }\n\n instance.exposed?.getItemStyleCache.value(-1, null, null)\n\n if (forceUpdate) instance.proxy?.$forceUpdate()\n }\n\n const resetAfterColumnIndex = (\n columnIndex: number,\n forceUpdate: boolean\n ) => {\n resetAfter(\n {\n columnIndex,\n },\n forceUpdate\n )\n }\n\n const resetAfterRowIndex = (rowIndex: number, forceUpdate: boolean) => {\n resetAfter(\n {\n rowIndex,\n },\n forceUpdate\n )\n }\n\n Object.assign(instance.proxy!, {\n resetAfterColumnIndex,\n resetAfterRowIndex,\n resetAfter,\n })\n },\n initCache: ({\n estimatedColumnWidth = DEFAULT_DYNAMIC_LIST_ITEM_SIZE,\n estimatedRowHeight = DEFAULT_DYNAMIC_LIST_ITEM_SIZE,\n }) => {\n const cache = {\n column: {},\n estimatedColumnWidth,\n estimatedRowHeight,\n lastVisitedColumnIndex: -1,\n lastVisitedRowIndex: -1,\n row: {},\n } as GridCache\n\n // TODO: expose methods.\n return cache\n },\n\n clearCache: false,\n\n validateProps: ({ columnWidth, rowHeight }) => {\n if (process.env.NODE_ENV !== 'production') {\n if (!isFunction(columnWidth)) {\n throwError(\n SCOPE,\n `\n \"columnWidth\" must be passed as function,\n instead ${typeof columnWidth} was given.\n `\n )\n }\n\n if (!isFunction(rowHeight)) {\n throwError(\n SCOPE,\n `\n \"rowHeight\" must be passed as function,\n instead ${typeof rowHeight} was given.\n `\n )\n }\n }\n },\n})\n\nexport default DynamicSizeGrid\n\nexport type ResetAfterIndex = (idx: number, forceUpdate: boolean) => void\nexport type ResetAfterIndices = (indices: Indices, forceUpdate: boolean) => void\n\nexport type DynamicSizeGridInstance = GridInstance & {\n resetAfterColumnIndex: ResetAfterIndex\n resetAfterRowIndex: ResetAfterIndex\n resetAfter: ResetAfterIndices\n}\n"],"names":[],"mappings":"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"}