Skip to content

Commit 8a853a6

Browse files
authored
Show build initiator on Workspace Build page (#2446)
* show build initiator in ui * update autostop story
1 parent 6d0579d commit 8a853a6

File tree

3 files changed

+62
-2
lines changed

3 files changed

+62
-2
lines changed

site/src/components/WorkspaceBuildStats/WorkspaceBuildStats.stories.tsx

+17
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,20 @@ export const Example = Template.bind({})
1313
Example.args = {
1414
build: MockWorkspaceBuild,
1515
}
16+
17+
export const Autostart = Template.bind({})
18+
Autostart.args = {
19+
build: {
20+
...MockWorkspaceBuild,
21+
reason: "autostart",
22+
},
23+
}
24+
25+
export const Autostop = Template.bind({})
26+
Autostop.args = {
27+
build: {
28+
...MockWorkspaceBuild,
29+
transition: "stop",
30+
reason: "autostop",
31+
},
32+
}

site/src/components/WorkspaceBuildStats/WorkspaceBuildStats.tsx

+14-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ import { Link as RouterLink } from "react-router-dom"
55
import { WorkspaceBuild } from "../../api/typesGenerated"
66
import { CardRadius, MONOSPACE_FONT_FAMILY } from "../../theme/constants"
77
import { combineClasses } from "../../util/combineClasses"
8-
import { displayWorkspaceBuildDuration, getDisplayWorkspaceBuildStatus } from "../../util/workspace"
8+
import {
9+
displayWorkspaceBuildDuration,
10+
getDisplayWorkspaceBuildInitiatedBy,
11+
getDisplayWorkspaceBuildStatus,
12+
} from "../../util/workspace"
913

1014
export interface WorkspaceBuildStatsProps {
1115
build: WorkspaceBuild
@@ -15,6 +19,7 @@ export const WorkspaceBuildStats: FC<WorkspaceBuildStatsProps> = ({ build }) =>
1519
const styles = useStyles()
1620
const theme = useTheme()
1721
const status = getDisplayWorkspaceBuildStatus(theme, build)
22+
const initiatedBy = getDisplayWorkspaceBuildInitiatedBy(theme, build)
1823

1924
return (
2025
<div className={styles.stats}>
@@ -51,6 +56,13 @@ export const WorkspaceBuildStats: FC<WorkspaceBuildStatsProps> = ({ build }) =>
5156
<span className={styles.statsLabel}>Action</span>
5257
<span className={combineClasses([styles.statsValue, styles.capitalize])}>{build.transition}</span>
5358
</div>
59+
<div className={styles.statsDivider} />
60+
<div className={styles.statItem}>
61+
<span className={styles.statsLabel}>Initiated by</span>
62+
<span className={styles.statsValue}>
63+
<span style={{ color: initiatedBy.color }}>{initiatedBy.initiatedBy}</span>
64+
</span>
65+
</div>
5466
</div>
5567
)
5668
}
@@ -72,7 +84,7 @@ const useStyles = makeStyles((theme) => ({
7284
},
7385

7486
statItem: {
75-
minWidth: "16%",
87+
minWidth: "13%",
7688
padding: theme.spacing(2),
7789
paddingTop: theme.spacing(1.75),
7890
},

site/src/util/workspace.ts

+31
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,37 @@ export const getDisplayWorkspaceBuildStatus = (
186186
}
187187
}
188188

189+
export const DisplayWorkspaceBuildInitiatedByLanguage = {
190+
autostart: "system/autostart",
191+
autostop: "system/autostop",
192+
}
193+
194+
export const getDisplayWorkspaceBuildInitiatedBy = (
195+
theme: Theme,
196+
build: TypesGen.WorkspaceBuild,
197+
): {
198+
color: string
199+
initiatedBy: string
200+
} => {
201+
switch (build.reason) {
202+
case "initiator":
203+
return {
204+
color: theme.palette.text.secondary,
205+
initiatedBy: build.initiator_name,
206+
}
207+
case "autostart":
208+
return {
209+
color: theme.palette.secondary.dark,
210+
initiatedBy: DisplayWorkspaceBuildInitiatedByLanguage.autostart,
211+
}
212+
case "autostop":
213+
return {
214+
color: theme.palette.secondary.dark,
215+
initiatedBy: DisplayWorkspaceBuildInitiatedByLanguage.autostop,
216+
}
217+
}
218+
}
219+
189220
export const getWorkspaceBuildDurationInSeconds = (build: TypesGen.WorkspaceBuild): number | undefined => {
190221
const isCompleted = build.job.started_at && build.job.completed_at
191222

0 commit comments

Comments
 (0)