1
+ import ReactJsonView from "@microlink/react-json-view" ;
2
+ import * as Dialog from "@radix-ui/react-dialog" ;
3
+ import {
4
+ ActivityIcon ,
5
+ BugIcon ,
6
+ DownloadIcon ,
7
+ ExternalLinkIcon ,
8
+ LoaderIcon ,
9
+ PlayIcon ,
10
+ ScrollTextIcon ,
11
+ SearchCodeIcon ,
12
+ XIcon ,
13
+ } from "lucide-react" ;
14
+ import { AnimatePresence , motion } from "motion/react" ;
15
+ import React , {
16
+ type FC ,
17
+ type PropsWithChildren ,
18
+ useMemo ,
19
+ useState ,
20
+ } from "react" ;
21
+ import { useSearchParams } from "react-router" ;
1
22
import { Button } from "@/client/components/Button" ;
2
23
import {
3
24
DynamicParameter ,
@@ -17,33 +38,15 @@ import {
17
38
} from "@/client/components/Select" ;
18
39
import * as Tabs from "@/client/components/Tabs" ;
19
40
import { useTheme } from "@/client/contexts/theme" ;
20
- import { outputToDiagnostics , type Diagnostic } from "@/client/diagnostics" ;
41
+ import { type Diagnostic , outputToDiagnostics } from "@/client/diagnostics" ;
21
42
import type {
22
43
ParameterWithSource ,
23
44
ParserLog ,
24
45
PreviewOutput ,
25
46
WorkspaceOwner ,
26
47
} from "@/gen/types" ;
27
- import { mockUsers } from "@/owner" ;
28
48
import { cn } from "@/utils/cn" ;
29
49
import type { WasmLoadState } from "@/utils/wasm" ;
30
- import ReactJsonView from "@microlink/react-json-view" ;
31
- import * as Dialog from "@radix-ui/react-dialog" ;
32
- import {
33
- ActivityIcon ,
34
- BugIcon ,
35
- DownloadIcon ,
36
- ExternalLinkIcon ,
37
- LoaderIcon ,
38
- PlayIcon ,
39
- ScrollTextIcon ,
40
- SearchCodeIcon ,
41
- XIcon ,
42
- } from "lucide-react" ;
43
- import { AnimatePresence , motion } from "motion/react" ;
44
- import React from "react" ;
45
- import { type FC , type PropsWithChildren , useMemo , useState } from "react" ;
46
- import { useSearchParams } from "react-router" ;
47
50
48
51
type PreviewProps = {
49
52
wasmLoadState : WasmLoadState ;
@@ -56,6 +59,8 @@ type PreviewProps = {
56
59
> ;
57
60
parameters : ParameterWithSource [ ] ;
58
61
onReset : ( ) => void ;
62
+ selectedOwner : WorkspaceOwner ;
63
+ owners : WorkspaceOwner [ ] ;
59
64
setOwner : ( owner : WorkspaceOwner ) => void ;
60
65
} ;
61
66
@@ -67,6 +72,8 @@ export const Preview: FC<PreviewProps> = ({
67
72
setParameterValues,
68
73
parameters,
69
74
onReset,
75
+ selectedOwner,
76
+ owners,
70
77
setOwner,
71
78
} ) => {
72
79
const [ params ] = useSearchParams ( ) ;
@@ -183,7 +190,11 @@ export const Preview: FC<PreviewProps> = ({
183
190
) : null }
184
191
</ AnimatePresence >
185
192
</ div >
186
- < UserSelect setOwner = { setOwner } />
193
+ < UserSelect
194
+ setOwner = { setOwner }
195
+ owners = { owners }
196
+ selectedOwner = { selectedOwner }
197
+ />
187
198
</ div >
188
199
}
189
200
{ parameters . length === 0 ? (
@@ -551,26 +562,43 @@ const FormElement: FC<FormElementProps> = React.memo(
551
562
FormElement . displayName = "FormElement" ;
552
563
553
564
type UserSelectProps = {
565
+ selectedOwner : WorkspaceOwner ;
566
+ owners : WorkspaceOwner [ ] ;
554
567
setOwner : ( owner : WorkspaceOwner ) => void ;
555
568
} ;
556
- const UserSelect : FC < UserSelectProps > = ( { setOwner } ) => {
569
+ const UserSelect : FC < UserSelectProps > = ( {
570
+ selectedOwner,
571
+ owners,
572
+ setOwner,
573
+ } ) => {
574
+ const selectedMissing = ! owners . some (
575
+ ( owner ) => selectedOwner . id === owner . id ,
576
+ ) ;
577
+
557
578
return (
558
579
< Select
559
- defaultValue = "admin"
580
+ value = { selectedOwner . id }
560
581
onValueChange = { ( value ) => {
561
- const users : Record < string , WorkspaceOwner | undefined > = mockUsers ;
562
- setOwner ( users [ value ] ?? mockUsers . admin ) ;
582
+ const owner = owners . find ( ( owner ) => owner . id === value ) ;
583
+ if ( owner ) {
584
+ setOwner ( owner ) ;
585
+ }
563
586
} }
564
587
>
565
588
< SelectTrigger className = "w-fit min-w-40" >
566
589
< SelectValue />
567
590
</ SelectTrigger >
568
591
< SelectContent >
569
- < SelectItem value = "admin" > Administrator</ SelectItem >
570
- < SelectItem value = "developer" > Developer</ SelectItem >
571
- < SelectItem value = "contractor" > Contractor</ SelectItem >
572
- < SelectItem value = "eu-developer" > EU Developer</ SelectItem >
573
- < SelectItem value = "sales" > Sales</ SelectItem >
592
+ { selectedMissing ? (
593
+ < SelectItem value = { selectedOwner . id } >
594
+ { selectedOwner . full_name || selectedOwner . name }
595
+ </ SelectItem >
596
+ ) : null }
597
+ { owners . map ( ( owner , index ) => (
598
+ < SelectItem value = { owner . id } key = { index } >
599
+ { owner . full_name || owner . name }
600
+ </ SelectItem >
601
+ ) ) }
574
602
</ SelectContent >
575
603
</ Select >
576
604
) ;
@@ -690,6 +718,7 @@ const ViewOutput: FC<ViewOutputProps> = ({ parameters }) => {
690
718
return true ;
691
719
}
692
720
721
+ // biome-ignore lint/correctness/useHookAtTopLevel: It's not a hook
693
722
const schema = useValidationSchemaForDynamicParameters ( [ p ] ) ;
694
723
schema . validateSync ( [ { name : p . name , value : p . value . value } ] ) ;
695
724
0 commit comments