{"version":3,"file":"use-columns.mjs","sources":["../../../../../packages/components/table/src/use-columns.ts"],"sourcesContent":["import { shallowRef, watch, reactive, useSlots } from 'vue'\nimport type { FinalTableColumn, TableProps } from './table'\n\ntype ColumnLayouts = Record<'left' | 'center' | 'right', FinalTableColumn[]>\n\nexport default function useColumns(params: { props: TableProps }) {\n  const { props } = params\n\n  const columnLayouts = shallowRef<ColumnLayouts>({\n    left: [],\n    center: [],\n    right: []\n  })\n\n  const columns = shallowRef<FinalTableColumn[]>([])\n\n  const slots = useSlots()\n\n  watch(\n    () => props.columns,\n    _columns => {\n      const result: ColumnLayouts = {\n        left: [],\n        center: [],\n        right: []\n      }\n\n      if (!_columns?.length) {\n        columnLayouts.value = result\n        return\n      }\n\n      _columns.forEach(column => {\n        // name统一转化为函数\n        if (typeof column.name === 'string') {\n          const { name } = column\n          column.name = () => name\n        }\n\n        // 指定一个最小宽度\n        if (!column.width && !column.minWidth) {\n          column.minWidth = 100\n        }\n\n        // 始终保持render存在\n        if (!column.render) {\n          const slotRender = column.slot\n            ? props.slots?.[column.slot] || slots[column.slot]\n            : undefined\n          if (slotRender) {\n            column.render = ctx => slotRender(ctx)\n          } else {\n            column.render = ({ val }) => String(val ?? '')\n          }\n        }\n\n        const { fixed } = column\n\n        const reactiveColumn = reactive(column) as FinalTableColumn\n\n        if (fixed === 'left') {\n          result.left.push(reactiveColumn)\n        } else if (fixed === 'right') {\n          result.right.push(reactiveColumn)\n        } else {\n          result.center.push(reactiveColumn)\n        }\n      })\n\n      // 计算固定列\n      result.left.forEach((item, index, arr) => {\n        if (index === 0) {\n          item.left = 0\n        } else {\n          let pre = arr[index - 1]\n          item.left = pre.left! + pre.width!\n        }\n      })\n\n      // 计算固定列\n      let len = result.right.length\n      while (len-- > 0) {\n        let cur = result.right[len]\n        let pre = result.right[len + 1]\n        if (pre) {\n          cur.right = pre.right! + pre.width!\n        } else {\n          cur.right = 0\n        }\n      }\n\n      if (result.left.length) {\n        result.left[result.left.length - 1].typeLast = true\n      }\n      if (result.center.length) {\n        result.center[result.center.length - 1].typeLast = true\n      }\n      if (result.right.length) {\n        result.right[0].typeFirst = true\n      }\n\n      columnLayouts.value = result\n      columns.value = Object.values(result).flat(1)\n    },\n    { immediate: true }\n  )\n\n  return {\n    columnLayouts,\n    columns\n  }\n}\n"],"names":[],"mappings":"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"}