{"version":3,"file":"index.mjs","sources":["../../../../../../../packages/components/table/src/table-column/index.ts"],"sourcesContent":["import {\n  defineComponent,\n  ref,\n  onBeforeMount,\n  onMounted,\n  computed,\n  getCurrentInstance,\n  h,\n  onBeforeUnmount,\n  Fragment,\n} from 'vue'\nimport ElCheckbox from '@element-plus/components/checkbox'\nimport { cellStarts } from '../config'\nimport { mergeOptions, compose } from '../util'\nimport useWatcher from './watcher-helper'\nimport useRender from './render-helper'\nimport defaultProps from './defaults'\nimport type { TableColumn, TableColumnCtx } from './defaults'\n\nimport type { DefaultRow } from '../table/defaults'\n\nlet columnIdSeed = 1\n\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 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    } = useRender(props as unknown as TableColumnCtx<unknown>, slots, owner)\n\n    const parent = columnOrTableParent.value\n    columnId.value = `${\n      parent.tableId || parent.columnId\n    }_column_${columnIdSeed++}`\n    onBeforeMount(() => {\n      isSubColumn.value = owner.value !== parent\n\n      const type = props.type || 'default'\n      const sortable = props.sortable === '' ? true : props.sortable\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          props.showOverflowTooltip || props.showTooltipWhenOverflow,\n        // filter 相关属性\n        filterable: props.filters || props.filterMethod,\n        filteredValue: [],\n        filterPlacement: '',\n        isColumnGroup: 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      ]\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)\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 ? parent.columnConfig.value : null\n        )\n    })\n    onBeforeUnmount(() => {\n      owner.value.store.commit(\n        'removeColumn',\n        columnConfig.value,\n        isSubColumn.value ? parent.columnConfig.value : null\n      )\n    })\n    instance.columnId = columnId.value\n\n    // eslint-disable-next-line\n    instance.columnConfig = columnConfig\n    return\n  },\n  render() {\n    let children = []\n    try {\n      const renderDefault = this.$slots.default?.({\n        row: {},\n        column: {},\n        $index: -1,\n      })\n      if (renderDefault instanceof Array) {\n        for (const childNode of renderDefault) {\n          if (\n            childNode.type?.name === 'ElTableColumn' ||\n            childNode.shapeFlag & 2\n          ) {\n            children.push(childNode)\n          } else if (\n            childNode.type === Fragment &&\n            childNode.children instanceof Array\n          ) {\n            children.push(...childNode.children)\n          }\n        }\n      }\n    } catch {\n      children = []\n    }\n    return h('div', children)\n  },\n})\n"],"names":[],"mappings":"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"}