Skip to content

Commit d954274

Browse files
committed
apply patch
1 parent 1dcf1c1 commit d954274

File tree

8 files changed

+46
-19
lines changed

8 files changed

+46
-19
lines changed

android/src/main/java/com/henninghall/date_picker/DatePickerModuleImpl.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,23 +30,29 @@ public class DatePickerModuleImpl {
3030
ApplicationStarter.initialize(context, false); // false = no need to prefetch on time data background tread
3131
}
3232

33-
public void openPicker(ReadableMap props){
33+
public void openPicker(ReadableMap props, Callback onConfirm, Callback onCancel){
3434
final PickerView picker = createPicker(props);
35-
Callback onConfirm = new Callback() {
35+
Callback onConfirmCallback = new Callback() {
3636
@Override
3737
public void invoke(Object... objects) {
3838
Emitter.onConfirm(picker.getDate(), picker.getPickerId());
39+
if (onConfirm != null) {
40+
onConfirm.invoke(picker.getDate());
41+
}
3942
}
4043
};
4144

42-
Callback onCancel = new Callback() {
45+
Callback onCancelCallback = new Callback() {
4346
@Override
4447
public void invoke(Object... objects) {
4548
Emitter.onCancel(picker.getPickerId());
49+
if (onCancel != null) {
50+
onCancel.invoke();
51+
}
4652
}
4753
};
4854

49-
dialog = createDialog(props, picker, onConfirm, onCancel);
55+
dialog = createDialog(props, picker, onConfirmCallback, onCancelCallback);
5056
dialog.show();
5157
}
5258

android/src/newarch/java/com/henninghall/date_picker/DatePickerModule.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import androidx.annotation.NonNull;
44

5+
import com.facebook.react.bridge.Callback;
56
import com.facebook.react.bridge.ReactApplicationContext;
67
import com.facebook.react.bridge.ReadableMap;
78

@@ -28,8 +29,8 @@ public void removeListeners(double type) {
2829
}
2930

3031
@Override
31-
public void openPicker(ReadableMap props){
32-
module.openPicker(props);
32+
public void openPicker(ReadableMap props, Callback onConfirm, Callback onCancel){
33+
module.openPicker(props, onConfirm, onCancel);
3334
}
3435

3536
@Override

ios/RNDatePickerManager.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,14 @@
88
#import <React/RCTConvert.h>
99
#import <React/RCTViewManager.h>
1010

11+
#ifdef RCT_NEW_ARCH_ENABLED
12+
#import <RNDatePickerSpecs/RNDatePickerSpecs.h>
13+
#endif
14+
1115
@interface RNDatePickerManager : RCTViewManager
16+
#ifdef RCT_NEW_ARCH_ENABLED
17+
<NativeRNDatePickerSpec>
18+
#endif
1219

1320
@property (strong, nonatomic) UIViewController *topViewController;
1421

ios/RNDatePickerManager.mm

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,22 @@ - (double) getPickerHeight :(UIView *) alertView
234234
return 216;
235235
}
236236

237+
// New Architecture support - provide module instance to TurboModule system
238+
(BOOL)requiresMainQueueSetup {
239+
return NO;
240+
}
241+
242+
#ifdef RCT_NEW_ARCH_ENABLED
243+
// Implement the Spec protocol methods required by TurboModule
244+
- (void)getConstants:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
245+
resolve(@{});
246+
}
247+
248+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const facebook::react::ObjCTurboModule::InitParams &)params {
249+
return std::make_shared<facebook::react::NativeRNDatePickerSpecJSI>(params);
250+
}
251+
#endif
252+
237253
@end
238254

239255

src/DatePickerAndroid.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,10 @@ export const DatePickerAndroid = React.memo((props) => {
6767
onStateChange: onSpinnerStateChanged,
6868
}
6969

70-
useModal({ props: modifiedProps, id: thisId })
71-
72-
if (props.modal) return null
70+
if (props.modal){
71+
useModal({ props: modifiedProps, id: thisId })
72+
return null
73+
}
7374

7475
return <NativeComponent {...modifiedProps} />
7576
})

src/DatePickerIOS.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,10 @@ export const DatePickerIOS = (props) => {
2828
theme: props.theme ? props.theme : 'auto',
2929
}
3030

31-
useModal({ props: modifiedProps, id: undefined })
32-
33-
if (props.modal) return null
31+
if (props.modal){
32+
useModal({ props: modifiedProps, id: undefined })
33+
return null
34+
}
3435

3536
return (
3637
<NativeComponent

src/fabric/NativeRNDatePicker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { Double, UnsafeObject } from 'react-native/Libraries/Types/CodegenTypes'
55
export interface Spec extends TurboModule {
66
readonly getConstants: () => {}
77
closePicker(): void
8-
openPicker(props: UnsafeObject): void
8+
openPicker(props: UnsafeObject, onConfirm: (result: UnsafeObject) => void, onCancel: () => void): void
99
removeListeners(type: Double): void
1010
addListener(eventName: string): void
1111
}

src/modal.js

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,7 @@ export const useModal = ({ props, id }) => {
7676
useEffect(() => {
7777
if (shouldOpenModal(props, previousProps)) {
7878
closing.current = false
79-
const params = Platform.select({
80-
android: [props],
81-
ios: [props, onConfirm, onCancel],
82-
})
83-
if (!params) throw Error('Unsupported platform')
84-
NativeModule.openPicker(...params)
79+
NativeModule.openPicker(props, onConfirm, onCancel)
8580
}
8681
}, [onCancel, onConfirm, previousProps, props])
8782

0 commit comments

Comments
 (0)