From 7adb7b567a84bb07859f3355c7a6ad26610e0697 Mon Sep 17 00:00:00 2001 From: Sasha Khamkov Date: Sat, 22 Aug 2026 22:39:33 +0300 Subject: [PATCH 1/8] fix(select): merge prop defaults in-component for React 19 --- .../.storybook/stories/Select.stories.js | 4 ++-- .../__tests__/index.spec.js | 20 +++++++++++++++++++ packages/react-dropdown-select/src/index.tsx | 20 ++++++++++++++----- 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/packages/react-dropdown-select/.storybook/stories/Select.stories.js b/packages/react-dropdown-select/.storybook/stories/Select.stories.js index 58a91fb4..ad4ab77f 100644 --- a/packages/react-dropdown-select/.storybook/stories/Select.stories.js +++ b/packages/react-dropdown-select/.storybook/stories/Select.stories.js @@ -1,10 +1,10 @@ import React from 'react'; -import { Select } from '../../src'; +import { Select, defaultProps as selectDefaultProps } from '../../src'; import { optionsBase } from './options'; const options = optionsBase(10); const baseArgs = { - ...Select.defaultProps, + ...selectDefaultProps, options, multi: false, onChange: (values) => console.log(values), diff --git a/packages/react-dropdown-select/__tests__/index.spec.js b/packages/react-dropdown-select/__tests__/index.spec.js index cf924d0d..aafd1c68 100644 --- a/packages/react-dropdown-select/__tests__/index.spec.js +++ b/packages/react-dropdown-select/__tests__/index.spec.js @@ -78,4 +78,24 @@ describe(' applies defaults without defaultProps (React 19)', () => { + const component = selectWithProps( falls back to default for explicitly undefined prop (React 19)', () => { + const component = selectWithProps( renders correctly', () => { - const tree = renderer.create().toJSON(); + let instance; + renderer.act(() => { + instance = renderer.create(); + }); - expect(tree).toMatchSnapshot(); + expect(instance.toJSON()).toMatchSnapshot(); }); it(' is disabled', () => { - const tree = renderer.create().toJSON(); + let instance; + renderer.act(() => { + instance = renderer.create(); + }); - expect(tree).toMatchSnapshot(); + expect(instance.toJSON()).toMatchSnapshot(); }); diff --git a/packages/react-dropdown-select/__tests__/components/Item.spec.js b/packages/react-dropdown-select/__tests__/components/Item.spec.js index 3f7292ab..b66748e3 100644 --- a/packages/react-dropdown-select/__tests__/components/Item.spec.js +++ b/packages/react-dropdown-select/__tests__/components/Item.spec.js @@ -28,64 +28,77 @@ describe(' component', () => { }); test('renders correctly', () => { - const tree = TestRenderer.create().toJSON(); + let tree; + TestRenderer.act(() => { + tree = TestRenderer.create().toJSON(); + }); expect(tree).toMatchSnapshot(); }); test('onChange with click', () => { const addItemSpy = jest.fn(); - TestRenderer.create( - undefined, addItem: addItemSpy }, - })} - />, - ) - .root.findByType('span') - .props.onClick(); + let instance; + TestRenderer.act(() => { + instance = TestRenderer.create( + undefined, addItem: addItemSpy }, + })} + />, + ); + }); + instance.root.findByType('span').props.onClick(); expect(addItemSpy).toHaveBeenCalled; }); test('onChange with key press', () => { const addItemSpy = jest.fn(); - TestRenderer.create( - undefined, addItem: addItemSpy }, - })} - />, - ) - .root.findByType('span') - .props.onKeyDown({ key: 'Enter' }); + let instance; + TestRenderer.act(() => { + instance = TestRenderer.create( + undefined, addItem: addItemSpy }, + })} + />, + ); + }); + instance.root.findByType('span').props.onKeyDown({ key: 'Enter' }); expect(addItemSpy).toHaveBeenCalled; }); test('keepSelectedInList: false', () => { - const tree = TestRenderer.create( - true, - }, - })} - />, - ).toJSON(); + let tree; + TestRenderer.act(() => { + tree = TestRenderer.create( + true, + }, + })} + />, + ).toJSON(); + }); }); test('pass item renderer', () => { - const tree = TestRenderer.create( -
item
})} />, - ).toJSON(); + let tree; + TestRenderer.act(() => { + tree = TestRenderer.create( +
item
})} />, + ).toJSON(); + }); expect(tree).toMatchSnapshot(); }); diff --git a/packages/react-dropdown-select/__tests__/components/NoData.spec.js b/packages/react-dropdown-select/__tests__/components/NoData.spec.js index 4d864144..d27022b0 100644 --- a/packages/react-dropdown-select/__tests__/components/NoData.spec.js +++ b/packages/react-dropdown-select/__tests__/components/NoData.spec.js @@ -13,7 +13,10 @@ const props = { }; it(' renders correctly', () => { - const tree = renderer.create().toJSON(); + let instance; + renderer.act(() => { + instance = renderer.create(); + }); - expect(tree).toMatchSnapshot(); + expect(instance.toJSON()).toMatchSnapshot(); }); diff --git a/packages/react-dropdown-select/__tests__/components/Option.spec.js b/packages/react-dropdown-select/__tests__/components/Option.spec.js index 6a665838..b9ca9d09 100644 --- a/packages/react-dropdown-select/__tests__/components/Option.spec.js +++ b/packages/react-dropdown-select/__tests__/components/Option.spec.js @@ -35,15 +35,20 @@ describe('