{"version":3,"file":"use-columns.mjs","sources":["../../../../../../packages/components/data-table/src/hooks/use-columns.ts"],"sourcesContent":["import ElCheckbox from '@element-ultra/components/checkbox'\nimport ElIcon from '@element-ultra/components/icon'\nimport { computed, h, useSlots } from 'vue'\nimport type {\n  DataTableColumn,\n  DataTableEmits,\n  DataTableProps,\n  DataTreeRow\n} from '../data-table'\nimport { bfs, InternalColumn, FixedColumn, StaticColumn } from '../utils'\nimport type { UseStateReturned } from './use-state'\nimport { Plus, Minus, Loading } from 'icon-ultra'\n\n// 固定列: 只有最父级可以进行左右定位的配置\n// 列位置调换: 只有父级可以进行位置调换\n// 列宽调整: 只有叶子节点的表头可以调整列宽\n// 在列调整时需要触发对应的事件\n\ntype Looper = <T>(\n  arr: T[],\n  cb: (cur: T, pre: T | undefined, next: T | undefined) => void\n) => void\n\n/** 循环 */\nconst loop: Looper = (arr, cb) => {\n  let i = -1\n  while (++i < arr.length) {\n    cb(arr[i], arr[i - 1], arr[i + 1])\n  }\n}\n\n/** 从右侧开始循环 */\nconst loopRight: Looper = (arr, cb) => {\n  let i = arr.length\n  while (i-- > 0) {\n    cb(arr[i], arr[i - 1], arr[i + 1])\n  }\n}\n\n/**\n * 转化列为组件所需的数据结构\n * @param props 表格属性\n */\nexport default function useColumns(\n  props: DataTableProps,\n  emit: DataTableEmits,\n  state: UseStateReturned\n) {\n  const {\n    allChecked,\n    someChecked,\n    checkAll,\n    clearChecked,\n    toggleItemCheck,\n    toggleSelect,\n    store,\n    getFlatData,\n    childrenKey,\n    dfsReactive\n  } = state\n\n  /** 获取列 */\n  const getColumns = () => {\n    return props.columns\n  }\n\n  /** 额外列(序号, 单选/多选, 展开栏) */\n  const preColumns = computed(() => {\n    const { checkable, selectable, showIndex, tree, lazyLoad } = props\n\n    let result: InternalColumn[] = []\n\n    if (tree) {\n      result.push({\n        name: '',\n        key: '$_expand',\n        width: 100,\n        fixed: 'left',\n        render: ctx => {\n          const wrap = ctx.wrap as DataTreeRow\n\n          const style = {\n            marginLeft: wrap.depth * 20 + 'px'\n          }\n\n          // 加载状态\n          if (wrap.loading) {\n            return h(ElIcon, { class: 'is-loading', style }, () => h(Loading))\n          }\n\n          if (wrap.children?.length || (lazyLoad && !wrap.loaded)) {\n            return h(\n              ElIcon,\n              {\n                class: 'el-data-table__expand-icon',\n                style,\n                async onClick() {\n                  wrap.expanded = !wrap.expanded\n                  emit('row-expand', wrap.data, wrap)\n                  if (lazyLoad && !wrap.loaded) {\n                    wrap.loading = true\n                    const loadedData = await lazyLoad(wrap.data, wrap)\n                    if (loadedData) {\n                      wrap.data[childrenKey.value] = loadedData\n                      wrap.children = dfsReactive(loadedData, wrap.depth + 1)\n                    }\n                    wrap.loaded = true\n                    wrap.loading = false\n                  }\n                  getFlatData()\n                }\n              },\n              () => (wrap.expanded ? h(Minus) : h(Plus))\n            )\n          }\n\n          return h('span', {\n            class: 'el-data-table__leaf-icon',\n            style\n          })\n        }\n      })\n    }\n\n    // 多选和单选只能有一个, 且多选优先级更高\n    if (checkable !== false) {\n      // 高性能写法\n      const render: InternalColumn['render'] =\n        checkable === true\n          ? ({ wrap, row }) =>\n              h(ElCheckbox, {\n                modelValue: store.checked.has(row),\n                'onUpdate:modelValue': v => {\n                  toggleItemCheck(wrap, v as boolean)\n                }\n              })\n          : ({ row, index, wrap }) =>\n              h(ElCheckbox, {\n                disabled: !checkable(row, index),\n                modelValue: store.checked.has(row),\n                'onUpdate:modelValue': v => {\n                  toggleItemCheck(wrap, v as boolean)\n                }\n              })\n      result.push({\n        name: () =>\n          h(ElCheckbox, {\n            modelValue: allChecked.value,\n            indeterminate: someChecked.value,\n            'onUpdate:modelValue': v => {\n              v ? checkAll() : clearChecked()\n            }\n          }),\n        key: '$_checkbox',\n        width: 60,\n        fixed: 'left',\n        align: 'center',\n        render\n      })\n    } else if (selectable !== false) {\n      const render: InternalColumn['render'] =\n        selectable === true\n          ? ({ row }) =>\n              h(ElCheckbox, {\n                modelValue: store.selected === row,\n                'onUpdate:modelValue': v => {\n                  v ? toggleSelect(row) : toggleSelect(false)\n                }\n              })\n          : ({ row, index }) =>\n              h(ElCheckbox, {\n                disabled: !selectable(row, index),\n                modelValue: store.selected === row,\n                'onUpdate:modelValue': v => {\n                  v ? toggleSelect(row) : toggleSelect(false)\n                }\n              })\n\n      result.push({\n        name: () => '单选',\n        key: '$_radio',\n        width: 60,\n        align: 'center',\n        fixed: 'left',\n        render\n      })\n    }\n\n    if (showIndex !== false) {\n      result.push({\n        name: () => '序号',\n        key: '$_index',\n        width: 60,\n        fixed: 'left',\n        align: 'center',\n        render: ({ index }) => index + 1\n      })\n    }\n\n    return result\n  })\n\n  // 先对一级列进行分组排序\n  /** 排序并将列设为响应式 */\n  const sortedColumns = computed(() => {\n    /** 固定在左侧的列 */\n    const leftColumns: DataTableColumn[] = []\n    /** 在中间的列 */\n    const centerColumns: DataTableColumn[] = []\n    /** 固定在右侧的ie */\n    const rightColumns: DataTableColumn[] = []\n\n    preColumns.value.concat(props.columns).forEach(column => {\n      // 设置了宽度的列才会有效地固定\n      if (column.width && !column.children) {\n        if (column.fixed === 'left') {\n          return leftColumns.push(column)\n        }\n        if (column.fixed === 'right') {\n          return rightColumns.push(column)\n        }\n      }\n\n      centerColumns.push(column)\n    })\n    return leftColumns.concat(centerColumns).concat(rightColumns)\n  })\n\n  /** 多级表头的二维结构 */\n\n  const headerRows = computed(() => bfs(sortedColumns.value))\n\n  const slots = useSlots()\n\n  // 深度优先遍历获取列的叶子节点\n  // 叶子节点用于表体\n  const leafColumns = computed(() => {\n    const result = {\n      left: [] as FixedColumn[],\n      center: [] as StaticColumn[],\n      right: [] as FixedColumn[]\n    }\n\n    let startIndex = 0\n\n    ~(function recursive(columns: DataTableColumn[], root?: DataTableColumn) {\n      // 分组列不能够固定, 因此将fixed设置为空\n      columns.forEach(column => {\n        // 存在嵌套的列不作固定, 删除固定属性\n        if (root || column.children?.length) {\n          delete column.fixed\n        }\n\n        if (column.visible === false) {\n          return\n        }\n\n        if (column.children?.length) {\n          return recursive(\n            column.children,\n            !root ? (column as DataTableColumn) : root\n          )\n        }\n\n        // 处理叶子节点\n        // 将插槽或者row[key]转化为渲染函数, 避免在数据循环中判断, 在有大量数据时开销很大\n        if (!column.render) {\n          if (column.slot) {\n            column.render = ctx => {\n              return slots[column.slot!]?.(ctx)\n            }\n          } else {\n            column.render = ({ val }) =>\n              val instanceof Object ? String(val) : val\n          }\n        }\n\n        // 固定列必须加宽高才能ok\n        if (column.width) {\n          // 移动至对应的\n          if (column.fixed === 'left') {\n            return result.left.push(column as FixedColumn)\n          }\n          if (column.fixed === 'right') {\n            return result.right.push(column as FixedColumn)\n          }\n        }\n\n        return result.center.push(column as StaticColumn)\n      })\n    })(sortedColumns.value)\n\n    // TODO寻找更加优雅的解决方案\n    // 给叶子节点编号, 以便于在表头中拖拽列宽\n    Object.keys(result).forEach(key => {\n      result[key as keyof typeof result].forEach(\n        column => (column.index = startIndex++)\n      )\n    })\n    computePosition(result)\n    return result\n  })\n\n  type LeafColumns = typeof leafColumns.value\n\n  const computePosition = (columns?: LeafColumns) => {\n    if (!columns) {\n      columns = leafColumns.value\n    }\n\n    columns.center.forEach(column => {\n      delete column.left\n      delete column.right\n    })\n\n    loop(columns.left, (cur, pre) => {\n      delete cur.right\n      if (pre) {\n        cur.left = pre.left! + pre.width\n      } else {\n        cur.left = 0\n      }\n    })\n\n    loopRight(columns.right, (cur, _, next) => {\n      delete cur.left\n      if (next) {\n        cur.right = next.right! + next.width\n      } else {\n        cur.right = 0\n      }\n    })\n  }\n\n  return {\n    /** 多级表头的二维结构 */\n    headerRows,\n\n    /** 叶子列 */\n    leafColumns,\n\n    /** 计算列的定位 */\n    computePosition,\n\n    /** 获取列 */\n    getColumns\n  }\n}\n\nexport type UseColumnsReturned = ReturnType<typeof useColumns>\n"],"names":["_a"],"mappings":"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"}