import { useRovingTabIndex } from './hooks';
import { classnames, getHeaderCellRowSpan, getHeaderCellStyle } from './utils';
import type { CalculatedColumnParent } from './types';
import type { GroupedColumnHeaderRowProps } from './GroupedColumnHeaderRow';
import { cellClassname } from './style/cell';
type SharedGroupedColumnHeaderRowProps<R, SR> = Pick<
GroupedColumnHeaderRowProps<R, SR>,
'rowIdx' | 'setPosition'
>;
interface GroupedColumnHeaderCellProps<R, SR> extends SharedGroupedColumnHeaderRowProps<R, SR> {
column: CalculatedColumnParent<R, SR>;
isCellActive: boolean;
}
export default function GroupedColumnHeaderCell<R, SR>({
column,
rowIdx,
isCellActive,
setPosition
}: GroupedColumnHeaderCellProps<R, SR>) {
const { tabIndex, onFocus } = useRovingTabIndex(isCellActive);
const { colSpan } = column;
const rowSpan = getHeaderCellRowSpan(column, rowIdx);
const index = column.idx + 1;
function onMouseDown() {
setPosition({ idx: column.idx, rowIdx });
}
return (
<div
role="columnheader"
aria-colindex={index}
aria-colspan={colSpan}
aria-rowspan={rowSpan}
aria-selected={isCellActive}
tabIndex={tabIndex}
className={classnames(cellClassname, column.headerCellClass)}
style={{
...getHeaderCellStyle(column, rowIdx, rowSpan),
gridColumnStart: index,
gridColumnEnd: index + colSpan
}}
onFocus={onFocus}
onMouseDown={onMouseDown}
>
{column.name}
</div>
);
}