@@ -14,7 +14,12 @@ import {
14
14
} from "@/client/diagnostics" ;
15
15
import { useDebouncedValue } from "@/client/hooks/debounce" ;
16
16
import { useStore } from "@/client/store" ;
17
- import type { ParameterWithSource , ParserLog , PreviewOutput } from "@/gen/types" ;
17
+ import type {
18
+ ParameterWithSource ,
19
+ ParserLog ,
20
+ PreviewOutput ,
21
+ WorkspaceOwner ,
22
+ } from "@/gen/types" ;
18
23
import { cn } from "@/utils/cn" ;
19
24
import ReactJsonView from "@microlink/react-json-view" ;
20
25
import * as Dialog from "@radix-ui/react-dialog" ;
@@ -31,6 +36,14 @@ import {
31
36
import { AnimatePresence , motion } from "motion/react" ;
32
37
import { type FC , useCallback , useEffect , useMemo , useState } from "react" ;
33
38
import { useSearchParams } from "react-router" ;
39
+ import {
40
+ Select ,
41
+ SelectContent ,
42
+ SelectItem ,
43
+ SelectTrigger ,
44
+ SelectValue ,
45
+ } from "@/client/components/Select" ;
46
+ import { mockUsers } from "@/owner" ;
34
47
35
48
export const Preview : FC = ( ) => {
36
49
const $wasmState = useStore ( ( state ) => state . wasmState ) ;
@@ -40,6 +53,7 @@ export const Preview: FC = () => {
40
53
const $parameters = useStore ( ( state ) => state . parameters ) ;
41
54
const $setParameters = useStore ( ( state ) => state . setParameters ) ;
42
55
const $form = useStore ( ( state ) => state . form ) ;
56
+ const $owner = useStore ( ( state ) => state . owner ) ;
43
57
const $resetForm = useStore ( ( state ) => state . resetForm ) ;
44
58
45
59
const [ debouncedCode , isDebouncing ] = useDebouncedValue ( $code , 1000 ) ;
@@ -83,16 +97,7 @@ export const Preview: FC = () => {
83
97
{
84
98
"main.tf" : debouncedCode ,
85
99
} ,
86
- {
87
- id : "8d36e355-e775-4c49-9b8d-ac042ed50440" ,
88
- name : "coder" ,
89
- full_name : "Coder" ,
90
- email : "coder@coder.com" ,
91
- ssh_public_key : "" ,
92
- groups : [ "Everyone" ] ,
93
- login_type : "password" ,
94
- rbac_roles : [ { name :"member" , org_id :"" } , { name :"organization-member" , org_id :"09942665-ba1b-4661-be9f-36bf9f738c83" } ]
95
- } ,
100
+ $owner ,
96
101
$form ,
97
102
) ;
98
103
@@ -133,7 +138,7 @@ export const Preview: FC = () => {
133
138
} ;
134
139
135
140
getOutput ( ) ;
136
- } , [ debouncedCode , $setError , $wasmState , $setParameters , $form ] ) ;
141
+ } , [ debouncedCode , $setError , $wasmState , $setParameters , $form , $owner ] ) ;
137
142
138
143
return (
139
144
< Tabs . Root
@@ -221,9 +226,16 @@ export const Preview: FC = () => {
221
226
) : null }
222
227
</ AnimatePresence >
223
228
</ div >
224
- < Button variant = "destructive" onClick = { $resetForm } >
225
- Reset form
226
- </ Button >
229
+ < div className = "flex w-full items-center justify-end gap-3" >
230
+ < UserSelect />
231
+ < Button
232
+ variant = "destructive"
233
+ onClick = { $resetForm }
234
+ className = "w-fit"
235
+ >
236
+ Reset form
237
+ </ Button >
238
+ </ div >
227
239
</ div >
228
240
}
229
241
{ $parameters . length === 0 ? (
@@ -617,3 +629,27 @@ const FormElement: FC<FormElementProps> = ({ parameter }) => {
617
629
/>
618
630
) ;
619
631
} ;
632
+
633
+ const UserSelect : FC = ( ) => {
634
+ const $setWorkspaceOwner = useStore ( ( state ) => state . setWorkspaceOwner ) ;
635
+
636
+ return (
637
+ < Select
638
+ defaultValue = "admin"
639
+ onValueChange = { ( value ) => {
640
+ const users : Record < string , WorkspaceOwner | undefined > = mockUsers ;
641
+ $setWorkspaceOwner ( users [ value ] ?? mockUsers . admin ) ;
642
+ } }
643
+ >
644
+ < SelectTrigger className = "w-fit min-w-40" >
645
+ < SelectValue />
646
+ </ SelectTrigger >
647
+ < SelectContent >
648
+ < SelectItem value = "admin" > Administrator</ SelectItem >
649
+ < SelectItem value = "developer" > Developer</ SelectItem >
650
+ < SelectItem value = "contractor" > Contractor</ SelectItem >
651
+ < SelectItem value = "eu-developer" > EU Developer</ SelectItem >
652
+ </ SelectContent >
653
+ </ Select >
654
+ ) ;
655
+ } ;
0 commit comments