|
1 |
| -/** |
2 |
| - * @format |
3 |
| - * @flow strict-local |
4 |
| - */ |
5 |
| -import { |
6 |
| - DATE_SET_ACTION, |
7 |
| - TIME_SET_ACTION, |
8 |
| - DISMISS_ACTION, |
9 |
| - NEUTRAL_BUTTON_ACTION, |
10 |
| - ANDROID_DISPLAY, |
11 |
| - ANDROID_MODE, |
12 |
| - ANDROID_EVT_TYPE, |
13 |
| - EVENT_TYPE_SET, |
14 |
| -} from './constants'; |
15 |
| -import invariant from 'invariant'; |
| 1 | +import {Platform} from 'react-native'; |
16 | 2 |
|
17 |
| -import type {DateTimePickerEvent, AndroidNativeProps} from './types'; |
18 |
| -import { |
19 |
| - getOpenPicker, |
20 |
| - timeZoneOffsetDateSetter, |
21 |
| - validateAndroidProps, |
22 |
| -} from './androidUtils'; |
23 |
| -import pickers from './picker'; |
| 3 | +const warn = () => { |
| 4 | + console.warn(`DateTimePickerAndroid is not supported on: ${Platform.OS}`); |
| 5 | +}; |
24 | 6 |
|
25 |
| -function open(props: AndroidNativeProps) { |
26 |
| - const { |
27 |
| - mode = ANDROID_MODE.date, |
28 |
| - display = ANDROID_DISPLAY.default, |
29 |
| - value: originalValue, |
30 |
| - is24Hour, |
31 |
| - minimumDate, |
32 |
| - maximumDate, |
33 |
| - neutralButtonLabel, |
34 |
| - minuteInterval, |
35 |
| - timeZoneOffsetInMinutes, |
36 |
| - onChange, |
37 |
| - onError, |
38 |
| - } = props; |
39 |
| - validateAndroidProps(props); |
40 |
| - invariant(originalValue, 'A date or time must be specified as `value` prop.'); |
41 |
| - |
42 |
| - const valueTimestamp = originalValue.getTime(); |
43 |
| - const openPicker = getOpenPicker({ |
44 |
| - mode, |
45 |
| - value: valueTimestamp, |
46 |
| - display, |
47 |
| - is24Hour, |
48 |
| - minimumDate, |
49 |
| - maximumDate, |
50 |
| - neutralButtonLabel, |
51 |
| - minuteInterval, |
52 |
| - timeZoneOffsetInMinutes, |
53 |
| - }); |
54 |
| - |
55 |
| - const presentPicker = async () => { |
56 |
| - try { |
57 |
| - const {action, day, month, year, minute, hour} = await openPicker(); |
58 |
| - let date = new Date(valueTimestamp); |
59 |
| - let event: DateTimePickerEvent = { |
60 |
| - type: EVENT_TYPE_SET, |
61 |
| - nativeEvent: {}, |
62 |
| - }; |
63 |
| - |
64 |
| - switch (action) { |
65 |
| - case DATE_SET_ACTION: |
66 |
| - date.setFullYear(year, month, day); |
67 |
| - date = timeZoneOffsetDateSetter(date, timeZoneOffsetInMinutes); |
68 |
| - event.nativeEvent.timestamp = date.getTime(); |
69 |
| - onChange?.(event, date); |
70 |
| - break; |
71 |
| - |
72 |
| - case TIME_SET_ACTION: |
73 |
| - date.setHours(hour, minute); |
74 |
| - date = timeZoneOffsetDateSetter(date, timeZoneOffsetInMinutes); |
75 |
| - event.nativeEvent.timestamp = date.getTime(); |
76 |
| - onChange?.(event, date); |
77 |
| - break; |
78 |
| - |
79 |
| - case NEUTRAL_BUTTON_ACTION: |
80 |
| - event.type = ANDROID_EVT_TYPE.neutralButtonPressed; |
81 |
| - onChange?.(event, originalValue); |
82 |
| - break; |
83 |
| - |
84 |
| - case DISMISS_ACTION: |
85 |
| - default: |
86 |
| - event.type = ANDROID_EVT_TYPE.dismissed; |
87 |
| - onChange?.(event, originalValue); |
88 |
| - break; |
89 |
| - } |
90 |
| - } catch (error) { |
91 |
| - onError && onError(error); |
92 |
| - } |
93 |
| - }; |
94 |
| - presentPicker(); |
95 |
| -} |
96 |
| - |
97 |
| -function dismiss(mode: AndroidNativeProps['mode']) { |
98 |
| - // $FlowFixMe - `AbstractComponent` [1] is not an instance type. |
99 |
| - pickers[mode].dismiss(); |
100 |
| -} |
101 |
| - |
102 |
| -export const DateTimePickerAndroid = {open, dismiss}; |
| 7 | +export const DateTimePickerAndroid = {open: warn, dismiss: warn}; |
0 commit comments