Skip to content

Commit 1110997

Browse files
committed
Refactor timeline and group build by date
1 parent e66151a commit 1110997

File tree

5 files changed

+59
-15
lines changed

5 files changed

+59
-15
lines changed

site/src/components/FullPageLayout/Sidebar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export const SidebarCaption = (props: HTMLAttributes<HTMLSpanElement>) => {
4949

5050
const styles = {
5151
sidebarItem: (theme: Theme) => ({
52-
fontSize: 14,
52+
fontSize: 13,
5353
lineHeight: 1.2,
5454
color: theme.palette.text.primary,
5555
textDecoration: "none",

site/src/components/Timeline/Timeline.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { TimelineDateRow } from "components/Timeline/TimelineDateRow";
2-
import { Fragment } from "react";
2+
import { FC, Fragment } from "react";
3+
import { createDisplayDate } from "./utils";
34

45
type GetDateFn<TData> = (data: TData) => Date;
56

@@ -26,23 +27,27 @@ export interface TimelineProps<TData> {
2627
items: TData[];
2728
getDate: GetDateFn<TData>;
2829
row: (item: TData) => JSX.Element;
30+
dateRow?: FC<{ date: Date; displayDate: string }>;
2931
}
3032

3133
export const Timeline = <TData,>({
3234
items,
3335
getDate,
3436
row,
37+
dateRow: DateRow = TimelineDateRow,
3538
}: TimelineProps<TData>): JSX.Element => {
3639
const itemsByDate = groupByDate(items, getDate);
3740

3841
return (
3942
<>
4043
{Object.keys(itemsByDate).map((dateStr) => {
4144
const items = itemsByDate[dateStr];
45+
const date = new Date(dateStr);
46+
const displayDate = createDisplayDate(date);
4247

4348
return (
4449
<Fragment key={dateStr}>
45-
<TimelineDateRow date={new Date(dateStr)} />
50+
<DateRow date={date} displayDate={displayDate} />
4651
{items.map(row)}
4752
</Fragment>
4853
);

site/src/components/Timeline/TimelineDateRow.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import TableCell from "@mui/material/TableCell";
22
import TableRow from "@mui/material/TableRow";
33
import { type FC } from "react";
44
import { css, useTheme } from "@emotion/react";
5-
import { createDisplayDate } from "./utils";
65

76
export interface TimelineDateRow {
87
date: Date;
8+
displayDate: string;
99
}
1010

11-
export const TimelineDateRow: FC<TimelineDateRow> = ({ date }) => {
11+
export const TimelineDateRow: FC<TimelineDateRow> = ({ date, displayDate }) => {
1212
const theme = useTheme();
1313

1414
return (
@@ -30,7 +30,7 @@ export const TimelineDateRow: FC<TimelineDateRow> = ({ date }) => {
3030
}}
3131
title={date.toLocaleDateString()}
3232
>
33-
{createDisplayDate(date)}
33+
{displayDate}
3434
</TableCell>
3535
</TableRow>
3636
);

site/src/components/WorkspaceBuild/WorkspaceBuildData.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ export const WorkspaceBuildData = ({ build }: { build: WorkspaceBuild }) => {
3333
}}
3434
>
3535
{build.transition} by{" "}
36-
<strong>{getDisplayWorkspaceBuildInitiatedBy(build)}</strong>
36+
<span css={{ fontWeight: 500 }}>
37+
{getDisplayWorkspaceBuildInitiatedBy(build)}
38+
</span>
3739
</div>
3840
<div
3941
css={{
Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { useTheme } from "@mui/material/styles";
12
import { infiniteWorkspaceBuilds } from "api/queries/workspaceBuilds";
23
import { Workspace } from "api/typesGenerated";
34
import {
@@ -6,13 +7,15 @@ import {
67
SidebarItem,
78
SidebarLink,
89
} from "components/FullPageLayout/Sidebar";
10+
import { Timeline } from "components/Timeline/Timeline";
911
import {
1012
WorkspaceBuildData,
1113
WorkspaceBuildDataSkeleton,
1214
} from "components/WorkspaceBuild/WorkspaceBuildData";
1315
import { useInfiniteQuery } from "react-query";
1416

1517
export const HistorySidebar = ({ workspace }: { workspace: Workspace }) => {
18+
const theme = useTheme();
1619
const buildsQuery = useInfiniteQuery({
1720
...infiniteWorkspaceBuilds(workspace?.id ?? ""),
1821
enabled: workspace !== undefined,
@@ -22,20 +25,54 @@ export const HistorySidebar = ({ workspace }: { workspace: Workspace }) => {
2225
return (
2326
<Sidebar>
2427
<SidebarCaption>History</SidebarCaption>
25-
{builds
26-
? builds.map((build) => (
28+
{builds ? (
29+
<Timeline
30+
items={builds}
31+
getDate={(build) => new Date(build.created_at)}
32+
dateRow={({ displayDate }) => (
33+
<div
34+
css={{
35+
fontSize: 12,
36+
color: theme.palette.text.secondary,
37+
padding: "0 16px 4px",
38+
39+
"&:not(:first-of-type)": {
40+
marginTop: "8px",
41+
},
42+
43+
"&::first-letter": {
44+
textTransform: "uppercase",
45+
},
46+
}}
47+
>
48+
{displayDate}
49+
</div>
50+
)}
51+
row={(build) => (
2752
<SidebarLink
2853
key={build.id}
2954
to={`/@${build.workspace_owner_name}/${build.workspace_name}/builds/${build.build_number}`}
3055
>
3156
<WorkspaceBuildData build={build} />
3257
</SidebarLink>
33-
))
34-
: Array.from({ length: 15 }, (_, i) => (
35-
<SidebarItem key={i}>
36-
<WorkspaceBuildDataSkeleton />
37-
</SidebarItem>
38-
))}
58+
)}
59+
/>
60+
) : (
61+
// builds.map((build) => (
62+
// <SidebarLink
63+
// key={build.id}
64+
// to={`/@${build.workspace_owner_name}/${build.workspace_name}/builds/${build.build_number}`}
65+
// >
66+
// <WorkspaceBuildData build={build} />
67+
// </SidebarLink>
68+
69+
// ))
70+
Array.from({ length: 15 }, (_, i) => (
71+
<SidebarItem key={i}>
72+
<WorkspaceBuildDataSkeleton />
73+
</SidebarItem>
74+
))
75+
)}
3976
</Sidebar>
4077
);
4178
};

0 commit comments

Comments
 (0)