From 26674948ce995d06942180a3b5f08ed6bd28f73b Mon Sep 17 00:00:00 2001 From: Bao Nguyen Date: Tue, 1 Sep 2026 17:11:17 +0700 Subject: [PATCH] fix(android): reopen picker when design changes The effect that dismisses the dialog already reacts to design, but the effect that opens it did not, so switching design closed the picker without reopening it. --- src/datetimepicker.android.js | 1 + test/index.test.js | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/datetimepicker.android.js b/src/datetimepicker.android.js index 8bea7d26..7aea9d86 100644 --- a/src/datetimepicker.android.js +++ b/src/datetimepicker.android.js @@ -88,6 +88,7 @@ export default function RNDateTimePickerAndroid( onNeutralButtonPress, valueTimestamp, mode, + design, ], ); diff --git a/test/index.test.js b/test/index.test.js index d1ce61d6..1fa91157 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -5,6 +5,7 @@ import RNDateTimePickerWindows, { } from '../src/datetimepicker.windows'; import RNDateTimePickerAndroid from '../src/datetimepicker.android'; import NativeDateTimePickerIOS from '../src/picker.ios'; +import {DateTimePickerAndroid} from '../src/DateTimePickerAndroid'; import {render, fireEvent, waitFor} from '@testing-library/react-native'; import {EVENT_TYPE_SET} from '../src/constants'; @@ -54,6 +55,29 @@ describe('DateTimePicker', () => { ])('throws when invalid props %s are passed', (props, expected) => { expect(() => RNDateTimePickerAndroid(props)).toThrow(expected); }); + + it('reopens the picker when the design changes', () => { + const open = jest + .spyOn(DateTimePickerAndroid, 'open') + .mockImplementation(() => {}); + jest + .spyOn(DateTimePickerAndroid, 'dismiss') + .mockImplementation(() => Promise.resolve(true)); + + const {rerender} = render( + , + ); + rerender( + , + ); + + expect(open.mock.calls.map(([params]) => params.design)).toEqual([ + 'default', + 'material', + ]); + + jest.restoreAllMocks(); + }); }); describe('RNDateTimePickerIOS', () => {