element-plus
Version:
A Component Library for Vue 3
1 lines • 33.6 kB
Source Map (JSON)
{"version":3,"file":"util.mjs","sources":["../../../../../../packages/components/table/src/util.ts"],"sourcesContent":["import { Comment, Fragment, createVNode, isVNode, render } from 'vue'\nimport { flatMap, get, isNull, merge } from 'lodash-unified'\nimport {\n ensureArray,\n getProp,\n hasOwn,\n isArray,\n isBoolean,\n isFunction,\n isNumber,\n isObject,\n isString,\n isUndefined,\n throwError,\n} from '@element-plus/utils'\nimport ElTooltip, {\n type ElTooltipProps,\n} from '@element-plus/components/tooltip'\n\nimport type { DefaultRow, Table, TreeProps } from './table/defaults'\nimport type { TableColumnCtx } from './table-column/defaults'\nimport type { CSSProperties, VNode, VNodeArrayChildren } from 'vue'\n\nexport type TableOverflowTooltipOptions = Partial<\n Pick<\n ElTooltipProps,\n | 'appendTo'\n | 'effect'\n | 'enterable'\n | 'hideAfter'\n | 'offset'\n | 'placement'\n | 'popperClass'\n | 'popperOptions'\n | 'showAfter'\n | 'showArrow'\n | 'transition'\n >\n>\n\nexport type TableOverflowTooltipFormatter<T extends DefaultRow> = (data: {\n row: T\n column: TableColumnCtx<T>\n cellValue: any\n}) => VNode | string\n\ntype RemovePopperFn = (() => void) & {\n trigger?: HTMLElement\n vm?: VNode\n}\n\ntype CompareValue<T> = {\n value: T\n index: number\n key: any[] | null\n}\n\nexport const getCell = function (event: Event) {\n return (event.target as HTMLElement)?.closest('td')\n}\n\nexport const orderBy = function <T extends DefaultRow>(\n array: T[],\n sortKey: string | null,\n reverse: string | number | null,\n sortMethod: TableColumnCtx<T>['sortMethod'] | null,\n sortBy: string | string[] | ((a: T, index: number, array?: T[]) => string)\n) {\n if (\n !sortKey &&\n !sortMethod &&\n (!sortBy || (isArray(sortBy) && !sortBy.length))\n ) {\n return array\n }\n if (isString(reverse)) {\n reverse = reverse === 'descending' ? -1 : 1\n } else {\n reverse = reverse && reverse < 0 ? -1 : 1\n }\n const getKey = sortMethod\n ? null\n : function (value: T, index: number) {\n if (sortBy) {\n return flatMap(ensureArray(sortBy), (by) => {\n if (isString(by)) {\n return get(value, by)\n } else {\n return by(value, index, array)\n }\n })\n }\n if (sortKey !== '$key') {\n if (isObject(value) && '$value' in value) value = value.$value\n }\n return [\n isObject(value) ? (sortKey ? get(value, sortKey) : null) : value,\n ]\n }\n const compare = function (a: CompareValue<T>, b: CompareValue<T>) {\n if (sortMethod) {\n return sortMethod(a.value, b.value)\n }\n for (let i = 0, len = a.key?.length ?? 0; i < len; i++) {\n if (a.key?.[i] < b.key?.[i]) {\n return -1\n }\n if (a.key?.[i] > b.key?.[i]) {\n return 1\n }\n }\n return 0\n }\n return array\n .map<CompareValue<T>>((value: T, index) => {\n return {\n value,\n index,\n key: getKey ? getKey(value, index) : null,\n }\n })\n .sort((a, b) => {\n let order = compare(a, b)\n if (!order) {\n // make stable https://en.wikipedia.org/wiki/Sorting_algorithm#Stability\n order = a.index - b.index\n }\n return order * +reverse\n })\n .map((item) => item.value)\n}\n\nexport const getColumnById = function <T extends DefaultRow>(\n table: {\n columns: TableColumnCtx<T>[]\n },\n columnId: string\n): null | TableColumnCtx<T> {\n let column = null\n table.columns.forEach((item) => {\n if (item.id === columnId) {\n column = item\n }\n })\n return column\n}\n\nexport const getColumnByKey = function <T extends DefaultRow>(\n table: {\n columns: TableColumnCtx<T>[]\n },\n columnKey: string\n): TableColumnCtx<T> {\n let column = null\n for (let i = 0; i < table.columns.length; i++) {\n const item = table.columns[i]\n if (item.columnKey === columnKey) {\n column = item\n break\n }\n }\n if (!column)\n throwError('ElTable', `No column matching with column-key: ${columnKey}`)\n return column\n}\n\nexport const getColumnByCell = function <T extends DefaultRow>(\n table: {\n columns: TableColumnCtx<T>[]\n },\n cell: HTMLElement,\n namespace: string\n): null | TableColumnCtx<T> {\n const matches = (cell.className || '').match(\n new RegExp(`${namespace}-table_[^\\\\s]+`, 'gm')\n )\n if (matches) {\n return getColumnById(table, matches[0])\n }\n return null\n}\n\nexport const getRowIdentity = <T extends DefaultRow>(\n row: T,\n rowKey: string | ((row: T) => string) | null\n): string => {\n if (!row) throw new Error('Row is required when get row identity')\n if (isString(rowKey)) {\n if (!rowKey.includes('.')) {\n return `${row[rowKey]}`\n }\n const key = rowKey.split('.')\n let current: any = row\n for (const element of key) {\n current = current[element]\n }\n //TODO: \"current\" is now any, we just satisfies typecheck here\n // but this function can actually return a number\n return `${current}`\n } else if (isFunction(rowKey)) {\n return rowKey.call(null, row)\n }\n return ''\n}\n\nexport const getKeysMap = function <T extends DefaultRow>(\n array: T[],\n rowKey: string | null,\n flatten = false,\n childrenKey = 'children'\n): Record<PropertyKey, { row: T; index: number }> {\n const data = array || []\n const arrayMap: Record<string, { row: T; index: number }> = {}\n\n data.forEach((row, index) => {\n arrayMap[getRowIdentity(row, rowKey)] = { row, index }\n\n if (flatten) {\n const children = row[childrenKey]\n if (isArray(children)) {\n Object.assign(arrayMap, getKeysMap(children, rowKey, true, childrenKey))\n }\n }\n })\n\n return arrayMap\n}\n\nexport function mergeOptions<T extends DefaultRow, K extends DefaultRow>(\n defaults: T,\n config: K\n): T & K {\n const options = {} as T & K\n let key: keyof T & keyof K\n for (key in defaults) {\n options[key] = defaults[key]\n }\n for (key in config) {\n if (hasOwn(config, key)) {\n const value = config[key]\n if (!isUndefined(value)) {\n options[key as keyof K] = value\n }\n }\n }\n return options\n}\n\nexport function parseWidth(width?: number | string): number | string {\n if (width === '') return width\n if (!isUndefined(width)) {\n width = Number.parseInt(width as string, 10)\n if (Number.isNaN(width)) {\n width = ''\n }\n }\n return width!\n}\n\nexport function parseMinWidth(minWidth: number | string): number | string {\n if (minWidth === '') return minWidth\n if (!isUndefined(minWidth)) {\n minWidth = parseWidth(minWidth)\n if (Number.isNaN(minWidth)) {\n minWidth = 80\n }\n }\n return minWidth\n}\n\nexport function parseHeight(height: number | string | null) {\n if (isNumber(height)) {\n return height\n }\n if (isString(height)) {\n if (/^\\d+(?:px)?$/.test(height)) {\n return Number.parseInt(height, 10)\n } else {\n return height\n }\n }\n return null\n}\n\n// https://github.com/reduxjs/redux/blob/master/src/compose.ts\nexport function compose(...funcs: ((...args: any[]) => void)[]) {\n if (funcs.length === 0) {\n return <T>(arg: T) => arg\n }\n if (funcs.length === 1) {\n return funcs[0]\n }\n return funcs.reduce(\n (a, b) =>\n (...args: any[]) =>\n a(b(...args))\n )\n}\n\nexport function toggleRowStatus<T extends DefaultRow>(\n statusArr: T[],\n row: T,\n newVal?: boolean,\n tableTreeProps?: TreeProps,\n selectable?: ((row: T, index: number) => boolean) | null,\n rowIndex?: number,\n rowKey?: string | null\n): boolean {\n let _rowIndex = rowIndex ?? 0\n let changed = false\n\n const getIndex = () => {\n if (!rowKey) {\n return statusArr.indexOf(row)\n }\n\n const id = getRowIdentity(row, rowKey)\n\n return statusArr.findIndex((item) => getRowIdentity(item, rowKey) === id)\n }\n\n const index = getIndex()\n\n const included = index !== -1\n const isRowSelectable = selectable?.call(null, row, _rowIndex)\n\n const toggleStatus = (type: 'add' | 'remove') => {\n if (type === 'add') {\n statusArr.push(row)\n } else {\n statusArr.splice(index, 1)\n }\n changed = true\n }\n const getChildrenCount = <T extends DefaultRow>(row: T) => {\n let count = 0\n const children = tableTreeProps?.children && row[tableTreeProps.children]\n if (children && isArray(children)) {\n count += children.length\n children.forEach((item) => {\n count += getChildrenCount(item)\n })\n }\n return count\n }\n\n if (!selectable || isRowSelectable) {\n if (isBoolean(newVal)) {\n if (newVal && !included) {\n toggleStatus('add')\n } else if (!newVal && included) {\n toggleStatus('remove')\n }\n } else {\n included ? toggleStatus('remove') : toggleStatus('add')\n }\n }\n\n if (\n !tableTreeProps?.checkStrictly &&\n tableTreeProps?.children &&\n isArray(row[tableTreeProps.children])\n ) {\n row[tableTreeProps.children].forEach((item: T) => {\n const childChanged = toggleRowStatus(\n statusArr,\n item,\n newVal ?? !included,\n tableTreeProps,\n selectable,\n _rowIndex + 1,\n rowKey\n )\n _rowIndex += getChildrenCount(item) + 1\n if (childChanged) {\n changed = childChanged\n }\n })\n }\n return changed\n}\n\nexport function walkTreeNode<T extends DefaultRow>(\n root: T[],\n cb: (parent: any, children: T | T[] | null, level: number) => void,\n childrenKey = 'children',\n lazyKey = 'hasChildren',\n lazy = false\n) {\n const isNil = (array: any): array is null => !(isArray(array) && array.length)\n\n function _walker(parent: any, children: T | T[], level: number) {\n cb(parent, children, level)\n children.forEach((item: any) => {\n if (item[lazyKey] && lazy) {\n cb(item, null, level + 1)\n return\n }\n const children = item[childrenKey]\n if (!isNil(children)) {\n _walker(item, children, level + 1)\n }\n })\n }\n\n root.forEach((item: any) => {\n if (item[lazyKey] && lazy) {\n cb(item, null, 0)\n return\n }\n const children = item[childrenKey]\n if (!isNil(children)) {\n _walker(item, children, 0)\n }\n })\n}\n\nconst getTableOverflowTooltipProps = <T extends DefaultRow>(\n props: TableOverflowTooltipOptions,\n innerText: string,\n row: T,\n column: TableColumnCtx<T> | null\n) => {\n // merge popperOptions\n const popperOptions = {\n strategy: 'fixed',\n ...props.popperOptions,\n }\n\n const tooltipFormatterContent = isFunction(column?.tooltipFormatter)\n ? column.tooltipFormatter({\n row,\n column,\n cellValue: getProp(row, column.property).value,\n })\n : undefined\n\n if (isVNode(tooltipFormatterContent)) {\n return {\n slotContent: tooltipFormatterContent,\n content: null,\n ...props,\n popperOptions,\n }\n }\n\n return {\n slotContent: null,\n content: tooltipFormatterContent ?? innerText,\n ...props,\n popperOptions,\n }\n}\n\nexport let removePopper: RemovePopperFn | null = null\n\nexport function createTablePopper<T extends DefaultRow>(\n props: TableOverflowTooltipOptions,\n popperContent: string,\n row: T,\n column: TableColumnCtx<T> | null,\n trigger: HTMLElement | null,\n table: Table<DefaultRow>\n) {\n const tableOverflowTooltipProps = getTableOverflowTooltipProps(\n props,\n popperContent,\n row,\n column\n )\n const mergedProps = {\n ...tableOverflowTooltipProps,\n slotContent: undefined,\n }\n if (removePopper?.trigger === trigger) {\n const comp = removePopper.vm?.component\n merge(comp?.props, mergedProps)\n if (comp && tableOverflowTooltipProps.slotContent) {\n comp.slots.content = () => [tableOverflowTooltipProps.slotContent]\n }\n return\n }\n removePopper?.()\n const parentNode = table?.refs.tableWrapper\n const ns = parentNode?.dataset.prefix\n const vm = createVNode(\n ElTooltip,\n {\n virtualTriggering: true,\n virtualRef: trigger,\n appendTo: parentNode,\n placement: 'top',\n transition: 'none', // Default does not require transition\n offset: 0,\n hideAfter: 0,\n ...mergedProps,\n },\n tableOverflowTooltipProps.slotContent\n ? {\n content: () => tableOverflowTooltipProps.slotContent,\n }\n : undefined\n )\n vm.appContext = { ...table.appContext, ...table }\n const container = document.createElement('div')\n render(vm, container)\n vm.component!.exposed!.onOpen()\n const scrollContainer = parentNode?.querySelector(`.${ns}-scrollbar__wrap`)\n removePopper = () => {\n if (vm.component?.exposed?.onClose) {\n vm.component.exposed.onClose()\n }\n render(null, container)\n const currentRemovePopper = removePopper as RemovePopperFn\n scrollContainer?.removeEventListener('scroll', currentRemovePopper)\n currentRemovePopper.trigger = undefined\n currentRemovePopper.vm = undefined\n removePopper = null\n }\n removePopper.trigger = trigger ?? undefined\n removePopper.vm = vm\n scrollContainer?.addEventListener('scroll', removePopper)\n}\n\nfunction getCurrentColumns<T extends DefaultRow>(\n column: TableColumnCtx<T>\n): TableColumnCtx<T>[] {\n if (column.children) {\n return flatMap(column.children, getCurrentColumns)\n } else {\n return [column]\n }\n}\n\nfunction getColSpan<T extends DefaultRow>(\n colSpan: number,\n column: TableColumnCtx<T>\n) {\n return colSpan + column.colSpan\n}\n\nexport const isFixedColumn = <T extends DefaultRow>(\n index: number,\n fixed: string | boolean | undefined,\n store: any,\n realColumns?: TableColumnCtx<T>[]\n) => {\n let start = 0\n let after = index\n const columns = store.states.columns.value\n if (realColumns) {\n // fixed column supported in grouped header\n const curColumns = getCurrentColumns(realColumns[index])\n const preColumns = columns.slice(0, columns.indexOf(curColumns[0]))\n\n start = preColumns.reduce(getColSpan, 0)\n after = start + curColumns.reduce(getColSpan, 0) - 1\n } else {\n start = index\n }\n let fixedLayout\n switch (fixed) {\n case 'left':\n if (after < store.states.fixedLeafColumnsLength.value) {\n fixedLayout = 'left'\n }\n break\n case 'right':\n if (\n start >=\n columns.length - store.states.rightFixedLeafColumnsLength.value\n ) {\n fixedLayout = 'right'\n }\n break\n default:\n if (after < store.states.fixedLeafColumnsLength.value) {\n fixedLayout = 'left'\n } else if (\n start >=\n columns.length - store.states.rightFixedLeafColumnsLength.value\n ) {\n fixedLayout = 'right'\n }\n }\n return fixedLayout\n ? {\n direction: fixedLayout,\n start,\n after,\n }\n : {}\n}\n\nexport const getFixedColumnsClass = <T extends DefaultRow>(\n namespace: string,\n index: number,\n fixed: string | boolean | undefined,\n store: any,\n realColumns?: TableColumnCtx<T>[],\n offset = 0\n) => {\n const classes: string[] = []\n const { direction, start, after } = isFixedColumn(\n index,\n fixed,\n store,\n realColumns\n )\n if (direction) {\n const isLeft = direction === 'left'\n classes.push(`${namespace}-fixed-column--${direction}`)\n if (\n isLeft &&\n after + offset === store.states.fixedLeafColumnsLength.value - 1\n ) {\n classes.push('is-last-column')\n } else if (\n !isLeft &&\n start - offset ===\n store.states.columns.value.length -\n store.states.rightFixedLeafColumnsLength.value\n ) {\n classes.push('is-first-column')\n }\n }\n return classes\n}\n\nfunction getOffset<T extends DefaultRow>(\n offset: number,\n column: TableColumnCtx<T>\n) {\n return (\n offset +\n (isNull(column.realWidth) || Number.isNaN(column.realWidth)\n ? Number(column.width)\n : column.realWidth)\n )\n}\n\nexport const getFixedColumnOffset = <T extends DefaultRow>(\n index: number,\n fixed: string | boolean | undefined,\n store: any,\n realColumns?: TableColumnCtx<T>[]\n) => {\n const {\n direction,\n start = 0,\n after = 0,\n } = isFixedColumn(index, fixed, store, realColumns)\n if (!direction) {\n return\n }\n const styles: CSSProperties = {}\n const isLeft = direction === 'left'\n const columns = store.states.columns.value\n if (isLeft) {\n styles.left = columns.slice(0, start).reduce(getOffset, 0)\n } else {\n styles.right = columns\n .slice(after + 1)\n .reverse()\n .reduce(getOffset, 0)\n }\n return styles\n}\n\nexport const ensurePosition = <T extends CSSProperties>(\n style: T | undefined,\n key: keyof T\n) => {\n if (!style) return\n if (!Number.isNaN(style[key])) {\n style[key] = `${style[key]}px` as any\n }\n}\n\nexport function ensureValidVNode(\n vnodes: VNodeArrayChildren\n): VNodeArrayChildren | null {\n return vnodes.some((child) => {\n if (!isVNode(child)) return true\n if (child.type === Comment) return false\n if (\n child.type === Fragment &&\n !ensureValidVNode(child.children as VNodeArrayChildren)\n ) {\n return false\n }\n return true\n })\n ? vnodes\n : null\n}\n"],"names":["ensureArray","row","children","_a"],"mappings":"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"}