{"version":3,"file":"index.mjs","names":["defaultProps"],"sources":["../../../../../../../packages/components/table/src/table-column/index.ts"],"sourcesContent":["import {\n  Fragment,\n  computed,\n  defineComponent,\n  getCurrentInstance,\n  h,\n  onBeforeMount,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n} from 'vue'\nimport ElCheckbox from '@element-plus/components/checkbox'\nimport { useGlobalConfig } from '@element-plus/components/config-provider'\nimport { isArray, isString, isUndefined } from '@element-plus/utils'\nimport { cellStarts } from '../config'\nimport { compose, mergeOptions } from '../util'\nimport useWatcher from './watcher-helper'\nimport useRender from './render-helper'\nimport defaultProps from './defaults'\n\nimport type { VNode } from 'vue'\nimport type { TableColumn, TableColumnCtx } from './defaults'\nimport type { DefaultRow } from '../table/defaults'\n\nlet columnIdSeed = 1\n\n//TODO: when vue 3.3 we can set this component a generic: https://github.com/vuejs/core/pull/7963\nexport default defineComponent({\n  name: 'ElTableColumn',\n  components: {\n    ElCheckbox,\n  },\n  props: defaultProps,\n  setup(props, { slots }) {\n    const instance = getCurrentInstance() as TableColumn<DefaultRow>\n    const globalConfig = useGlobalConfig('table')\n    const columnConfig = ref<Partial<TableColumnCtx<DefaultRow>>>({})\n    const owner = computed(() => {\n      let parent = instance.parent as any\n      while (parent && !parent.tableId) {\n        parent = parent.parent\n      }\n      return parent\n    })\n\n    const { registerNormalWatchers, registerComplexWatchers } = useWatcher(\n      owner,\n      props\n    )\n    const {\n      columnId,\n      isSubColumn,\n      realHeaderAlign,\n      columnOrTableParent,\n      setColumnWidth,\n      setColumnForcedProps,\n      setColumnRenders,\n      getPropsData,\n      getColumnElIndex,\n      realAlign,\n      updateColumnOrder,\n    } = useRender(props as unknown as TableColumnCtx<DefaultRow>, slots, owner)\n\n    const parent = columnOrTableParent.value\n    columnId.value = `${\n      ('tableId' in parent && parent.tableId) ||\n      ('columnId' in parent && parent.columnId)\n    }_column_${columnIdSeed++}`\n    onBeforeMount(() => {\n      isSubColumn.value = owner.value !== parent\n\n      const type = (props.type as keyof typeof cellStarts) || 'default'\n      const sortable = props.sortable === '' ? true : props.sortable\n      //The selection column should not be affected by `showOverflowTooltip`.\n      const showOverflowTooltip =\n        type === 'selection'\n          ? false\n          : isUndefined(props.showOverflowTooltip)\n            ? (parent.props.showOverflowTooltip ??\n              globalConfig.value?.showOverflowTooltip)\n            : props.showOverflowTooltip\n      const tooltipFormatter = isUndefined(props.tooltipFormatter)\n        ? (parent.props.tooltipFormatter ??\n          globalConfig.value?.tooltipFormatter)\n        : props.tooltipFormatter\n      const defaults = {\n        ...cellStarts[type],\n        id: columnId.value,\n        type,\n        property: props.prop || props.property,\n        align: realAlign,\n        headerAlign: realHeaderAlign,\n        showOverflowTooltip,\n        tooltipFormatter,\n        // filter 相关属性\n        filterable: props.filters || props.filterMethod,\n        filteredValue: [],\n        filterPlacement: '',\n        filterClassName: '',\n        isColumnGroup: false,\n        isSubColumn: false,\n        filterOpened: false,\n        // sort 相关属性\n        sortable,\n        // index 列\n        index: props.index,\n        // <el-table-column key=\"xxx\" />\n        rawColumnKey: instance.vnode.key,\n      }\n\n      const basicProps = [\n        'columnKey',\n        'label',\n        'className',\n        'labelClassName',\n        'type',\n        'renderHeader',\n        'formatter',\n        'fixed',\n        'resizable',\n      ]\n      const sortProps = ['sortMethod', 'sortBy', 'sortOrders']\n      const selectProps = ['selectable', 'reserveSelection']\n      const filterProps = [\n        'filterMethod',\n        'filters',\n        'filterMultiple',\n        'filterOpened',\n        'filteredValue',\n        'filterPlacement',\n        'filterClassName',\n      ]\n\n      let column = getPropsData(basicProps, sortProps, selectProps, filterProps)\n\n      column = mergeOptions(defaults, column)\n      // 注意 compose 中函数执行的顺序是从右到左\n      const chains = compose(\n        setColumnRenders,\n        setColumnWidth,\n        setColumnForcedProps\n      )\n      column = chains(column) as unknown as TableColumnCtx<DefaultRow>\n      columnConfig.value = column\n\n      // 注册 watcher\n      registerNormalWatchers()\n      registerComplexWatchers()\n    })\n    onMounted(() => {\n      const parent = columnOrTableParent.value\n      const children = isSubColumn.value\n        ? parent.vnode.el?.children\n        : parent.refs.hiddenColumns?.children\n      const getColumnIndex = () =>\n        getColumnElIndex(children || [], instance.vnode.el)\n      columnConfig.value.getColumnIndex = getColumnIndex\n      const columnIndex = getColumnIndex()\n      columnIndex > -1 &&\n        owner.value.store.commit(\n          'insertColumn',\n          columnConfig.value,\n          isSubColumn.value\n            ? 'columnConfig' in parent && parent.columnConfig.value\n            : null,\n          updateColumnOrder\n        )\n    })\n    onBeforeUnmount(() => {\n      const getColumnIndex = columnConfig.value.getColumnIndex\n      const columnIndex = getColumnIndex ? getColumnIndex() : -1\n      columnIndex > -1 &&\n        owner.value.store.commit(\n          'removeColumn',\n          columnConfig.value,\n          isSubColumn.value\n            ? 'columnConfig' in parent && parent.columnConfig.value\n            : null,\n          updateColumnOrder\n        )\n    })\n    instance.columnId = columnId.value\n\n    instance.columnConfig = columnConfig as any\n    return\n  },\n  render() {\n    try {\n      const renderDefault = this.$slots.default?.({\n        row: {},\n        column: {},\n        $index: -1,\n      })\n      const children = []\n      if (isArray(renderDefault)) {\n        for (const childNode of renderDefault) {\n          if (\n            (childNode.type as any)?.name === 'ElTableColumn' ||\n            childNode.shapeFlag & 2\n          ) {\n            children.push(childNode)\n          } else if (\n            childNode.type === Fragment &&\n            isArray(childNode.children)\n          ) {\n            childNode.children.forEach((vnode) => {\n              // No rendering when vnode is dynamic slot or text\n              if (\n                (vnode as VNode)?.patchFlag !== 1024 &&\n                !isString((vnode as VNode)?.children)\n              ) {\n                children.push(vnode)\n              }\n            })\n          }\n        }\n      }\n      const vnode = h('div', children)\n      return vnode\n    } catch {\n      return h('div', [])\n    }\n  },\n})\n"],"mappings":"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"}