@@ -14,7 +14,12 @@ import {
1414} from "@/client/diagnostics" ;
1515import { useDebouncedValue } from "@/client/hooks/debounce" ;
1616import { 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" ;
1823import { cn } from "@/utils/cn" ;
1924import ReactJsonView from "@microlink/react-json-view" ;
2025import * as Dialog from "@radix-ui/react-dialog" ;
@@ -31,6 +36,14 @@ import {
3136import { AnimatePresence , motion } from "motion/react" ;
3237import { type FC , useCallback , useEffect , useMemo , useState } from "react" ;
3338import { 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" ;
3447
3548export const Preview : FC = ( ) => {
3649const $wasmState = useStore ( ( state ) => state . wasmState ) ;
@@ -40,6 +53,7 @@ export const Preview: FC = () => {
4053const $parameters = useStore ( ( state ) => state . parameters ) ;
4154const $setParameters = useStore ( ( state ) => state . setParameters ) ;
4255const $form = useStore ( ( state ) => state . form ) ;
56+ const $owner = useStore ( ( state ) => state . owner ) ;
4357const $resetForm = useStore ( ( state ) => state . resetForm ) ;
4458
4559const [ debouncedCode , isDebouncing ] = useDebouncedValue ( $code , 1000 ) ;
@@ -83,16 +97,7 @@ export const Preview: FC = () => {
8397{
8498"main.tf" : debouncedCode ,
8599} ,
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 ,
96101$form ,
97102) ;
98103
@@ -133,7 +138,7 @@ export const Preview: FC = () => {
133138} ;
134139
135140getOutput ( ) ;
136- } , [ debouncedCode , $setError , $wasmState , $setParameters , $form ] ) ;
141+ } , [ debouncedCode , $setError , $wasmState , $setParameters , $form , $owner ] ) ;
137142
138143return (
139144< Tabs . Root
@@ -221,9 +226,16 @@ export const Preview: FC = () => {
221226) : null }
222227</ AnimatePresence >
223228</ 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 >
227239</ div >
228240}
229241{ $parameters . length === 0 ? (
@@ -617,3 +629,27 @@ const FormElement: FC<FormElementProps> = ({ parameter }) => {
617629/>
618630) ;
619631} ;
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