Skip to content

Commit 1c05356

Browse files
committed
Do safe request
1 parent 8503418 commit 1c05356

File tree

5 files changed

+52
-24
lines changed

5 files changed

+52
-24
lines changed

site/src/api/api.ts

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -231,14 +231,32 @@ export const getTemplateVersionByName = async (
231231
return response.data
232232
}
233233

234+
export type GetPreviousTemplateVersionByNameResponse =
235+
| TypesGen.TemplateVersion
236+
| undefined
237+
234238
export const getPreviousTemplateVersionByName = async (
235239
organizationId: string,
236240
versionName: string,
237-
): Promise<TypesGen.TemplateVersion> => {
238-
const response = await axios.get<TypesGen.TemplateVersion>(
239-
`/api/v2/organizations/${organizationId}/templateversions/${versionName}/previous`,
240-
)
241-
return response.data
241+
): Promise<GetPreviousTemplateVersionByNameResponse> => {
242+
try {
243+
const response = await axios.get<TypesGen.TemplateVersion>(
244+
`/api/v2/organizations/${organizationId}/templateversions/${versionName}/previous`,
245+
)
246+
return response.data
247+
} catch (error) {
248+
// When there is no previous version, like the first version of a template,
249+
// the API returns 404 so in this case we can safely return undefined
250+
if (
251+
axios.isAxiosError(error) &&
252+
error.response &&
253+
error.response.status === 404
254+
) {
255+
return undefined
256+
}
257+
258+
throw error
259+
}
242260
}
243261

244262
export const updateTemplateMeta = async (

site/src/components/SyntaxHighlighter/SyntaxHighlighter.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export const SyntaxHighlighter: FC<{
1919
minimap: {
2020
enabled: false,
2121
},
22-
renderSideBySide: false,
22+
renderSideBySide: true,
2323
readOnly: true,
2424
},
2525
}
@@ -31,7 +31,7 @@ export const SyntaxHighlighter: FC<{
3131
return (
3232
<div className={styles.wrapper}>
3333
{hasDiff ? (
34-
<DiffEditor original={value} modified={compareWith} {...commonProps} />
34+
<DiffEditor original={compareWith} modified={value} {...commonProps} />
3535
) : (
3636
<Editor value={value} {...commonProps} />
3737
)}

site/src/components/SyntaxHighlighter/coderTheme.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ export const coderTheme = (theme: Theme): Record<string, any> => ({
206206
},
207207
],
208208
colors: {
209-
"editor.foreground": hslToHex(theme.palette.text.secondary),
209+
"editor.foreground": hslToHex(theme.palette.text.primary),
210210
"editor.background": hslToHex(theme.palette.background.paper),
211211
"editor.selectionBackground": hslToHex(theme.palette.action.hover),
212212
"editor.lineHighlightBackground": hslToHex(

site/src/pages/TemplateVersionPage/TemplateVersionPageView.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@ const getExtension = (filename: string) => {
4040

4141
const Files: FC<{
4242
currentFiles: TemplateVersionFiles
43-
previousFiles: TemplateVersionFiles
43+
previousFiles?: TemplateVersionFiles
4444
tab: UseTabResult
4545
}> = ({ currentFiles, previousFiles, tab }) => {
4646
const styles = useStyles()
4747
const filenames = Object.keys(currentFiles)
4848
const selectedFilename = filenames[Number(tab.value)]
4949
const currentFile = currentFiles[selectedFilename]
50-
const previousFile = previousFiles[selectedFilename]
50+
const previousFile = previousFiles && previousFiles[selectedFilename]
5151

5252
return (
5353
<div className={styles.files}>
@@ -56,7 +56,10 @@ const Files: FC<{
5656
const tabValue = index.toString()
5757
const extension = getExtension(filename)
5858
const icon = iconByExtension[extension]
59-
const hasDiff = currentFiles[filename] !== previousFiles[filename]
59+
const hasDiff =
60+
previousFiles &&
61+
previousFiles[filename] &&
62+
currentFiles[filename] !== previousFiles[filename]
6063

6164
return (
6265
<button
@@ -112,7 +115,7 @@ export const TemplateVersionPageView: FC<TemplateVersionPageViewProps> = ({
112115
<PageHeaderTitle>{versionName}</PageHeaderTitle>
113116
</PageHeader>
114117

115-
{(!currentFiles || !previousFiles) && !error && <Loader />}
118+
{!currentFiles && !error && <Loader />}
116119

117120
<Stack spacing={4}>
118121
{Boolean(error) && <AlertBanner severity="error" error={error} />}

site/src/xServices/templateVersion/templateVersionXService.ts

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {
22
getPreviousTemplateVersionByName,
3+
GetPreviousTemplateVersionByNameResponse,
34
getTemplateVersionByName,
45
} from "api/api"
56
import { TemplateVersion } from "api/typesGenerated"
@@ -29,8 +30,8 @@ export const templateVersionMachine = createMachine(
2930
services: {} as {
3031
loadVersions: {
3132
data: {
32-
currentVersion: TemplateVersion
33-
previousVersion: TemplateVersion
33+
currentVersion: GetPreviousTemplateVersionByNameResponse
34+
previousVersion: GetPreviousTemplateVersionByNameResponse
3435
}
3536
}
3637
loadFiles: {
@@ -108,23 +109,29 @@ export const templateVersionMachine = createMachine(
108109
if (!currentVersion) {
109110
throw new Error("Version is not defined")
110111
}
111-
if (!previousVersion) {
112-
throw new Error("Previous version is not defined")
113-
}
112+
const loadFilesPromises: ReturnType<typeof getTemplateVersionFiles>[] =
113+
[]
114114
const allowedExtensions = ["tf", "md"]
115115
const allowedFiles = ["Dockerfile"]
116-
const [currentFiles, previousFiles] = await Promise.all([
116+
loadFilesPromises.push(
117117
getTemplateVersionFiles(
118118
currentVersion,
119119
allowedExtensions,
120120
allowedFiles,
121121
),
122-
getTemplateVersionFiles(
123-
previousVersion,
124-
allowedExtensions,
125-
allowedFiles,
126-
),
127-
])
122+
)
123+
if (previousVersion) {
124+
loadFilesPromises.push(
125+
getTemplateVersionFiles(
126+
previousVersion,
127+
allowedExtensions,
128+
allowedFiles,
129+
),
130+
)
131+
}
132+
const [currentFiles, previousFiles] = await Promise.all(
133+
loadFilesPromises,
134+
)
128135
return {
129136
currentFiles,
130137
previousFiles,

0 commit comments

Comments
 (0)