UNPKG

naive-ui

Version:

A Vue 3 Component Library. Fairly Complete, Theme Customizable, Uses TypeScript, Fast

113 lines 3.27 kB
import { computed, defineComponent, h, inject, ref, watchEffect } from 'vue'; import { formatLength } from "../../_utils/index.mjs"; import TableHeader from "./TableParts/Header.mjs"; import TableBody from "./TableParts/Body.mjs"; import { dataTableInjectionKey } from "./interface.mjs"; export default defineComponent({ name: 'MainTable', setup() { const { mergedClsPrefixRef, rightFixedColumnsRef, leftFixedColumnsRef, bodyWidthRef, maxHeightRef, minHeightRef, flexHeightRef, virtualScrollHeaderRef, syncScrollState } = inject(dataTableInjectionKey); const headerInstRef = ref(null); const bodyInstRef = ref(null); const selfElRef = ref(null); const fixedStateInitializedRef = ref(!(leftFixedColumnsRef.value.length || rightFixedColumnsRef.value.length)); const bodyStyleRef = computed(() => { return { maxHeight: formatLength(maxHeightRef.value), minHeight: formatLength(minHeightRef.value) }; }); function handleBodyResize(entry) { bodyWidthRef.value = entry.contentRect.width; syncScrollState(); if (!fixedStateInitializedRef.value) { fixedStateInitializedRef.value = true; } } function getHeaderElement() { var _a; const { value } = headerInstRef; if (value) { if (virtualScrollHeaderRef.value) { return ((_a = value.virtualListRef) === null || _a === void 0 ? void 0 : _a.listElRef) || null; } else { return value.$el; } } return null; } function getBodyElement() { const { value } = bodyInstRef; if (value) { return value.getScrollContainer(); } return null; } const exposedMethods = { getBodyElement, getHeaderElement, scrollTo(arg0, arg1) { var _a; (_a = bodyInstRef.value) === null || _a === void 0 ? void 0 : _a.scrollTo(arg0, arg1); } }; watchEffect(() => { const { value: selfEl } = selfElRef; if (!selfEl) return; const transitionDisabledClass = `${mergedClsPrefixRef.value}-data-table-base-table--transition-disabled`; if (fixedStateInitializedRef.value) { setTimeout(() => { selfEl.classList.remove(transitionDisabledClass); }, 0); } else { selfEl.classList.add(transitionDisabledClass); } }); return Object.assign({ maxHeight: maxHeightRef, mergedClsPrefix: mergedClsPrefixRef, selfElRef, headerInstRef, bodyInstRef, bodyStyle: bodyStyleRef, flexHeight: flexHeightRef, handleBodyResize }, exposedMethods); }, render() { const { mergedClsPrefix, maxHeight, flexHeight } = this; const headerInBody = maxHeight === undefined && !flexHeight; return h("div", { class: `${mergedClsPrefix}-data-table-base-table`, ref: "selfElRef" }, headerInBody ? null : h(TableHeader, { ref: "headerInstRef" }), h(TableBody, { ref: "bodyInstRef", bodyStyle: this.bodyStyle, showHeader: headerInBody, flexHeight: flexHeight, onResize: this.handleBodyResize })); } });