yanzhen-design-vue
Version:
135 lines (134 loc) • 4.98 kB
JavaScript
"use strict";
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const vue = require("vue");
const lodashEs = require("lodash-es");
const index = require("../utils/index.cjs");
const constants = require("../constants.cjs");
const useVxeTableColumnSlotRecord = require("./use-vxe-table-column-slot-record.cjs");
function useVxeTableVirtual(tableRef) {
const { getRecordId, getElementRect, isFixedRecord } = useVxeTableColumnSlotRecord.useVxeTableColumnSlotRecord(tableRef);
const virtualHiddenRecords = vue.ref({});
const virtualRectRecords = vue.ref({});
const virtualScroll = vue.ref({
enabled: true,
isVirtualX: true,
isVirtualY: true
});
function isVirtualHidden(record, name) {
const { enabled, isVirtualY, isVirtualX } = vue.unref(virtualScroll);
if (enabled === false || isFixedRecord(record)) {
return false;
}
const recordId = getRecordId(name, record);
const ref2 = vue.unref(virtualHiddenRecords)[recordId];
switch (true) {
case !ref2:
case (isVirtualX && ref2.isVirtualX === true):
case (isVirtualY && ref2.isVirtualY === true):
return true;
}
return false;
}
function getNodeRect(record, name) {
const recordId = getRecordId(record, name);
return vue.unref(virtualRectRecords)[recordId];
}
function handleVirtualRecord(bodyRect, ...args) {
const record = args.find((value) => lodashEs.isPlainObject(value));
const isUpdate = args.find((value) => lodashEs.isBoolean(value));
const { parentWidth, parentHeight, scrollHeight, scrollWidth, tbody } = bodyRect;
switch (true) {
case parentWidth === 0:
case (scrollWidth > 0 && scrollWidth <= parentWidth):
vue.unref(virtualScroll).isVirtualX = false;
break;
default:
vue.unref(virtualScroll).isVirtualX = true;
}
switch (true) {
case parentHeight === 0:
case (scrollHeight > 0 && scrollHeight <= parentHeight):
vue.unref(virtualScroll).isVirtualY = false;
break;
default:
vue.unref(virtualScroll).isVirtualY = true;
}
switch (true) {
case (vue.unref(virtualScroll).isVirtualY === false && vue.unref(virtualScroll).isVirtualX === false):
vue.unref(virtualScroll).enabled = false;
break;
default:
vue.unref(virtualScroll).enabled = true;
}
if (!vue.unref(virtualScroll).enabled) return;
if (record) {
updateNodeRect(record);
} else if (isUpdate !== false) {
const rows = index.unrefTbodyRowElements(tbody);
if (rows && rows.length > 0) {
index.unrefTbodyRowRecord(rows, tableRef, (record2) => {
updateNodeRect(record2);
});
}
}
}
function handleAsyncNodeRect(record, name, target) {
var _a;
const cellTarget = target == null ? void 0 : target.querySelector(`div.${constants.CELL_CLASS}`);
if (!lodashEs.isElement(cellTarget) || !index.isVirtualDom(target)) return;
const recordId = getRecordId(name, record);
const contentRect = (_a = getElementRect(cellTarget)) == null ? void 0 : _a.contentRect;
lodashEs.mergeWith(vue.unref(virtualRectRecords), {
[recordId]: {
width: (contentRect == null ? void 0 : contentRect.realWidth) ?? 0,
height: (contentRect == null ? void 0 : contentRect.realHeight) ?? 0
}
});
}
function handleAsyncVirtualRecord(record, name, target) {
var _a, _b;
if (!lodashEs.isElement(target)) return;
const scroll = (_b = (_a = vue.unref(tableRef)) == null ? void 0 : _a.getScroll) == null ? void 0 : _b.call(_a);
if (!scroll) return;
const recordId = getRecordId(name, record);
if (!vue.unref(virtualHiddenRecords)[recordId]) {
vue.unref(virtualHiddenRecords)[recordId] = {
isVirtualX: true,
isVirtualY: true
};
}
const virtual = {
isVirtualX: false,
isVirtualY: false
};
for (const [key, value] of Object.entries(virtual)) {
const oldValue = vue.unref(virtualHiddenRecords)[recordId][key];
if (oldValue !== value) {
vue.unref(virtualHiddenRecords)[recordId][key] = value;
}
}
}
function updateNodeRect(...args) {
const name = args.find((value) => lodashEs.isString(value)) ?? "default";
const record = args.find((value) => lodashEs.isPlainObject(value));
if (!record || !lodashEs.isElement(record == null ? void 0 : record.target)) return;
handleAsyncVirtualRecord(record, name, record.target);
handleAsyncNodeRect(record, name, record.target);
}
function virtualCellClassName(record) {
const isVirtual = isVirtualHidden(record);
return isVirtual ? constants.VIRTUAL_CLASS : void 0;
}
const virtualNodeRect = {
getNodeRect,
updateNodeRect
};
return {
virtualCellClassName,
virtualNodeRect,
virtualScroll,
isVirtualHidden,
onVirtualScroll: handleVirtualRecord
};
}
exports.useVxeTableVirtual = useVxeTableVirtual;