-
Notifications
You must be signed in to change notification settings - Fork 167
/
Copy pathHighlighted.tsx
56 lines (50 loc) · 1.55 KB
/
Highlighted.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import * as React from "react";
import {getRangeDimensions} from "./util";
import FloatingRect from "./FloatingRect";
import useSelector from "./use-selector";
import * as Types from "./types";
import {Highlight} from "./types";
export function getHighlightedDimensions(
rowDimensions: Types.StoreState["rowDimensions"],
columnDimensions: Types.StoreState["columnDimensions"],
data: Types.StoreState["model"]["data"],
highlight: Highlight
): Types.Dimensions | undefined {
const range = highlight.selection.toRange(data);
return range
? getRangeDimensions(rowDimensions, columnDimensions, range)
: undefined;
}
const HighlightRect: React.FC<{ highlight: Highlight }> = ({ highlight }) => {
const dimensions = useSelector(
(state) =>
highlight &&
getHighlightedDimensions(
state.rowDimensions,
state.columnDimensions,
state.model.data,
highlight
)
);
const dragging = useSelector((state) => state.dragging);
return (
<FloatingRect
variant="highlighted"
additionalClasses={highlight.classNames}
dimensions={dimensions}
dragging={dragging}
hidden={false}
/>
);
}
const Highlighted: React.FC = () => {
const highlights= useSelector((state) => state.highlights);
return (
<>
{highlights.map((highlight, index) => {
return <HighlightRect key={index} highlight={highlight} />;
})}
</>
);
};
export default Highlighted;