ivue-material-plus
Version:
A high quality UI components Library with Vue.js
168 lines (163 loc) • 4.92 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var vue = require('vue');
var shared = require('@vue/shared');
var defaults = require('./defaults.js');
var render = require('./render.js');
var watcher = require('./watcher.js');
var config = require('../config.js');
const prefixCls = "ivue-table-column";
let columnIdSeed = 1;
var TableColumn = vue.defineComponent({
name: prefixCls,
props: defaults["default"],
setup(props, { slots }) {
const vm = vue.getCurrentInstance();
const columnConfig = vue.ref({});
const parentDom = vue.computed(() => {
let parent2 = vm.parent;
while (parent2 && !parent2.tableId) {
parent2 = parent2.parent;
}
return parent2;
});
const initData = () => {
var _a;
const children = isSubColumn.value ? parent.vnode.el.children : (_a = parent.refs.hiddenColumns) == null ? void 0 : _a.children;
const getColumnIndex = () => {
return getColumnDomIndex(children || [], vm.vnode.el);
};
columnConfig.value.getColumnIndex = getColumnIndex;
const columnIndex = getColumnIndex();
if (columnIndex > -1) {
parentDom.value.store.commit(
"insertColumn",
columnConfig.value,
isSubColumn.value ? parent.columnConfig.value : null
);
}
};
const initBeforeMount = () => {
isSubColumn.value = parentDom.value !== parent;
const type = props.type || "default";
const sortable = props.sortable === "" ? true : props.sortable;
const defaults = {
...config.cellStyles[type],
id: columnId.value,
type,
property: props.prop || props.property,
align,
headerAlign,
showOverflowTooltip: props.showOverflowTooltip,
filterable: props.filters || props.filterMethod,
filterPlacement: "",
filterOpened: false,
isSubColumn: false,
sortable,
index: props.index,
rawColumnKey: vm.vnode.key,
filteredValue: []
};
const basicProps = [
"columnKey",
"label",
"className",
"labelClassName",
"type",
"renderHeader",
"formatter",
"fixed",
"resizable"
];
const sortProps = ["sortMethod", "sortBy", "sortOrders"];
const selectProps = ["selectable", "reserveSelection"];
const filterProps = [
"filterMethod",
"filters",
"filterMultiple",
"filterOpened",
"filteredValue",
"filterPlacement"
];
let column = getPropsData(
basicProps,
sortProps,
selectProps,
filterProps
);
column = config.mergeOptions(defaults, column);
const chains = config.compose(
columnRender,
setColumnWidth,
setColumnProps
);
column = chains(column);
columnConfig.value = column;
registerNormalWatchers();
registerComplexWatchers();
};
vue.onBeforeMount(() => {
initBeforeMount();
});
vue.onMounted(() => {
initData();
});
vue.onBeforeUnmount(() => {
parentDom.value.store.commit(
"removeColumn",
columnConfig.value,
isSubColumn.value ? parent.columnConfig.value : null
);
});
const {
columnId,
isSubColumn,
align,
headerAlign,
columnParent,
getPropsData,
getColumnDomIndex,
columnRender,
setColumnWidth,
setColumnProps
} = render["default"](props, slots, parentDom);
const { registerNormalWatchers, registerComplexWatchers } = watcher["default"](
parentDom,
props
);
const parent = columnParent.value;
columnId.value = `${parent.tableId || parent.columnId}-column-${columnIdSeed++}`;
vm.columnId = columnId.value;
vm.columnConfig = columnConfig;
},
render() {
var _a, _b, _c;
try {
const slotsList = (_b = (_a = this.$slots).default) == null ? void 0 : _b.call(_a, {
row: {},
column: {},
$index: -1
});
const slot = [];
if (Array.isArray(slotsList)) {
for (const childNode of slotsList) {
if (((_c = childNode.type) == null ? void 0 : _c.name) === prefixCls || childNode.shapeFlag & 2) {
slot.push(childNode);
} else if (childNode.type === vue.Fragment && Array.isArray(childNode.children)) {
childNode.children.forEach((vnode2) => {
if ((vnode2 == null ? void 0 : vnode2.patchFlag) !== 1024 && !shared.isString(vnode2 == null ? void 0 : vnode2.children)) {
slot.push(vnode2);
}
});
}
}
}
const vnode = vue.h("div", slot);
return vnode;
} catch (e) {
return vue.h("div", []);
}
}
});
exports["default"] = TableColumn;
//# sourceMappingURL=index.js.map