index.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import {Header, flexRender} from '@tanstack/react-table';
  2. import classNames from 'classnames';
  3. import {FC, CSSProperties} from 'react';
  4. import css from '../index.module.css';
  5. import {useSortable} from '@dnd-kit/sortable';
  6. type Props = {
  7. header: Header<Record<string, any>, unknown>;
  8. useDiv?: boolean;
  9. };
  10. const HeaderTh: FC<Props> = function ({header, useDiv}) {
  11. const {setNodeRef, attributes, listeners} = useSortable({
  12. id: header.id,
  13. data: {header},
  14. });
  15. const style: CSSProperties = {
  16. width: header.getSize(),
  17. cursor: 'pointer',
  18. opacity: useDiv ? '0.5' : '1',
  19. };
  20. if (useDiv) {
  21. return (
  22. <div
  23. key={header.id}
  24. style={style}
  25. ref={setNodeRef}
  26. {...attributes}
  27. {...listeners}
  28. className={css.tableHeadTh}
  29. >
  30. {header.isPlaceholder
  31. ? null
  32. : flexRender(header.column.columnDef.header, header.getContext())}
  33. <div
  34. onMouseDown={header.getResizeHandler()}
  35. onPointerDown={e => e.stopPropagation()}
  36. className={classNames(css.resizer, {
  37. [css.resizing]: header.column.getIsResizing(),
  38. })}
  39. />
  40. </div>
  41. );
  42. }
  43. return (
  44. <th
  45. key={header.id}
  46. style={style}
  47. ref={setNodeRef}
  48. {...attributes}
  49. {...listeners}
  50. className={css.tableHeadTh}
  51. >
  52. {flexRender(header.column.columnDef.header, header.getContext())}
  53. <div
  54. onMouseDown={header.getResizeHandler()}
  55. onPointerDown={e => e.stopPropagation()}
  56. className={classNames(css.resizer, {
  57. [css.resizing]: header.column.getIsResizing(),
  58. })}
  59. />
  60. </th>
  61. );
  62. };
  63. export default HeaderTh;