@visactor/vue-vtable
Version:
The vue version of VTable
93 lines (90 loc) • 4.04 kB
JavaScript
import { convertPropsToCamelCase } from './stringUtils.js';
import { createCustomLayoutHandler } from './customLayoutUtils.js';
import { checkRenderEditor } from '../edit/util.js';
function extractPivotSlotOptions(vnodes) {
const options = {
columns: [],
columnHeaderTitle: [],
rows: [],
rowHeaderTitle: [],
indicators: [],
corner: {},
tooltip: {},
menu: {}
};
const typeMapping = {
PivotColumnDimension: 'columns',
PivotColumnHeaderTitle: 'columnHeaderTitle',
PivotRowDimension: 'rows',
PivotRowHeaderTitle: 'rowHeaderTitle',
PivotCorner: 'corner',
PivotIndicator: 'indicators',
Tooltip: 'tooltip',
Menu: 'menu'
};
vnodes.forEach(vnode => {
var _a, _b;
vnode.props = convertPropsToCamelCase(vnode.props);
const typeName = ((_a = vnode.type) === null || _a === void 0 ? void 0 : _a.symbol) || ((_b = vnode.type) === null || _b === void 0 ? void 0 : _b.name);
const optionKey = typeMapping[typeName];
if (optionKey) {
if (Array.isArray(options[optionKey])) {
if (vnode.props.hasOwnProperty('objectHandler')) {
options[optionKey].push(vnode.props.objectHandler);
}
else {
options[optionKey].push(vnode.props);
}
}
else {
options[optionKey] = vnode.props;
}
}
});
return options;
}
function extractListSlotOptions(vnodes) {
const options = {
columns: [],
tooltip: {},
menu: {}
};
const typeMapping = {
ListColumn: 'columns',
Tooltip: 'tooltip',
Menu: 'menu'
};
vnodes.forEach(vnode => {
var _a, _b;
vnode.props = convertPropsToCamelCase(vnode.props);
const typeName = ((_a = vnode.type) === null || _a === void 0 ? void 0 : _a.symbol) || ((_b = vnode.type) === null || _b === void 0 ? void 0 : _b.name);
const optionKey = typeMapping[typeName];
if (optionKey) {
if (optionKey === 'columns' && vnode.children) {
if (vnode.children.customLayout) {
vnode.props.customLayout = createCustomLayoutHandler(vnode.children);
}
if (vnode.children.headerCustomLayout) {
vnode.props.headerCustomLayout = createCustomLayoutHandler(vnode.children, true);
}
// 校验编辑器
checkRenderEditor(vnode.props, vnode.children.edit);
}
if (Array.isArray(options[optionKey])) {
options[optionKey].push(vnode.props);
}
else {
options[optionKey] = vnode.props;
}
}
});
return options;
}
function mergeSlotOptions(propsOptions, slotOptions) {
return Object.assign(Object.assign({}, propsOptions), { columns: slotOptions.columns && slotOptions.columns.length ? slotOptions.columns : propsOptions.columns, columnHeaderTitle: slotOptions.columnHeaderTitle && slotOptions.columnHeaderTitle.length
? slotOptions.columnHeaderTitle
: propsOptions.columnHeaderTitle, rows: slotOptions.rows && slotOptions.rows.length ? slotOptions.rows : propsOptions.rows, rowHeaderTitle: slotOptions.rowHeaderTitle && slotOptions.rowHeaderTitle.length
? slotOptions.rowHeaderTitle
: propsOptions.rowHeaderTitle, indicators: slotOptions.indicators && slotOptions.indicators.length ? slotOptions.indicators : propsOptions.indicators, corner: Object.keys(propsOptions.corner || {}).length ? propsOptions.corner : slotOptions.corner, tooltip: Object.keys(slotOptions.tooltip || {}).length ? slotOptions.tooltip : propsOptions.tooltip, menu: Object.keys(slotOptions.menu || {}).length ? slotOptions.menu : propsOptions.menu });
}
export { extractListSlotOptions, extractPivotSlotOptions, mergeSlotOptions };