Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7bf286f

Browse files
committed
Load diff files
1 parent 85a6d14 commit 7bf286f

File tree

3 files changed

+73
-27
lines changed

3 files changed

+73
-27
lines changed

site/src/api/api.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,16 @@ export const getTemplateVersionByName = async (
231231
return response.data
232232
}
233233

234+
export const getPreviousTemplateVersionByName = async (
235+
organizationId: string,
236+
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
242+
}
243+
234244
export const updateTemplateMeta = async (
235245
templateId: string,
236246
data: TypesGen.UpdateTemplateMeta,

site/src/pages/TemplateVersionPage/TemplateVersionPageView.tsx

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,24 @@ export const TemplateVersionPageView: FC<TemplateVersionPageViewProps> = ({
3737
templateName,
3838
}) => {
3939
const styles = useStyles()
40-
const { files, error, version } = context
40+
const { currentFiles, error, currentVersion, diffByFile } = context
4141
const { t } = useTranslation("templateVersionPage")
4242

43+
console.log(diffByFile)
44+
console.log(currentFiles)
45+
4346
return (
4447
<Margins>
4548
<PageHeader>
4649
<PageHeaderCaption>{t("header.caption")}</PageHeaderCaption>
4750
<PageHeaderTitle>{versionName}</PageHeaderTitle>
4851
</PageHeader>
4952

50-
{!files && !error && <Loader />}
53+
{!currentFiles && !error && <Loader />}
5154

5255
<Stack spacing={4}>
5356
{Boolean(error) && <AlertBanner severity="error" error={error} />}
54-
{version && files && (
57+
{currentVersion && currentFiles && (
5558
<>
5659
<Stats>
5760
<StatsItem
@@ -62,17 +65,17 @@ export const TemplateVersionPageView: FC<TemplateVersionPageViewProps> = ({
6265
/>
6366
<StatsItem
6467
label={t("stats.createdBy")}
65-
value={version.created_by.username}
68+
value={currentVersion.created_by.username}
6669
/>
6770
<StatsItem
6871
label={t("stats.created")}
69-
value={createDayString(version.created_at)}
72+
value={createDayString(currentVersion.created_at)}
7073
/>
7174
</Stats>
7275

7376
<div className={styles.files}>
7477
<div className={styles.tabs}>
75-
{Object.keys(files).map((filename, index) => {
78+
{Object.keys(currentFiles).map((filename, index) => {
7679
const tabValue = index.toString()
7780

7881
return (
@@ -101,12 +104,12 @@ export const TemplateVersionPageView: FC<TemplateVersionPageViewProps> = ({
101104
showLineNumbers
102105
className={styles.prism}
103106
language={
104-
Object.keys(files)[Number(tab.value)].endsWith("tf")
107+
Object.keys(currentFiles)[Number(tab.value)].endsWith("tf")
105108
? "hcl"
106109
: "markdown"
107110
}
108111
>
109-
{Object.values(files)[Number(tab.value)]}
112+
{Object.values(currentFiles)[Number(tab.value)]}
110113
</SyntaxHighlighter>
111114
</div>
112115
</>

site/src/xServices/templateVersion/templateVersionXService.ts

Lines changed: 52 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
1-
import { getTemplateVersionByName } from "api/api"
1+
import {
2+
getPreviousTemplateVersionByName,
3+
getTemplateVersionByName,
4+
} from "api/api"
25
import { TemplateVersion } from "api/typesGenerated"
36
import {
47
getTemplateVersionFiles,
58
TemplateVersionFiles,
69
} from "util/templateVersion"
710
import { assign, createMachine } from "xstate"
8-
911
export interface TemplateVersionMachineContext {
1012
orgId: string
1113
versionName: string
12-
version?: TemplateVersion
13-
files?: TemplateVersionFiles
14+
currentVersion?: TemplateVersion
15+
currentFiles?: TemplateVersionFiles
1416
error?: Error | unknown
17+
// Get file diffs
18+
previousVersion?: TemplateVersion
19+
previousFiles?: TemplateVersionFiles
1520
}
1621

1722
export const templateVersionMachine = createMachine(
@@ -21,23 +26,29 @@ export const templateVersionMachine = createMachine(
2126
schema: {
2227
context: {} as TemplateVersionMachineContext,
2328
services: {} as {
24-
loadVersion: {
25-
data: TemplateVersion
29+
loadVersions: {
30+
data: {
31+
currentVersion: TemplateVersion
32+
previousVersion: TemplateVersion
33+
}
2634
}
2735
loadFiles: {
28-
data: TemplateVersionFiles
36+
data: {
37+
currentFiles: TemplateVersionFiles
38+
previousFiles: TemplateVersionFiles
39+
}
2940
}
3041
},
3142
},
3243
tsTypes: {} as import("./templateVersionXService.typegen").Typegen0,
33-
initial: "loadingVersion",
44+
initial: "loadingVersions",
3445
states: {
35-
loadingVersion: {
46+
loadingVersions: {
3647
invoke: {
37-
src: "loadVersion",
48+
src: "loadVersions",
3849
onDone: {
3950
target: "loadingFiles",
40-
actions: ["assignVersion"],
51+
actions: ["assignVersions"],
4152
},
4253
onError: {
4354
target: "done.error",
@@ -71,21 +82,43 @@ export const templateVersionMachine = createMachine(
7182
assignError: assign({
7283
error: (_, { data }) => data,
7384
}),
74-
assignVersion: assign({
75-
version: (_, { data }) => data,
85+
assignVersions: assign({
86+
currentVersion: (_, { data }) => data.currentVersion,
87+
previousVersion: (_, { data }) => data.previousVersion,
7688
}),
7789
assignFiles: assign({
78-
files: (_, { data }) => data,
90+
currentFiles: (_, { data }) => data.currentFiles,
91+
previousFiles: (_, { data }) => data.previousFiles,
7992
}),
8093
},
8194
services: {
82-
loadVersion: ({ orgId, versionName }) =>
83-
getTemplateVersionByName(orgId, versionName),
84-
loadFiles: async ({ version }) => {
85-
if (!version) {
95+
loadVersions: async ({ orgId, versionName }) => {
96+
const [currentVersion, previousVersion] = await Promise.all([
97+
getTemplateVersionByName(orgId, versionName),
98+
getPreviousTemplateVersionByName(orgId, versionName),
99+
])
100+
101+
return {
102+
currentVersion,
103+
previousVersion,
104+
}
105+
},
106+
loadFiles: async ({ currentVersion, previousVersion }) => {
107+
if (!currentVersion) {
86108
throw new Error("Version is not defined")
87109
}
88-
return getTemplateVersionFiles(version, ["tf", "md"])
110+
if (!previousVersion) {
111+
throw new Error("Previous version is not defined")
112+
}
113+
const allowedExtensions = ["tf", "md"]
114+
const [currentFiles, previousFiles] = await Promise.all([
115+
getTemplateVersionFiles(currentVersion, allowedExtensions),
116+
getTemplateVersionFiles(previousVersion, allowedExtensions),
117+
])
118+
return {
119+
currentFiles,
120+
previousFiles,
121+
}
89122
},
90123
},
91124
},

0 commit comments

Comments
 (0)