element-plus
Version:
A Component Library for Vue 3
105 lines (100 loc) • 2.99 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
var vue = require('vue');
var lodashUnified = require('lodash-unified');
var constants = require('../constants.js');
var _private = require('../private.js');
var utils = require('../utils.js');
var cell = require('../components/cell.js');
var expandIcon = require('../components/expand-icon.js');
var shared = require('@vue/shared');
const CellRenderer = ({
columns,
column,
columnIndex,
depth,
expandIconProps,
isScrolling,
rowData,
rowIndex,
style,
expandedRowKeys,
ns,
cellProps: _cellProps,
expandColumnKey,
indentSize,
iconSize,
rowKey
}, {
slots
}) => {
const cellStyle = utils.enforceUnit(style);
if (column.placeholderSign === _private.placeholderSign) {
return vue.createVNode("div", {
"class": ns.em("row-cell", "placeholder"),
"style": cellStyle
}, null);
}
const {
cellRenderer,
dataKey,
dataGetter
} = column;
const cellData = shared.isFunction(dataGetter) ? dataGetter({
columns,
column,
columnIndex,
rowData,
rowIndex
}) : lodashUnified.get(rowData, dataKey != null ? dataKey : "");
const extraCellProps = utils.tryCall(_cellProps, {
cellData,
columns,
column,
columnIndex,
rowIndex,
rowData
});
const cellProps = {
class: ns.e("cell-text"),
columns,
column,
columnIndex,
cellData,
isScrolling,
rowData,
rowIndex
};
const columnCellRenderer = utils.componentToSlot(cellRenderer);
const Cell = columnCellRenderer ? columnCellRenderer(cellProps) : vue.renderSlot(slots, "default", cellProps, () => [vue.createVNode(cell["default"], cellProps, null)]);
const kls = [ns.e("row-cell"), column.class, column.align === constants.Alignment.CENTER && ns.is("align-center"), column.align === constants.Alignment.RIGHT && ns.is("align-right")];
const expandable = rowIndex >= 0 && expandColumnKey && column.key === expandColumnKey;
const expanded = rowIndex >= 0 && expandedRowKeys.includes(rowData[rowKey]);
let IconOrPlaceholder;
const iconStyle = `margin-inline-start: ${depth * indentSize}px;`;
if (expandable) {
if (shared.isObject(expandIconProps)) {
IconOrPlaceholder = vue.createVNode(expandIcon["default"], vue.mergeProps(expandIconProps, {
"class": [ns.e("expand-icon"), ns.is("expanded", expanded)],
"size": iconSize,
"expanded": expanded,
"style": iconStyle,
"expandable": true
}), null);
} else {
IconOrPlaceholder = vue.createVNode("div", {
"style": [iconStyle, `width: ${iconSize}px; height: ${iconSize}px;`].join(" ")
}, null);
}
}
return vue.createVNode("div", vue.mergeProps({
"class": kls,
"style": cellStyle
}, extraCellProps, {
"role": "cell"
}), [IconOrPlaceholder, Cell]);
};
CellRenderer.inheritAttrs = false;
var Cell = CellRenderer;
exports["default"] = Cell;
//# sourceMappingURL=cell.js.map
;