{"version":3,"file":"render.mjs","sources":["../../../../../../src/components/ivue-table/table-column/render.ts"],"sourcesContent":["import {\r\n  Comment,\r\n  computed,\r\n  getCurrentInstance,\r\n  ref,\r\n  watchEffect,\r\n  h,\r\n} from 'vue';\r\n\r\nimport {\r\n  defaultRenderCell,\r\n  treeCellPrefix,\r\n  cellForced,\r\n  getDefaultClassName,\r\n} from '../config';\r\nimport { parseWidth, parseMinWidth } from '../utils';\r\n\r\n// type\r\nimport type { TableColumn, TableColumnCtx, ColumnParent } from './defaults';\r\nimport type { Table, RenderRowData } from '../table/defaults';\r\nimport type { ComputedRef } from 'vue';\r\n\r\nconst prefixCls = 'ivue-table';\r\n\r\nfunction useRender(\r\n  props: TableColumnCtx,\r\n  slots,\r\n  parentDom: ComputedRef<Table>\r\n) {\r\n  const vm = getCurrentInstance() as TableColumn;\r\n\r\n  // 列id\r\n  const columnId = ref<string>('');\r\n  // 是否是嵌套的子列\r\n  const isSubColumn = ref<boolean>(false);\r\n  // 对齐方向\r\n  const align = ref<string>();\r\n  // 表头对齐方式\r\n  const headerAlign = ref<string>();\r\n  // 对应列的宽度\r\n  const columnWidth = ref<string | number>(parseWidth(props.width));\r\n  // 对应列的最小宽度\r\n  const columnMinWidth = ref<string | number>(parseMinWidth(props.minWidth));\r\n\r\n  // computed\r\n\r\n  // 列的父级\r\n  const columnParent = computed(() => {\r\n    let parent: ColumnParent = vm.vnode.vParent || vm.parent;\r\n\r\n    // 没有表格id 没有列id\r\n    while (parent && !parent.tableId && !parent.columnId) {\r\n      parent = parent.vnode.vParent || parent.parent;\r\n    }\r\n\r\n    return parent;\r\n  });\r\n\r\n  // 是否有列数据\r\n  const hasTreeColumn = computed<boolean>(() => {\r\n    const { store }: any = vm.parent;\r\n\r\n    // 没有 store\r\n    if (!store) {\r\n      return false;\r\n    }\r\n\r\n    const { treeData } = store.states;\r\n\r\n    const treeDataValue = treeData.value;\r\n\r\n    return treeDataValue && Object.keys(treeDataValue).length > 0;\r\n  });\r\n\r\n  // methods\r\n\r\n  // 获取props值\r\n  const getPropsData = (...propsKey: unknown[]) => {\r\n    return propsKey.reduce((prev: TableColumnCtx, cur) => {\r\n      // 数组\r\n      if (Array.isArray(cur)) {\r\n        cur.forEach((key) => {\r\n          prev[key] = props[key];\r\n        });\r\n      }\r\n\r\n      return prev;\r\n    }, {});\r\n  };\r\n\r\n  // 检查子列表\r\n  const checkSubColumn = (children: TableColumn | TableColumn[]) => {\r\n    // 数组\r\n    if (Array.isArray(children)) {\r\n      children.forEach((child) => check(child));\r\n    }\r\n    // 其他\r\n    else {\r\n      check(children);\r\n    }\r\n\r\n    // 检查是否是列表组件\r\n    function check(item: TableColumn) {\r\n      if (item?.type?.name === `${prefixCls}-column`) {\r\n        item.vParent = vm;\r\n      }\r\n    }\r\n  };\r\n\r\n  // 列渲染\r\n  const columnRender = (column: TableColumnCtx) => {\r\n    // renderHeader 属性不推荐使用。\r\n\r\n    // 不是多选框\r\n    if (\r\n      !props.renderHeader &&\r\n      column.type !== 'selection' &&\r\n      column.type !== 'index'\r\n    ) {\r\n      column.renderHeader = (scope) => {\r\n        vm.columnConfig.value['label'];\r\n\r\n        // 是否有头部插槽\r\n        const renderHeader = slots.header;\r\n\r\n        return renderHeader ? renderHeader(scope) : column.label;\r\n      };\r\n    }\r\n\r\n    // 渲染行函数\r\n    let originRenderCell = column.renderCell;\r\n\r\n    const hasTreeColumnValue = hasTreeColumn.value;\r\n\r\n    // 可展开行\r\n    if (column.type === 'expand') {\r\n      // 渲染行\r\n      column.renderCell = (data) => {\r\n        return h(\r\n          'div',\r\n          {\r\n            class: 'cell',\r\n          },\r\n          [originRenderCell(data)]\r\n        );\r\n      };\r\n\r\n      // 展开的内容\r\n      parentDom.value.renderExpanded = (data) => {\r\n        return slots.default ? slots.default(data) : slots.default;\r\n      };\r\n    }\r\n    // 其他状态\r\n    else {\r\n      originRenderCell = originRenderCell || defaultRenderCell;\r\n\r\n      // 渲染行\r\n      column.renderCell = (data: RenderRowData) => {\r\n        let children = null;\r\n\r\n        // 有默认插槽\r\n        if (slots.default) {\r\n          // 设置vnode\r\n          const vnode = slots.default(data);\r\n\r\n          // 判断是否是注释\r\n          children = vnode.some((v) => v.type !== Comment)\r\n            ? vnode\r\n            : originRenderCell(data);\r\n        }\r\n        // 不是插槽\r\n        else {\r\n          children = originRenderCell(data);\r\n        }\r\n\r\n        // 列数据\r\n        const shouldCreatePlaceholder =\r\n          hasTreeColumnValue && data.cellIndex === 0;\r\n\r\n        // 列的占位符-用于展示树形数据时，树节点的缩进\r\n        const prefix = treeCellPrefix(data, shouldCreatePlaceholder);\r\n\r\n        // props\r\n        const props = {\r\n          class: 'cell',\r\n          style: {},\r\n        };\r\n\r\n        // 当内容过长被隐藏时显示 tooltip\r\n        if (column.showOverflowTooltip) {\r\n          props.class = `${props.class} ${prefixCls}-tooltip`;\r\n          props.style = {\r\n            width: `${\r\n              (data.column.columnWidth || Number(data.column.width)) - 1\r\n            }px`,\r\n          };\r\n        }\r\n\r\n        // 检查子列表\r\n        checkSubColumn(children);\r\n\r\n        return h('div', props, [prefix, children]);\r\n      };\r\n    }\r\n\r\n    return column;\r\n  };\r\n\r\n  // 设置列宽度\r\n  const setColumnWidth = (column: TableColumnCtx) => {\r\n    if (columnWidth.value) {\r\n      column.width = columnWidth.value;\r\n    }\r\n\r\n    // 最小宽度\r\n    if (columnMinWidth.value) {\r\n      column.minWidth = columnMinWidth.value;\r\n    }\r\n\r\n    // 没有设置最小宽度，默认最小宽度 80\r\n    if (!column.minWidth) {\r\n      column.minWidth = 80;\r\n    }\r\n\r\n    // 列宽度 minWidth 或者 width\r\n    column.columnWidth = Number(\r\n      column.width === undefined ? column.minWidth : column.width\r\n    );\r\n\r\n    return column;\r\n  };\r\n\r\n  // 设置列 props\r\n  const setColumnProps = (column: TableColumnCtx) => {\r\n    // 对应列的类型\r\n    const type = column.type;\r\n\r\n    // 不应覆盖的值\r\n    const source = cellForced[type] || {};\r\n\r\n    // 替换列 column 对象的参数\r\n    Object.keys(source).forEach((prop) => {\r\n      // 获取值\r\n      const value = source[prop];\r\n\r\n      if (prop !== 'className' && value !== undefined) {\r\n        column[prop] = value;\r\n      }\r\n    });\r\n\r\n    // 有对应的class 多选 ｜ 展开\r\n    const className = getDefaultClassName(type);\r\n\r\n    // 有对应的class\r\n    if (className) {\r\n      column.className = column.className\r\n        ? `${column.className} ${className}`\r\n        : className;\r\n    }\r\n\r\n    return column;\r\n  };\r\n\r\n  // 获取列节点index\r\n  const getColumnDomIndex = (children: HTMLElement[], el) => {\r\n    return Array.prototype.indexOf.call(children, el);\r\n  };\r\n\r\n  // watch\r\n\r\n  // 同步监听 对齐方向\r\n  watchEffect(() => {\r\n    align.value = props.align ? `is-${props.align}` : '';\r\n\r\n    return align.value;\r\n  });\r\n\r\n  // 同步监听 表头对齐方式\r\n  watchEffect(() => {\r\n    headerAlign.value = props.headerAlign\r\n      ? `is-${props.headerAlign}`\r\n      : align.value;\r\n\r\n    return headerAlign.value;\r\n  });\r\n\r\n  return {\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  };\r\n}\r\n\r\nexport default useRender;\r\n"],"names":["props"],"mappings":";;;;AAsBA,MAAM,SAAY,GAAA,YAAA,CAAA;AAElB,SAAS,SAAA,CACP,KACA,EAAA,KAAA,EACA,SACA,EAAA;AACA,EAAA,MAAM,KAAK,kBAAmB,EAAA,CAAA;AAG9B,EAAM,MAAA,QAAA,GAAW,IAAY,EAAE,CAAA,CAAA;AAE/B,EAAM,MAAA,WAAA,GAAc,IAAa,KAAK,CAAA,CAAA;AAEtC,EAAA,MAAM,QAAQ,GAAY,EAAA,CAAA;AAE1B,EAAA,MAAM,cAAc,GAAY,EAAA,CAAA;AAEhC,EAAA,MAAM,WAAc,GAAA,GAAA,CAAqB,UAAW,CAAA,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAEhE,EAAA,MAAM,cAAiB,GAAA,GAAA,CAAqB,aAAc,CAAA,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAA;AAKzE,EAAM,MAAA,YAAA,GAAe,SAAS,MAAM;AAClC,IAAA,IAAI,MAAuB,GAAA,EAAA,CAAG,KAAM,CAAA,OAAA,IAAW,EAAG,CAAA,MAAA,CAAA;AAGlD,IAAA,OAAO,UAAU,CAAC,MAAA,CAAO,OAAW,IAAA,CAAC,OAAO,QAAU,EAAA;AACpD,MAAS,MAAA,GAAA,MAAA,CAAO,KAAM,CAAA,OAAA,IAAW,MAAO,CAAA,MAAA,CAAA;AAAA,KAC1C;AAEA,IAAO,OAAA,MAAA,CAAA;AAAA,GACR,CAAA,CAAA;AAGD,EAAM,MAAA,aAAA,GAAgB,SAAkB,MAAM;AAC5C,IAAM,MAAA,EAAE,KAAM,EAAA,GAAS,EAAG,CAAA,MAAA,CAAA;AAG1B,IAAA,IAAI,CAAC,KAAO,EAAA;AACV,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAEA,IAAM,MAAA,EAAE,QAAS,EAAA,GAAI,KAAM,CAAA,MAAA,CAAA;AAE3B,IAAA,MAAM,gBAAgB,QAAS,CAAA,KAAA,CAAA;AAE/B,IAAA,OAAO,aAAiB,IAAA,MAAA,CAAO,IAAK,CAAA,aAAa,EAAE,MAAS,GAAA,CAAA,CAAA;AAAA,GAC7D,CAAA,CAAA;AAKD,EAAM,MAAA,YAAA,GAAe,IAAI,QAAwB,KAAA;AAC/C,IAAA,OAAO,QAAS,CAAA,MAAA,CAAO,CAAC,IAAA,EAAsB,GAAQ,KAAA;AAEpD,MAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,GAAG,CAAG,EAAA;AACtB,QAAI,GAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACnB,UAAA,IAAA,CAAK,OAAO,KAAM,CAAA,GAAA,CAAA,CAAA;AAAA,SACnB,CAAA,CAAA;AAAA,OACH;AAEA,MAAO,OAAA,IAAA,CAAA;AAAA,KACT,EAAG,EAAE,CAAA,CAAA;AAAA,GACP,CAAA;AAGA,EAAM,MAAA,cAAA,GAAiB,CAAC,QAA0C,KAAA;AAEhE,IAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,QAAQ,CAAG,EAAA;AAC3B,MAAA,QAAA,CAAS,OAAQ,CAAA,CAAC,KAAU,KAAA,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAAA,KAGrC,MAAA;AACH,MAAA,KAAA,CAAM,QAAQ,CAAA,CAAA;AAAA,KAChB;AAGA,IAAA,SAAS,MAAM,IAAmB,EAAA;AAtGtC,MAAA,IAAA,EAAA,CAAA;AAuGM,MAAA,IAAA,CAAA,CAAI,EAAM,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,IAAA,KAAN,IAAY,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,MAAS,GAAG,SAAoB,CAAA,OAAA,CAAA,EAAA;AAC9C,QAAA,IAAA,CAAK,OAAU,GAAA,EAAA,CAAA;AAAA,OACjB;AAAA,KACF;AAAA,GACF,CAAA;AAGA,EAAM,MAAA,YAAA,GAAe,CAAC,MAA2B,KAAA;AAI/C,IACE,IAAA,CAAC,MAAM,YACP,IAAA,MAAA,CAAO,SAAS,WAChB,IAAA,MAAA,CAAO,SAAS,OAChB,EAAA;AACA,MAAO,MAAA,CAAA,YAAA,GAAe,CAAC,KAAU,KAAA;AAC/B,QAAA,EAAA,CAAG,aAAa,KAAM,CAAA,OAAA,CAAA,CAAA;AAGtB,QAAA,MAAM,eAAe,KAAM,CAAA,MAAA,CAAA;AAE3B,QAAA,OAAO,YAAe,GAAA,YAAA,CAAa,KAAK,CAAA,GAAI,MAAO,CAAA,KAAA,CAAA;AAAA,OACrD,CAAA;AAAA,KACF;AAGA,IAAA,IAAI,mBAAmB,MAAO,CAAA,UAAA,CAAA;AAE9B,IAAA,MAAM,qBAAqB,aAAc,CAAA,KAAA,CAAA;AAGzC,IAAI,IAAA,MAAA,CAAO,SAAS,QAAU,EAAA;AAE5B,MAAO,MAAA,CAAA,UAAA,GAAa,CAAC,IAAS,KAAA;AAC5B,QAAO,OAAA,CAAA;AAAA,UACL,KAAA;AAAA,UACA;AAAA,YACE,KAAO,EAAA,MAAA;AAAA,WACT;AAAA,UACA,CAAC,gBAAiB,CAAA,IAAI,CAAC,CAAA;AAAA,SACzB,CAAA;AAAA,OACF,CAAA;AAGA,MAAU,SAAA,CAAA,KAAA,CAAM,cAAiB,GAAA,CAAC,IAAS,KAAA;AACzC,QAAA,OAAO,MAAM,OAAU,GAAA,KAAA,CAAM,OAAQ,CAAA,IAAI,IAAI,KAAM,CAAA,OAAA,CAAA;AAAA,OACrD,CAAA;AAAA,KAGG,MAAA;AACH,MAAA,gBAAA,GAAmB,gBAAoB,IAAA,iBAAA,CAAA;AAGvC,MAAO,MAAA,CAAA,UAAA,GAAa,CAAC,IAAwB,KAAA;AAC3C,QAAA,IAAI,QAAW,GAAA,IAAA,CAAA;AAGf,QAAA,IAAI,MAAM,OAAS,EAAA;AAEjB,UAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAGhC,UAAW,QAAA,GAAA,KAAA,CAAM,IAAK,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,SAAS,OAAO,CAAA,GAC3C,KACA,GAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAAA,SAGtB,MAAA;AACH,UAAA,QAAA,GAAW,iBAAiB,IAAI,CAAA,CAAA;AAAA,SAClC;AAGA,QAAM,MAAA,uBAAA,GACJ,kBAAsB,IAAA,IAAA,CAAK,SAAc,KAAA,CAAA,CAAA;AAG3C,QAAM,MAAA,MAAA,GAAS,cAAe,CAAA,IAAA,EAAM,uBAAuB,CAAA,CAAA;AAG3D,QAAA,MAAMA,MAAQ,GAAA;AAAA,UACZ,KAAO,EAAA,MAAA;AAAA,UACP,OAAO,EAAC;AAAA,SACV,CAAA;AAGA,QAAA,IAAI,OAAO,mBAAqB,EAAA;AAC9B,UAAAA,MAAM,CAAA,KAAA,GAAQ,CAAGA,EAAAA,MAAAA,CAAM,KAAS,CAAA,CAAA,EAAA,SAAA,CAAA,QAAA,CAAA,CAAA;AAChC,UAAAA,OAAM,KAAQ,GAAA;AAAA,YACZ,KAAA,EAAO,IACJ,IAAK,CAAA,MAAA,CAAO,eAAe,MAAO,CAAA,IAAA,CAAK,MAAO,CAAA,KAAK,CAAK,IAAA,CAAA,CAAA,EAAA,CAAA;AAAA,WAE7D,CAAA;AAAA,SACF;AAGA,QAAA,cAAA,CAAe,QAAQ,CAAA,CAAA;AAEvB,QAAA,OAAO,EAAE,KAAOA,EAAAA,MAAAA,EAAO,CAAC,MAAA,EAAQ,QAAQ,CAAC,CAAA,CAAA;AAAA,OAC3C,CAAA;AAAA,KACF;AAEA,IAAO,OAAA,MAAA,CAAA;AAAA,GACT,CAAA;AAGA,EAAM,MAAA,cAAA,GAAiB,CAAC,MAA2B,KAAA;AACjD,IAAA,IAAI,YAAY,KAAO,EAAA;AACrB,MAAA,MAAA,CAAO,QAAQ,WAAY,CAAA,KAAA,CAAA;AAAA,KAC7B;AAGA,IAAA,IAAI,eAAe,KAAO,EAAA;AACxB,MAAA,MAAA,CAAO,WAAW,cAAe,CAAA,KAAA,CAAA;AAAA,KACnC;AAGA,IAAI,IAAA,CAAC,OAAO,QAAU,EAAA;AACpB,MAAA,MAAA,CAAO,QAAW,GAAA,EAAA,CAAA;AAAA,KACpB;AAGA,IAAA,MAAA,CAAO,WAAc,GAAA,MAAA;AAAA,MACnB,MAAO,CAAA,KAAA,KAAU,KAAY,CAAA,GAAA,MAAA,CAAO,WAAW,MAAO,CAAA,KAAA;AAAA,KACxD,CAAA;AAEA,IAAO,OAAA,MAAA,CAAA;AAAA,GACT,CAAA;AAGA,EAAM,MAAA,cAAA,GAAiB,CAAC,MAA2B,KAAA;AAEjD,IAAA,MAAM,OAAO,MAAO,CAAA,IAAA,CAAA;AAGpB,IAAM,MAAA,MAAA,GAAS,UAAW,CAAA,IAAA,CAAA,IAAS,EAAC,CAAA;AAGpC,IAAA,MAAA,CAAO,IAAK,CAAA,MAAM,CAAE,CAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AAEpC,MAAA,MAAM,QAAQ,MAAO,CAAA,IAAA,CAAA,CAAA;AAErB,MAAI,IAAA,IAAA,KAAS,WAAe,IAAA,KAAA,KAAU,KAAW,CAAA,EAAA;AAC/C,QAAA,MAAA,CAAO,IAAQ,CAAA,GAAA,KAAA,CAAA;AAAA,OACjB;AAAA,KACD,CAAA,CAAA;AAGD,IAAM,MAAA,SAAA,GAAY,oBAAoB,IAAI,CAAA,CAAA;AAG1C,IAAA,IAAI,SAAW,EAAA;AACb,MAAA,MAAA,CAAO,YAAY,MAAO,CAAA,SAAA,GACtB,CAAG,EAAA,MAAA,CAAO,aAAa,SACvB,CAAA,CAAA,GAAA,SAAA,CAAA;AAAA,KACN;AAEA,IAAO,OAAA,MAAA,CAAA;AAAA,GACT,CAAA;AAGA,EAAM,MAAA,iBAAA,GAAoB,CAAC,QAAA,EAAyB,EAAO,KAAA;AACzD,IAAA,OAAO,KAAM,CAAA,SAAA,CAAU,OAAQ,CAAA,IAAA,CAAK,UAAU,EAAE,CAAA,CAAA;AAAA,GAClD,CAAA;AAKA,EAAA,WAAA,CAAY,MAAM;AAChB,IAAA,KAAA,CAAM,KAAQ,GAAA,KAAA,CAAM,KAAQ,GAAA,CAAA,GAAA,EAAM,MAAM,KAAU,CAAA,CAAA,GAAA,EAAA,CAAA;AAElD,IAAA,OAAO,KAAM,CAAA,KAAA,CAAA;AAAA,GACd,CAAA,CAAA;AAGD,EAAA,WAAA,CAAY,MAAM;AAChB,IAAA,WAAA,CAAY,QAAQ,KAAM,CAAA,WAAA,GACtB,CAAM,GAAA,EAAA,KAAA,CAAM,gBACZ,KAAM,CAAA,KAAA,CAAA;AAEV,IAAA,OAAO,WAAY,CAAA,KAAA,CAAA;AAAA,GACpB,CAAA,CAAA;AAED,EAAO,OAAA;AAAA,IAEL,QAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IAGA,YAAA;AAAA,IAGA,YAAA;AAAA,IACA,iBAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,GACF,CAAA;AACF;;;;"}