Skip to content

Commit cb51c1c

Browse files
committed
Group template actions
1 parent 98420fb commit cb51c1c

File tree

2 files changed

+68
-38
lines changed

2 files changed

+68
-38
lines changed

site/src/components/TemplateLayout/TemplatePageHeader.tsx

Lines changed: 60 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
import Button from "@material-ui/core/Button"
2-
import DeleteOutlined from "@material-ui/icons/DeleteOutlined"
32
import AddCircleOutline from "@material-ui/icons/AddCircleOutline"
4-
import SettingsOutlined from "@material-ui/icons/SettingsOutlined"
5-
import CodeOutlined from "@material-ui/icons/CodeOutlined"
63
import { AuthorizationResponse, Template } from "api/typesGenerated"
74
import { Avatar } from "components/Avatar/Avatar"
85
import { Maybe } from "components/Conditionals/Maybe"
@@ -13,10 +10,13 @@ import {
1310
PageHeaderSubtitle,
1411
} from "components/PageHeader/PageHeader"
1512
import { Stack } from "components/Stack/Stack"
16-
import { FC } from "react"
13+
import { FC, useState } from "react"
1714
import { Link as RouterLink } from "react-router-dom"
1815
import { useDeleteTemplate } from "./deleteTemplate"
1916
import { Margins } from "components/Margins/Margins"
17+
import MoreVertOutlined from "@material-ui/icons/MoreVertOutlined"
18+
import Menu from "@material-ui/core/Menu"
19+
import MenuItem from "@material-ui/core/MenuItem"
2020

2121
const Language = {
2222
editButton: "Edit",
@@ -26,31 +26,60 @@ const Language = {
2626
deleteButton: "Delete",
2727
}
2828

29-
const TemplateSettingsButton: FC<{ templateName: string }> = ({
29+
const TemplateMenu: FC<{ templateName: string; onDelete: () => void }> = ({
3030
templateName,
31-
}) => (
32-
<Button
33-
variant="outlined"
34-
component={RouterLink}
35-
to={`/templates/${templateName}/settings`}
36-
startIcon={<SettingsOutlined />}
37-
>
38-
{Language.settingsButton}
39-
</Button>
40-
)
31+
onDelete,
32+
}) => {
33+
const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null)
4134

42-
const TemplateVariablesButton: FC<{ templateName: string }> = ({
43-
templateName,
44-
}) => (
45-
<Button
46-
variant="outlined"
47-
component={RouterLink}
48-
to={`/templates/${templateName}/variables`}
49-
startIcon={<CodeOutlined />}
50-
>
51-
{Language.variablesButton}
52-
</Button>
53-
)
35+
const handleClose = () => {
36+
setAnchorEl(null)
37+
}
38+
39+
return (
40+
<div>
41+
<Button
42+
variant="outlined"
43+
aria-controls="template-options"
44+
aria-haspopup="true"
45+
onClick={(e) => setAnchorEl(e.currentTarget)}
46+
>
47+
<MoreVertOutlined />
48+
</Button>
49+
50+
<Menu
51+
id="template-options"
52+
anchorEl={anchorEl}
53+
keepMounted
54+
open={Boolean(anchorEl)}
55+
onClose={handleClose}
56+
>
57+
<MenuItem
58+
onClick={handleClose}
59+
component={RouterLink}
60+
to={`/templates/${templateName}/settings`}
61+
>
62+
{Language.settingsButton}
63+
</MenuItem>
64+
<MenuItem
65+
component={RouterLink}
66+
to={`/templates/${templateName}/variables`}
67+
onClick={handleClose}
68+
>
69+
{Language.variablesButton}
70+
</MenuItem>
71+
<MenuItem
72+
onClick={() => {
73+
onDelete()
74+
handleClose()
75+
}}
76+
>
77+
{Language.deleteButton}
78+
</MenuItem>
79+
</Menu>
80+
</div>
81+
)
82+
}
5483

5584
const CreateWorkspaceButton: FC<{
5685
templateName: string
@@ -65,12 +94,6 @@ const CreateWorkspaceButton: FC<{
6594
</Button>
6695
)
6796

68-
const DeleteTemplateButton: FC<{ onClick: () => void }> = ({ onClick }) => (
69-
<Button variant="outlined" startIcon={<DeleteOutlined />} onClick={onClick}>
70-
{Language.deleteButton}
71-
</Button>
72-
)
73-
7497
export type TemplatePageHeaderProps = {
7598
template: Template
7699
permissions: AuthorizationResponse
@@ -90,14 +113,13 @@ export const TemplatePageHeader: FC<TemplatePageHeaderProps> = ({
90113
<PageHeader
91114
actions={
92115
<>
116+
<CreateWorkspaceButton templateName={template.name} />
93117
<Maybe condition={permissions.canUpdateTemplate}>
94-
<DeleteTemplateButton
95-
onClick={deleteTemplate.openDeleteConfirmation}
118+
<TemplateMenu
119+
templateName={template.name}
120+
onDelete={deleteTemplate.openDeleteConfirmation}
96121
/>
97-
<TemplateSettingsButton templateName={template.name} />
98-
<TemplateVariablesButton templateName={template.name} />
99122
</Maybe>
100-
<CreateWorkspaceButton templateName={template.name} />
101123
</>
102124
}
103125
>

site/src/theme/overrides.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,5 +234,13 @@ export const getOverrides = ({
234234
backgroundColor: colors.gray[12],
235235
},
236236
},
237+
MuiMenu: {
238+
paper: {
239+
marginTop: 8,
240+
borderRadius: 4,
241+
padding: "4px 0",
242+
minWidth: 120,
243+
},
244+
},
237245
}
238246
}

0 commit comments

Comments
 (0)