Skip to content

Commit db0141a

Browse files
authored
fix: defaultOpen not working (#1187)
1 parent 11d5ca7 commit db0141a

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

src/BaseSelect/index.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -358,8 +358,11 @@ const BaseSelect = React.forwardRef<BaseSelectRef, BaseSelectProps>((props, ref)
358358
// Not trigger `open` when `notFoundContent` is empty
359359
const emptyListContent = !notFoundContent && emptyOptions;
360360

361-
const [mergedOpen, triggerOpen] = useOpen(open, onPopupVisibleChange, (nextOpen) =>
362-
disabled || emptyListContent ? false : nextOpen,
361+
const [mergedOpen, triggerOpen] = useOpen(
362+
defaultOpen || false,
363+
open,
364+
onPopupVisibleChange,
365+
(nextOpen) => (disabled || emptyListContent ? false : nextOpen),
363366
);
364367

365368
// ============================= Search =============================

src/hooks/useOpen.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export type TriggerOpenType = (
3939
* On client-side hydration, it syncs with the actual open state.
4040
*/
4141
export default function useOpen(
42+
defaultOpen: boolean,
4243
propOpen: boolean,
4344
onOpen: (nextOpen: boolean) => void,
4445
postOpen: (nextOpen: boolean) => boolean,
@@ -50,7 +51,7 @@ export default function useOpen(
5051
setRendered(true);
5152
}, []);
5253

53-
const [stateOpen, internalSetOpen] = useControlledState(false, propOpen);
54+
const [stateOpen, internalSetOpen] = useControlledState(defaultOpen, propOpen);
5455

5556
// During SSR, always return false for open state
5657
const ssrSafeOpen = rendered ? stateOpen : false;

tests/Select.test.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ describe('Select.Basic', () => {
6666
expect(onPopupVisibleChange).toHaveBeenCalledWith(false);
6767
});
6868

69+
it('should defaultOpen work', () => {
70+
const { container } = render(
71+
<Select defaultOpen>
72+
<Option value="1">One</Option>
73+
<Option value="2">Two</Option>
74+
</Select>,
75+
);
76+
expectOpen(container);
77+
});
78+
6979
describe('render', () => {
7080
function genSelect(props?: Partial<SelectProps>) {
7181
return (

0 commit comments

Comments
 (0)