{"version":3,"file":"render-helper.mjs","sources":["../../../../../../../packages/components/table/src/table-column/render-helper.ts"],"sourcesContent":["import { getCurrentInstance, h, ref, computed, watchEffect } from 'vue'\nimport { debugWarn } from '@element-plus/utils/error'\nimport { cellForced, defaultRenderCell, treeCellPrefix } from '../config'\nimport { parseWidth, parseMinWidth } from '../util'\n\nimport type { ComputedRef } from 'vue'\nimport type { TableColumnCtx, TableColumn } from './defaults'\n\nfunction useRender<T>(\n  props: TableColumnCtx<T>,\n  slots,\n  owner: ComputedRef<any>\n) {\n  const instance = getCurrentInstance() as TableColumn<T>\n  const columnId = ref('')\n  const isSubColumn = ref(false)\n  const realAlign = ref<string>()\n  const realHeaderAlign = ref<string>()\n  watchEffect(() => {\n    realAlign.value = props.align ? `is-${props.align}` : null\n    // nextline help render\n    realAlign.value\n  })\n  watchEffect(() => {\n    realHeaderAlign.value = props.headerAlign\n      ? `is-${props.headerAlign}`\n      : realAlign.value\n    // nextline help render\n    realHeaderAlign.value\n  })\n  const columnOrTableParent = computed(() => {\n    let parent: any = instance.vnode.vParent || instance.parent\n    while (parent && !parent.tableId && !parent.columnId) {\n      parent = parent.vnode.vParent || parent.parent\n    }\n    return parent\n  })\n\n  const realWidth = ref(parseWidth(props.width))\n  const realMinWidth = ref(parseMinWidth(props.minWidth))\n  const setColumnWidth = (column: TableColumnCtx<T>) => {\n    if (realWidth.value) column.width = realWidth.value\n    if (realMinWidth.value) {\n      column.minWidth = realMinWidth.value\n    }\n    if (!column.minWidth) {\n      column.minWidth = 80\n    }\n    column.realWidth = Number(\n      column.width === undefined ? column.minWidth : column.width\n    )\n    return column\n  }\n  const setColumnForcedProps = (column: TableColumnCtx<T>) => {\n    // 对于特定类型的 column，某些属性不允许设置\n    const type = column.type\n    const source = cellForced[type] || {}\n    Object.keys(source).forEach((prop) => {\n      const value = source[prop]\n      if (value !== undefined) {\n        column[prop] = prop === 'className' ? `${column[prop]} ${value}` : value\n      }\n    })\n    return column\n  }\n\n  const checkSubColumn = (children: TableColumn<T> | TableColumn<T>[]) => {\n    if (children instanceof Array) {\n      children.forEach((child) => check(child))\n    } else {\n      check(children)\n    }\n    function check(item: TableColumn<T>) {\n      if (item?.type?.name === 'ElTableColumn') {\n        item.vParent = instance\n      }\n    }\n  }\n  const setColumnRenders = (column: TableColumnCtx<T>) => {\n    // renderHeader 属性不推荐使用。\n    if (props.renderHeader) {\n      debugWarn(\n        'TableColumn',\n        'Comparing to render-header, scoped-slot header is easier to use. We recommend users to use scoped-slot header.'\n      )\n    } else if (column.type !== 'selection') {\n      column.renderHeader = (scope) => {\n        // help render\n        instance.columnConfig.value['label']\n        const renderHeader = slots.header\n        return renderHeader ? renderHeader(scope) : column.label\n      }\n    }\n\n    let originRenderCell = column.renderCell\n    // TODO: 这里的实现调整\n    if (column.type === 'expand') {\n      // 对于展开行，renderCell 不允许配置的。在上一步中已经设置过，这里需要简单封装一下。\n      column.renderCell = (data) =>\n        h(\n          'div',\n          {\n            class: 'cell',\n          },\n          [originRenderCell(data)]\n        )\n      owner.value.renderExpanded = (data) => {\n        return slots.default ? slots.default(data) : slots.default\n      }\n    } else {\n      originRenderCell = originRenderCell || defaultRenderCell\n      // 对 renderCell 进行包装\n      column.renderCell = (data) => {\n        let children = null\n        if (slots.default) {\n          children = slots.default(data)\n        } else {\n          children = originRenderCell(data)\n        }\n        const prefix = treeCellPrefix(data)\n        const props = {\n          class: 'cell',\n          style: {},\n        }\n        if (column.showOverflowTooltip) {\n          props.class += ' el-tooltip'\n          props.style = {\n            width: `${\n              (data.column.realWidth || Number(data.column.width)) - 1\n            }px`,\n          }\n        }\n        checkSubColumn(children)\n        return h('div', props, [prefix, children])\n      }\n    }\n    return column\n  }\n  const getPropsData = (...propsKey: unknown[]) => {\n    return propsKey.reduce((prev, cur) => {\n      if (Array.isArray(cur)) {\n        cur.forEach((key) => {\n          prev[key] = props[key]\n        })\n      }\n      return prev\n    }, {})\n  }\n  const getColumnElIndex = (children, child) => {\n    return [].indexOf.call(children, child)\n  }\n\n  return {\n    columnId,\n    realAlign,\n    isSubColumn,\n    realHeaderAlign,\n    columnOrTableParent,\n    setColumnWidth,\n    setColumnForcedProps,\n    setColumnRenders,\n    getPropsData,\n    getColumnElIndex,\n  }\n}\n\nexport default useRender\n"],"names":[],"mappings":"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"}