ivue-material-plus
Version:
A high quality UI components Library with Vue.js
80 lines (75 loc) • 1.94 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
var vue = require('vue');
var defaults = require('../table/defaults.js');
const getAllColumns = (columns) => {
const result = [];
columns.forEach((column) => {
if (column.children) {
result.push(column);
result.push.apply(result, getAllColumns(column.children));
} else {
result.push(column);
}
});
return result;
};
const convertToRows = (originColumns) => {
let maxLevel = 1;
const traverse = (column, parent) => {
if (parent) {
column.level = parent.level + 1;
if (maxLevel < column.level) {
maxLevel = column.level;
}
}
if (column.children) {
let colSpan = 0;
column.children.forEach((subColumn) => {
traverse(subColumn, column);
colSpan += subColumn.colSpan;
});
column.colSpan = colSpan;
} else {
column.colSpan = 1;
}
};
originColumns.forEach((item) => {
item.level = 1;
traverse(item, void 0);
});
const rows = [];
for (let i = 0; i < maxLevel; i++) {
rows.push([]);
}
const allColumns = getAllColumns(originColumns);
allColumns.forEach((item) => {
if (!item.children) {
item.rowSpan = maxLevel - item.level + 1;
} else {
item.rowSpan = 1;
item.children.forEach((col) => col.isSubColumn = true);
}
rows[item.level - 1].push(item);
});
return rows;
};
function useUtils(props) {
const IvueTable = vue.inject(defaults.TableContextKey);
const columnRows = vue.computed(() => {
return convertToRows(props.store.states.originColumns.value);
});
const isGroup = vue.computed(() => {
const result = columnRows.value.length > 1;
if (result && IvueTable) {
IvueTable.state.isGroup.value = true;
}
return result;
});
return {
isGroup,
columnRows
};
}
exports["default"] = useUtils;
//# sourceMappingURL=utils.js.map
;