Skip to content

Commit 4747b84

Browse files
authored
ref(saved-entities): Use SimpleTable for SavedEntityTable styling (#97412)
1 parent ce2dec1 commit 4747b84

File tree

5 files changed

+30
-103
lines changed

5 files changed

+30
-103
lines changed

static/app/components/savedEntityTable.tsx

Lines changed: 20 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ import {Tooltip} from 'sentry/components/core/tooltip';
99
import {DropdownMenu, type MenuItemProps} from 'sentry/components/dropdownMenu';
1010
import EmptyStateWarning from 'sentry/components/emptyStateWarning';
1111
import LoadingError from 'sentry/components/loadingError';
12-
import Panel from 'sentry/components/panels/panel';
1312
import Placeholder from 'sentry/components/placeholder';
1413
import {ProjectList} from 'sentry/components/projectList';
1514
import {ProvidedFormattedQuery} from 'sentry/components/searchQueryBuilder/formattedQuery';
15+
import {SimpleTable} from 'sentry/components/tables/simpleTable';
1616
import {getAbsoluteSummary} from 'sentry/components/timeRangeSelector/utils';
1717
import TimeSince from 'sentry/components/timeSince';
1818
import {IconEllipsis, IconStar} from 'sentry/icons';
@@ -62,90 +62,36 @@ export function SavedEntityTable({
6262
'data-test-id': dataTestId,
6363
}: SavedEntityTableProps) {
6464
return (
65-
<StyledPanelTable className={className} data-test-id={dataTestId}>
65+
<SimpleTable className={className} data-test-id={dataTestId}>
6666
{header}
67-
{isError && <LoadingError />}
67+
{isError && (
68+
<SimpleTable.Empty>
69+
<LoadingError />
70+
</SimpleTable.Empty>
71+
)}
6872
{isLoading && <LoadingSkeleton pageSize={pageSize} />}
6973
{!isError && !isLoading && isEmpty && (
70-
<EmptyContainer>
74+
<SimpleTable.Empty>
7175
<EmptyStateWarning small>{emptyMessage}</EmptyStateWarning>
72-
</EmptyContainer>
76+
</SimpleTable.Empty>
7377
)}
7478
{children}
75-
</StyledPanelTable>
79+
</SimpleTable>
7680
);
7781
}
7882

79-
SavedEntityTable.Header = styled('div')`
80-
display: grid;
81-
grid-template-columns: subgrid;
82-
grid-column: 1/-1;
83+
SavedEntityTable.Header = SimpleTable.Header;
8384

84-
height: 36px;
85-
background-color: ${p => p.theme.backgroundSecondary};
86-
border-radius: ${p => p.theme.borderRadius} ${p => p.theme.borderRadius} 0 0;
87-
`;
85+
SavedEntityTable.HeaderCell = SimpleTable.HeaderCell;
8886

89-
SavedEntityTable.HeaderCell = styled('div')<{
90-
gridArea?: string;
91-
noBorder?: boolean;
87+
SavedEntityTable.Row = styled(SimpleTable.Row, {
88+
shouldForwardProp: prop => prop !== 'isFirst' && prop !== 'disableHover',
89+
})<{
90+
isFirst: boolean;
91+
disableHover?: boolean;
9292
}>`
93-
display: flex;
94-
align-items: center;
95-
padding: 0 ${space(1.5)};
96-
white-space: nowrap;
97-
text-overflow: ellipsis;
98-
border-width: 0 1px 0 0;
99-
border-style: solid;
100-
border-image: linear-gradient(
101-
to bottom,
102-
transparent,
103-
transparent 30%,
104-
${p => p.theme.border} 30%,
105-
${p => p.theme.border} 70%,
106-
transparent 70%,
107-
transparent
108-
)
109-
1;
110-
111-
&:last-child,
112-
&:empty {
113-
border: 0;
114-
}
115-
116-
${p =>
117-
p.noBorder &&
118-
css`
119-
border: 0;
120-
`}
121-
122-
color: ${p => p.theme.subText};
123-
font-weight: ${p => p.theme.fontWeight.bold};
124-
125-
${p =>
126-
p.gridArea &&
127-
css`
128-
grid-area: ${p.gridArea};
129-
`}
130-
`;
131-
132-
SavedEntityTable.Row = styled('div')<{isFirst: boolean; disableHover?: boolean}>`
133-
display: grid;
134-
position: relative;
135-
grid-template-columns: subgrid;
136-
grid-column: 1/-1;
13793
height: 40px;
13894
139-
${p =>
140-
p.isFirst &&
141-
css`
142-
border-top: 1px solid ${p.theme.border};
143-
`}
144-
145-
&:not(:last-child) {
146-
border-bottom: 1px solid ${p => p.theme.innerBorder};
147-
}
148-
14995
&:last-child {
15096
border-radius: 0 0 ${p => p.theme.borderRadius} ${p => p.theme.borderRadius};
15197
}
@@ -159,14 +105,11 @@ SavedEntityTable.Row = styled('div')<{isFirst: boolean; disableHover?: boolean}>
159105
`}
160106
`;
161107

162-
SavedEntityTable.Cell = styled('div')<{
163-
'data-column'?: string;
164-
gridArea?: string;
108+
SavedEntityTable.Cell = styled(SimpleTable.RowCell, {
109+
shouldForwardProp: prop => prop !== 'hasButton',
110+
})<{
165111
hasButton?: boolean;
166112
}>`
167-
display: flex;
168-
align-items: center;
169-
padding: ${space(1)} ${space(1.5)};
170113
height: 40px;
171114
172115
/* Buttons already provide some padding */
@@ -175,12 +118,6 @@ SavedEntityTable.Cell = styled('div')<{
175118
css`
176119
padding: 0 ${space(0.5)};
177120
`}
178-
179-
${p =>
180-
p.gridArea &&
181-
css`
182-
grid-area: ${p['data-column']};
183-
`}
184121
`;
185122

186123
SavedEntityTable.CellStar = function CellStar({
@@ -349,19 +286,6 @@ const LoadingCell = styled(SavedEntityTable.Cell)`
349286
grid-column: 1/-1;
350287
`;
351288

352-
const StyledPanelTable = styled(Panel)`
353-
display: grid;
354-
white-space: nowrap;
355-
font-size: ${p => p.theme.fontSize.md};
356-
`;
357-
358-
const EmptyContainer = styled('div')`
359-
grid-column: 1/-1;
360-
display: flex;
361-
align-items: center;
362-
justify-content: center;
363-
`;
364-
365289
const FormattedQueryNoWrap = styled(ProvidedFormattedQuery)`
366290
flex-wrap: nowrap;
367291
overflow: hidden;

static/app/components/tables/simpleTable/index.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import InteractionStateLayer from 'sentry/components/core/interactionStateLayer'
66
import {Flex} from 'sentry/components/core/layout/flex';
77
import Panel from 'sentry/components/panels/panel';
88
import {IconArrow} from 'sentry/icons';
9+
import {defined} from 'sentry/utils';
910

1011
interface TableProps extends HTMLAttributes<HTMLDivElement> {
1112
children: React.ReactNode;
@@ -31,9 +32,11 @@ function HeaderCell({
3132
children,
3233
sort,
3334
handleSortClick,
35+
divider = defined(children) ? true : false,
3436
...props
3537
}: HTMLAttributes<HTMLDivElement> & {
3638
children?: React.ReactNode;
39+
divider?: boolean;
3740
handleSortClick?: () => void;
3841
sort?: 'asc' | 'desc';
3942
}) {
@@ -48,7 +51,7 @@ function HeaderCell({
4851
role="columnheader"
4952
as={canSort ? 'button' : 'div'}
5053
>
51-
{children && <HeaderDivider />}
54+
{divider && <HeaderDivider />}
5255
{canSort && <InteractionStateLayer />}
5356
<HeadingText>{children}</HeadingText>
5457
{isSorted && (

static/app/views/dashboards/manage/tableView/table.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export function DashboardTable({
6262
header={
6363
<SavedEntityTable.Header>
6464
<SavedEntityTable.HeaderCell data-column="star" />
65-
<SavedEntityTable.HeaderCell data-column="name">
65+
<SavedEntityTable.HeaderCell data-column="name" divider={false}>
6666
{t('Name')}
6767
</SavedEntityTable.HeaderCell>
6868
<SavedEntityTable.HeaderCell data-column="project">
@@ -83,7 +83,7 @@ export function DashboardTable({
8383
<SavedEntityTable.HeaderCell data-column="last-visited">
8484
{t('Last Viewed')}
8585
</SavedEntityTable.HeaderCell>
86-
<SavedEntityTable.HeaderCell data-column="created" noBorder>
86+
<SavedEntityTable.HeaderCell data-column="created">
8787
{t('Date Created')}
8888
</SavedEntityTable.HeaderCell>
8989
<SavedEntityTable.HeaderCell data-column="actions" />

static/app/views/explore/savedQueries/savedQueriesTable.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ export function SavedQueriesTable({
177177
header={
178178
<SavedEntityTable.Header>
179179
<SavedEntityTable.HeaderCell data-column="star" />
180-
<SavedEntityTable.HeaderCell data-column="name">
180+
<SavedEntityTable.HeaderCell data-column="name" divider={false}>
181181
{t('Name')}
182182
</SavedEntityTable.HeaderCell>
183183
{hasLogsSavedQueriesEnabled && (
@@ -197,7 +197,7 @@ export function SavedQueriesTable({
197197
<SavedEntityTable.HeaderCell data-column="created-by">
198198
{t('Creator')}
199199
</SavedEntityTable.HeaderCell>
200-
<SavedEntityTable.HeaderCell data-column="last-visited" noBorder>
200+
<SavedEntityTable.HeaderCell data-column="last-visited">
201201
{t('Last Viewed')}
202202
</SavedEntityTable.HeaderCell>
203203
<SavedEntityTable.HeaderCell data-column="actions" />

static/app/views/issueList/issueViews/issueViewsList/issueViewsTable.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export function IssueViewsTable({
5151
header={
5252
<SavedEntityTable.Header>
5353
<SavedEntityTable.HeaderCell data-column="star" />
54-
<SavedEntityTable.HeaderCell data-column="name">
54+
<SavedEntityTable.HeaderCell data-column="name" divider={false}>
5555
{t('Name')}
5656
</SavedEntityTable.HeaderCell>
5757
<SavedEntityTable.HeaderCell data-column="project">
@@ -74,7 +74,7 @@ export function IssueViewsTable({
7474
<SavedEntityTable.HeaderCell data-column="created">
7575
{t('Created')}
7676
</SavedEntityTable.HeaderCell>
77-
<SavedEntityTable.HeaderCell data-column="stars" noBorder>
77+
<SavedEntityTable.HeaderCell data-column="stars">
7878
{t('Stars')}
7979
</SavedEntityTable.HeaderCell>
8080
<SavedEntityTable.HeaderCell data-column="actions" />

0 commit comments

Comments
 (0)