diff --git a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.test.tsx b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.test.tsx
index f4db52b2ef..f8c316cd00 100644
--- a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.test.tsx
+++ b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.test.tsx
@@ -255,6 +255,39 @@ test("The file is uploaded with the correct content type", async () => {
);
});
+test("Preserves the currently open file path when building a template version", async () => {
+ const user = userEvent.setup();
+ const { router } = renderWithAuth(, {
+ route: `/templates/${MockTemplate.name}/versions/${MockTemplateVersion.name}/edit?path=myfile.tf`,
+ path: "/templates/:template/versions/:version/edit",
+ extraRoutes: [
+ {
+ path: "/templates/:templateId",
+ element:
,
+ },
+ ],
+ });
+
+ const topbar = await screen.findByTestId("topbar");
+
+ const newTemplateVersion: TemplateVersion = {
+ ...MockTemplateVersion,
+ id: "new-version-id",
+ name: "new-version",
+ };
+
+ await typeOnEditor("new content", user);
+ await buildTemplateVersion(newTemplateVersion, user, topbar);
+
+ // Verify that the path query parameter is preserved in the URL
+ await waitFor(() => {
+ expect(router.state.location.pathname).toBe(
+ `/templates/${MockTemplate.name}/versions/new-version/edit`,
+ );
+ });
+ expect(router.state.location.search).toBe("?path=myfile.tf");
+});
+
describe.each([
{
testName: "Do not ask when template version has no errors",
diff --git a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.tsx b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.tsx
index 9f8b7e10b6..52d52ad0e1 100644
--- a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.tsx
+++ b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.tsx
@@ -104,12 +104,10 @@ const TemplateVersionEditorPage: FC = () => {
};
const navigateToVersion = (version: TemplateVersion) => {
- return navigate(
- `${getLink(linkToTemplate(organizationName, templateName))}/versions/${
- version.name
- }/edit`,
- { replace: true },
- );
+ const url = `${getLink(linkToTemplate(organizationName, templateName))}/versions/${
+ version.name
+ }/edit?${searchParams.toString()}`;
+ return navigate(url, { replace: true });
};
const onBuildEnds = (newVersion: TemplateVersion) => {