think/packages/client/src/components/grid-select/grid-cell.tsx

64 lines
1.6 KiB
TypeScript
Raw Normal View History

2022-03-12 03:27:56 +00:00
import React, { MouseEventHandler } from 'react';
2022-02-20 11:51:55 +00:00
type CellProperties = {
active: boolean;
hover: boolean;
disabled: boolean;
cellSize: number;
onClick: MouseEventHandler<HTMLDivElement>;
onMouseEnter: MouseEventHandler<HTMLDivElement>;
styles: Record<string, React.CSSProperties>;
id: string;
};
const getBaseStyles = (cellSize) => ({
cell: {
width: cellSize,
height: cellSize,
2022-03-12 03:27:56 +00:00
background: '#fff',
cursor: 'pointer',
2022-02-20 11:51:55 +00:00
borderRadius: 3,
2022-03-12 03:27:56 +00:00
border: '1px solid #bababa',
2022-02-20 11:51:55 +00:00
},
active: {
2022-03-12 03:27:56 +00:00
border: '1px solid #4d6cdd',
background: '#4d6cdd',
2022-02-20 11:51:55 +00:00
},
hover: {
2022-03-12 03:27:56 +00:00
border: '1px solid #fff',
background: '#4d6cdd',
2022-02-20 11:51:55 +00:00
},
disabled: {
2022-03-12 03:27:56 +00:00
filter: 'brightness(0.7)',
2022-02-20 11:51:55 +00:00
},
});
const getMergedStyle = (baseStyles, styles, styleClass) => ({
...baseStyles[styleClass],
...(styles && styles[styleClass] ? styles[styleClass] : {}),
});
2022-03-22 05:37:53 +00:00
export const GridCell = ({ active, hover, disabled, onClick, onMouseEnter, cellSize, styles, id }: CellProperties) => {
2022-02-20 11:51:55 +00:00
const baseStyles = getBaseStyles(cellSize);
const cellStyles = {
2022-03-12 03:27:56 +00:00
cell: getMergedStyle(baseStyles, styles, 'cell'),
active: getMergedStyle(baseStyles, styles, 'active'),
hover: getMergedStyle(baseStyles, styles, 'hover'),
disabled: getMergedStyle(baseStyles, styles, 'disabled'),
2022-02-20 11:51:55 +00:00
};
return (
<div
id={id}
style={{
...cellStyles.cell,
...(active && cellStyles.active),
...(hover && cellStyles.hover),
...(!active && disabled && cellStyles.disabled),
}}
onClick={onClick}
onMouseEnter={onMouseEnter}
/>
);
};