import PropTypes from '../../_util/vue-types'
import ColGroup from './ColGroup'
import TableHeader from './TableHeader'
import TableRow from './TableRow'
import ExpandableRow from './ExpandableRow'
import { mergeProps } from '../../_util/props-util'
import { connect } from '../../_util/store'
function noop () {}
const BaseTable = {
name: 'BaseTable',
props: {
fixed: PropTypes.oneOfType([
PropTypes.string,
PropTypes.bool,
]),
columns: PropTypes.array.isRequired,
tableClassName: PropTypes.string.isRequired,
hasHead: PropTypes.bool.isRequired,
hasBody: PropTypes.bool.isRequired,
store: PropTypes.object.isRequired,
expander: PropTypes.object.isRequired,
getRowKey: PropTypes.func,
isAnyColumnsFixed: PropTypes.bool,
},
inject: {
table: { default: {}},
},
methods: {
handleRowHover (isHover, key) {
this.props.store.setState({
currentHoverKey: isHover ? key : null,
})
},
renderRows (renderData, indent, ancestorKeys = []) {
const {
columnManager, sComponents: components,
prefixCls,
childrenColumnName,
rowClassName,
// rowRef,
$listeners: {
rowClick: onRowClick = noop,
rowDoubleclick: onRowDoubleClick = noop,
rowContextmenu: onRowContextMenu = noop,
rowMouseenter: onRowMouseEnter = noop,
rowMouseleave: onRowMouseLeave = noop,
row: onRow = noop,
},
} = this.table
const { getRowKey, fixed, expander, isAnyColumnsFixed } = this
const rows = []
for (let i = 0; i < renderData.length; i++) {
const record = renderData[i]
const key = getRowKey(record, i)
const className = typeof rowClassName === 'string'
? rowClassName
: rowClassName(record, i, indent)
const onHoverProps = {}
if (columnManager.isAnyColumnsFixed()) {
onHoverProps.hover = this.handleRowHover
}
let leafColumns
if (fixed === 'left') {
leafColumns = columnManager.leftLeafColumns()
} else if (fixed === 'right') {
leafColumns = columnManager.rightLeafColumns()
} else {
leafColumns = columnManager.leafColumns()
}
const rowPrefixCls = `${prefixCls}-row`
const expandableRowProps = {
props: {
...expander.props,
fixed,
index: i,
prefixCls: rowPrefixCls,
record,
rowKey: key,
needIndentSpaced: expander.needIndentSpaced,
},
key,
on: {
// ...expander.on,
rowClick: onRowClick,
expandedChange: expander.handleExpandChange,
},
scopedSlots: {
default: (expandableRow) => {
const tableRowProps = mergeProps({
props: {
fixed,
indent,
record,
index: i,
prefixCls: rowPrefixCls,
childrenColumnName: childrenColumnName,
columns: leafColumns,
rowKey: key,
ancestorKeys,
components,
isAnyColumnsFixed,
},
on: {
row: onRow,
rowDoubleclick: onRowDoubleClick,
rowContextmenu: onRowContextMenu,
rowMouseenter: onRowMouseEnter,
rowMouseleave: onRowMouseLeave,
...onHoverProps,
},
class: className,
ref: `row_${i}_${indent}`,
}, expandableRow)
return (