react-native-molecules 0.5.0-beta.3 → 0.5.0-beta.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/components/Accordion/Accordion.tsx +2 -6
  2. package/components/Accordion/AccordionItem.tsx +16 -12
  3. package/components/Accordion/AccordionItemContent.tsx +6 -1
  4. package/components/Accordion/AccordionItemHeader.tsx +1 -1
  5. package/components/Accordion/utils.ts +6 -0
  6. package/components/ActivityIndicator/ActivityIndicator.tsx +6 -15
  7. package/components/Appbar/AppbarBase.tsx +18 -13
  8. package/components/Button/Button.tsx +211 -264
  9. package/components/Button/index.tsx +9 -3
  10. package/components/Button/types.ts +16 -2
  11. package/components/Button/utils.ts +230 -208
  12. package/components/Card/Card.tsx +1 -1
  13. package/components/Checkbox/Checkbox.tsx +125 -88
  14. package/components/Checkbox/CheckboxBase.ios.tsx +14 -23
  15. package/components/Checkbox/CheckboxBase.tsx +21 -137
  16. package/components/Checkbox/context.tsx +14 -0
  17. package/components/Checkbox/index.tsx +11 -4
  18. package/components/Checkbox/types.ts +63 -29
  19. package/components/Checkbox/utils.ts +25 -108
  20. package/components/Chip/Chip.tsx +41 -52
  21. package/components/Chip/utils.ts +3 -7
  22. package/components/DateField/DateField.tsx +111 -0
  23. package/components/DateField/index.tsx +6 -0
  24. package/components/{DatePickerInput/inputUtils.ts → DateField/useDateFieldState.ts} +19 -51
  25. package/components/DatePicker/DateCalendar.tsx +83 -0
  26. package/components/DatePicker/DatePickerActions.tsx +73 -0
  27. package/components/DatePicker/DatePickerModal.tsx +246 -0
  28. package/components/DatePicker/DatePickerPopover.tsx +79 -0
  29. package/components/DatePicker/DatePickerProvider.tsx +158 -0
  30. package/components/DatePicker/DatePickerTrigger.tsx +23 -0
  31. package/components/DatePicker/context.tsx +83 -0
  32. package/components/DatePicker/index.tsx +45 -0
  33. package/components/DatePicker/utils.ts +295 -0
  34. package/components/DatePickerInline/DatePickerDockedHeader.tsx +117 -0
  35. package/components/DatePickerInline/DatePickerInline.tsx +17 -16
  36. package/components/DatePickerInline/DatePickerInlineBase.tsx +11 -5
  37. package/components/DatePickerInline/DatePickerInlineHeader.tsx +50 -20
  38. package/components/DatePickerInline/Day.tsx +25 -1
  39. package/components/DatePickerInline/DayNames.tsx +13 -10
  40. package/components/DatePickerInline/DayRange.tsx +2 -4
  41. package/components/DatePickerInline/HeaderItem.tsx +44 -29
  42. package/components/DatePickerInline/Month.tsx +48 -67
  43. package/components/DatePickerInline/MonthPicker.tsx +80 -92
  44. package/components/DatePickerInline/Swiper.native.tsx +21 -4
  45. package/components/DatePickerInline/Swiper.tsx +169 -14
  46. package/components/DatePickerInline/SwiperUtils.ts +1 -1
  47. package/components/DatePickerInline/Week.tsx +6 -1
  48. package/components/DatePickerInline/YearPicker.tsx +220 -78
  49. package/components/DatePickerInline/dateUtils.tsx +18 -13
  50. package/components/DatePickerInline/store.tsx +27 -0
  51. package/components/DatePickerInline/types.ts +6 -2
  52. package/components/DatePickerInline/utils.ts +66 -29
  53. package/components/Divider/Divider.tsx +192 -0
  54. package/components/Divider/index.tsx +10 -0
  55. package/components/Drawer/Drawer.tsx +17 -6
  56. package/components/Drawer/DrawerItemGroup.tsx +3 -7
  57. package/components/ElementGroup/ElementGroup.tsx +1 -1
  58. package/components/FilePicker/FilePicker.tsx +48 -78
  59. package/components/FilePicker/index.tsx +2 -1
  60. package/components/FilePicker/utils.ts +9 -0
  61. package/components/HelperText/HelperText.tsx +0 -35
  62. package/components/Icon/iconFactory.tsx +5 -4
  63. package/components/Icon/index.tsx +1 -1
  64. package/components/Icon/types.ts +17 -6
  65. package/components/IconButton/IconButton.tsx +84 -84
  66. package/components/IconButton/index.tsx +1 -0
  67. package/components/IconButton/types.ts +10 -0
  68. package/components/IconButton/utils.ts +167 -33
  69. package/components/List/List.tsx +276 -0
  70. package/components/List/context.tsx +27 -0
  71. package/components/List/index.ts +8 -0
  72. package/components/List/types.ts +117 -0
  73. package/components/List/utils.ts +79 -0
  74. package/components/LoadingIndicator/LoadingIndicator.tsx +253 -0
  75. package/components/LoadingIndicator/LoadingIndicator.web.tsx +136 -0
  76. package/components/LoadingIndicator/index.tsx +13 -0
  77. package/components/LoadingIndicator/utils.ts +117 -0
  78. package/components/Menu/Menu.tsx +162 -39
  79. package/components/Menu/index.tsx +10 -7
  80. package/components/Menu/utils.ts +21 -70
  81. package/components/NavigationRail/NavigationRail.tsx +15 -9
  82. package/components/Popover/Popover.tsx +119 -145
  83. package/components/Popover/PopoverRoot.tsx +60 -0
  84. package/components/Popover/common.ts +54 -34
  85. package/components/Popover/index.ts +12 -1
  86. package/components/Popover/usePlatformMeasure.native.ts +90 -0
  87. package/components/Popover/usePlatformMeasure.ts +120 -0
  88. package/components/Popover/utils.ts +34 -0
  89. package/components/Portal/Portal.tsx +1 -2
  90. package/components/Radio/Radio.tsx +188 -0
  91. package/components/Radio/RadioBase.ios.tsx +69 -0
  92. package/components/Radio/RadioBase.tsx +136 -0
  93. package/components/Radio/context.tsx +23 -0
  94. package/components/Radio/index.tsx +20 -0
  95. package/components/Radio/types.ts +101 -0
  96. package/components/Radio/utils.ts +115 -0
  97. package/components/Rating/Rating.tsx +1 -1
  98. package/components/Select/Select.tsx +521 -785
  99. package/components/Select/context.tsx +81 -0
  100. package/components/Select/index.ts +26 -14
  101. package/components/Select/types.ts +65 -58
  102. package/components/Select/utils.ts +126 -0
  103. package/components/Slot/Slot.tsx +224 -0
  104. package/components/Slot/compose-refs.tsx +62 -0
  105. package/components/Slot/index.tsx +8 -0
  106. package/components/Surface/Surface.android.tsx +32 -7
  107. package/components/Surface/Surface.ios.tsx +34 -29
  108. package/components/Surface/Surface.tsx +31 -4
  109. package/components/Surface/utils.ts +44 -6
  110. package/components/Switch/Switch.ios.tsx +1 -1
  111. package/components/Switch/Switch.tsx +10 -3
  112. package/components/Tabs/TabItem.tsx +35 -58
  113. package/components/Tabs/TabLabel.tsx +5 -9
  114. package/components/Tabs/Tabs.tsx +156 -150
  115. package/components/Tabs/utils.ts +15 -2
  116. package/components/Text/textFactory.tsx +17 -5
  117. package/components/TextInput/TextInput.tsx +663 -579
  118. package/components/TextInput/index.tsx +19 -3
  119. package/components/TextInput/types.ts +77 -28
  120. package/components/TextInput/utils.ts +235 -145
  121. package/components/TimeField/TimeField.tsx +75 -0
  122. package/components/TimeField/index.tsx +6 -0
  123. package/components/TimeField/useTimeFieldState.ts +70 -0
  124. package/components/{TimePickerField/sanitizeTime.ts → TimeField/utils.ts} +77 -10
  125. package/components/TimePicker/AnalogClock.tsx +1 -1
  126. package/components/TimePicker/TimeInput.tsx +87 -42
  127. package/components/TimePicker/TimeInputs.tsx +138 -50
  128. package/components/TimePicker/TimePicker.tsx +74 -11
  129. package/components/TimePicker/TimePickerModal.tsx +186 -0
  130. package/components/TimePicker/context.tsx +17 -0
  131. package/components/TimePicker/index.tsx +15 -3
  132. package/components/TimePicker/utils.ts +93 -4
  133. package/components/Tooltip/Tooltip.tsx +42 -67
  134. package/components/Tooltip/TooltipContent.tsx +32 -5
  135. package/components/Tooltip/TooltipTrigger.tsx +21 -24
  136. package/components/Tooltip/index.tsx +1 -1
  137. package/components/TouchableRipple/TouchableRipple.native.tsx +83 -16
  138. package/components/TouchableRipple/TouchableRipple.tsx +150 -102
  139. package/components/TouchableRipple/rippleFromForegroundColor.ts +21 -0
  140. package/hocs/index.tsx +1 -1
  141. package/hocs/withKeyboardAccessibility.tsx +2 -3
  142. package/hocs/withPortal.tsx +1 -1
  143. package/hooks/index.tsx +2 -12
  144. package/hooks/useActionState.tsx +19 -8
  145. package/hooks/useContrastColor.ts +1 -2
  146. package/hooks/useFilePicker.tsx +7 -17
  147. package/hooks/useHandleNumberFormat.tsx +2 -2
  148. package/hooks/useMediaQuery.tsx +1 -2
  149. package/package.json +95 -111
  150. package/shortcuts-manager/ShortcutsManager/ShortcutsManager.tsx +6 -3
  151. package/shortcuts-manager/ShortcutsManager/utils.tsx +1 -1
  152. package/shortcuts-manager/useSetScopes/useSetScopes.tsx +1 -1
  153. package/shortcuts-manager/useShortcut/useShortcut.tsx +1 -1
  154. package/styles/shadow.ts +2 -1
  155. package/styles/themes/LightTheme.tsx +1 -1
  156. package/utils/DocumentPicker/documentPicker.ts +78 -27
  157. package/utils/DocumentPicker/types.ts +0 -1
  158. package/utils/extractSubcomponents.ts +89 -0
  159. package/utils/extractTextStyles.ts +1 -2
  160. package/utils/formatNumberWithMask/formatNumberWithMask.ts +2 -1
  161. package/utils/index.ts +0 -3
  162. package/utils/normalizeToNumberString/normalizeToNumberString.ts +1 -1
  163. package/components/DatePickerDocked/DatePickerDocked.tsx +0 -30
  164. package/components/DatePickerDocked/DatePickerDockedHeader.tsx +0 -129
  165. package/components/DatePickerDocked/index.tsx +0 -17
  166. package/components/DatePickerDocked/types.ts +0 -11
  167. package/components/DatePickerDocked/utils.ts +0 -157
  168. package/components/DatePickerInline/DatePickerContext.tsx +0 -21
  169. package/components/DatePickerInput/DatePickerInput.tsx +0 -139
  170. package/components/DatePickerInput/DatePickerInputModal.tsx +0 -48
  171. package/components/DatePickerInput/DatePickerInputWithoutModal.tsx +0 -77
  172. package/components/DatePickerInput/DateRangeInput.tsx +0 -88
  173. package/components/DatePickerInput/index.tsx +0 -10
  174. package/components/DatePickerInput/types.ts +0 -28
  175. package/components/DatePickerInput/utils.ts +0 -15
  176. package/components/DatePickerModal/AnimatedCrossView.tsx +0 -94
  177. package/components/DatePickerModal/CalendarEdit.tsx +0 -139
  178. package/components/DatePickerModal/DatePickerModal.tsx +0 -85
  179. package/components/DatePickerModal/DatePickerModalContent.tsx +0 -155
  180. package/components/DatePickerModal/DatePickerModalContentHeader.tsx +0 -213
  181. package/components/DatePickerModal/DatePickerModalHeader.tsx +0 -74
  182. package/components/DatePickerModal/DatePickerModalHeaderBackground.tsx +0 -13
  183. package/components/DatePickerModal/index.tsx +0 -16
  184. package/components/DatePickerModal/types.ts +0 -92
  185. package/components/DatePickerModal/utils.ts +0 -122
  186. package/components/DateTimePicker/DateTimePicker.tsx +0 -172
  187. package/components/DateTimePicker/index.tsx +0 -10
  188. package/components/DateTimePicker/utils.ts +0 -12
  189. package/components/HorizontalDivider/HorizontalDivider.tsx +0 -103
  190. package/components/HorizontalDivider/index.tsx +0 -9
  191. package/components/ListItem/ListItem.tsx +0 -136
  192. package/components/ListItem/ListItemDescription.tsx +0 -25
  193. package/components/ListItem/ListItemTitle.tsx +0 -25
  194. package/components/ListItem/index.tsx +0 -14
  195. package/components/ListItem/utils.ts +0 -115
  196. package/components/Menu/MenuDivider.tsx +0 -13
  197. package/components/Menu/MenuItem.tsx +0 -128
  198. package/components/Popover/Popover.native.tsx +0 -185
  199. package/components/RadioButton/RadioButton.tsx +0 -138
  200. package/components/RadioButton/RadioButtonAndroid.tsx +0 -188
  201. package/components/RadioButton/RadioButtonGroup.tsx +0 -98
  202. package/components/RadioButton/RadioButtonIOS.tsx +0 -106
  203. package/components/RadioButton/RadioButtonItem.tsx +0 -232
  204. package/components/RadioButton/index.ts +0 -22
  205. package/components/RadioButton/utils.ts +0 -165
  206. package/components/TimePickerField/TimePickerField.tsx +0 -152
  207. package/components/TimePickerField/index.tsx +0 -10
  208. package/components/TimePickerField/utils.ts +0 -94
  209. package/components/TimePickerModal/TimePickerModal.tsx +0 -115
  210. package/components/TimePickerModal/index.tsx +0 -10
  211. package/components/TimePickerModal/utils.ts +0 -47
  212. package/components/VerticalDivider/VerticalDivider.tsx +0 -100
  213. package/components/VerticalDivider/index.tsx +0 -9
  214. package/context-bridge/index.tsx +0 -87
  215. package/fast-context/index.tsx +0 -190
  216. package/hocs/typedMemo.tsx +0 -5
  217. package/hooks/useControlledValue.tsx +0 -68
  218. package/hooks/useLatest.tsx +0 -9
  219. package/hooks/useMergedRefs.ts +0 -14
  220. package/hooks/usePrevious.ts +0 -13
  221. package/hooks/useSearchable.tsx +0 -74
  222. package/hooks/useSubcomponents.tsx +0 -59
  223. package/hooks/useToggle.tsx +0 -24
  224. package/utils/color.ts +0 -22
  225. package/utils/compare/index.ts +0 -54
  226. package/utils/lodash.ts +0 -49
  227. package/utils/repository.ts +0 -53
