Skip to content

Commit 7f6bbda

Browse files
committed
Fill out status bar component
1 parent e7dc082 commit 7f6bbda

File tree

2 files changed

+46
-10
lines changed

2 files changed

+46
-10
lines changed

site/src/components/Workspace/Workspace.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,29 @@ import { WorkspaceSchedule } from "../WorkspaceSchedule/WorkspaceSchedule"
66
import { WorkspaceSection } from "../WorkspaceSection/WorkspaceSection"
77
import { WorkspaceStatusBar } from "../WorkspaceStatusBar/WorkspaceStatusBar"
88

9+
export type WorkspaceStatus =
10+
"started"
11+
| "stopping"
12+
| "stopped"
13+
| "starting"
14+
915
export interface WorkspaceProps {
1016
organization: Types.Organization
1117
workspace: Types.Workspace
1218
template: Types.Template
19+
status: WorkspaceStatus
1320
}
1421

1522
/**
1623
* Workspace is the top-level component for viewing an individual workspace
1724
*/
18-
export const Workspace: React.FC<WorkspaceProps> = ({ organization, template, workspace }) => {
25+
export const Workspace: React.FC<WorkspaceProps> = ({ organization, template, workspace, status }) => {
1926
const styles = useStyles()
2027

2128
return (
2229
<div className={styles.root}>
2330
<div className={styles.vertical}>
24-
<WorkspaceStatusBar organization={organization} template={template} workspace={workspace} />
31+
<WorkspaceStatusBar organization={organization} template={template} workspace={workspace} status={status} handleUpdate={} handleToggle={} />
2532
<div className={styles.horizontal}>
2633
<div className={styles.sidebarContainer}>
2734
<WorkspaceSection title="Applications">

site/src/components/WorkspaceStatusBar/WorkspaceStatusBar.tsx

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,53 @@ import Box from "@material-ui/core/Box"
22
import Typography from "@material-ui/core/Typography"
33
import React from "react"
44
import { Link } from "react-router-dom"
5-
import { WorkspaceProps } from "../Workspace/Workspace"
5+
import { WorkspaceStatus } from "../Workspace/Workspace"
66
import CloudCircleIcon from "@material-ui/icons/CloudCircle"
77
import { TitleIconSize } from "../../theme/constants"
88
import { makeStyles } from "@material-ui/core/styles"
99
import { WorkspaceSection } from "../WorkspaceSection/WorkspaceSection"
1010
import { Stack } from "../Stack/Stack"
1111
import Button from "@material-ui/core/Button"
1212
import Divider from "@material-ui/core/Divider"
13+
import * as Types from "../../api/types"
14+
15+
const Language = {
16+
stop: "Stop",
17+
start: "Start",
18+
update: "Update",
19+
settings: "Settings"
20+
}
21+
export interface WorkspaceStatusBarProps {
22+
organization: Types.Organization
23+
workspace: Types.Workspace
24+
template: Types.Template
25+
status: WorkspaceStatus
26+
handleUpdate: () => void
27+
handleToggle: () => void
28+
}
1329

1430
/**
1531
* Component for the header at the top of the workspace page
1632
*/
17-
export const WorkspaceStatusBar: React.FC<WorkspaceProps> = ({ organization, template, workspace }) => {
33+
export const WorkspaceStatusBar: React.FC<WorkspaceStatusBarProps> = ({ organization, template, workspace, status, handleUpdate, handleToggle }) => {
1834
const styles = useStyles()
1935

2036
const templateLink = `/templates/${organization.name}/${template.name}`
21-
const action = "Start" // TODO don't let me merge this
22-
const outOfDate = false // TODO
37+
const statusToAction: Record<WorkspaceStatus, string> = {
38+
started: Language.stop,
39+
stopping: Language.stop,
40+
stopped: Language.start,
41+
starting: Language.start,
42+
}
43+
// Cannot start or stop in the middle of starting or stopping
44+
const statusToDisabled: Record<WorkspaceStatus, boolean> = {
45+
started: false,
46+
stopping: true,
47+
stopped: false,
48+
starting: true
49+
}
50+
const action = statusToAction[status]
51+
const actionDisabled = statusToDisabled[status]
2352

2453
return (
2554
<WorkspaceSection>
@@ -37,12 +66,12 @@ export const WorkspaceStatusBar: React.FC<WorkspaceProps> = ({ organization, tem
3766
</div>
3867
</div>
3968
<div className={styles.horizontal}>
40-
<Button color="primary">{action}</Button>
41-
{outOfDate &&
42-
<Button color="primary">Update</Button>
69+
<Button onClick={handleToggle} disabled={actionDisabled} color="primary">{action}</Button>
70+
{workspace.outdated &&
71+
<Button onClick={handleUpdate} color="primary">{Language.update}</Button>
4372
}
4473
<Divider orientation="vertical" flexItem/>
45-
<Link className={styles.link} to={`workspaces/${workspace.id}/edit`}>Settings</Link>
74+
<Link className={styles.link} to={`workspaces/${workspace.id}/edit`}>{Language.settings}</Link>
4675
</div>
4776
</div>
4877
</Stack>

0 commit comments

Comments
 (0)