{"version":3,"file":"index.mjs","sources":["../../../../../../src/components/ivue-table/table-column/index.ts"],"sourcesContent":["import {\r\n  defineComponent,\r\n  h,\r\n  getCurrentInstance,\r\n  ref,\r\n  computed,\r\n  onMounted,\r\n  onBeforeMount,\r\n  Fragment,\r\n  onBeforeUnmount,\r\n} from 'vue';\r\nimport { isString } from '@vue/shared';\r\n\r\nimport defaultProps from './defaults';\r\n\r\nimport useRender from './render';\r\nimport useWatcher from './watcher';\r\n\r\nimport { cellStyles, mergeOptions, compose } from '../config';\r\n\r\n// type\r\nimport type { TableColumn, TableColumnCtx } from './defaults';\r\nimport type { Table } from '../table/defaults';\r\n\r\nconst prefixCls = 'ivue-table-column';\r\nlet columnIdSeed = 1;\r\n\r\nexport default defineComponent({\r\n  name: prefixCls,\r\n  props: defaultProps,\r\n  setup(props: TableColumnCtx, { slots }) {\r\n    const vm = getCurrentInstance() as TableColumn;\r\n\r\n    // data\r\n\r\n    // 列参数\r\n    const columnConfig = ref<Partial<TableColumnCtx>>({});\r\n\r\n    // computed\r\n\r\n    // 获取父级元素\r\n    const parentDom = computed(() => {\r\n      let parent = vm.parent as Table;\r\n\r\n      // 没有表格id\r\n      while (parent && !parent.tableId) {\r\n        parent = parent.parent;\r\n      }\r\n\r\n      return parent;\r\n    });\r\n\r\n    // methods\r\n\r\n    // 初始化\r\n    const initData = () => {\r\n      // 是否是嵌套的子列 获取 hiddenColumns 节点\r\n      const children = isSubColumn.value\r\n        ? parent.vnode.el.children\r\n        : parent.refs.hiddenColumns?.children;\r\n\r\n      // 获取当前行index\r\n      const getColumnIndex = () => {\r\n        return getColumnDomIndex(children || [], vm.vnode.el);\r\n      };\r\n\r\n      // 列参数\r\n      columnConfig.value.getColumnIndex = getColumnIndex;\r\n\r\n      // 插入列\r\n      const columnIndex = getColumnIndex();\r\n\r\n      // 存在列组件插入列节点\r\n      if (columnIndex > -1) {\r\n        parentDom.value.store.commit(\r\n          'insertColumn',\r\n          columnConfig.value,\r\n          isSubColumn.value ? parent.columnConfig.value : null\r\n        );\r\n      }\r\n    };\r\n\r\n    // 在挂载开始之前被调用\r\n    const initBeforeMount = () => {\r\n      // 是否是嵌套的子列 父级不相等\r\n      isSubColumn.value = parentDom.value !== parent;\r\n\r\n      // 对应列的类型\r\n      const type = props.type || 'default';\r\n\r\n      // 对应列是否可以排序\r\n      const sortable = props.sortable === '' ? true : props.sortable;\r\n\r\n      // 默认参数\r\n      const defaults = {\r\n        // 行样式\r\n        ...cellStyles[type],\r\n        // id\r\n        id: columnId.value,\r\n        // 对应列的类型\r\n        type,\r\n        // 对应列内容的字段名\r\n        property: props.prop || props.property,\r\n        // 对齐方式\r\n        align: align,\r\n        // 表头对齐方式\r\n        headerAlign: headerAlign,\r\n        // 表头对齐方式\r\n        showOverflowTooltip: props.showOverflowTooltip,\r\n        // filter 相关属性\r\n        filterable: props.filters || props.filterMethod,\r\n        // 过滤弹出框的定位\r\n        filterPlacement: '',\r\n        // 过滤开启\r\n        filterOpened: false,\r\n        // 是否是嵌套的子列\r\n        isSubColumn: false,\r\n        // 对应列是否可以排序\r\n        sortable,\r\n        // index 列\r\n        index: props.index,\r\n        // <column key=\"xxx\" />\r\n        // 列 vode key\r\n        rawColumnKey: vm.vnode.key,\r\n        // 选中的数据过滤项\r\n        filteredValue: [],\r\n      };\r\n\r\n      // 基础 props\r\n      const basicProps = [\r\n        'columnKey',\r\n        'label',\r\n        'className',\r\n        'labelClassName',\r\n        'type',\r\n        'renderHeader',\r\n        'formatter',\r\n        'fixed',\r\n        'resizable',\r\n      ];\r\n\r\n      // 排序 props\r\n      const sortProps = ['sortMethod', 'sortBy', 'sortOrders'];\r\n      // 多选 props\r\n      const selectProps = ['selectable', 'reserveSelection'];\r\n      // 过滤 props\r\n      const filterProps = [\r\n        'filterMethod',\r\n        'filters',\r\n        'filterMultiple',\r\n        'filterOpened',\r\n        'filteredValue',\r\n        'filterPlacement',\r\n      ];\r\n\r\n      // 获取props值\r\n      let column = getPropsData(\r\n        basicProps,\r\n        sortProps,\r\n        selectProps,\r\n        filterProps\r\n      );\r\n\r\n      // 合并props值\r\n      column = mergeOptions(defaults, column);\r\n\r\n      // 合并函数\r\n      const chains = compose(\r\n        // 列渲染函数\r\n        columnRender,\r\n        // 设置列宽度\r\n        setColumnWidth,\r\n        // 设置列 props\r\n        setColumnProps\r\n      );\r\n\r\n      column = chains(column);\r\n\r\n      // 列参数\r\n      columnConfig.value = column;\r\n\r\n      // 注册 watcher\r\n\r\n      // 注册普通观察者\r\n      registerNormalWatchers();\r\n      registerComplexWatchers();\r\n    };\r\n\r\n    // onBeforeMount\r\n    onBeforeMount(() => {\r\n      // 在挂载开始之前被调用\r\n      initBeforeMount();\r\n    });\r\n\r\n    // onMounted\r\n    onMounted(() => {\r\n      // 初始化\r\n      initData();\r\n    });\r\n\r\n    // onBeforeUnmount\r\n    onBeforeUnmount(() => {\r\n      parentDom.value.store.commit(\r\n        'removeColumn',\r\n        columnConfig.value,\r\n        isSubColumn.value ? parent.columnConfig.value : null\r\n      );\r\n    });\r\n\r\n    // 开始渲染\r\n    const {\r\n      // data\r\n      columnId,\r\n      isSubColumn,\r\n      align,\r\n      headerAlign,\r\n\r\n      // computed\r\n      columnParent,\r\n\r\n      // methods\r\n      getPropsData,\r\n      getColumnDomIndex,\r\n      columnRender,\r\n      setColumnWidth,\r\n      setColumnProps,\r\n    } = useRender(props, slots, parentDom);\r\n\r\n    const { registerNormalWatchers, registerComplexWatchers } = useWatcher(\r\n      parentDom,\r\n      props\r\n    );\r\n\r\n    // 获取父级\r\n    const parent = columnParent.value;\r\n    // 设置列id\r\n    columnId.value = `${\r\n      parent.tableId || parent.columnId\r\n    }-column-${columnIdSeed++}`;\r\n\r\n    // 设置列id\r\n    vm.columnId = columnId.value;\r\n\r\n    // 列参数\r\n    vm.columnConfig = columnConfig;\r\n  },\r\n  render() {\r\n    try {\r\n      const slotsList = this.$slots.default?.({\r\n        row: {},\r\n        column: {},\r\n        $index: -1,\r\n      });\r\n\r\n      const slot = [];\r\n\r\n      // 有插槽\r\n      if (Array.isArray(slotsList)) {\r\n        for (const childNode of slotsList) {\r\n          // ivue-table-column 或者 函数组件 ((FUNCTIONAL_COMPONENT = 1 << 1) = 2) & 2 === 1\r\n          if (childNode.type?.name === prefixCls || childNode.shapeFlag & 2) {\r\n            slot.push(childNode);\r\n          }\r\n          // 是否是片段 Fragment 多个根节点\r\n          else if (\r\n            childNode.type === Fragment &&\r\n            Array.isArray(childNode.children)\r\n          ) {\r\n            childNode.children.forEach((vnode) => {\r\n              /**\r\n               * vnode为动态槽或文本时不渲染\r\n               *\r\n               * 1024\r\n               * 表示具有动态插槽的组件（例如，引用 v-for 的插槽\r\n               * 迭代值或动态插槽名称）。\r\n               * 带有这个标志的组件总是被强制更新。\r\n               */\r\n              if (vnode?.patchFlag !== 1024 && !isString(vnode?.children)) {\r\n                slot.push(vnode);\r\n              }\r\n            });\r\n          }\r\n        }\r\n      }\r\n\r\n      const vnode = h('div', slot);\r\n\r\n      return vnode;\r\n    } catch {\r\n      return h('div', []);\r\n    }\r\n  },\r\n});\r\n"],"names":["parent","vnode"],"mappings":"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"}