31 lines
837 B
TypeScript
31 lines
837 B
TypeScript
import { useRef } from 'react';
|
||
|
||
import { useDayRender } from 'hooks/useDayRender';
|
||
|
||
import { Button } from '../Button';
|
||
|
||
/** Represent the props used by the {@link Day} component. */
|
||
export interface DayProps {
|
||
/** The month where the date is displayed. */
|
||
displayMonth: Date;
|
||
/** The date to render. */
|
||
date: Date;
|
||
}
|
||
|
||
/**
|
||
* The content of a day cell – as a button or span element according to its
|
||
* modifiers.
|
||
*/
|
||
export function Day(props: DayProps): JSX.Element {
|
||
const buttonRef = useRef<HTMLButtonElement>(null);
|
||
const dayRender = useDayRender(props.date, props.displayMonth, buttonRef);
|
||
|
||
if (dayRender.isHidden) {
|
||
return <div role="gridcell"></div>;
|
||
}
|
||
if (!dayRender.isButton) {
|
||
return <div {...dayRender.divProps} />;
|
||
}
|
||
return <Button name="day" ref={buttonRef} {...dayRender.buttonProps} />;
|
||
}
|