@@ -3,7 +3,8 @@ import AlertTitle from "@mui/material/AlertTitle";
3
3
import Autocomplete from "@mui/material/Autocomplete" ;
4
4
import CircularProgress from "@mui/material/CircularProgress" ;
5
5
import TextField from "@mui/material/TextField" ;
6
- import type { Template , TemplateVersion } from "api/typesGenerated" ;
6
+ import { templateVersions } from "api/queries/templates" ;
7
+ import type { TemplateVersion , Workspace } from "api/typesGenerated" ;
7
8
import { Alert } from "components/Alert/Alert" ;
8
9
import { Avatar } from "components/Avatar/Avatar" ;
9
10
import { AvatarData } from "components/Avatar/AvatarData" ;
@@ -15,41 +16,38 @@ import { Pill } from "components/Pill/Pill";
15
16
import { Stack } from "components/Stack/Stack" ;
16
17
import { InfoIcon } from "lucide-react" ;
17
18
import { TemplateUpdateMessage } from "modules/templates/TemplateUpdateMessage" ;
18
- import { type FC , useRef , useState } from "react" ;
19
+ import { type FC , useState } from "react" ;
20
+ import { useQuery } from "react-query" ;
19
21
import { createDayString } from "utils/createDayString" ;
20
22
21
- export type ChangeVersionDialogProps = DialogProps & {
22
- template : Template | undefined ;
23
- templateVersions : TemplateVersion [ ] | undefined ;
24
- defaultTemplateVersion : TemplateVersion | undefined ;
23
+ export type ChangeWorkspaceVersionDialogProps = DialogProps & {
24
+ workspace : Workspace ;
25
25
onClose : ( ) => void ;
26
- onConfirm : ( templateVersion : TemplateVersion ) => void ;
26
+ onConfirm : ( version : TemplateVersion ) => void ;
27
27
} ;
28
28
29
- export const ChangeVersionDialog : FC < ChangeVersionDialogProps > = ( {
30
- onConfirm,
31
- onClose,
32
- template,
33
- templateVersions,
34
- defaultTemplateVersion,
35
- ...dialogProps
36
- } ) => {
29
+ export const ChangeWorkspaceVersionDialog : FC <
30
+ ChangeWorkspaceVersionDialogProps
31
+ > = ( { workspace, onClose, onConfirm, ...dialogProps } ) => {
32
+ const { data : versions } = useQuery ( {
33
+ ...templateVersions ( workspace . template_id ) ,
34
+ select : ( data ) => [ ...data ] . reverse ( ) ,
35
+ } ) ;
37
36
const [ isAutocompleteOpen , setIsAutocompleteOpen ] = useState ( false ) ;
38
- const selectedTemplateVersion = useRef < TemplateVersion | undefined > (
39
- defaultTemplateVersion ,
37
+ const currentVersion = versions ?. find (
38
+ ( v ) => workspace . latest_build . template_version_id === v . id ,
40
39
) ;
41
- const version = selectedTemplateVersion . current ;
42
- const validTemplateVersions = templateVersions ?. filter ( ( version ) => {
43
- return version . job . status === "succeeded" ;
44
- } ) ;
40
+ const [ newVersion , setNewVersion ] = useState < TemplateVersion > ( ) ;
41
+ const validVersions = versions ?. filter ( ( v ) => v . job . status === "succeeded" ) ;
42
+ const selectedVersion = newVersion || currentVersion ;
45
43
46
44
return (
47
45
< ConfirmDialog
48
46
{ ...dialogProps }
49
47
onClose = { onClose }
50
48
onConfirm = { ( ) => {
51
- if ( selectedTemplateVersion . current ) {
52
- onConfirm ( selectedTemplateVersion . current ) ;
49
+ if ( newVersion ) {
50
+ onConfirm ( newVersion ) ;
53
51
}
54
52
} }
55
53
hideCancel = { false }
@@ -60,18 +58,17 @@ export const ChangeVersionDialog: FC<ChangeVersionDialogProps> = ({
60
58
description = {
61
59
< Stack >
62
60
< p > You are about to change the version of this workspace.</ p >
63
- { validTemplateVersions ? (
61
+ { validVersions ? (
64
62
< >
65
63
< FormFields >
66
64
< Autocomplete
67
65
disableClearable
68
- options = { validTemplateVersions }
69
- defaultValue = { defaultTemplateVersion }
66
+ options = { validVersions }
67
+ defaultValue = { selectedVersion }
70
68
id = "template-version-autocomplete"
71
69
open = { isAutocompleteOpen }
72
70
onChange = { ( _ , newTemplateVersion ) => {
73
- selectedTemplateVersion . current =
74
- newTemplateVersion ?? undefined ;
71
+ setNewVersion ( newTemplateVersion ) ;
75
72
} }
76
73
onOpen = { ( ) => {
77
74
setIsAutocompleteOpen ( true ) ;
@@ -112,9 +109,8 @@ export const ChangeVersionDialog: FC<ChangeVersionDialogProps> = ({
112
109
/>
113
110
) }
114
111
</ Stack >
115
- { template ?. active_version_id === option . id && (
116
- < Pill type = "success" > Active</ Pill >
117
- ) }
112
+ { workspace . template_active_version_id ===
113
+ option . id && < Pill type = "success" > Active</ Pill > }
118
114
</ Stack >
119
115
}
120
116
subtitle = { createDayString ( option . created_at ) }
@@ -131,9 +127,7 @@ export const ChangeVersionDialog: FC<ChangeVersionDialogProps> = ({
131
127
...params . InputProps ,
132
128
endAdornment : (
133
129
< >
134
- { ! templateVersions ? (
135
- < CircularProgress size = { 16 } />
136
- ) : null }
130
+ { ! versions && < CircularProgress size = { 16 } /> }
137
131
{ params . InputProps . endAdornment }
138
132
</ >
139
133
) ,
@@ -144,16 +138,16 @@ export const ChangeVersionDialog: FC<ChangeVersionDialogProps> = ({
144
138
) }
145
139
/>
146
140
</ FormFields >
147
- { version && (
141
+ { selectedVersion && (
148
142
< >
149
- { version . message && (
143
+ { selectedVersion . message && (
150
144
< TemplateUpdateMessage >
151
- { version . message }
145
+ { selectedVersion . message }
152
146
</ TemplateUpdateMessage >
153
147
) }
154
148
< Alert severity = "info" >
155
149
< AlertTitle >
156
- Published by { version . created_by . username }
150
+ Published by { selectedVersion . created_by . username }
157
151
</ AlertTitle >
158
152
</ Alert >
159
153
</ >
0 commit comments