useInstance.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import Handsontable from '@sc/handsontable';
  2. import useVerticalScroll from './useVerticalScroll';
  3. import useGroupingHeaders from './useGroupingHeaders';
  4. export default function useInstance(tableWrapper: HTMLElement, settings: any) {
  5. // 注册垂直滚动监听器(用于大数据量快速滚动导致错位的问题:停止后,手动触发滚动1px)
  6. const { registerVerticalScroll } = useVerticalScroll(tableWrapper);
  7. if (settings.cellGrid) {
  8. settings.viewportColumnRenderingOffset = Number.MAX_SAFE_INTEGER;
  9. }
  10. return new Handsontable(tableWrapper, {
  11. rowHeaders: true,
  12. manualColumnResize: true,
  13. manualRowResize: true,
  14. currentRowClassName: 'current-row',
  15. // currentColClassName: 'current-col',
  16. // 水平垂直居中,默认单行
  17. className: 'htCenter htMiddle wcSingleLine',
  18. renderAllRows: false,
  19. autoColumnSize: false, // 提升性能
  20. autoRowSize: false,
  21. // 视口之外预渲染 1 行 此处设为 0 会导致树结构展开收起失效
  22. viewportRowRenderingOffset: 30,
  23. // 视口之外预渲染 1 列 此处设为 0 会导致树结构展开收起失效
  24. viewportColumnRenderingOffset: 2,
  25. selectionMode: 'range',
  26. /* rowHeights: 23, */
  27. outsideClickDeselects: false, // 点击其它位置或表格,不清空表格的选中状态
  28. afterRender() {
  29. // if (settings.fixedColumnsLeft) registerFixedLeftScroll();
  30. if (settings.cellGrid) {
  31. const { generateGroupHeaders } = useGroupingHeaders(tableWrapper, settings.cellGrid, settings.fixedColumnsLeft);
  32. generateGroupHeaders();
  33. }
  34. // registerHover();
  35. registerVerticalScroll();
  36. },
  37. ...settings,
  38. });
  39. }