{"version":3,"file":"util.mjs","sources":["../../../../../../packages/components/table/src/util.ts"],"sourcesContent":["// @ts-nocheck\nimport { get } from 'lodash-unified'\nimport escapeHtml from '@bigin/escape-html'\nimport { createPopper } from '@bigin/popperjs-es'\nimport { hasOwn, throwError } from '@bigin/utils'\nimport { useGlobalConfig, useZIndex } from '@bigin/hooks'\nimport type { IPopperOptions, PopperInstance } from '@bigin/components/popper'\nimport type { Nullable } from '@bigin/utils'\nimport type { TableColumnCtx } from './table-column/defaults'\n\nexport const getCell = function (event: Event) {\n  return (event.target as HTMLElement)?.closest('td')\n}\n\nconst isObject = function (obj: unknown): boolean {\n  return obj !== null && typeof obj === 'object'\n}\n\nexport const orderBy = function <T>(\n  array: T[],\n  sortKey: string,\n  reverse: string | number,\n  sortMethod,\n  sortBy: string | (string | ((a: T, b: T, array?: T[]) => number))[]\n) {\n  const tableConfig = useGlobalConfig('table', {\n    sort: { ascending: 'ascending', descending: 'descending' },\n  })\n  if (\n    !sortKey &&\n    !sortMethod &&\n    (!sortBy || (Array.isArray(sortBy) && !sortBy.length))\n  ) {\n    return array\n  }\n  if (typeof reverse === 'string') {\n    reverse = reverse === tableConfig.value.sort.descending ? -1 : 1\n  } else {\n    reverse = reverse && reverse < 0 ? -1 : 1\n  }\n  const getKey = sortMethod\n    ? null\n    : function (value, index) {\n        if (sortBy) {\n          if (!Array.isArray(sortBy)) {\n            sortBy = [sortBy]\n          }\n          return sortBy.map((by) => {\n            if (typeof by === 'string') {\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 [isObject(value) ? get(value, sortKey) : value]\n      }\n  const compare = function (a, b) {\n    if (sortMethod) {\n      return sortMethod(a.value, b.value)\n    }\n    for (let i = 0, len = a.key.length; 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((value, 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>(\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>(\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('BTable', `No column matching with column-key: ${columnKey}`)\n  return column\n}\n\nexport const getColumnByCell = function <T>(\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>(\n  row: T,\n  rowKey: string | ((row: T) => any)\n): string => {\n  if (!row) throw new Error('Row is required when get row identity')\n  if (typeof rowKey === 'string') {\n    if (!rowKey.includes('.')) {\n      return `${row[rowKey]}`\n    }\n    const key = rowKey.split('.')\n    let current = row\n    for (const element of key) {\n      current = current[element]\n    }\n    return `${current}`\n  } else if (typeof rowKey === 'function') {\n    return rowKey.call(null, row)\n  }\n}\n\nexport const getKeysMap = function <T>(\n  array: T[],\n  rowKey: string\n): Record<string, { row: T; index: number }> {\n  const arrayMap = {}\n  ;(array || []).forEach((row, index) => {\n    arrayMap[getRowIdentity(row, rowKey)] = { row, index }\n  })\n  return arrayMap\n}\n\nexport function mergeOptions<T, K>(defaults: T, config: K): T & K {\n  const options = {} as T & K\n  let key\n  for (key in defaults) {\n    options[key] = defaults[key]\n  }\n  for (key in config) {\n    if (hasOwn(config as unknown as Record<string, any>, key)) {\n      const value = config[key]\n      if (typeof value !== 'undefined') {\n        options[key] = value\n      }\n    }\n  }\n  return options\n}\n\nexport function parseWidth(width: number | string): number | string {\n  if (width === '') return width\n  if (width !== undefined) {\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 (minWidth !== undefined) {\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) {\n  if (typeof height === 'number') {\n    return height\n  }\n  if (typeof height === 'string') {\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.js\nexport function compose(...funcs) {\n  if (funcs.length === 0) {\n    return (arg) => arg\n  }\n  if (funcs.length === 1) {\n    return funcs[0]\n  }\n  return funcs.reduce(\n    (a, b) =>\n      (...args) =>\n        a(b(...args))\n  )\n}\n\nexport function toggleRowStatus<T>(\n  statusArr: T[],\n  row: T,\n  newVal: boolean\n): boolean {\n  let changed = false\n  const index = statusArr.indexOf(row)\n  const included = index !== -1\n\n  const addRow = () => {\n    statusArr.push(row)\n    changed = true\n  }\n  const removeRow = () => {\n    statusArr.splice(index, 1)\n    changed = true\n  }\n\n  if (typeof newVal === 'boolean') {\n    if (newVal && !included) {\n      addRow()\n    } else if (!newVal && included) {\n      removeRow()\n    }\n  } else {\n    if (included) {\n      removeRow()\n    } else {\n      addRow()\n    }\n  }\n  return changed\n}\n\nexport function walkTreeNode(\n  root,\n  cb,\n  childrenKey = 'children',\n  lazyKey = 'hasChildren'\n) {\n  const isNil = (array) => !(Array.isArray(array) && array.length)\n\n  function _walker(parent, children, level) {\n    cb(parent, children, level)\n    children.forEach((item) => {\n      if (item[lazyKey]) {\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) => {\n    if (item[lazyKey]) {\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\nexport let removePopper\n\nexport function createTablePopper(\n  parentNode: HTMLElement | undefined,\n  trigger: HTMLElement,\n  popperContent: string,\n  popperOptions: Partial<IPopperOptions>,\n  tooltipEffect: string\n) {\n  const { nextZIndex } = useZIndex()\n  const ns = parentNode?.dataset.prefix\n  const scrollContainer = parentNode?.querySelector(`.${ns}-scrollbar__wrap`)\n  function renderContent(): HTMLDivElement {\n    const isLight = tooltipEffect === 'light'\n    const content = document.createElement('div')\n    content.className = `${ns}-popper ${isLight ? 'is-light' : 'is-dark'}`\n    popperContent = escapeHtml(popperContent)\n    content.innerHTML = popperContent\n    content.style.zIndex = String(nextZIndex())\n    // Avoid side effects caused by append to body\n    parentNode?.appendChild(content)\n    return content\n  }\n  function renderArrow(): HTMLDivElement {\n    const arrow = document.createElement('div')\n    arrow.className = `${ns}-popper__arrow`\n    return arrow\n  }\n  function showPopper() {\n    popperInstance && popperInstance.update()\n  }\n  removePopper?.()\n  removePopper = () => {\n    try {\n      popperInstance && popperInstance.destroy()\n      content && parentNode?.removeChild(content)\n      trigger.removeEventListener('mouseenter', showPopper)\n      trigger.removeEventListener('mouseleave', removePopper)\n      scrollContainer?.removeEventListener('scroll', removePopper)\n      removePopper = undefined\n    } catch {}\n  }\n  let popperInstance: Nullable<PopperInstance> = null\n  const content = renderContent()\n  const arrow = renderArrow()\n  content.appendChild(arrow)\n  popperInstance = createPopper(trigger, content, {\n    strategy: 'absolute',\n    modifiers: [\n      {\n        name: 'offset',\n        options: {\n          offset: [0, 8],\n        },\n      },\n      {\n        name: 'arrow',\n        options: {\n          element: arrow,\n          padding: 10,\n        },\n      },\n    ],\n    ...popperOptions,\n  })\n  trigger.addEventListener('mouseenter', showPopper)\n  trigger.addEventListener('mouseleave', removePopper)\n  scrollContainer?.addEventListener('scroll', removePopper)\n  return popperInstance\n}\n\nexport const isFixedColumn = <T>(\n  index: number,\n  fixed: string | boolean,\n  store: any,\n  realColumns?: TableColumnCtx<T>[]\n) => {\n  let start = 0\n  let after = index\n  if (realColumns) {\n    if (realColumns[index].colSpan > 1) {\n      // fixed column not supported in grouped header\n      return {}\n    }\n    // handle group\n    for (let i = 0; i < index; i++) {\n      start += realColumns[i].colSpan\n    }\n    after = start + realColumns[index].colSpan - 1\n  } else {\n    start = index\n  }\n  let fixedLayout\n  const columns = store.states.columns\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.value.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.value.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>(\n  namespace: string,\n  index: number,\n  fixed: string | boolean,\n  store: any,\n  realColumns?: TableColumnCtx<T>[]\n) => {\n  const classes: string[] = []\n  const { direction, start } = isFixedColumn(index, fixed, store, realColumns)\n  if (direction) {\n    const isLeft = direction === 'left'\n    classes.push(`${namespace}-fixed-column--${direction}`)\n    if (isLeft && start === store.states.fixedLeafColumnsLength.value - 1) {\n      classes.push('is-last-column')\n    } else if (\n      !isLeft &&\n      start ===\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>(offset: number, column: TableColumnCtx<T>) {\n  return (\n    offset +\n    (column.realWidth === null || Number.isNaN(column.realWidth)\n      ? Number(column.width)\n      : column.realWidth)\n  )\n}\n\nexport const getFixedColumnOffset = <T>(\n  index: number,\n  fixed: string | boolean,\n  store: any,\n  realColumns?: TableColumnCtx<T>[]\n) => {\n  const { direction, start = 0 } = isFixedColumn(\n    index,\n    fixed,\n    store,\n    realColumns\n  )\n  if (!direction) {\n    return\n  }\n  const styles: any = {}\n  const isLeft = direction === 'left'\n  const columns = store.states.columns.value\n  if (isLeft) {\n    styles.left = columns.slice(0, index).reduce(getOffset, 0)\n  } else {\n    styles.right = columns\n      .slice(start + 1)\n      .reverse()\n      .reduce(getOffset, 0)\n  }\n  return styles\n}\n\nexport const ensurePosition = (style, key: string) => {\n  if (!style) return\n  if (!Number.isNaN(style[key])) {\n    style[key] = `${style[key]}px`\n  }\n}\n"],"names":["children","content","arrow"],"mappings":"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"}