UNPKG

ivue-material-plus

Version:

A high quality UI components Library with Vue.js

76 lines (71 loc) 2.33 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var vue = require('vue'); var error = require('../../utils/error.js'); function useLayoutObserver(root) { const vm = vue.getCurrentInstance(); const tableLayout = vue.computed(() => { const layout = root.layout; if (!layout) { error.throwError("ivue-table", "Can not find table layout"); } return layout; }); const handleColumnsChange = (layout) => { var _a; const cols = ((_a = root.vnode.el) == null ? void 0 : _a.querySelectorAll("colgroup > col")) || []; if (!cols.length) { return; } const flattenColumns = layout.getFlattenColumns(); const columnsMap = {}; flattenColumns.forEach((column) => { columnsMap[column.id] = column; }); for (let i = 0, j = cols.length; i < j; i++) { const col = cols[i]; const name = col.getAttribute("name"); const column = columnsMap[name]; if (column) { col.setAttribute("width", column.columnWidth || column.width); } } }; const handleScrollableWidthChange = (layout) => { var _a, _b; const cols = ((_a = root.vnode.el) == null ? void 0 : _a.querySelectorAll("colgroup > col[name=gutter]")) || []; for (let i = 0, j = cols.length; i < j; i++) { const col = cols[i]; col.setAttribute( "width", layout.scrollY.value ? layout.gutterWidth : "0" ); } const ths = ((_b = root.vnode.el) == null ? void 0 : _b.querySelectorAll("th.gutter")) || []; for (let i = 0, j = ths.length; i < j; i++) { const th = ths[i]; th.style.width = layout.scrollY.value ? `${layout.gutterWidth}px` : "0"; th.style.display = layout.scrollY.value ? "" : "none"; } }; vue.onBeforeMount(() => { tableLayout.value.addObserver(vm); }); vue.onUnmounted(() => { tableLayout.value.removeObserver(vm); }); vue.onMounted(() => { handleColumnsChange(tableLayout.value); handleScrollableWidthChange(tableLayout.value); }); vue.onUpdated(() => { handleColumnsChange(tableLayout.value); handleScrollableWidthChange(tableLayout.value); }); return { handleColumnsChange, handleScrollableWidthChange }; } exports["default"] = useLayoutObserver; //# sourceMappingURL=table-layout-observer.js.map