Skip to content

Commit fc49438

Browse files
committed
Add edit file button
1 parent f248b52 commit fc49438

File tree

3 files changed

+41
-23
lines changed

3 files changed

+41
-23
lines changed

site/src/components/TemplateLayout/TemplateLayout.tsx

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,10 @@ import { AlertBanner } from "components/AlertBanner/AlertBanner"
1111
import {
1212
checkAuthorization,
1313
getTemplateByName,
14-
getTemplateDAUs,
1514
getTemplateVersion,
16-
getTemplateVersionResources,
17-
getTemplateVersions,
1815
} from "api/api"
1916
import { useQuery } from "@tanstack/react-query"
17+
import { useDashboard } from "components/Dashboard/DashboardProvider"
2018

2119
const templatePermissions = (templateId: string) => ({
2220
canUpdateTemplate: {
@@ -30,23 +28,16 @@ const templatePermissions = (templateId: string) => ({
3028

3129
const fetchTemplate = async (orgId: string, templateName: string) => {
3230
const template = await getTemplateByName(orgId, templateName)
33-
const [activeVersion, resources, versions, daus, permissions] =
34-
await Promise.all([
35-
getTemplateVersion(template.active_version_id),
36-
getTemplateVersionResources(template.active_version_id),
37-
getTemplateVersions(template.id),
38-
getTemplateDAUs(template.id),
39-
checkAuthorization({
40-
checks: templatePermissions(template.id),
41-
}),
42-
])
31+
const [activeVersion, permissions] = await Promise.all([
32+
getTemplateVersion(template.active_version_id),
33+
checkAuthorization({
34+
checks: templatePermissions(template.id),
35+
}),
36+
])
4337

4438
return {
4539
template,
4640
activeVersion,
47-
resources,
48-
versions,
49-
daus,
5041
permissions,
5142
}
5243
}
@@ -82,6 +73,7 @@ export const TemplateLayout: FC<{ children?: JSX.Element }> = ({
8273
const orgId = useOrganizationId()
8374
const { template } = useParams() as { template: string }
8475
const templateData = useTemplateData(orgId, template)
76+
const dashboard = useDashboard()
8577

8678
if (templateData.error) {
8779
return (
@@ -104,7 +96,9 @@ export const TemplateLayout: FC<{ children?: JSX.Element }> = ({
10496
<>
10597
<TemplatePageHeader
10698
template={templateData.data.template}
99+
activeVersion={templateData.data.activeVersion}
107100
permissions={templateData.data.permissions}
101+
canEditFiles={dashboard.experiments.includes("template_editor")}
108102
onDeleteTemplate={() => {
109103
navigate("/templates")
110104
}}

site/src/components/TemplateLayout/TemplatePageHeader.stories.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ComponentMeta, Story } from "@storybook/react"
2-
import { MockTemplate } from "testHelpers/entities"
2+
import { MockTemplate, MockTemplateVersion } from "testHelpers/entities"
33
import {
44
TemplatePageHeader,
55
TemplatePageHeaderProps,
@@ -12,6 +12,9 @@ export default {
1212
template: {
1313
defaultValue: MockTemplate,
1414
},
15+
activeVersion: {
16+
defaultValue: MockTemplateVersion,
17+
},
1518
permissions: {
1619
defaultValue: {
1720
canUpdateTemplate: true,

site/src/components/TemplateLayout/TemplatePageHeader.tsx

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import Button from "@material-ui/core/Button"
22
import AddCircleOutline from "@material-ui/icons/AddCircleOutline"
3-
import { AuthorizationResponse, Template } from "api/typesGenerated"
3+
import {
4+
AuthorizationResponse,
5+
Template,
6+
TemplateVersion,
7+
} from "api/typesGenerated"
48
import { Avatar } from "components/Avatar/Avatar"
59
import { Maybe } from "components/Conditionals/Maybe"
610
import { DeleteDialog } from "components/Dialogs/DeleteDialog/DeleteDialog"
@@ -19,17 +23,19 @@ import Menu from "@material-ui/core/Menu"
1923
import MenuItem from "@material-ui/core/MenuItem"
2024

2125
const Language = {
22-
editButton: "Edit",
2326
variablesButton: "Variables",
2427
settingsButton: "Settings",
2528
createButton: "Create workspace",
2629
deleteButton: "Delete",
30+
editFilesButton: "Edit files",
2731
}
2832

29-
const TemplateMenu: FC<{ templateName: string; onDelete: () => void }> = ({
30-
templateName,
31-
onDelete,
32-
}) => {
33+
const TemplateMenu: FC<{
34+
templateName: string
35+
templateVersion: string
36+
canEditFiles: boolean
37+
onDelete: () => void
38+
}> = ({ templateName, templateVersion, canEditFiles, onDelete }) => {
3339
const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null)
3440

3541
const handleClose = () => {
@@ -68,6 +74,15 @@ const TemplateMenu: FC<{ templateName: string; onDelete: () => void }> = ({
6874
>
6975
{Language.variablesButton}
7076
</MenuItem>
77+
{canEditFiles && (
78+
<MenuItem
79+
component={RouterLink}
80+
to={`/templates/${templateName}/versions/${templateVersion}/edit`}
81+
onClick={handleClose}
82+
>
83+
{Language.editFilesButton}
84+
</MenuItem>
85+
)}
7186
<MenuItem
7287
onClick={() => {
7388
onDelete()
@@ -96,13 +111,17 @@ const CreateWorkspaceButton: FC<{
96111

97112
export type TemplatePageHeaderProps = {
98113
template: Template
114+
activeVersion: TemplateVersion
99115
permissions: AuthorizationResponse
116+
canEditFiles: boolean
100117
onDeleteTemplate: () => void
101118
}
102119

103120
export const TemplatePageHeader: FC<TemplatePageHeaderProps> = ({
104121
template,
122+
activeVersion,
105123
permissions,
124+
canEditFiles,
106125
onDeleteTemplate,
107126
}) => {
108127
const hasIcon = template.icon && template.icon !== ""
@@ -116,8 +135,10 @@ export const TemplatePageHeader: FC<TemplatePageHeaderProps> = ({
116135
<CreateWorkspaceButton templateName={template.name} />
117136
<Maybe condition={permissions.canUpdateTemplate}>
118137
<TemplateMenu
138+
templateVersion={activeVersion.name}
119139
templateName={template.name}
120140
onDelete={deleteTemplate.openDeleteConfirmation}
141+
canEditFiles={canEditFiles}
121142
/>
122143
</Maybe>
123144
</>

0 commit comments

Comments
 (0)