Skip to content

Commit 9732c4b

Browse files
fix: select element form state not persistent
1 parent 44c9e7c commit 9732c4b

File tree

5 files changed

+59
-117
lines changed

5 files changed

+59
-117
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
"@radix-ui/react-popper": "^1.1.3",
3232
"@radix-ui/react-progress": "^1.0.3",
3333
"@radix-ui/react-scroll-area": "^1.0.5",
34-
"@radix-ui/react-select": "^1.2.2",
34+
"@radix-ui/react-select": "^2.0.0",
3535
"@radix-ui/react-separator": "^1.0.3",
3636
"@radix-ui/react-slider": "^1.1.2",
3737
"@radix-ui/react-slot": "^1.0.2",

pnpm-lock.yaml

Lines changed: 8 additions & 107 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/components/forms/bean-information-form/form.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,13 @@ export default function BeanInformationForm() {
111111
{fields.map((field, index) => (
112112
<>
113113
<VarietyInformationFieldset<beanInformationFormSchema>
114-
key={field.id} field={field}
114+
key={field.id}
115+
field={field}
115116
index={index}
116117
form={form}
117118
remove={remove}
118119
/>
119-
{index !== fields.length - 1 && <Separator />}
120+
{index !== fields.length - 1 && <Separator key={`sep-${field.id}`} />}
120121
</>
121122
))}
122123
{blend === "BLEND" && (<Button onClick={(event) => {

src/components/forms/inputs/select-input.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export default function SelectInput<TFieldValues extends FieldValues = FieldValu
2020
render={({ field }) => (
2121
<FormItem>
2222
<FormLabel>{props.label}</FormLabel>
23-
<Select onValueChange={field.onChange} defaultValue={props.default}>
23+
<Select {...field} onValueChange={field.onChange} defaultValue={props.default}>
2424
<FormControl>
2525
<SelectTrigger className={"capitalize text-base"}>
2626
<SelectValue className={"capitalize text-base"} placeholder="Select an option" />

src/components/ui/select.tsx

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
"use client";
22

3-
import * as SelectPrimitive from "@radix-ui/react-select";
4-
import { Check, ChevronDown } from "lucide-react";
53
import * as React from "react";
4+
import * as SelectPrimitive from "@radix-ui/react-select";
5+
import { Check, ChevronDown, ChevronUp } from "lucide-react";
66

77
import { cn } from "@/lib/utils";
88

@@ -19,7 +19,7 @@ const SelectTrigger = React.forwardRef<
1919
<SelectPrimitive.Trigger
2020
ref={ref}
2121
className={cn(
22-
"flex h-10 w-full items-center justify-between rounded-md border border-input bg-transparent px-3 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
22+
"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
2323
className
2424
)}
2525
{...props}
@@ -32,6 +32,41 @@ const SelectTrigger = React.forwardRef<
3232
));
3333
SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
3434

35+
const SelectScrollUpButton = React.forwardRef<
36+
React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,
37+
React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>
38+
>(({ className, ...props }, ref) => (
39+
<SelectPrimitive.ScrollUpButton
40+
ref={ref}
41+
className={cn(
42+
"flex cursor-default items-center justify-center py-1",
43+
className
44+
)}
45+
{...props}
46+
>
47+
<ChevronUp className="h-4 w-4" />
48+
</SelectPrimitive.ScrollUpButton>
49+
));
50+
SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
51+
52+
const SelectScrollDownButton = React.forwardRef<
53+
React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,
54+
React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>
55+
>(({ className, ...props }, ref) => (
56+
<SelectPrimitive.ScrollDownButton
57+
ref={ref}
58+
className={cn(
59+
"flex cursor-default items-center justify-center py-1",
60+
className
61+
)}
62+
{...props}
63+
>
64+
<ChevronDown className="h-4 w-4" />
65+
</SelectPrimitive.ScrollDownButton>
66+
));
67+
SelectScrollDownButton.displayName =
68+
SelectPrimitive.ScrollDownButton.displayName;
69+
3570
const SelectContent = React.forwardRef<
3671
React.ElementRef<typeof SelectPrimitive.Content>,
3772
React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>
@@ -40,13 +75,15 @@ const SelectContent = React.forwardRef<
4075
<SelectPrimitive.Content
4176
ref={ref}
4277
className={cn(
43-
"relative z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md animate-in fade-in-80",
44-
position === "popper" && "translate-y-1",
78+
"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
79+
position === "popper" &&
80+
"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
4581
className
4682
)}
4783
position={position}
4884
{...props}
4985
>
86+
<SelectScrollUpButton />
5087
<SelectPrimitive.Viewport
5188
className={cn(
5289
"p-1",
@@ -56,6 +93,7 @@ const SelectContent = React.forwardRef<
5693
>
5794
{children}
5895
</SelectPrimitive.Viewport>
96+
<SelectScrollDownButton />
5997
</SelectPrimitive.Content>
6098
</SelectPrimitive.Portal>
6199
));
@@ -80,7 +118,7 @@ const SelectItem = React.forwardRef<
80118
<SelectPrimitive.Item
81119
ref={ref}
82120
className={cn(
83-
"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-base outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
121+
"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
84122
className
85123
)}
86124
{...props}
@@ -117,4 +155,6 @@ export {
117155
SelectLabel,
118156
SelectItem,
119157
SelectSeparator,
158+
SelectScrollUpButton,
159+
SelectScrollDownButton,
120160
};

0 commit comments

Comments
 (0)