{"version":3,"file":"utils.mjs","sources":["../../../../../src/components/ivue-table/utils.ts"],"sourcesContent":["import { createPopper } from '@popperjs/core';\r\nimport { get } from 'lodash-unified';\r\n\r\nimport { useZIndex } from '../../utils/helpers';\r\nimport { throwError } from '../../utils/error';\r\n\r\n// type\r\nimport type { TableColumnCtx } from './table-column/defaults';\r\nimport type { Store } from './store';\r\n\r\n// 是否是对象\r\nconst isObject = function (obj: unknown): boolean {\r\n  return obj !== null && typeof obj === 'object';\r\n};\r\n\r\n// 获取数组的key\r\nexport const getKeysMap = function (\r\n  array: any[],\r\n  rowKey: string\r\n): Record<string, { row: any; index: number }> {\r\n  const arrayMap = {};\r\n  // arrayMap\r\n  (array || []).forEach((row, index) => {\r\n    // 获取rowKey对应的数据\r\n    arrayMap[getRowIdentity(row, rowKey)] = { row, index };\r\n  });\r\n\r\n  return arrayMap;\r\n};\r\n\r\n// 获取rowKey对应的数据\r\nexport const getRowIdentity = (row, rowKey): string => {\r\n  if (!row) {\r\n    throwError('ivue-table', 'row is required when get row identity');\r\n  }\r\n\r\n  // 字符串\r\n  if (typeof rowKey === 'string') {\r\n    // 分割字符串成数组\r\n    if (!rowKey.includes('.')) {\r\n      return `${row[rowKey]}`;\r\n    }\r\n\r\n    const key = rowKey.split('.');\r\n\r\n    let current = row;\r\n\r\n    for (const element of key) {\r\n      current = current[element];\r\n    }\r\n\r\n    return `${current}`;\r\n  }\r\n  // 函数\r\n  else if (typeof rowKey === 'function') {\r\n    return rowKey.call(null, row);\r\n  }\r\n\r\n  return '';\r\n};\r\n\r\n// 宽度判断\r\nexport function parseWidth(width: number | string): number | string {\r\n  // 空字符串\r\n  if (width === '') {\r\n    return width;\r\n  }\r\n\r\n  // 没有宽度\r\n  if (width !== undefined) {\r\n    width = Number.parseInt(width as string, 10);\r\n\r\n    if (Number.isNaN(width)) {\r\n      width = '';\r\n    }\r\n  }\r\n\r\n  return width;\r\n}\r\n\r\n// 最小宽度判断\r\nexport function parseMinWidth(minWidth: number | string): number | string {\r\n  // 空字符串\r\n  if (minWidth === '') {\r\n    return minWidth;\r\n  }\r\n\r\n  // 没有宽度\r\n  if (minWidth !== undefined) {\r\n    minWidth = parseWidth(minWidth);\r\n    if (Number.isNaN(minWidth)) {\r\n      minWidth = 80;\r\n    }\r\n  }\r\n\r\n  return minWidth;\r\n}\r\n\r\n// 固定列样式\r\nexport const getFixedColumnsClass = (\r\n  namespace: string,\r\n  index: number,\r\n  fixed: string | boolean,\r\n  store: any,\r\n  columns?: TableColumnCtx[]\r\n) => {\r\n  const classes: string[] = [];\r\n\r\n  const { direction, start } = isFixedColumn(index, fixed, store, columns);\r\n\r\n  // 有方向\r\n  if (direction) {\r\n    const isLeft = direction === 'left';\r\n\r\n    // 方向\r\n    classes.push(`${namespace}-fixed-column--${direction}`);\r\n\r\n    // 左边固定列\r\n    if (isLeft && start === store.states.fixedLeafColumnsLength.value - 1) {\r\n      classes.push('is-last-column');\r\n    }\r\n    // 其他\r\n    else if (\r\n      !isLeft &&\r\n      start ===\r\n        store.states.columns.value.length -\r\n          store.states.rightFixedLeafColumnsLength.value\r\n    ) {\r\n      classes.push('is-first-column');\r\n    }\r\n  }\r\n\r\n  return classes;\r\n};\r\n\r\n// 是否是固定列\r\nexport const isFixedColumn = (\r\n  index: number,\r\n  fixed: string | boolean,\r\n  store: any,\r\n  realColumns?: TableColumnCtx[]\r\n) => {\r\n  let start = 0;\r\n  let after = index;\r\n\r\n  // 有列\r\n  if (realColumns) {\r\n    // 判断是否是组合列\r\n    if (realColumns[index].colSpan > 1) {\r\n      return {};\r\n    }\r\n\r\n    for (let i = 0; i < index; i++) {\r\n      start += realColumns[i].colSpan;\r\n    }\r\n\r\n    after = start + realColumns[index].colSpan - 1;\r\n  }\r\n  // 没有列\r\n  else {\r\n    start = index;\r\n  }\r\n\r\n  let fixedLayout;\r\n  const columns = store.states.columns;\r\n\r\n  switch (fixed) {\r\n    // 左固定列\r\n    case 'left':\r\n      if (after < store.states.fixedLeafColumnsLength.value) {\r\n        fixedLayout = 'left';\r\n      }\r\n      break;\r\n    // 右固定列\r\n    case 'right':\r\n      if (\r\n        start >=\r\n        columns.value.length - store.states.rightFixedLeafColumnsLength.value\r\n      ) {\r\n        fixedLayout = 'right';\r\n      }\r\n      break;\r\n    // 固定列默认值\r\n    default:\r\n      if (after < store.states.fixedLeafColumnsLength.value) {\r\n        fixedLayout = 'left';\r\n      } else if (\r\n        start >=\r\n        columns.value.length - store.states.rightFixedLeafColumnsLength.value\r\n      ) {\r\n        fixedLayout = 'right';\r\n      }\r\n  }\r\n\r\n  return fixedLayout\r\n    ? {\r\n        direction: fixedLayout,\r\n        start,\r\n        after,\r\n      }\r\n    : {};\r\n};\r\n\r\n// 固定列偏移位置\r\nexport const getFixedColumnOffset = (\r\n  index: number,\r\n  fixed: string | boolean,\r\n  store: Store,\r\n  realColumns?: TableColumnCtx[]\r\n) => {\r\n  const { direction, start = 0 } = isFixedColumn(\r\n    index,\r\n    fixed,\r\n    store,\r\n    realColumns\r\n  );\r\n\r\n  // 没有方向\r\n  if (!direction) {\r\n    return;\r\n  }\r\n\r\n  // styles\r\n  const styles: {\r\n    left?: string;\r\n    right?: string;\r\n  } = {};\r\n\r\n  // 左边\r\n  const isLeft = direction === 'left';\r\n\r\n  const columns = store.states.columns.value;\r\n\r\n  // 左边\r\n  if (isLeft) {\r\n    styles.left = columns.slice(0, index).reduce(getOffset, 0);\r\n  }\r\n  // 其他\r\n  else {\r\n    styles.right = columns\r\n      .slice(start + 1)\r\n      .reverse()\r\n      .reduce(getOffset, 0);\r\n  }\r\n\r\n  return styles;\r\n};\r\n\r\n// 偏移的位置\r\nfunction getOffset(offset: number, column: TableColumnCtx) {\r\n  return (\r\n    offset +\r\n    (column.columnWidth === null || Number.isNaN(column.columnWidth)\r\n      ? Number(column.width)\r\n      : column.columnWidth)\r\n  );\r\n}\r\n\r\n// 设置定位位置\r\nexport const ensurePosition = (style: Record<any, string>, key: string) => {\r\n  if (!style) {\r\n    return;\r\n  }\r\n\r\n  if (!Number.isNaN(style[key])) {\r\n    style[key] = `${style[key]}px`;\r\n  }\r\n};\r\n\r\n// 修改当前行的状态\r\nexport function toggleRowStatus(\r\n  statusArr: any[],\r\n  row: any,\r\n  newVal: boolean\r\n): boolean {\r\n  let changed = false;\r\n\r\n  // 当前选择的行列表中是否存在当前行\r\n  const index = statusArr.indexOf(row);\r\n\r\n  const included = index !== -1;\r\n\r\n  // 添加行\r\n  const addRow = () => {\r\n    statusArr.push(row);\r\n    changed = true;\r\n  };\r\n\r\n  // 删除行\r\n  const removeRow = () => {\r\n    statusArr.splice(index, 1);\r\n    changed = true;\r\n  };\r\n\r\n  // boolean\r\n  if (typeof newVal === 'boolean') {\r\n    // 添加行\r\n    if (newVal && !included) {\r\n      addRow();\r\n    }\r\n    // 删除行\r\n    else if (!newVal && included) {\r\n      removeRow();\r\n    }\r\n  }\r\n  // 不是 boolean\r\n  else {\r\n    if (included) {\r\n      removeRow();\r\n    } else {\r\n      addRow();\r\n    }\r\n  }\r\n\r\n  return changed;\r\n}\r\n\r\n// 获取当前单元格元素\r\nexport const getCell = (event: Event) => {\r\n  return (event.target as HTMLElement)?.closest('td');\r\n};\r\n\r\n// 单元格\r\nexport const getColumnByCell = (\r\n  table: {\r\n    columns: TableColumnCtx[];\r\n  },\r\n  cell: HTMLElement,\r\n  namespace: string\r\n): null | TableColumnCtx => {\r\n  // 获取列id\r\n  const matches = (cell.className || '').match(\r\n    new RegExp(`${namespace}-[^\\\\s]+`, 'gm')\r\n  );\r\n\r\n  // ['ivue-table-1-column-3', 'ivue-table-cell']\r\n  // 是否有列id\r\n  if (matches) {\r\n    return getColumnById(table, matches[0]);\r\n  }\r\n  return null;\r\n};\r\n\r\n// 通过id寻找对应的列数据\r\nexport const getColumnById = (\r\n  // 列数组\r\n  table: {\r\n    columns: TableColumnCtx[];\r\n  },\r\n  // 列id\r\n  columnId: string\r\n): null | TableColumnCtx => {\r\n  let column: TableColumnCtx = null;\r\n\r\n  // 根据id获取当前列\r\n  table.columns.forEach((item) => {\r\n    // 是否相同\r\n    if (item.id === columnId) {\r\n      column = item;\r\n    }\r\n  });\r\n\r\n  return column;\r\n};\r\n\r\n// 通过key寻找对应的列数据\r\nexport const getColumnByKey = function (\r\n  table: {\r\n    columns: TableColumnCtx[];\r\n  },\r\n  columnKey: string\r\n): TableColumnCtx {\r\n  let column: TableColumnCtx = null;\r\n\r\n  for (let i = 0; i < table.columns.length; i++) {\r\n    const item = table.columns[i];\r\n\r\n    // 是否有相同的key->对应的列\r\n    if (item.columnKey === columnKey) {\r\n      column = item;\r\n\r\n      break;\r\n    }\r\n  }\r\n\r\n  // 没有设置columnKey\r\n  if (!column) {\r\n    throw 'column does not have columnKey set';\r\n  }\r\n\r\n  return column;\r\n};\r\n\r\nexport let removePopper;\r\n\r\n// 创建pooper\r\nexport const createTablePopper = (\r\n  parentNode: HTMLElement | undefined,\r\n  trigger: HTMLElement,\r\n  popperContent: string,\r\n  tooltipTheme,\r\n  popperOptions: any\r\n) => {\r\n  // 下一个zindex数值\r\n  const { nextZIndex } = useZIndex();\r\n\r\n  // 获取滚动dom\r\n  const scrollContainer = parentNode?.querySelector('.ivue-scrollbar-wrapper');\r\n\r\n  // 渲染三角形\r\n  const renderArrow = (): HTMLDivElement => {\r\n    // arrow\r\n    const arrow = document.createElement('div');\r\n    arrow.className = 'ivue-tooltip-arrow';\r\n\r\n    return arrow;\r\n  };\r\n\r\n  // 渲染三角形\r\n  const arrow = renderArrow();\r\n\r\n  // 渲染内容\r\n  const renderContent = (): HTMLDivElement => {\r\n    // wrapper\r\n    const wrapper = document.createElement('div');\r\n    wrapper.className = `ivue-tooltip-popper ivue-tooltip-${tooltipTheme}`;\r\n    wrapper.style.zIndex = String(nextZIndex());\r\n\r\n    // content\r\n    const content = document.createElement('div');\r\n    content.className = 'ivue-tooltip-content';\r\n\r\n    // 文本内容\r\n    const inner = document.createElement('div');\r\n    inner.className = 'ivue-tooltip-inner';\r\n    inner.innerHTML = popperContent;\r\n\r\n    // arrow\r\n    content.appendChild(arrow);\r\n    // inner\r\n    content.appendChild(inner);\r\n\r\n    wrapper.appendChild(content);\r\n\r\n    // Avoid side effects caused by append to body\r\n    parentNode?.appendChild(wrapper);\r\n\r\n    return wrapper;\r\n  };\r\n\r\n  // 渲染内容\r\n  const content = renderContent();\r\n\r\n  let popperInstance = null;\r\n\r\n  popperInstance = createPopper(trigger, content, {\r\n    strategy: 'absolute',\r\n    modifiers: [\r\n      {\r\n        name: 'offset',\r\n        options: {\r\n          offset: [0, 0],\r\n        },\r\n      },\r\n      {\r\n        name: 'arrow',\r\n        options: {\r\n          element: arrow,\r\n          padding: 10,\r\n        },\r\n      },\r\n    ],\r\n    ...popperOptions,\r\n  });\r\n\r\n  // 显示popper\r\n  const showPopper = () => {\r\n    popperInstance && popperInstance.update();\r\n  };\r\n\r\n  // 删除popper\r\n  removePopper = () => {\r\n    // 销毁popper\r\n    popperInstance && popperInstance.destroy();\r\n\r\n    // 删除节点\r\n    content && parentNode && parentNode?.removeChild(content);\r\n\r\n    // 删除事件\r\n    trigger.removeEventListener('mouseenter', showPopper);\r\n    trigger.removeEventListener('mouseleave', removePopper);\r\n    scrollContainer?.removeEventListener('scroll', removePopper);\r\n\r\n    removePopper = undefined;\r\n  };\r\n\r\n  // 当前trigger移动\r\n  trigger.addEventListener('mouseenter', showPopper);\r\n  trigger.addEventListener('mouseleave', removePopper);\r\n  scrollContainer?.addEventListener('scroll', removePopper);\r\n\r\n  return popperInstance;\r\n};\r\n\r\n// 排序数据\r\nexport const orderBy = (\r\n  array: any[],\r\n  sortKey: string,\r\n  reverse: string | number,\r\n  sortMethod,\r\n  sortBy: string | (string | ((a: any, b: any, array?: any[]) => number))[]\r\n) => {\r\n  // 没有排序的key 对应列内容的字段名\r\n  // 没有自定义排序方法\r\n  // 没有指定数据按照哪个属性进行排序\r\n  if (\r\n    !sortKey &&\r\n    !sortMethod &&\r\n    (!sortBy || (Array.isArray(sortBy) && !sortBy.length))\r\n  ) {\r\n    return array;\r\n  }\r\n\r\n  // string\r\n  if (typeof reverse === 'string') {\r\n    reverse = reverse === 'descending' ? -1 : 1;\r\n  } else {\r\n    reverse = reverse && reverse < 0 ? -1 : 1;\r\n  }\r\n\r\n  // 获取key\r\n  let getKey = null;\r\n\r\n  // 没有自定义排序方法\r\n  if (!sortMethod) {\r\n    getKey = (value, index) => {\r\n      // 指定数据按照哪个属性进行排序\r\n      if (sortBy) {\r\n        if (!Array.isArray(sortBy)) {\r\n          sortBy = [sortBy];\r\n        }\r\n\r\n        return sortBy.map((by) => {\r\n          // string\r\n          if (typeof by === 'string') {\r\n            // 获取对象中的属性\r\n            return get(value, by);\r\n          }\r\n          // 函数\r\n          else {\r\n            return by(value, index, array);\r\n          }\r\n        });\r\n      }\r\n\r\n      // 排序的key对应列内容的字段名\r\n      if (sortKey !== '$key') {\r\n        if (isObject(value) && '$value' in value) {\r\n          value = value.$value;\r\n        }\r\n      }\r\n\r\n      // 对象 ？对象值 ｜ 当前值\r\n      return [isObject(value) ? get(value, sortKey) : value];\r\n    };\r\n  }\r\n\r\n  // 排序方法\r\n  const sort = (a, b) => {\r\n    // 是否有自定义排序方法\r\n    if (sortMethod) {\r\n      return sortMethod(a.value, b.value);\r\n    }\r\n\r\n    for (let i = 0, length = a.key.length; i < length; i++) {\r\n      // 第一个小于第二个\r\n      if (a.key[i] < b.key[i]) {\r\n        return -1;\r\n      }\r\n\r\n      // 第一个大于第二个\r\n      if (a.key[i] > b.key[i]) {\r\n        return 1;\r\n      }\r\n    }\r\n\r\n    // 两个相等返回 0\r\n    return 0;\r\n  };\r\n\r\n  return (\r\n    array\r\n      .map((value, index) => {\r\n        return {\r\n          value,\r\n          index,\r\n          // 当前行的数据 date\r\n          key: getKey ? getKey(value, index) : null,\r\n        };\r\n      })\r\n      // 排序\r\n      .sort((a, b) => {\r\n        let order = sort(a, b);\r\n\r\n        // 是否需要排序\r\n        if (!order) {\r\n          // make stable https://en.wikipedia.org/wiki/Sorting_algorithm#Stability\r\n          order = a.index - b.index;\r\n        }\r\n\r\n        return order * +reverse;\r\n      })\r\n      // 返回当前行值\r\n      .map((item) => item.value)\r\n  );\r\n};\r\n\r\n// 行树节点\r\nexport function walkTreeNode(\r\n  root,\r\n  cb,\r\n  childrenKey = 'children',\r\n  lazyKey = 'hasChildren'\r\n) {\r\n  // 是否有值\r\n  const isNull = (array) => !(Array.isArray(array) && array.length);\r\n\r\n  // 递归方法检查是否还有嵌套的数据\r\n  function walker(parent, children, level) {\r\n    cb(parent, children, level);\r\n\r\n    children.forEach((item) => {\r\n      // 懒加载子节点数据\r\n      if (item[lazyKey]) {\r\n        cb(item, null, level + 1);\r\n\r\n        return;\r\n      }\r\n\r\n      // 子节点数据\r\n      const children = item[childrenKey];\r\n\r\n      // 是否有值\r\n      if (!isNull(children)) {\r\n        walker(item, children, level + 1);\r\n      }\r\n    });\r\n  }\r\n\r\n  // 原始数据\r\n  root.forEach((item) => {\r\n    // 懒加载子节点数据\r\n    if (item[lazyKey]) {\r\n      cb(item, null, 0);\r\n\r\n      return;\r\n    }\r\n\r\n    // 子节点数据\r\n    const children = item[childrenKey];\r\n\r\n    // 是否有值\r\n    if (!isNull(children)) {\r\n      // 递归执行\r\n      walker(item, children, 0);\r\n    }\r\n  });\r\n}\r\n"],"names":["arrow","content","children"],"mappings":"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"}