hongluan-ui
Version:
Hongluan Component Library for Vue 3
363 lines (360 loc) • 13 kB
JavaScript
import { defineComponent, getCurrentInstance, provide, computed, resolveComponent, resolveDirective, openBlock, createElementBlock, normalizeClass, normalizeStyle, createElementVNode, renderSlot, withDirectives, createVNode, createCommentVNode, withCtx, createBlock, createTextVNode, toDisplayString, vShow } from 'vue';
import { debounce } from 'lodash-unified';
import '../../../directives/index.mjs';
import '../../../hooks/index.mjs';
import { HlScrollbar } from '../../scrollbar/index.mjs';
import { createStore } from './store/helper.mjs';
import TableLayout from './table-layout.mjs';
import TableHeader from './table-header/index.mjs';
import TableBody from './table-body/index.mjs';
import TableFooter from './table-footer/index.mjs';
import { convertToRows } from './table-header/utils-helper.mjs';
import useUtils from './table/utils-helper.mjs';
import useStyle from './table/style-helper.mjs';
import useKeyRender from './table/key-render-helper.mjs';
import defaultProps from './table/defaults.mjs';
import { TABLE_INJECTION_KEY } from './tokens.mjs';
import { hColgroup } from './h-helper.mjs';
import { useScrollbar } from './composables/use-scrollbar.mjs';
import _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';
import Mousewheel from '../../../directives/mousewheel/index.mjs';
import { useLocale } from '../../../hooks/use-locale/index.mjs';
import { useNamespace } from '../../../hooks/use-namespace/index.mjs';
let tableIdSeed = 1;
const _sfc_main = defineComponent({
name: "Table",
directives: {
Mousewheel
},
components: {
TableHeader,
TableBody,
TableFooter,
HlScrollbar,
hColgroup
},
props: defaultProps,
emits: [
"select",
"select-all",
"selection-change",
"cell-mouse-enter",
"cell-mouse-leave",
"cell-contextmenu",
"cell-click",
"cell-dblclick",
"row-click",
"row-contextmenu",
"row-dblclick",
"header-click",
"header-contextmenu",
"sort-change",
"filter-change",
"current-change",
"header-dragend",
"expand-change"
],
setup(props) {
const { t } = useLocale();
const { namespace, defaultNamespace } = useNamespace("table");
const table = getCurrentInstance();
provide(TABLE_INJECTION_KEY, table);
const store = createStore(table, props);
table.store = store;
const layout = new TableLayout({
store: table.store,
table,
fit: props.fit,
showHeader: props.showHeader
});
table.layout = layout;
const isEmpty = computed(() => (store.states.data.value || []).length === 0);
const {
setCurrentRow,
getSelectionRows,
toggleRowSelection,
clearSelection,
clearFilter,
toggleAllSelection,
toggleRowExpansion,
clearSort,
sort
} = useUtils(store);
const {
isHidden,
renderExpanded,
setDragVisible,
isGroup,
handleMouseLeave,
handleHeaderFooterMousewheel,
tableSize,
emptyBlockStyle,
handleFixedMousewheel,
resizeProxyVisible,
bodyWidth,
resizeState,
doLayout,
tableBodyStyles,
tableLayout,
scrollbarViewStyle,
tableInnerStyle,
scrollbarStyle
} = useStyle(props, layout, store, table);
const { scrollBarRef, scrollTo, setScrollLeft, setScrollTop } = useScrollbar();
const debouncedUpdateLayout = debounce(doLayout, 50);
const tableId = `${namespace.value}-${tableIdSeed++}`;
table.tableId = tableId;
table.state = {
isGroup,
resizeState,
doLayout,
debouncedUpdateLayout
};
const computedSumText = computed(() => props.sumText || t("el.table.sumText"));
const computedEmptyText = computed(() => {
return props.emptyText || t("el.table.emptyText");
});
const columns = computed(() => {
return convertToRows(store.states.originColumns.value)[0];
});
useKeyRender(table);
return {
namespace,
defaultNamespace,
layout,
store,
columns,
handleHeaderFooterMousewheel,
handleMouseLeave,
tableId,
tableSize,
isHidden,
isEmpty,
renderExpanded,
resizeProxyVisible,
resizeState,
isGroup,
bodyWidth,
tableBodyStyles,
emptyBlockStyle,
debouncedUpdateLayout,
handleFixedMousewheel,
setCurrentRow,
getSelectionRows,
toggleRowSelection,
clearSelection,
clearFilter,
toggleAllSelection,
toggleRowExpansion,
clearSort,
doLayout,
sort,
t,
setDragVisible,
context: table,
computedSumText,
computedEmptyText,
tableLayout,
scrollbarViewStyle,
tableInnerStyle,
scrollbarStyle,
scrollBarRef,
scrollTo,
setScrollLeft,
setScrollTop
};
}
});
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_hColgroup = resolveComponent("hColgroup");
const _component_table_header = resolveComponent("table-header");
const _component_table_body = resolveComponent("table-body");
const _component_table_footer = resolveComponent("table-footer");
const _component_hl_scrollbar = resolveComponent("hl-scrollbar");
const _directive_mousewheel = resolveDirective("mousewheel");
return openBlock(), createElementBlock("div", {
ref: "tableWrapper",
class: normalizeClass([
{
"fit": _ctx.fit,
"list": _ctx.list,
"striped-odd": _ctx.stripe === "odd",
"striped-even": _ctx.stripe === "even" || typeof _ctx.stripe === "boolean" && _ctx.stripe,
"bordered": _ctx.border || _ctx.isGroup,
"table-hidden": _ctx.isHidden,
"table-group": _ctx.isGroup,
"fluid-height": _ctx.maxHeight,
"table-scrollable-x": _ctx.layout.scrollX.value,
"table-scrollable-y": _ctx.layout.scrollY.value,
"enable-row-hover": !_ctx.store.states.isComplex.value,
"enable-row-transition": (_ctx.store.states.data.value || []).length !== 0 && (_ctx.store.states.data.value || []).length < 100,
"has-footer": _ctx.showSummary
},
_ctx.tableSize,
_ctx.className,
_ctx.namespace,
`layout-${_ctx.tableLayout}`
]),
style: normalizeStyle(_ctx.style),
"data-prefix": _ctx.defaultNamespace,
onMouseleave: _ctx.handleMouseLeave
}, [
createElementVNode("div", {
class: "table-inner-wrapper",
style: normalizeStyle(_ctx.tableInnerStyle)
}, [
createElementVNode("div", {
ref: "hiddenColumns",
class: "hidden-columns"
}, [
renderSlot(_ctx.$slots, "default")
], 512),
_ctx.showHeader && _ctx.tableLayout === "fixed" ? withDirectives((openBlock(), createElementBlock("div", {
key: 0,
ref: "headerWrapper",
class: "table-header-wrapper"
}, [
createElementVNode("table", {
ref: "tableHeader",
class: "table-header",
style: normalizeStyle(_ctx.tableBodyStyles),
border: "0",
cellpadding: "0",
cellspacing: "0"
}, [
createVNode(_component_hColgroup, {
columns: _ctx.store.states.columns.value,
"table-layout": _ctx.tableLayout
}, null, 8, ["columns", "table-layout"]),
createVNode(_component_table_header, {
ref: "tableHeaderRef",
border: _ctx.border,
"default-sort": _ctx.defaultSort,
store: _ctx.store,
onSetDragVisible: _ctx.setDragVisible
}, null, 8, ["border", "default-sort", "store", "onSetDragVisible"])
], 4)
])), [
[_directive_mousewheel, _ctx.handleHeaderFooterMousewheel]
]) : createCommentVNode("v-if", true),
createElementVNode("div", {
ref: "bodyWrapper",
class: "table-body-wrapper"
}, [
createVNode(_component_hl_scrollbar, {
ref: "scrollBarRef",
"view-style": _ctx.scrollbarViewStyle,
"wrap-style": _ctx.scrollbarStyle,
always: _ctx.scrollbarAlwaysOn
}, {
default: withCtx(() => [
createElementVNode("table", {
ref: "tableBody",
class: "table-body",
cellspacing: "0",
cellpadding: "0",
border: "0",
style: normalizeStyle({
width: _ctx.bodyWidth,
tableLayout: _ctx.tableLayout
})
}, [
createVNode(_component_hColgroup, {
columns: _ctx.store.states.columns.value,
"table-layout": _ctx.tableLayout
}, null, 8, ["columns", "table-layout"]),
_ctx.showHeader && _ctx.tableLayout === "auto" ? (openBlock(), createBlock(_component_table_header, {
key: 0,
ref: "tableHeaderRef",
border: _ctx.border,
"default-sort": _ctx.defaultSort,
store: _ctx.store,
onSetDragVisible: _ctx.setDragVisible
}, null, 8, ["border", "default-sort", "store", "onSetDragVisible"])) : createCommentVNode("v-if", true),
createVNode(_component_table_body, {
context: _ctx.context,
highlight: _ctx.highlightCurrentRow,
"row-class-name": _ctx.rowClassName,
"tooltip-effect": _ctx.tooltipEffect,
"tooltip-options": _ctx.tooltipOptions,
"row-style": _ctx.rowStyle,
store: _ctx.store,
stripe: _ctx.stripe
}, null, 8, ["context", "highlight", "row-class-name", "tooltip-effect", "tooltip-options", "row-style", "store", "stripe"]),
_ctx.showSummary && _ctx.tableLayout === "auto" ? (openBlock(), createBlock(_component_table_footer, {
key: 1,
class: "table-body-footer",
border: _ctx.border,
"default-sort": _ctx.defaultSort,
store: _ctx.store,
"sum-text": _ctx.computedSumText,
"summary-method": _ctx.summaryMethod
}, null, 8, ["border", "default-sort", "store", "sum-text", "summary-method"])) : createCommentVNode("v-if", true)
], 4),
_ctx.isEmpty ? (openBlock(), createElementBlock("div", {
key: 0,
ref: "emptyBlock",
style: normalizeStyle(_ctx.emptyBlockStyle),
class: "table-empty-block"
}, [
createElementVNode("span", { class: "table-empty-text" }, [
renderSlot(_ctx.$slots, "empty", {}, () => [
createTextVNode(toDisplayString(_ctx.computedEmptyText), 1)
])
])
], 4)) : createCommentVNode("v-if", true),
_ctx.$slots.append ? (openBlock(), createElementBlock("div", {
key: 1,
ref: "appendWrapper",
class: "table-append-wrapper"
}, [
renderSlot(_ctx.$slots, "append")
], 512)) : createCommentVNode("v-if", true)
]),
_: 3
}, 8, ["view-style", "wrap-style", "always"])
], 512),
_ctx.showSummary && _ctx.tableLayout === "fixed" ? withDirectives((openBlock(), createElementBlock("div", {
key: 1,
ref: "footerWrapper",
class: "table-footer-wrapper"
}, [
createElementVNode("table", {
class: "table-footer",
cellspacing: "0",
cellpadding: "0",
border: "0",
style: normalizeStyle(_ctx.tableBodyStyles)
}, [
createVNode(_component_hColgroup, {
columns: _ctx.store.states.columns.value,
"table-layout": _ctx.tableLayout
}, null, 8, ["columns", "table-layout"]),
createVNode(_component_table_footer, {
border: _ctx.border,
"default-sort": _ctx.defaultSort,
store: _ctx.store,
"sum-text": _ctx.computedSumText,
"summary-method": _ctx.summaryMethod
}, null, 8, ["border", "default-sort", "store", "sum-text", "summary-method"])
], 4)
])), [
[vShow, !_ctx.isEmpty],
[_directive_mousewheel, _ctx.handleHeaderFooterMousewheel]
]) : createCommentVNode("v-if", true),
_ctx.border || _ctx.isGroup ? (openBlock(), createElementBlock("div", {
key: 2,
class: "table-border-left-patch"
})) : createCommentVNode("v-if", true)
], 4),
withDirectives(createElementVNode("div", {
ref: "resizeProxy",
class: "table-column-resize-proxy"
}, null, 512), [
[vShow, _ctx.resizeProxyVisible]
])
], 46, ["data-prefix", "onMouseleave"]);
}
var Table = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
export { Table as default };
//# sourceMappingURL=table.mjs.map