Skip to content

Commit 0d03b92

Browse files
committed
Add experiment to enable the template editor
1 parent 33ffd77 commit 0d03b92

File tree

9 files changed

+43
-24
lines changed

9 files changed

+43
-24
lines changed

coderd/apidoc/docs.go

Lines changed: 4 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codersdk/deployment.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,10 @@ const (
418418
// interface for all RBAC operations. NOT READY FOR PRODUCTION USE.
419419
ExperimentAuthzQuerier Experiment = "authz_querier"
420420

421+
// ExperimentTemplateEditor is an internal experiment that enables the template editor
422+
// for all users.
423+
ExperimentTemplateEditor Experiment = "template_editor"
424+
421425
// Add new experiments here!
422426
// ExperimentExample Experiment = "example"
423427
)
@@ -427,7 +431,7 @@ var (
427431
// users to opt-in to via --experimental='*'.
428432
// Experiments that are not ready for consumption by all users should
429433
// not be included here and will be essentially hidden.
430-
ExperimentsAll = Experiments{}
434+
ExperimentsAll = Experiments{ExperimentTemplateEditor}
431435
)
432436

433437
// Experiments is a list of experiments that are enabled for the deployment.

docs/api/schemas.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2732,9 +2732,10 @@ CreateParameterRequest is a structure used to create a new parameter value for a
27322732

27332733
#### Enumerated Values
27342734

2735-
| Value |
2736-
| --------------- |
2737-
| `authz_querier` |
2735+
| Value |
2736+
| ----------------- |
2737+
| `authz_querier` |
2738+
| `template_editor` |
27382739

27392740
## codersdk.Feature
27402741

site/src/api/typesGenerated.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,8 +1070,8 @@ export const Entitlements: Entitlement[] = [
10701070
]
10711071

10721072
// From codersdk/deployment.go
1073-
export type Experiment = "authz_querier"
1074-
export const Experiments: Experiment[] = ["authz_querier"]
1073+
export type Experiment = "authz_querier" | "template_editor"
1074+
export const Experiments: Experiment[] = ["authz_querier", "template_editor"]
10751075

10761076
// From codersdk/deployment.go
10771077
export type FeatureName =

