{"version":3,"file":"util.mjs","names":["isUndefined"],"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"],"mappings":"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"}