@@ -1,28 +0,0 @@
1
- import type { ViewProps } from 'react-native';
2
-
3
- import type { ValidRangeType } from '../DatePickerInline';
4
- import type { TextInputProps } from '../TextInput';
5
-
6
- export interface DatePickerInputProps
7
- extends Omit<TextInputProps, 'value' | 'onChange' | 'onChangeText' | 'inputMode'> {
8
- inputMode: 'start' | 'end';
9
- locale?: string;
10
- onChange?: (date: Date | null) => void;
11
- value?: Date | null;
12
- validRange?: ValidRangeType | undefined;
13
- withModal?: boolean;
14
- calendarIcon?: string;
15
- /**
16
- * date format of the input
17
- * should be date-fns accepted format
18
- * We currently only accept the variations of dd MM yyyy
19
- * */
20
- dateFormat?: string;
21
- pickerMode?: 'docked' | 'modal';
22
- startYear?: number;
23
- endYear?: number;
24
- dockedPopoverContentProps?: ViewProps;
25
- }
26
- export interface DatePickerInputWithoutModalProps extends Omit<DatePickerInputProps, 'withModal'> {
27
- inputButtons?: any;
28
- }
@@ -1,15 +0,0 @@
1
- import { StyleSheet } from 'react-native-unistyles';
2
-
3
- import { getRegisteredComponentStylesWithFallback } from '../../core';
4
-
5
- const datePickerInputStylesDefault = StyleSheet.create({
6
- root: {
7
- minWidth: 150,
8
- justifyContent: 'center',
9
- },
10
- });
11
-
12
- export const datePickerInputStyles = getRegisteredComponentStylesWithFallback(
13
- 'DatePickerInput',
14
- datePickerInputStylesDefault,
15
- );
@@ -1,94 +0,0 @@
1
- import { useEffect, useMemo, useRef } from 'react';
2
- import { Animated, View } from 'react-native';
3
- import { StyleSheet } from 'react-native-unistyles';
4
-
5
- export default function AnimatedCrossView({
6
- // visible,
7
- collapsed,
8
- calendar,
9
- calendarEdit,
10
- }: {
11
- calendar: any;
12
- calendarEdit: any;
13
- // visible: boolean
14
- collapsed: boolean;
15
- }) {
16
- const calendarOpacity = useRef<Animated.Value>(new Animated.Value(collapsed ? 1 : 0));
17
- useEffect(() => {
18
- // if (visible) {
19
- Animated.timing(calendarOpacity.current, {
20
- toValue: collapsed ? 1 : 0,
21
- duration: 250,
22
- useNativeDriver: true,
23
- }).start();
24
- // }
25
- }, [collapsed]);
26
-
27
- const { calendarStyle, calendarEditStyle } = useMemo(() => {
28
- return {
29
- calendarStyle: [
30
- styles.calendar,
31
- {
32
- opacity: calendarOpacity.current,
33
- transform: [
34
- {
35
- scaleY: calendarOpacity.current.interpolate({
36
- inputRange: [0, 1],
37
- outputRange: [0.85, 1],
38
- }),
39
- },
40
- {
41
- scaleX: calendarOpacity.current.interpolate({
42
- inputRange: [0, 1],
43
- outputRange: [0.95, 1],
44
- }),
45
- },
46
- ],
47
- },
48
- ],
49
- calendarEditStyle: [
50
- styles.calendarEdit,
51
- {
52
- opacity: calendarOpacity.current.interpolate({
53
- inputRange: [0, 1],
54
- outputRange: [1, 0],
55
- }),
56
- transform: [
57
- {
58
- scale: calendarOpacity.current.interpolate({
59
- inputRange: [0, 1],
60
- outputRange: [1, 0.95],
61
- }),
62
- },
63
- ],
64
- },
65
- ],
66
- };
67
- }, []);
68
-
69
- // TODO Create AnimatedCrossView Component
70
- return (
71
- <View style={styles.root}>
72
- <Animated.View pointerEvents={collapsed ? 'auto' : 'none'} style={calendarStyle}>
73
- {calendar}
74
- </Animated.View>
75
- <Animated.View pointerEvents={collapsed ? 'none' : 'auto'} style={calendarEditStyle}>
76
- {calendarEdit}
77
- </Animated.View>
78
- </View>
79
- );
80
- }
81
-
82
- const styles = StyleSheet.create(theme => ({
83
- root: { flex: 1 },
84
- calendarEdit: {
85
- position: 'absolute',
86
-
87
- left: 0,
88
- right: 0,
89
- backgroundColor: theme.colors.surface,
90
- },
91
- calendar: {
92
- flex: 1,
93
- },
94
- }));
@@ -1,139 +0,0 @@
1
- import { memo, useCallback, useEffect, useRef } from 'react';
2
- import { Keyboard, TextInput as TextInputNative, View } from 'react-native';
3
-
4
- import type { ModeType, ValidRangeType } from '../DatePickerInline';
5
- import DatePickerInputWithoutModal from '../DatePickerInput/DatePickerInputWithoutModal';
6
- import type { LocalState, LocalStateRange, LocalStateSingle } from './types';
7
- import { datePickerModalEditStyles } from './utils';
8
-
9
- type Props = {
10
- mode: ModeType;
11
- label?: string;
12
- startLabel?: string;
13
- endLabel?: string;
14
- state: LocalState;
15
- collapsed: boolean;
16
- onChange: (s: LocalState) => any;
17
- validRange: ValidRangeType | undefined;
18
- // locale: string;
19
- };
20
-
21
- function CalendarEdit({
22
- mode,
23
- state,
24
- label = '',
25
- startLabel = 'Start',
26
- endLabel = 'End',
27
- collapsed,
28
- onChange,
29
- validRange,
30
- }: // locale,
31
- Props) {
32
- const dateInput = useRef<TextInputNative | null>(null);
33
- const startInput = useRef<TextInputNative | null>(null);
34
- const endInput = useRef<TextInputNative | null>(null);
35
-
36
- // when switching views focus, or un-focus text input
37
- useEffect(() => {
38
- // hide open keyboard
39
- if (collapsed) {
40
- Keyboard.dismiss();
41
- }
42
-
43
- const inputsToFocus = [dateInput.current, startInput.current].filter(
44
- n => n,
45
- ) as TextInputNative[];
46
-
47
- const inputsToBlur = [dateInput.current, startInput.current, endInput.current].filter(
48
- n => n,
49
- ) as TextInputNative[];
50
-
51
- if (collapsed) {
52
- inputsToBlur.forEach(ip => ip.blur());
53
- } else {
54
- inputsToFocus.forEach(ip => ip.focus());
55
- }
56
- }, [mode, startInput, endInput, dateInput, collapsed]);
57
-
58
- const onSubmitStartInput = useCallback(() => {
59
- if (endInput.current) {
60
- endInput.current.focus();
61
- }
62
- }, [endInput]);
63
-
64
- const onSubmitEndInput = useCallback(() => {
65
- // TODO: close modal and persist range
66
- }, []);
67
-
68
- const onSubmitInput = useCallback(() => {
69
- // TODO: close modal and persist range
70
- }, []);
71
-
72
- const onSingleInputChange = useCallback(
73
- (date: Date | null) => onChange({ ...state, date }),
74
- [onChange, state],
75
- );
76
-
77
- const onStartDateChange = useCallback(
78
- (startDate: Date | null) => onChange({ ...state, startDate }),
79
- [onChange, state],
80
- );
81
-
82
- const onEndDateChange = useCallback(
83
- (endDate: Date | null) => onChange({ ...state, endDate }),
84
- [onChange, state],
85
- );
86
-
87
- return (
88
- <View style={datePickerModalEditStyles.container}>
89
- <>
90
- {mode === 'single' ? (
91
- <DatePickerInputWithoutModal
92
- inputMode="start"
93
- ref={dateInput}
94
- label={label}
95
- value={(state as LocalStateSingle).date}
96
- onChange={onSingleInputChange}
97
- onSubmitEditing={onSubmitInput}
98
- validRange={validRange}
99
- // locale={locale}
100
- autoComplete={'off'}
101
- />
102
- ) : null}
103
- </>
104
-
105
- <>
106
- {mode === 'range' ? (
107
- <View style={datePickerModalEditStyles.inner}>
108
- <DatePickerInputWithoutModal
109
- inputMode="start"
110
- ref={startInput}
111
- label={startLabel}
112
- value={(state as LocalStateRange).startDate}
113
- onChange={onStartDateChange}
114
- returnKeyType={'next'}
115
- onSubmitEditing={onSubmitStartInput}
116
- validRange={validRange}
117
- // locale={locale}
118
- autoComplete={'off'}
119
- />
120
- <View style={datePickerModalEditStyles.separator} />
121
- <DatePickerInputWithoutModal
122
- inputMode="end"
123
- ref={endInput}
124
- label={endLabel}
125
- value={(state as LocalStateRange).endDate}
126
- onChange={onEndDateChange}
127
- onSubmitEditing={onSubmitEndInput}
128
- validRange={validRange}
129
- // locale={locale}
130
- autoComplete="off"
131
- />
132
- </View>
133
- ) : null}
134
- </>
135
- </View>
136
- );
137
- }
138
-
139
- export default memo(CalendarEdit);
@@ -1,85 +0,0 @@
1
- import color from 'color';
2
- import { memo, useMemo } from 'react';
3
- import {
4
- Platform,
5
- StatusBar,
6
- type StatusBarStyle,
7
- StyleSheet,
8
- useWindowDimensions,
9
- View,
10
- } from 'react-native';
11
-
12
- import { Modal } from '../Modal';
13
- import { Portal } from '../Portal';
14
- import { DatePickerModalContent } from './DatePickerModalContent';
15
- import type { DatePickerModalProps } from './types';
16
- import { datePickerModalStyles } from './utils';
17
-
18
- export function DatePickerModal(props: DatePickerModalProps) {
19
- const dimensions = useWindowDimensions();
20
-
21
- const {
22
- isOpen,
23
- disableStatusBar,
24
- disableStatusBarPadding,
25
- mode = 'single',
26
- style: styleProp,
27
- ...rest
28
- } = props;
29
-
30
- const { containerStyle, headerStyle, barStyle, modalContentStyle } = useMemo(() => {
31
- let isHeaderBackgroundLight = true;
32
- try {
33
- isHeaderBackgroundLight = color(
34
- datePickerModalStyles.header?.backgroundColor,
35
- ).isLight();
36
- } catch (e) {}
37
-
38
- return {
39
- containerStyle: [StyleSheet.absoluteFill, styleProp],
40
- headerStyle: [
41
- datePickerModalStyles.header,
42
- {
43
- height: Platform.OS === 'android' ? StatusBar.currentHeight : 0, // on IOS StatusBar.currentHeight isn't available
44
- },
45
- ],
46
- barStyle: (isHeaderBackgroundLight
47
- ? 'dark-content'
48
- : 'light-content') as StatusBarStyle,
49
- modalContentStyle:
50
- dimensions.width > 650
51
- ? { flex: 1, maxHeight: 600 }
52
- : { flex: 1, maxWidth: undefined, borderRadius: 0 },
53
- };
54
- }, [dimensions.width, styleProp]);
55
-
56
- return (
57
- <View style={containerStyle} pointerEvents="box-none">
58
- <Portal>
59
- <Modal
60
- isOpen={isOpen}
61
- onClose={rest.onClose}
62
- style={modalContentStyle}
63
- elevation={0}>
64
- <>
65
- <>
66
- {disableStatusBar ? null : (
67
- <StatusBar translucent={true} barStyle={barStyle} />
68
- )}
69
- </>
70
-
71
- <>{disableStatusBarPadding ? null : <View style={headerStyle} />}</>
72
-
73
- <DatePickerModalContent
74
- {...rest}
75
- mode={mode as any}
76
- disableSafeTop={disableStatusBar}
77
- />
78
- </>
79
- </Modal>
80
- </Portal>
81
- </View>
82
- );
83
- }
84
-
85
- export default memo(DatePickerModal);
@@ -1,155 +0,0 @@
1
- import { memo, useCallback, useState } from 'react';
2
-
3
- import { useControlledValue } from '../../hooks';
4
- import { DatePickerInlineBase, getStateValue } from '../DatePickerInline';
5
- import DatePickerInlineHeader from '../DatePickerInline/DatePickerInlineHeader';
6
- import AnimatedCrossView from './AnimatedCrossView';
7
- import CalendarEdit from './CalendarEdit';
8
- import DatePickerModalContentHeader from './DatePickerModalContentHeader';
9
- import DatePickerModalHeader from './DatePickerModalHeader';
10
- import DatePickerModalHeaderBackground from './DatePickerModalHeaderBackground';
11
- import type {
12
- DatePickerModalContentMultiProps,
13
- DatePickerModalContentRangeProps,
14
- DatePickerModalContentSingleProps,
15
- LocalState,
16
- LocalStateMultiple,
17
- LocalStateRange,
18
- LocalStateSingle,
19
- } from './types';
20
-
21
- type Props =
22
- | DatePickerModalContentSingleProps
23
- | DatePickerModalContentRangeProps
24
- | DatePickerModalContentMultiProps;
25
-
26
- export function DatePickerModalContent(props: Props) {
27
- const {
28
- mode = 'single',
29
- onChange,
30
- onConfirm,
31
- onClose,
32
- disableSafeTop,
33
- disableWeekDays,
34
- // locale = 'en',
35
- validRange,
36
- dateMode,
37
- startYear,
38
- endYear,
39
- date,
40
- startDate,
41
- endDate,
42
- dates,
43
- } = props;
44
- const [collapsed, setCollapsed] = useState<boolean>(true);
45
-
46
- const onInnerChange = useCallback(
47
- (params: any) => {
48
- onChange?.(params);
49
- },
50
- [onChange],
51
- );
52
-
53
- const [state, onStateChange] = useControlledValue<LocalState>({
54
- value: getStateValue(
55
- {
56
- date,
57
- dates,
58
- startDate,
59
- endDate,
60
- },
61
- mode,
62
- ),
63
- onChange: onInnerChange,
64
- });
65
-
66
- const onInnerConfirm = useCallback(() => {
67
- if (mode === 'single') {
68
- (onConfirm as DatePickerModalContentSingleProps['onConfirm'])?.({
69
- date: (state as LocalStateSingle)?.date,
70
- });
71
- } else if (mode === 'range') {
72
- (onConfirm as DatePickerModalContentRangeProps['onConfirm'])?.({
73
- startDate: (state as LocalStateRange)?.startDate,
74
- endDate: (state as LocalStateRange)?.endDate,
75
- });
76
- } else if (mode === 'multiple') {
77
- (onConfirm as DatePickerModalContentMultiProps['onConfirm'])?.({
78
- dates: (state as LocalStateMultiple)?.dates || [],
79
- });
80
- }
81
- }, [state, mode, onConfirm]);
82
-
83
- const onToggleCollapse = useCallback(() => {
84
- setCollapsed(prev => !prev);
85
- }, [setCollapsed]);
86
-
87
- return (
88
- <>
89
- <DatePickerModalHeaderBackground>
90
- <DatePickerModalHeader
91
- onSave={onInnerConfirm}
92
- onClose={onClose}
93
- saveLabel={props.saveLabel}
94
- saveLabelDisabled={props.saveLabelDisabled || false}
95
- disableSafeTop={disableSafeTop}
96
- closeIcon={props.closeIcon}
97
- />
98
- <DatePickerModalContentHeader
99
- state={state || { startDate, dates, date, endDate }}
100
- mode={mode}
101
- collapsed={collapsed}
102
- onToggle={onToggleCollapse}
103
- headerSeparator={props.headerSeparator}
104
- emptyLabel={props.emptyLabel}
105
- label={props.label}
106
- moreLabel={props.moreLabel}
107
- startLabel={props.startLabel}
108
- endLabel={props.endLabel}
109
- uppercase={props.uppercase || true}
110
- // locale={locale}
111
- editIcon={props.editIcon}
112
- calendarIcon={props.calendarIcon}
113
- />
114
- </DatePickerModalHeaderBackground>
115
-
116
- <AnimatedCrossView
117
- collapsed={collapsed}
118
- calendar={
119
- <DatePickerInlineBase
120
- // locale={locale}
121
- mode={mode}
122
- startDate={(state as LocalStateRange)?.startDate}
123
- endDate={(state as LocalStateRange)?.endDate}
124
- date={(state as LocalStateSingle)?.date}
125
- onChange={onStateChange as typeof onInnerChange}
126
- disableWeekDays={disableWeekDays}
127
- dates={(state as LocalStateMultiple)?.dates}
128
- validRange={validRange}
129
- dateMode={dateMode}
130
- startYear={startYear}
131
- endYear={endYear}
132
- // TODO - fix ts issues
133
- // @ts-ignore
134
- HeaderComponent={DatePickerInlineHeader}
135
- />
136
- }
137
- calendarEdit={
138
- <CalendarEdit
139
- mode={mode}
140
- state={state || { startDate, dates, date, endDate }}
141
- label={props.label}
142
- startLabel={props.startLabel}
143
- endLabel={props.endLabel}
144
- collapsed={collapsed}
145
- onChange={onStateChange}
146
- validRange={validRange}
147
- // locale={locale}
148
- />
149
- }
150
- />
151
- </>
152
- );
153
- }
154
-
155
- export default memo(DatePickerModalContent);