Skip to content

Commit ad109ab

Browse files
committed
Add value prop to SelectOption
1 parent b7eb3d9 commit ad109ab

File tree

2 files changed

+17
-16
lines changed

2 files changed

+17
-16
lines changed

packages/components/src/components/Select/Select.stories.tsx

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,10 @@ export const Default: Story = {
3636
<SelectDivider />
3737
<SelectOption>Option 3</SelectOption>
3838
<SelectOption disabled>Option 4</SelectOption>
39-
<Select>
39+
<Select type="radio">
4040
<SelectTrigger asChild>
4141
<SelectOption>
42-
<Flex
43-
alignItems="center"
44-
className={css({ w: '100%' })}
45-
justifyContent="space-between"
46-
w="100%"
47-
>
42+
<Flex alignItems="center" justifyContent="space-between" w="100%">
4843
Option 5<IconArrow />
4944
</Flex>
5045
</SelectOption>
@@ -56,8 +51,8 @@ export const Default: Story = {
5651
transform: 'translateX(100%)',
5752
})}
5853
>
59-
<SelectOption>Option 6</SelectOption>
60-
<SelectOption>Option 7</SelectOption>
54+
<SelectOption value="Option 6">Option 6</SelectOption>
55+
<SelectOption value="Option 7">Option 7</SelectOption>
6156
</SelectContainer>
6257
</Select>
6358
</SelectContainer>

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

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -181,17 +181,20 @@ export function SelectContainer({ children, ...props }: ComponentProps<'div'>) {
181181
)
182182
}
183183

184-
interface SelectOptionProps extends ComponentProps<'div'> {
184+
interface SelectOptionProps extends Omit<ComponentProps<'div'>, 'onClick'> {
185+
onClick?: (value?: string, e?: React.MouseEvent<HTMLDivElement>) => void
185186
disabled?: boolean
187+
value?: string
186188
}
187189

188190
export function SelectOption({
189191
disabled,
190192
onClick,
191193
children,
194+
value,
192195
...props
193196
}: SelectOptionProps) {
194-
const { setOpen, setValue, value, type } = useSelect()
197+
const { setOpen, setValue, value: selectedValue, type } = useSelect()
195198

196199
const handleClose = () => {
197200
if (type === 'checkbox') return
@@ -200,16 +203,19 @@ export function SelectOption({
200203

201204
const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {
202205
if (onClick) {
203-
onClick(e)
206+
onClick(value, e)
204207
return
205208
}
206-
setValue(children as string)
209+
if (typeof value === 'string') setValue(value)
207210
handleClose()
208211
}
209212

210-
const isSelected = Array.isArray(value)
211-
? value.includes(children as string)
212-
: value === children
213+
const isSelected = {
214+
default: false,
215+
radio: selectedValue === value,
216+
checkbox:
217+
Array.isArray(selectedValue) && value && selectedValue.includes(value),
218+
}[type]
213219

214220
const changesOnHover = !disabled && !(type === 'radio' && isSelected)
215221

0 commit comments

Comments
 (0)