Skip to content

Commit 45f2ce2

Browse files
committed
Merge branch 'main' of https://github.com/chanzuckerberg/sci-components into prod
2 parents ac48b30 + 6a31635 commit 45f2ce2

File tree

11 files changed

+58
-44
lines changed

11 files changed

+58
-44
lines changed

packages/components/src/core/CellHeader/__storybook__/index.stories.tsx

+4
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ export default {
2020
control: { type: "select" },
2121
options: ["left", "center", "right"],
2222
},
23+
hover: {
24+
control: { type: "boolean" },
25+
},
2326
shouldShowTooltipOnHover: {
2427
control: { type: "boolean" },
2528
},
@@ -44,6 +47,7 @@ export const Default = {
4447
active: false,
4548
direction: "desc",
4649
hideSortIcon: false,
50+
hover: false,
4751
shouldShowTooltipOnHover: true,
4852
tooltipProps: { sdsStyle: "dark" },
4953
tooltipText: "This is a header cell",

packages/components/src/core/CellHeader/__storybook__/stories/test.tsx

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
import { Args } from "@storybook/types";
12
import RawCellHeader from "src/core/CellHeader";
23

3-
export const TestDemo = (): JSX.Element => (
4+
export const TestDemo = (props: Args): JSX.Element => (
45
<table>
56
<tbody>
67
<tr>
@@ -10,6 +11,8 @@ export const TestDemo = (): JSX.Element => (
1011
shouldShowTooltipOnHover
1112
active
1213
tooltipText="testTooltipTitle"
14+
hover
15+
{...props}
1316
>
1417
Header
1518
</RawCellHeader>

packages/components/src/core/CellHeader/__tests__/CellHeader.namespace-test.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const CellBasicNameSpaceTest = (props: CellHeaderProps) => {
1212
direction="asc"
1313
active
1414
hideSortIcon
15+
hover
1516
horizontalAlign="center"
1617
shouldShowTooltipOnHover
1718
tooltipProps={{ sdsStyle: "light" }}

packages/components/src/core/CellHeader/__tests__/__snapshots__/index.test.tsx.snap

+1-18
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,15 @@ exports[`<CellHeader /> Default story renders snapshot 1`] = `
55
<tbody>
66
<tr>
77
<th
8-
class="css-bony3j"
9-
data-mui-internal-clone-element="true"
8+
class="css-ezzkc2"
109
direction="desc"
11-
tabindex="0"
1210
>
1311
<div
1412
class="css-rm9mvq"
1513
>
1614
<span>
1715
Header
1816
</span>
19-
<div
20-
class="css-1ft6wgl"
21-
>
22-
<svg
23-
aria-hidden="true"
24-
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-11x9hfs-MuiSvgIcon-root"
25-
data-file-name="IconChevronDownSmall"
26-
data-testid="IconChevronDownSmall"
27-
fillcontrast="white"
28-
focusable="false"
29-
height="16"
30-
viewBox="0 0 16 16"
31-
width="16"
32-
/>
33-
</div>
3417
</div>
3518
</th>
3619
</tr>

packages/components/src/core/CellHeader/__tests__/index.test.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ describe("<CellHeader />", () => {
1616
});
1717

1818
it("renders tooltip on hover", async () => {
19-
render(<Test />);
19+
render(<Test hover={true} />);
2020
const headerCellElement = screen.getByTestId("CellHeader");
2121
fireEvent.mouseOver(headerCellElement);
2222
await screen.findByText("testTooltipTitle");
@@ -29,8 +29,8 @@ describe("<CellHeader />", () => {
2929
expect(style.textAlign).toBe("right");
3030
});
3131

32-
it("renders a sort icon when header is active", async () => {
33-
render(<Test />);
32+
it("renders a sort icon when header is active and hover is true", async () => {
33+
render(<Test hover={true} />);
3434
const headerCellElement = screen.getByTestId("CellHeader");
3535
const sortIcon =
3636
headerCellElement.getElementsByClassName("MuiSvgIcon-root")[0];

packages/components/src/core/CellHeader/index.tsx

+13-6
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ interface CellHeaderContentProps {
1616
hideSortIcon?: boolean;
1717
horizontalAlign?: "left" | "center" | "right";
1818
children: React.ReactNode;
19+
hover?: boolean;
1920
}
2021

2122
interface CellHeaderRawProps
@@ -39,6 +40,7 @@ const CellHeaderContent = (
3940
direction = "desc",
4041
hideSortIcon = false,
4142
horizontalAlign,
43+
hover,
4244
} = props;
4345

4446
const sdsIconName: keyof IconNameToSizes =
@@ -61,7 +63,7 @@ const CellHeaderContent = (
6163
return (
6264
<StyledCellHeaderContainer horizontalAlign={horizontalAlign}>
6365
<span>{children}</span>
64-
{(!hideSortIcon || active) && sortIcon}
66+
{(!hideSortIcon || active) && hover && sortIcon}
6567
</StyledCellHeaderContainer>
6668
);
6769
};
@@ -74,10 +76,11 @@ const CellHeader = forwardRef<HTMLTableCellElement, CellHeaderProps>(
7476
tooltipProps,
7577
tooltipText = "",
7678
tooltipSubtitle,
79+
hover = false,
7780
...rest
7881
} = props;
7982

80-
if (shouldShowTooltipOnHover) {
83+
if (shouldShowTooltipOnHover && hover) {
8184
return (
8285
<Tooltip
8386
arrow
@@ -87,15 +90,19 @@ const CellHeader = forwardRef<HTMLTableCellElement, CellHeaderProps>(
8790
title={tooltipText}
8891
{...tooltipProps}
8992
>
90-
<StyledTableHeader ref={ref} {...rest}>
91-
<CellHeaderContent {...props}>{children}</CellHeaderContent>
93+
<StyledTableHeader ref={ref} hover={hover} {...rest}>
94+
<CellHeaderContent {...props} hover={hover}>
95+
{children}
96+
</CellHeaderContent>
9297
</StyledTableHeader>
9398
</Tooltip>
9499
);
95100
}
96101
return (
97-
<StyledTableHeader ref={ref} {...rest}>
98-
<CellHeaderContent {...props}>{children}</CellHeaderContent>
102+
<StyledTableHeader ref={ref} hover={hover} {...rest}>
103+
<CellHeaderContent hover={hover} {...props}>
104+
{children}
105+
</CellHeaderContent>
99106
</StyledTableHeader>
100107
);
101108
}

packages/components/src/core/CellHeader/style.ts

+15-5
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export interface CellHeaderExtraProps extends CommonThemeProps {
1212
active?: boolean;
1313
hideSortIcon?: boolean;
1414
horizontalAlign?: "left" | "center" | "right";
15+
hover?: boolean;
1516
}
1617

1718
const contentPositionMapping = {
@@ -27,6 +28,7 @@ const doNotForwardProps = [
2728
"tooltipProps",
2829
"tooltipText",
2930
"hideSortIcon",
31+
"hover",
3032
];
3133

3234
export const StyledSortingIcon = styled(Icon, {
@@ -55,28 +57,36 @@ export const StyledTableHeader = styled("th", {
5557
${focusVisibleA11yStyle}
5658
5759
${(props: CellHeaderExtraProps) => {
58-
const { active = false, horizontalAlign = "left" } = props;
60+
const { active = false, horizontalAlign = "left", hover = true } = props;
5961
6062
const spaces = getSpaces(props);
6163
const semanticColors = getSemanticColors(props);
6264
65+
const defaultColor = active
66+
? semanticColors?.accent?.textAction
67+
: semanticColors?.base?.textSecondary;
68+
69+
const hoverColor = active
70+
? semanticColors?.accent?.textActionHover
71+
: semanticColors?.base?.textPrimary;
72+
6373
return `
64-
color: ${active ? semanticColors?.accent?.textAction : semanticColors?.base?.textSecondary};
74+
color: ${defaultColor};
6575
padding: ${spaces?.l}px ${spaces?.m}px;
6676
text-align: ${horizontalAlign};
6777
min-width: 96px;
68-
cursor: pointer;
78+
cursor: ${hover ? "pointer" : "default"};
6979
vertical-align: bottom;
7080
7181
& .MuiButtonBase-root {
7282
outline: none;
7383
}
7484
7585
&:hover {
76-
color: ${active ? semanticColors?.accent?.textActionHover : semanticColors?.base?.textPrimary};
86+
color: ${hover ? hoverColor : defaultColor};
7787
7888
& .MuiButtonBase-root {
79-
color: ${active ? semanticColors?.accent?.textActionHover : semanticColors?.base?.textPrimary};
89+
color: ${hoverColor};
8090
opacity: 1;
8191
}
8292

packages/components/src/core/Table/__storybook__/stories/default.tsx

+4-2
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ export const Table = (props: Args): JSX.Element => {
1919
<CellHeader horizontalAlign="center" hideSortIcon>
2020
Category
2121
</CellHeader>
22-
<CellHeader active>Active Header</CellHeader>
23-
<CellHeader>
22+
<CellHeader active hover>
23+
Active Header
24+
</CellHeader>
25+
<CellHeader hover>
2426
A very long table header title to test sort icon positioning
2527
</CellHeader>
2628
<CellHeader hideSortIcon>Component</CellHeader>

packages/components/src/core/Table/__tests__/__snapshots__/index.test.tsx.snap

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ exports[`<Table /> Default story renders snapshot 1`] = `
1111
class="css-fitsu2"
1212
>
1313
<th
14-
class="css-13v2ecb"
14+
class="css-t4gp9z"
1515
>
1616
<div
1717
class="css-187gjam"
@@ -74,7 +74,7 @@ exports[`<Table /> Default story renders snapshot 1`] = `
7474
</div>
7575
</th>
7676
<th
77-
class="css-bony3j"
77+
class="css-ezzkc2"
7878
>
7979
<div
8080
class="css-rm9mvq"
@@ -85,7 +85,7 @@ exports[`<Table /> Default story renders snapshot 1`] = `
8585
</div>
8686
</th>
8787
<th
88-
class="css-148k9j7"
88+
class="css-1scpxyh"
8989
>
9090
<div
9191
class="css-wg04tn"

packages/components/src/core/TableHeader/__storybook__/stories/default.tsx

+5-3
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ export const TableHeader = (props: Args): JSX.Element => {
66
return (
77
<table>
88
<RawTableHeader {...props}>
9-
<CellHeader active>Column 1</CellHeader>
10-
<CellHeader>Column 2</CellHeader>
11-
<CellHeader>Column 3</CellHeader>
9+
<CellHeader active hover>
10+
Column 1
11+
</CellHeader>
12+
<CellHeader hover>Column 2</CellHeader>
13+
<CellHeader hover>Column 3</CellHeader>
1214
</RawTableHeader>
1315
</table>
1416
);

packages/components/src/core/TableHeader/__storybook__/stories/test.tsx

+5-3
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@ import RawTableHeader from "src/core/TableHeader";
44
export const TestDemo = (): JSX.Element => (
55
<table>
66
<RawTableHeader data-testid="TableHeader">
7-
<CellHeader active>Column 1</CellHeader>
8-
<CellHeader>Column 2</CellHeader>
9-
<CellHeader>Column 3</CellHeader>
7+
<CellHeader active hover>
8+
Column 1
9+
</CellHeader>
10+
<CellHeader hover>Column 2</CellHeader>
11+
<CellHeader hover>Column 3</CellHeader>
1012
</RawTableHeader>
1113
</table>
1214
);

0 commit comments

Comments
 (0)