Skip to content

Commit b7eb3d9

Browse files
committed
Add value prop to Select context
1 parent 8759048 commit b7eb3d9

File tree

1 file changed

+21
-5
lines changed
  • packages/components/src/components/Select

1 file changed

+21
-5
lines changed

packages/components/src/components/Select/index.tsx

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ type SelectType = 'default' | 'radio' | 'checkbox'
2222
type SelectValue<T extends SelectType> = T extends 'radio' ? string : string[]
2323

2424
interface SelectProps extends ComponentProps<'div'> {
25+
defaultValue?: SelectValue<SelectType>
26+
value?: SelectValue<SelectType>
27+
onValueChange?: (value: SelectValue<SelectType>) => void
28+
defaultOpen?: boolean
2529
open?: boolean
2630
onOpenChange?: (open: boolean) => void
2731
children: React.ReactNode
@@ -47,14 +51,18 @@ export const useSelect = () => {
4751
export function Select({
4852
type = 'default',
4953
children,
54+
defaultValue,
55+
value: valueProp,
56+
onValueChange,
57+
defaultOpen,
5058
open: openProp,
5159
onOpenChange,
5260
...props
5361
}: SelectProps) {
5462
const ref = useRef<HTMLDivElement>(null)
55-
const [open, setOpen] = useState(openProp ?? false)
63+
const [open, setOpen] = useState(defaultOpen ?? false)
5664
const [value, setValue] = useState<SelectValue<typeof type>>(
57-
type === 'checkbox' ? [] : '',
65+
defaultValue ?? (type === 'checkbox' ? [] : ''),
5866
)
5967

6068
useEffect(() => {
@@ -68,11 +76,19 @@ export function Select({
6876
}, [open, setOpen])
6977

7078
const handleOpenChange = (open: boolean) => {
79+
if (onOpenChange) {
80+
onOpenChange(open)
81+
return
82+
}
7183
setOpen(open)
72-
onOpenChange?.(open)
7384
}
7485

7586
const handleValueChange = (nextValue: string) => {
87+
if (onValueChange) {
88+
onValueChange(nextValue)
89+
return
90+
}
91+
7692
if (type === 'default') return
7793
if (type === 'radio') {
7894
setValue(nextValue)
@@ -88,9 +104,9 @@ export function Select({
88104
return (
89105
<SelectContext.Provider
90106
value={{
91-
open,
107+
open: openProp ?? open,
92108
setOpen: handleOpenChange,
93-
value,
109+
value: valueProp ?? value,
94110
setValue: handleValueChange,
95111
type,
96112
}}

0 commit comments

Comments
 (0)