ant-design-vue/components/vc-table/src/useStickyOffsets.js

44 lines
943 B
JavaScript

import { ref, watch } from 'vue';
/**
* Get sticky column offset width
*/
function useStickyOffsets(colWidths, columns) {
const stickyOffsets = ref({
left: [],
right: [],
});
const columnCount = ref();
watch(
columns,
() => {
columnCount.value = columns.value.length;
},
{ immediate: true },
);
watch([colWidths, columnCount], () => {
const leftOffsets = [];
const rightOffsets = [];
let left = 0;
let right = 0;
for (let start = 0; start < columnCount.value; start += 1) {
// Left offset
leftOffsets[start] = left;
left += colWidths.value[start] || 0;
// Right offset
const end = columnCount.value - start - 1;
rightOffsets[end] = right;
right += colWidths.value[end] || 0;
}
stickyOffsets.value = {
left: leftOffsets,
right: rightOffsets,
};
});
return stickyOffsets;
}
export default useStickyOffsets;