1
1
import { BottomActionBar , BottomActionBarError , Form } from "@/components"
2
- import { ProWorkspaceInstance } from "@/contexts"
2
+ import { ProWorkspaceInstance , useProjectClusters } from "@/contexts"
3
3
import { Code , Laptop , Parameters } from "@/icons"
4
4
import {
5
5
Annotations ,
@@ -33,6 +33,7 @@ import { OptionsInput } from "./OptionsInput"
33
33
import { SourceInput } from "./SourceInput"
34
34
import { FieldName , TFormValues } from "./types"
35
35
import { useTemplates } from "@/contexts"
36
+ import { RunnerInput } from "@/views/Pro/CreateWorkspace/RunnerInput"
36
37
37
38
type TCreateWorkspaceFormProps = Readonly < {
38
39
instance ?: ProWorkspaceInstance
@@ -52,9 +53,18 @@ export function CreateWorkspaceForm({
52
53
const containerRef = useRef < HTMLDivElement > ( null )
53
54
const { ides, defaultIDE } = useIDEs ( )
54
55
const { data : templates , isLoading : isTemplatesLoading } = useTemplates ( )
56
+
57
+ const { data : projectClusterData , isLoading : projectClusterDataLoading } = useProjectClusters ( )
58
+
55
59
const form = useForm < TFormValues > ( { mode : "onChange" , defaultValues } )
56
- const { sourceError, defaultIDEError, nameError, devcontainerJSONError, optionsError } =
57
- useFormErrors ( Object . values ( FieldName ) , form . formState )
60
+ const {
61
+ sourceError,
62
+ defaultIDEError,
63
+ nameError,
64
+ devcontainerJSONError,
65
+ optionsError,
66
+ runnerError,
67
+ } = useFormErrors ( Object . values ( FieldName ) , form . formState )
58
68
59
69
useEffect ( ( ) => {
60
70
if ( ! form . getFieldState ( FieldName . DEFAULT_IDE ) . isDirty && defaultIDE && defaultIDE . name ) {
@@ -108,6 +118,26 @@ export function CreateWorkspaceForm({
108
118
</ CreateWorkspaceRow >
109
119
</ FormControl >
110
120
121
+ < FormControl isDisabled = { ! ! instance } isRequired isInvalid = { exists ( runnerError ) } >
122
+ < CreateWorkspaceRow
123
+ label = {
124
+ < FormLabel >
125
+ < Code boxSize = { 5 } mr = "1" />
126
+ Runner
127
+ </ FormLabel >
128
+ } >
129
+ { projectClusterDataLoading ? (
130
+ < Spinner />
131
+ ) : (
132
+ < RunnerInput runners = { projectClusterData ?. runners } />
133
+ ) }
134
+
135
+ { exists ( runnerError ) && (
136
+ < FormErrorMessage > { runnerError . message ?? "Error" } </ FormErrorMessage >
137
+ ) }
138
+ </ CreateWorkspaceRow >
139
+ </ FormControl >
140
+
111
141
< FormControl isInvalid = { exists ( defaultIDEError ) } >
112
142
< CreateWorkspaceRow
113
143
label = {
@@ -226,6 +256,7 @@ function getDefaultValues(
226
256
}
227
257
const defaultValues : DefaultValues < TFormValues > = {
228
258
defaultIDE : instance . status ?. ide ?. name ?? "none" ,
259
+ runner : instance . spec ?. runnerRef ?. runner ,
229
260
}
230
261
231
262
// source
0 commit comments