import { Table as ChakraTable, Icon } from '@chakra-ui/react';
import { throttle } from 'es-toolkit';
import * as React from 'react';
import ArrowIcon from 'icons/arrows/east.svg';
import { Link } from './link';
export const TableRoot = ChakraTable.Root;
export const TableBody = ChakraTable.Body;
export const TableHeader = ChakraTable.Header;
export const TableRow = ChakraTable.Row;
export interface TableCellProps extends ChakraTable.CellProps {
isNumeric?: boolean;
}
export const TableCell = (props: TableCellProps) => {
const { isNumeric, ...rest } = props;
return ;
};
export interface TableColumnHeaderProps extends ChakraTable.ColumnHeaderProps {
isNumeric?: boolean;
}
export const TableColumnHeader = (props: TableColumnHeaderProps) => {
const { isNumeric, ...rest } = props;
return ;
};
export interface TableColumnHeaderSortableProps extends TableColumnHeaderProps {
sortField: F;
sortValue: string;
onSortToggle: (sortField: F) => void;
disabled?: boolean;
indicatorPosition?: 'left' | 'right';
contentAfter?: React.ReactNode;
}
export const TableColumnHeaderSortable = (props: TableColumnHeaderSortableProps) => {
const { sortField, sortValue, onSortToggle, children, disabled, indicatorPosition = 'left', contentAfter, ...rest } = props;
const handleSortToggle = React.useCallback(() => {
onSortToggle(sortField);
}, [ onSortToggle, sortField ]);
return (
{ sortValue.includes(sortField) && (
) }
{ children }
{ contentAfter }
);
};
export interface TableHeaderProps extends ChakraTable.HeaderProps {
top?: number;
}
export const TableHeaderSticky = (props: TableHeaderProps) => {
const { top, children, ...rest } = props;
const ref = React.useRef(null);
const [ isStuck, setIsStuck ] = React.useState(false);
const handleScroll = React.useCallback(() => {
if (Number(ref.current?.getBoundingClientRect().y) <= (top || 0)) {
setIsStuck(true);
} else {
setIsStuck(false);
}
}, [ top ]);
React.useEffect(() => {
const throttledHandleScroll = throttle(handleScroll, 300);
window.addEventListener('scroll', throttledHandleScroll);
return () => {
window.removeEventListener('scroll', throttledHandleScroll);
};
}, [ handleScroll ]);
return (
{ children }
);
};