Skip to content

Commit c2b5386

Browse files
committed
Adds an isSelected state to the Table
1 parent ff39fde commit c2b5386

File tree

2 files changed

+54
-19
lines changed
  • apps/webapp/app
    • components/primitives
    • routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.deployments

2 files changed

+54
-19
lines changed

apps/webapp/app/components/primitives/Table.tsx

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,16 +70,18 @@ type TableRowProps = {
7070
className?: string;
7171
children: ReactNode;
7272
disabled?: boolean;
73+
isSelected?: boolean;
7374
};
7475

7576
export const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(
76-
({ className, disabled, children }, ref) => {
77+
({ className, disabled, isSelected, children }, ref) => {
7778
return (
7879
<tr
7980
ref={ref}
8081
className={cn(
81-
disabled && "opacity-50",
8282
"group/table-row relative w-full after:absolute after:bottom-0 after:left-3 after:right-0 after:h-px after:bg-grid-dimmed",
83+
disabled && "opacity-50",
84+
isSelected && isSelectedStyle,
8385
className
8486
)}
8587
>
@@ -146,6 +148,7 @@ type TableCellProps = TableCellBasicProps & {
146148
isSticky?: boolean;
147149
actionClassName?: string;
148150
rowHoverStyle?: keyof typeof rowHoverStyles;
151+
isSelected?: boolean;
149152
};
150153

151154
const rowHoverStyles = {
@@ -160,6 +163,8 @@ const rowHoverStyles = {
160163
const stickyStyles =
161164
"sticky right-0 bg-background-dimmed group-hover/table-row:bg-charcoal-750 w-[--sticky-width] [&:has(.group-hover\\/table-row\\:block)]:w-auto";
162165

166+
const isSelectedStyle = "bg-charcoal-750 group-hover:bg-charcoal-750";
167+
163168
export const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(
164169
(
165170
{
@@ -173,6 +178,7 @@ export const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(
173178
hasAction = false,
174179
isSticky = false,
175180
rowHoverStyle = "default",
181+
isSelected,
176182
},
177183
ref
178184
) => {
@@ -203,7 +209,8 @@ export const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(
203209
to || onClick || hasAction ? "cursor-pointer" : "px-3 py-3 align-middle",
204210
!to && !onClick && alignmentClassName,
205211
isSticky && stickyStyles,
206-
rowHoverStyles[rowHoverStyle],
212+
isSelected && isSelectedStyle,
213+
!isSelected && rowHoverStyles[rowHoverStyle],
207214
className
208215
)}
209216
colSpan={colSpan}
@@ -259,10 +266,20 @@ export const TableCellMenu = forwardRef<
259266
hiddenButtons?: ReactNode;
260267
popoverContent?: ReactNode;
261268
children?: ReactNode;
269+
isSelected?: boolean;
262270
}
263271
>(
264272
(
265-
{ className, isSticky, onClick, visibleButtons, hiddenButtons, popoverContent, children },
273+
{
274+
className,
275+
isSticky,
276+
onClick,
277+
visibleButtons,
278+
hiddenButtons,
279+
popoverContent,
280+
children,
281+
isSelected,
282+
},
266283
ref
267284
) => {
268285
const [isOpen, setIsOpen] = useState(false);
@@ -275,9 +292,17 @@ export const TableCellMenu = forwardRef<
275292
ref={ref}
276293
alignment="right"
277294
hasAction={true}
295+
isSelected={isSelected}
278296
>
279-
<div className="relative p-1">
280-
<div className="absolute right-0 top-1/2 mr-1 flex -translate-y-1/2 items-center justify-end gap-0.5 bg-background-dimmed p-0.5 group-hover/table-row:rounded-[0.25rem] group-hover/table-row:bg-background-bright group-hover/table-row:ring-1 group-hover/table-row:ring-grid-bright">
297+
<div className="relative h-full p-1">
298+
<div
299+
className={cn(
300+
"absolute right-0 top-1/2 mr-1 flex -translate-y-1/2 items-center justify-end gap-0.5 rounded-[0.25rem] bg-background-dimmed p-0.5 group-hover/table-row:bg-background-bright group-hover/table-row:ring-1 group-hover/table-row:ring-grid-bright",
301+
isSelected && isSelectedStyle,
302+
isSelected &&
303+
"group-hover/table-row:bg-charcoal-750 group-hover/table-row:ring-charcoal-600/50"
304+
)}
305+
>
281306
{/* Hidden buttons that show on hover */}
282307
{hiddenButtons && (
283308
<div className="hidden pr-0.5 group-hover/table-row:block group-hover/table-row:border-r group-hover/table-row:border-grid-dimmed">

apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.deployments/route.tsx

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -142,42 +142,41 @@ export default function Page() {
142142
);
143143
const isSelected = deploymentParam === deployment.shortCode;
144144
return (
145-
<TableRow
146-
key={deployment.id}
147-
className={cn("group", isSelected ? "bg-grid-dimmed" : undefined)}
148-
>
149-
<TableCell to={path}>
145+
<TableRow key={deployment.id} className="group" isSelected={isSelected}>
146+
<TableCell to={path} isSelected={isSelected}>
150147
<div className="flex items-center gap-2">
151148
<Paragraph variant="extra-small">{deployment.shortCode}</Paragraph>
152149
{deployment.label && (
153150
<Badge variant="outline-rounded">{deployment.label}</Badge>
154151
)}
155152
</div>
156153
</TableCell>
157-
<TableCell to={path}>
154+
<TableCell to={path} isSelected={isSelected}>
158155
<EnvironmentLabel
159156
environment={deployment.environment}
160157
userName={usernameForEnv}
161158
/>
162159
</TableCell>
163-
<TableCell to={path}>{deployment.version}</TableCell>
164-
<TableCell to={path}>
160+
<TableCell to={path} isSelected={isSelected}>
161+
{deployment.version}
162+
</TableCell>
163+
<TableCell to={path} isSelected={isSelected}>
165164
<DeploymentStatus
166165
status={deployment.status}
167166
isBuilt={deployment.isBuilt}
168167
/>
169168
</TableCell>
170-
<TableCell to={path}>
169+
<TableCell to={path} isSelected={isSelected}>
171170
{deployment.tasksCount !== null ? deployment.tasksCount : "–"}
172171
</TableCell>
173-
<TableCell to={path}>
172+
<TableCell to={path} isSelected={isSelected}>
174173
{deployment.deployedAt ? (
175174
<DateTime date={deployment.deployedAt} />
176175
) : (
177176
"–"
178177
)}
179178
</TableCell>
180-
<TableCell to={path}>
179+
<TableCell to={path} isSelected={isSelected}>
181180
{deployment.deployedBy ? (
182181
<div className="flex items-center gap-1">
183182
<UserAvatar
@@ -197,7 +196,11 @@ export default function Page() {
197196
"–"
198197
)}
199198
</TableCell>
200-
<DeploymentActionsCell deployment={deployment} path={path} />
199+
<DeploymentActionsCell
200+
deployment={deployment}
201+
path={path}
202+
isSelected={isSelected}
203+
/>
201204
</TableRow>
202205
);
203206
})
@@ -282,9 +285,11 @@ function CreateDeploymentInstructions() {
282285
function DeploymentActionsCell({
283286
deployment,
284287
path,
288+
isSelected,
285289
}: {
286290
deployment: DeploymentListItem;
287291
path: string;
292+
isSelected: boolean;
288293
}) {
289294
const location = useLocation();
290295
const project = useProject();
@@ -293,12 +298,17 @@ function DeploymentActionsCell({
293298
const canRetryIndexing = deployment.isLatest && deploymentIndexingIsRetryable(deployment);
294299

295300
if (!canRollback && !canRetryIndexing) {
296-
return <TableCell to={path}>{""}</TableCell>;
301+
return (
302+
<TableCell to={path} isSelected={isSelected}>
303+
{""}
304+
</TableCell>
305+
);
297306
}
298307

299308
return (
300309
<TableCellMenu
301310
isSticky
311+
isSelected={isSelected}
302312
popoverContent={
303313
<>
304314
{canRollback && (

0 commit comments

Comments
 (0)