{"version":3,"file":"util.mjs","sources":["../../../../../../packages/components/table/src/util.ts"],"sourcesContent":["// @ts-nocheck\r\nimport { createPopper } from '@popperjs/core'\r\nimport { flatMap, get, merge } from 'lodash'\r\nimport escapeHtml from 'escape-html'\r\nimport {\r\n  hasOwn,\r\n  isArray,\r\n  isBool,\r\n  isObject,\r\n  throwError,\r\n} from '@sgui-plus/utils'\r\nimport { useDelayedToggle } from '@sgui-plus/hooks'\r\nimport type { PopperInstance } from '@sgui-plus/components/popper'\r\nimport type { Nullable } from '@sgui-plus/utils'\r\nimport type { TableColumnCtx } from './table-column/defaults'\r\nimport type { SgTooltipProps } from '@sgui-plus/components/tooltip'\r\n\r\nexport type TableOverflowTooltipOptions = Partial<\r\n  Pick<\r\n    SgTooltipProps,\r\n    | 'effect'\r\n    | 'enterable'\r\n    | 'hideAfter'\r\n    | 'offset'\r\n    | 'placement'\r\n    | 'popperClass'\r\n    | 'popperOptions'\r\n    | 'showAfter'\r\n    | 'showArrow'\r\n    // | 'transition'\r\n  >\r\n>\r\n\r\nexport const getCell = function (event: Event) {\r\n  return (event.target as HTMLElement)?.closest('td')\r\n}\r\n\r\nexport const orderBy = function <T>(\r\n  array: T[],\r\n  sortKey: string,\r\n  reverse: string | number,\r\n  sortMethod,\r\n  sortBy: string | (string | ((a: T, b: T, array?: T[]) => number))[]\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  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  const getKey = sortMethod\r\n    ? null\r\n    : function (value, index) {\r\n        if (sortBy) {\r\n          if (!Array.isArray(sortBy)) {\r\n            sortBy = [sortBy]\r\n          }\r\n          return sortBy.map((by) => {\r\n            if (typeof by === 'string') {\r\n              return get(value, by)\r\n            } else {\r\n              return by(value, index, array)\r\n            }\r\n          })\r\n        }\r\n        if (sortKey !== '$key') {\r\n          if (isObject(value) && '$value' in value) value = value.$value\r\n        }\r\n        return [isObject(value) ? get(value, sortKey) : value]\r\n      }\r\n  const compare = function (a, b) {\r\n    if (sortMethod) {\r\n      return sortMethod(a.value, b.value)\r\n    }\r\n    for (let i = 0, len = a.key.length; i < len; i++) {\r\n      if (a.key[i] < b.key[i]) {\r\n        return -1\r\n      }\r\n      if (a.key[i] > b.key[i]) {\r\n        return 1\r\n      }\r\n    }\r\n    return 0\r\n  }\r\n  return array\r\n    .map((value, index) => {\r\n      return {\r\n        value,\r\n        index,\r\n        key: getKey ? getKey(value, index) : null,\r\n      }\r\n    })\r\n    .sort((a, b) => {\r\n      let order = compare(a, b)\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      return order * +reverse\r\n    })\r\n    .map((item) => item.value)\r\n}\r\n\r\nexport const getColumnById = function <T>(\r\n  table: {\r\n    columns: TableColumnCtx<T>[]\r\n  },\r\n  columnId: string\r\n): null | TableColumnCtx<T> {\r\n  let column = null\r\n  table.columns.forEach((item) => {\r\n    if (item.id === columnId) {\r\n      column = item\r\n    }\r\n  })\r\n  return column\r\n}\r\n\r\nexport const getColumnByKey = function <T>(\r\n  table: {\r\n    columns: TableColumnCtx<T>[]\r\n  },\r\n  columnKey: string\r\n): TableColumnCtx<T> {\r\n  let column = null\r\n  for (let i = 0; i < table.columns.length; i++) {\r\n    const item = table.columns[i]\r\n    if (item.columnKey === columnKey) {\r\n      column = item\r\n      break\r\n    }\r\n  }\r\n  if (!column)\r\n    throwError('ElTable', `No column matching with column-key: ${columnKey}`)\r\n  return column\r\n}\r\n\r\nexport const getColumnByCell = function <T>(\r\n  table: {\r\n    columns: TableColumnCtx<T>[]\r\n  },\r\n  cell: HTMLElement,\r\n  namespace: string\r\n): null | TableColumnCtx<T> {\r\n  const matches = (cell.className || '').match(\r\n    new RegExp(`${namespace}-table_[^\\\\s]+`, 'gm')\r\n  )\r\n  if (matches) {\r\n    return getColumnById(table, matches[0])\r\n  }\r\n  return null\r\n}\r\n\r\nexport const getRowIdentity = <T>(\r\n  row: T,\r\n  rowKey: string | ((row: T) => any)\r\n): string => {\r\n  if (!row) throw new Error('Row is required when get row identity')\r\n  if (typeof rowKey === 'string') {\r\n    if (!rowKey.includes('.')) {\r\n      return `${row[rowKey]}`\r\n    }\r\n    const key = rowKey.split('.')\r\n    let current = row\r\n    for (const element of key) {\r\n      current = current[element]\r\n    }\r\n    return `${current}`\r\n  } else if (typeof rowKey === 'function') {\r\n    return rowKey.call(null, row)\r\n  }\r\n}\r\n\r\nexport const getKeysMap = function <T>(\r\n  array: T[],\r\n  rowKey: string\r\n): Record<string, { row: T; index: number }> {\r\n  const arrayMap = {}\r\n  ;(array || []).forEach((row, index) => {\r\n    arrayMap[getRowIdentity(row, rowKey)] = { row, index }\r\n  })\r\n  return arrayMap\r\n}\r\n\r\nexport function mergeOptions<T, K>(defaults: T, config: K): T & K {\r\n  const options = {} as T & K\r\n  let key\r\n  for (key in defaults) {\r\n    options[key] = defaults[key]\r\n  }\r\n  for (key in config) {\r\n    if (hasOwn(config as unknown as Record<string, any>, key)) {\r\n      const value = config[key]\r\n      if (typeof value !== 'undefined') {\r\n        options[key] = value\r\n      }\r\n    }\r\n  }\r\n  return options\r\n}\r\n\r\nexport function parseWidth(width: number | string): number | string {\r\n  if (width === '') return width\r\n  if (width !== undefined) {\r\n    width = Number.parseInt(width as string, 10)\r\n    if (Number.isNaN(width)) {\r\n      width = ''\r\n    }\r\n  }\r\n  return width\r\n}\r\n\r\nexport function parseMinWidth(minWidth: number | string): number | string {\r\n  if (minWidth === '') return minWidth\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  return minWidth\r\n}\r\n\r\nexport function parseHeight(height: number | string) {\r\n  if (typeof height === 'number') {\r\n    return height\r\n  }\r\n  if (typeof height === 'string') {\r\n    if (/^\\d+(?:px)?$/.test(height)) {\r\n      return Number.parseInt(height, 10)\r\n    } else {\r\n      return height\r\n    }\r\n  }\r\n  return null\r\n}\r\n\r\n// https://github.com/reduxjs/redux/blob/master/src/compose.js\r\nexport function compose(...funcs) {\r\n  if (funcs.length === 0) {\r\n    return (arg) => arg\r\n  }\r\n  if (funcs.length === 1) {\r\n    return funcs[0]\r\n  }\r\n  return funcs.reduce(\r\n    (a, b) =>\r\n      (...args) =>\r\n        a(b(...args))\r\n  )\r\n}\r\n\r\nexport function toggleRowStatus<T>(\r\n  statusArr: T[],\r\n  row: T,\r\n  newVal: boolean\r\n): boolean {\r\n  let changed = false\r\n  const index = statusArr.indexOf(row)\r\n  const included = index !== -1\r\n\r\n  const toggleStatus = (type: 'add' | 'remove') => {\r\n    if (type === 'add') {\r\n      statusArr.push(row)\r\n    } else {\r\n      statusArr.splice(index, 1)\r\n    }\r\n    changed = true\r\n    if (isArray(row.children)) {\r\n      row.children.forEach((item) => {\r\n        toggleRowStatus(statusArr, item, newVal ?? !included)\r\n      })\r\n    }\r\n  }\r\n\r\n  if (isBool(newVal)) {\r\n    if (newVal && !included) {\r\n      toggleStatus('add')\r\n    } else if (!newVal && included) {\r\n      toggleStatus('remove')\r\n    }\r\n  } else {\r\n    included ? toggleStatus('remove') : toggleStatus('add')\r\n  }\r\n  return changed\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  const isNil = (array) => !(Array.isArray(array) && array.length)\r\n\r\n  function _walker(parent, children, level) {\r\n    cb(parent, children, level)\r\n    children.forEach((item) => {\r\n      if (item[lazyKey]) {\r\n        cb(item, null, level + 1)\r\n        return\r\n      }\r\n      const children = item[childrenKey]\r\n      if (!isNil(children)) {\r\n        _walker(item, children, level + 1)\r\n      }\r\n    })\r\n  }\r\n\r\n  root.forEach((item) => {\r\n    if (item[lazyKey]) {\r\n      cb(item, null, 0)\r\n      return\r\n    }\r\n    const children = item[childrenKey]\r\n    if (!isNil(children)) {\r\n      _walker(item, children, 0)\r\n    }\r\n  })\r\n}\r\n\r\nexport let removePopper\r\n\r\nexport function createTablePopper(\r\n  parentNode: HTMLElement | undefined,\r\n  trigger: HTMLElement,\r\n  popperContent: string,\r\n  nextZIndex: () => number,\r\n  tooltipOptions?: TableOverflowTooltipOptions\r\n) {\r\n  // TODO transition\r\n  tooltipOptions = merge(\r\n    {\r\n      enterable: true,\r\n      showArrow: true,\r\n    } as TableOverflowTooltipOptions,\r\n    tooltipOptions\r\n  )\r\n  const ns = parentNode?.dataset.prefix\r\n  const scrollContainer = parentNode?.querySelector(`.${ns}-scrollbar__wrap`)\r\n  function renderContent(): HTMLDivElement {\r\n    const isLight = tooltipOptions.effect === 'light'\r\n    const content = document.createElement('div')\r\n    content.className = [\r\n      `${ns}-popper`,\r\n      isLight ? 'is-light' : 'is-dark',\r\n      tooltipOptions.popperClass || '',\r\n    ].join(' ')\r\n    popperContent = escapeHtml(popperContent)\r\n    content.innerHTML = popperContent\r\n    content.style.zIndex = String(nextZIndex())\r\n    // Avoid side effects caused by append to body\r\n    parentNode?.appendChild(content)\r\n    return content\r\n  }\r\n  function renderArrow(): HTMLDivElement {\r\n    const arrow = document.createElement('div')\r\n    arrow.className = `${ns}-popper__arrow`\r\n    return arrow\r\n  }\r\n  function showPopper() {\r\n    popperInstance && popperInstance.update()\r\n  }\r\n  removePopper?.()\r\n  removePopper = () => {\r\n    try {\r\n      popperInstance && popperInstance.destroy()\r\n      content && parentNode?.removeChild(content)\r\n      trigger.removeEventListener('mouseenter', onOpen)\r\n      trigger.removeEventListener('mouseleave', onClose)\r\n      scrollContainer?.removeEventListener('scroll', removePopper)\r\n      removePopper = undefined\r\n    } catch {}\r\n  }\r\n  let popperInstance: Nullable<PopperInstance> = null\r\n  let onOpen = showPopper\r\n  let onClose = removePopper\r\n  if (tooltipOptions.enterable) {\r\n    ;({ onOpen, onClose } = useDelayedToggle({\r\n      showAfter: tooltipOptions.showAfter,\r\n      hideAfter: tooltipOptions.hideAfter,\r\n      open: showPopper,\r\n      close: removePopper,\r\n    }))\r\n  }\r\n  const content = renderContent()\r\n  content.onmouseenter = onOpen\r\n  content.onmouseleave = onClose\r\n  const modifiers = []\r\n  if (tooltipOptions.offset) {\r\n    modifiers.push({\r\n      name: 'offset',\r\n      options: {\r\n        offset: [0, tooltipOptions.offset],\r\n      },\r\n    })\r\n  }\r\n  if (tooltipOptions.showArrow) {\r\n    const arrow = content.appendChild(renderArrow())\r\n    modifiers.push({\r\n      name: 'arrow',\r\n      options: {\r\n        element: arrow,\r\n        padding: 10,\r\n      },\r\n    })\r\n  }\r\n  const popperOptions = tooltipOptions.popperOptions || {}\r\n  popperInstance = createPopper(trigger, content, {\r\n    placement: tooltipOptions.placement || 'top',\r\n    strategy: 'fixed',\r\n    ...popperOptions,\r\n    modifiers: popperOptions.modifiers\r\n      ? modifiers.concat(popperOptions.modifiers)\r\n      : modifiers,\r\n  })\r\n  trigger.addEventListener('mouseenter', onOpen)\r\n  trigger.addEventListener('mouseleave', onClose)\r\n  scrollContainer?.addEventListener('scroll', removePopper)\r\n  return popperInstance\r\n}\r\n\r\nfunction getCurrentColumns<T>(column: TableColumnCtx<T>): TableColumnCtx<T>[] {\r\n  if (column.children) {\r\n    return flatMap(column.children, getCurrentColumns)\r\n  } else {\r\n    return [column]\r\n  }\r\n}\r\n\r\nfunction getColSpan<T>(colSpan: number, column: TableColumnCtx<T>) {\r\n  return colSpan + column.colSpan\r\n}\r\n\r\nexport const isFixedColumn = <T>(\r\n  index: number,\r\n  fixed: string | boolean,\r\n  store: any,\r\n  realColumns?: TableColumnCtx<T>[]\r\n) => {\r\n  let start = 0\r\n  let after = index\r\n  const columns = store.states.columns.value\r\n  if (realColumns) {\r\n    // fixed column supported in grouped header\r\n    const curColumns = getCurrentColumns(realColumns[index])\r\n    const preColumns = columns.slice(0, columns.indexOf(curColumns[0]))\r\n\r\n    start = preColumns.reduce(getColSpan, 0)\r\n    after = start + curColumns.reduce(getColSpan, 0) - 1\r\n  } else {\r\n    start = index\r\n  }\r\n  let fixedLayout\r\n  switch (fixed) {\r\n    case 'left':\r\n      if (after < store.states.fixedLeafColumnsLength.value) {\r\n        fixedLayout = 'left'\r\n      }\r\n      break\r\n    case 'right':\r\n      if (\r\n        start >=\r\n        columns.length - store.states.rightFixedLeafColumnsLength.value\r\n      ) {\r\n        fixedLayout = 'right'\r\n      }\r\n      break\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.length - store.states.rightFixedLeafColumnsLength.value\r\n      ) {\r\n        fixedLayout = 'right'\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\nexport const getFixedColumnsClass = <T>(\r\n  namespace: string,\r\n  index: number,\r\n  fixed: string | boolean,\r\n  store: any,\r\n  realColumns?: TableColumnCtx<T>[],\r\n  offset = 0\r\n) => {\r\n  const classes: string[] = []\r\n  const { direction, start, after } = isFixedColumn(\r\n    index,\r\n    fixed,\r\n    store,\r\n    realColumns\r\n  )\r\n  if (direction) {\r\n    const isLeft = direction === 'left'\r\n    classes.push(`${namespace}-fixed-column--${direction}`)\r\n    if (\r\n      isLeft &&\r\n      after + offset === store.states.fixedLeafColumnsLength.value - 1\r\n    ) {\r\n      classes.push('is-last-column')\r\n    } else if (\r\n      !isLeft &&\r\n      start - offset ===\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  return classes\r\n}\r\n\r\nfunction getOffset<T>(offset: number, column: TableColumnCtx<T>) {\r\n  return (\r\n    offset +\r\n    (column.realWidth === null || Number.isNaN(column.realWidth)\r\n      ? Number(column.width)\r\n      : column.realWidth)\r\n  )\r\n}\r\n\r\nexport const getFixedColumnOffset = <T>(\r\n  index: number,\r\n  fixed: string | boolean,\r\n  store: any,\r\n  realColumns?: TableColumnCtx<T>[]\r\n) => {\r\n  const {\r\n    direction,\r\n    start = 0,\r\n    after = 0,\r\n  } = isFixedColumn(index, fixed, store, realColumns)\r\n  if (!direction) {\r\n    return\r\n  }\r\n  const styles: any = {}\r\n  const isLeft = direction === 'left'\r\n  const columns = store.states.columns.value\r\n  if (isLeft) {\r\n    styles.left = columns.slice(0, start).reduce(getOffset, 0)\r\n  } else {\r\n    styles.right = columns\r\n      .slice(after + 1)\r\n      .reverse()\r\n      .reduce(getOffset, 0)\r\n  }\r\n  return styles\r\n}\r\n\r\nexport const ensurePosition = (style, key: string) => {\r\n  if (!style) return\r\n  if (!Number.isNaN(style[key])) {\r\n    style[key] = `${style[key]}px`\r\n  }\r\n}\r\n"],"names":[],"mappings":"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"}