diff --git a/site/src/api/queries/files.ts b/site/src/api/queries/files.ts index 5fd3250d50106..cc840b52eb63f 100644 --- a/site/src/api/queries/files.ts +++ b/site/src/api/queries/files.ts @@ -5,3 +5,10 @@ export const uploadFile = () => { mutationFn: API.uploadFile, }; }; + +export const file = (fileId: string) => { + return { + queryKey: ["files", fileId], + queryFn: () => API.getFile(fileId), + }; +}; diff --git a/site/src/api/queries/templates.ts b/site/src/api/queries/templates.ts index 337925a6583a4..406f7a0bb53e1 100644 --- a/site/src/api/queries/templates.ts +++ b/site/src/api/queries/templates.ts @@ -129,6 +129,15 @@ export const templateVersionVariables = (versionId: string) => { }; }; +export const createTemplateVersion = (orgId: string) => { + return { + mutationFn: async (request: CreateTemplateVersionRequest) => { + const newVersion = await API.createTemplateVersion(orgId, request); + return newVersion; + }, + }; +}; + export const createAndBuildTemplateVersion = (orgId: string) => { return { mutationFn: async (request: CreateTemplateVersionRequest) => { @@ -216,6 +225,13 @@ export const richParameters = (versionId: string) => { }; }; +export const resources = (versionId: string) => { + return { + queryKey: ["templateVersion", versionId, "resources"], + queryFn: () => API.getTemplateVersionResources(versionId), + }; +}; + const waitBuildToBeFinished = async (version: TemplateVersion) => { let data: TemplateVersion; let jobStatus: ProvisionerJobStatus; diff --git a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.stories.tsx b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.stories.tsx index c305b34eeb558..bcd60352568ae 100644 --- a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.stories.tsx +++ b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.stories.tsx @@ -34,9 +34,9 @@ type Story = StoryObj; export const Example: Story = {}; -export const Logs = { +export const Logs: Story = { args: { - isBuildingNewVersion: true, + defaultTab: "logs", buildLogs: MockWorkspaceBuildLogs, templateVersion: { ...MockTemplateVersion, @@ -47,7 +47,7 @@ export const Logs = { export const Resources: Story = { args: { - isBuildingNewVersion: true, + defaultTab: "resources", buildLogs: MockWorkspaceBuildLogs, resources: [ MockWorkspaceResource, @@ -60,9 +60,9 @@ export const Resources: Story = { }, }; -export const ManyLogs = { +export const WithError = { args: { - isBuildingNewVersion: true, + defaultTab: "logs", templateVersion: { ...MockTemplateVersion, job: { diff --git a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.tsx b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.tsx index 82988be7b0cca..30c89a159f35a 100644 --- a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.tsx +++ b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.tsx @@ -49,10 +49,10 @@ import AlertTitle from "@mui/material/AlertTitle"; import { DashboardFullPage } from "components/Dashboard/DashboardLayout"; import { type Interpolation, type Theme, useTheme } from "@emotion/react"; +type Tab = "logs" | "resources" | undefined; // Undefined is to hide the tab export interface TemplateVersionEditorProps { template: Template; templateVersion: TemplateVersion; - isBuildingNewVersion: boolean; defaultFileTree: FileTree; buildLogs?: ProvisionerJobLog[]; resources?: WorkspaceResource[]; @@ -71,6 +71,7 @@ export interface TemplateVersionEditorProps { missingVariables?: TemplateVersionVariable[]; onSubmitMissingVariableValues: (values: VariableValue[]) => void; onCancelSubmitMissingVariableValues: () => void; + defaultTab?: Tab; } const topbarHeight = 80; @@ -92,7 +93,6 @@ export const TemplateVersionEditor: FC = ({ disableUpdate, template, templateVersion, - isBuildingNewVersion, defaultFileTree, onPreview, onPublish, @@ -109,11 +109,10 @@ export const TemplateVersionEditor: FC = ({ missingVariables, onSubmitMissingVariableValues, onCancelSubmitMissingVariableValues, + defaultTab, }) => { const theme = useTheme(); - // If resources are provided, show them by default! - // This is for Storybook! - const [selectedTab, setSelectedTab] = useState(() => (resources ? 1 : 0)); + const [selectedTab, setSelectedTab] = useState(defaultTab); const [fileTree, setFileTree] = useState(defaultFileTree); const [createFileOpen, setCreateFileOpen] = useState(false); const [deleteFileOpen, setDeleteFileOpen] = useState(); @@ -125,8 +124,7 @@ export const TemplateVersionEditor: FC = ({ const triggerPreview = useCallback(() => { onPreview(fileTree); - // Switch to the build log! - setSelectedTab(0); + setSelectedTab("logs"); }, [fileTree, onPreview]); // Stop ctrl+s from saving files and make ctrl+enter trigger a preview. @@ -159,11 +157,12 @@ export const TemplateVersionEditor: FC = ({ previousVersion.current = templateVersion; return; } + if ( ["running", "pending"].includes(previousVersion.current.job.status) && templateVersion.job.status === "succeeded" ) { - setSelectedTab(1); + setSelectedTab("resources"); setDirty(false); } previousVersion.current = templateVersion; @@ -218,7 +217,7 @@ export const TemplateVersionEditor: FC = ({ )}
- {isBuildingNewVersion && ( + {buildLogs && ( )} @@ -358,9 +357,9 @@ export const TemplateVersionEditor: FC = ({