site/src/components/TemplateVersionEditor/TemplateVersionEditor.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ export const TemplateVersionEditor: FC<TemplateVersionEditorProps> = ({
7676
const [activeFile, setActiveFile] = useState<File | undefined>(() => {
7777
const fileKeys = Object.keys(initialFiles)
7878
for (let i = 0; i < fileKeys.length; i++) {
79+
// Open a Terraform file by default!
7980
if (fileKeys[i].endsWith(".tf")) {
8081
return {
8182
path: fileKeys[i],
@@ -85,11 +86,14 @@ export const TemplateVersionEditor: FC<TemplateVersionEditorProps> = ({
8586
}
8687
}
8788
})
89+
8890
const triggerPreview = useCallback(() => {
8991
onPreview(files)
9092
// Switch to the build log!
9193
setSelectedTab(0)
9294
}, [files, onPreview])
95+
96+
// Stop ctrl+s from saving files and make ctrl+enter trigger a preview.
9397
useEffect(() => {
9498
const keyListener = (event: KeyboardEvent) => {
9599
if (!(navigator.platform.match("Mac") ? event.metaKey : event.ctrlKey)) {

site/src/pages/TemplateVersionPage/TemplateVersionPage.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { useMachine } from "@xstate/react"
2+
import { useDashboard } from "components/Dashboard/DashboardProvider"
23
import { useOrganizationId } from "hooks/useOrganizationId"
34
import { useTab } from "hooks/useTab"
45
import { FC } from "react"
@@ -22,6 +23,7 @@ export const TemplateVersionPage: FC = () => {
2223
})
2324
const tab = useTab("file", "0")
2425
const { t } = useTranslation("templateVersionPage")
26+
const dashboard = useDashboard()
2527

2628
return (
2729
<>
@@ -36,6 +38,7 @@ export const TemplateVersionPage: FC = () => {
3638
versionName={versionName}
3739
templateName={templateName}
3840
tab={tab}
41+
canEdit={dashboard.experiments.includes("template_editor")}
3942
/>
4043
</>
4144
)

site/src/pages/TemplateVersionPage/TemplateVersionPageView.stories.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ const defaultArgs = {
4141
tab,
4242
templateName: MockTemplate.name,
4343
versionName: MockTemplateVersion.name,
44+
canEdit: true,
4445
context: {
4546
orgId: MockOrganization.id,
4647
versionName: MockTemplateVersion.name,

site/src/pages/TemplateVersionPage/TemplateVersionPageView.tsx

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
1+
import Button from "@material-ui/core/Button"
2+
import Link from "@material-ui/core/Link"
13
import { makeStyles } from "@material-ui/core/styles"
4+
import EditIcon from "@material-ui/icons/Edit"
25
import { AlertBanner } from "components/AlertBanner/AlertBanner"
6+
import { DockerIcon } from "components/Icons/DockerIcon"
37
import { MarkdownIcon } from "components/Icons/MarkdownIcon"
48
import { TerraformIcon } from "components/Icons/TerraformIcon"
59
import { Loader } from "components/Loader/Loader"
610
import { Margins } from "components/Margins/Margins"
7-
import EditIcon from "@material-ui/icons/Edit"
811
import {
912
PageHeader,
1013
PageHeaderCaption,
1114
PageHeaderTitle,
1215
} from "components/PageHeader/PageHeader"
1316
import { Stack } from "components/Stack/Stack"
1417
import { Stats, StatsItem } from "components/Stats/Stats"
18+
import { SyntaxHighlighter } from "components/SyntaxHighlighter/SyntaxHighlighter"
1519
import { UseTabResult } from "hooks/useTab"
1620
import { FC } from "react"
17-
import { Link as RouterLink } from "react-router-dom"
1821
import { useTranslation } from "react-i18next"
22+
import { Link as RouterLink } from "react-router-dom"
1923
import { combineClasses } from "util/combineClasses"
2024
import { createDayString } from "util/createDayString"
21-
import { TemplateVersionMachineContext } from "xServices/templateVersion/templateVersionXService"
2225
import { TemplateVersionFiles } from "util/templateVersion"
23-
import { SyntaxHighlighter } from "components/SyntaxHighlighter/SyntaxHighlighter"
24-
import { DockerIcon } from "components/Icons/DockerIcon"
25-
import Button from "@material-ui/core/Button"
26-
import Link from "@material-ui/core/Link"
26+
import { TemplateVersionMachineContext } from "xServices/templateVersion/templateVersionXService"
2727

2828
const iconByExtension: Record<string, JSX.Element> = {
2929
tf: <TerraformIcon />,
@@ -104,6 +104,7 @@ export interface TemplateVersionPageViewProps {
104104
*/
105105
versionName: string
106106
templateName: string
107+
canEdit: boolean
107108
tab: UseTabResult
108109
context: TemplateVersionMachineContext
109110
}
@@ -113,6 +114,7 @@ export const TemplateVersionPageView: FC<TemplateVersionPageViewProps> = ({
113114
tab,
114115
versionName,
115116
templateName,
117+
canEdit,
116118
}) => {
117119
const { currentFiles, error, currentVersion, previousFiles } = context
118120
const { t } = useTranslation("templateVersionPage")
@@ -121,13 +123,15 @@ export const TemplateVersionPageView: FC<TemplateVersionPageViewProps> = ({
121123
<Margins>
122124
<PageHeader
123125
actions={
124-
<Link
125-
underline="none"
126-
component={RouterLink}
127-
to={`/templates/${templateName}/versions/${versionName}/edit`}
128-
>
129-
<Button startIcon={<EditIcon />}>Edit</Button>
130-
</Link>
126+
canEdit ? (
127+
<Link
128+
underline="none"
129+
component={RouterLink}
130+
to={`/templates/${templateName}/versions/${versionName}/edit`}
131+
>
132+
<Button startIcon={<EditIcon />}>Edit</Button>
133+
</Link>
134+
) : undefined
131135
}
132136
>
133137
<PageHeaderCaption>{t("header.caption")}</PageHeaderCaption>

0 commit comments

Comments
 (0)