Skip to content

Commit 7411555

Browse files
committed
fix: click callback inside SelectItem shouldn't be omitted
1 parent ab4fd88 commit 7411555

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

apps/storybook/stories/select.stories.tsx

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -678,6 +678,47 @@ export const WithinDialog = () => (
678678
</div>
679679
);
680680

681+
export const WithLink = () => (
682+
<div style={{ padding: 50 }}>
683+
<Label>
684+
Choose a number:
685+
<Select.Root defaultValue="two">
686+
<Select.Trigger className={styles.trigger}>
687+
<Select.Value />
688+
<Select.Icon />
689+
</Select.Trigger>
690+
<Select.Portal>
691+
<Select.Content className={styles.content}>
692+
<Select.Viewport className={styles.viewport}>
693+
<Select.Item className={styles.item} value="one">
694+
<Select.ItemText>One</Select.ItemText>
695+
<a href="/#" target="_blank" rel="noopener noreferrer">
696+
(link)
697+
</a>
698+
<Select.ItemIndicator className={styles.indicator}>
699+
<TickIcon />
700+
</Select.ItemIndicator>
701+
</Select.Item>
702+
<Select.Item className={styles.item} value="two">
703+
<Select.ItemText>Two</Select.ItemText>
704+
<Select.ItemIndicator className={styles.indicator}>
705+
<TickIcon />
706+
</Select.ItemIndicator>
707+
</Select.Item>
708+
<Select.Item className={styles.item} value="three">
709+
<Select.ItemText>Three</Select.ItemText>
710+
<Select.ItemIndicator className={styles.indicator}>
711+
<TickIcon />
712+
</Select.ItemIndicator>
713+
</Select.Item>
714+
</Select.Viewport>
715+
</Select.Content>
716+
</Select.Portal>
717+
</Select.Root>
718+
</Label>
719+
</div>
720+
);
721+
681722
export const WithVeryLongSelectItems = () => (
682723
<div style={{ paddingLeft: 300 }}>
683724
<Label>

packages/react/select/src/select.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1269,8 +1269,16 @@ const SelectItem = React.forwardRef<SelectItemElement, SelectItemProps>(
12691269

12701270
const handleSelect = () => {
12711271
if (!disabled) {
1272-
context.onValueChange(value);
1273-
context.onOpenChange(false);
1272+
// Polyfill for `startTransition` in React 18
1273+
React.startTransition
1274+
? React.startTransition(() => {
1275+
context.onValueChange(value);
1276+
context.onOpenChange(false);
1277+
})
1278+
: window.requestAnimationFrame(() => {
1279+
context.onValueChange(value);
1280+
context.onOpenChange(false);
1281+
});
12741282
}
12751283
};
12761284

0 commit comments

Comments
 (0)