react-native-molecules 0.5.0-beta.2 → 0.5.0-beta.21

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 (160) hide show
  1. package/README.md +1 -1
  2. package/components/Accordion/Accordion.tsx +2 -6
  3. package/components/Accordion/AccordionItem.tsx +16 -12
  4. package/components/Accordion/AccordionItemContent.tsx +6 -1
  5. package/components/Accordion/AccordionItemHeader.tsx +1 -1
  6. package/components/Accordion/utils.ts +6 -0
  7. package/components/ActivityIndicator/ActivityIndicator.tsx +6 -15
  8. package/components/Appbar/AppbarBase.tsx +18 -13
  9. package/components/Button/Button.tsx +209 -264
  10. package/components/Button/index.tsx +9 -3
  11. package/components/Button/types.ts +16 -2
  12. package/components/Button/utils.ts +230 -208
  13. package/components/Checkbox/CheckboxBase.ios.tsx +10 -14
  14. package/components/Checkbox/CheckboxBase.tsx +14 -121
  15. package/components/Checkbox/utils.ts +0 -25
  16. package/components/Chip/Chip.tsx +40 -52
  17. package/components/Chip/utils.ts +3 -7
  18. package/components/DateField/DateField.tsx +111 -0
  19. package/components/DateField/index.tsx +6 -0
  20. package/components/{DatePickerInput/inputUtils.ts → DateField/useDateFieldState.ts} +17 -49
  21. package/components/DatePicker/DateCalendar.tsx +83 -0
  22. package/components/DatePicker/DatePickerActions.tsx +73 -0
  23. package/components/DatePicker/DatePickerModal.tsx +245 -0
  24. package/components/DatePicker/DatePickerPopover.tsx +79 -0
  25. package/components/DatePicker/DatePickerProvider.tsx +158 -0
  26. package/components/DatePicker/DatePickerTrigger.tsx +23 -0
  27. package/components/DatePicker/context.tsx +83 -0
  28. package/components/DatePicker/index.tsx +45 -0
  29. package/components/DatePicker/utils.ts +293 -0
  30. package/components/DatePickerInline/DatePickerContext.tsx +1 -0
  31. package/components/DatePickerInline/DatePickerDockedHeader.tsx +117 -0
  32. package/components/DatePickerInline/DatePickerInline.tsx +16 -15
  33. package/components/DatePickerInline/DatePickerInlineBase.tsx +8 -2
  34. package/components/DatePickerInline/DatePickerInlineHeader.tsx +8 -4
  35. package/components/DatePickerInline/Day.tsx +25 -1
  36. package/components/DatePickerInline/DayNames.tsx +13 -10
  37. package/components/DatePickerInline/DayRange.tsx +2 -4
  38. package/components/DatePickerInline/HeaderItem.tsx +42 -27
  39. package/components/DatePickerInline/Month.tsx +48 -67
  40. package/components/DatePickerInline/MonthPicker.tsx +38 -44
  41. package/components/DatePickerInline/Swiper.native.tsx +21 -4
  42. package/components/DatePickerInline/Swiper.tsx +168 -13
  43. package/components/DatePickerInline/Week.tsx +6 -1
  44. package/components/DatePickerInline/YearPicker.tsx +206 -53
  45. package/components/DatePickerInline/dateUtils.tsx +17 -12
  46. package/components/DatePickerInline/types.ts +6 -2
  47. package/components/DatePickerInline/utils.ts +66 -29
  48. package/components/Drawer/Drawer.tsx +17 -6
  49. package/components/ElementGroup/ElementGroup.tsx +16 -14
  50. package/components/FilePicker/FilePicker.tsx +48 -78
  51. package/components/FilePicker/index.tsx +2 -1
  52. package/components/FilePicker/utils.ts +9 -0
  53. package/components/HelperText/HelperText.tsx +0 -35
  54. package/components/Icon/iconFactory.tsx +3 -3
  55. package/components/Icon/index.tsx +1 -1
  56. package/components/Icon/types.ts +17 -6
  57. package/components/IconButton/IconButton.tsx +42 -57
  58. package/components/IconButton/utils.ts +142 -33
  59. package/components/ListItem/ListItem.tsx +3 -1
  60. package/components/ListItem/utils.ts +1 -1
  61. package/components/LoadingIndicator/LoadingIndicator.tsx +253 -0
  62. package/components/LoadingIndicator/LoadingIndicator.web.tsx +136 -0
  63. package/components/LoadingIndicator/index.tsx +13 -0
  64. package/components/LoadingIndicator/utils.ts +117 -0
  65. package/components/Menu/Menu.tsx +3 -18
  66. package/components/NavigationRail/NavigationRail.tsx +15 -9
  67. package/components/Popover/Popover.tsx +122 -145
  68. package/components/Popover/PopoverRoot.tsx +74 -0
  69. package/components/Popover/common.ts +50 -34
  70. package/components/Popover/index.ts +18 -1
  71. package/components/Popover/usePlatformMeasure.native.ts +90 -0
  72. package/components/Popover/usePlatformMeasure.ts +118 -0
  73. package/components/Popover/utils.ts +34 -0
  74. package/components/Select/Select.tsx +368 -507
  75. package/components/Select/context.tsx +72 -0
  76. package/components/Select/index.ts +8 -14
  77. package/components/Select/types.ts +2 -4
  78. package/components/Select/utils.ts +144 -0
  79. package/components/Slot/Slot.tsx +244 -0
  80. package/components/Slot/compose-refs.tsx +62 -0
  81. package/components/Slot/index.tsx +8 -0
  82. package/components/Surface/Surface.android.tsx +34 -8
  83. package/components/Surface/Surface.ios.tsx +36 -29
  84. package/components/Surface/Surface.tsx +31 -4
  85. package/components/Surface/utils.ts +44 -30
  86. package/components/Switch/Switch.tsx +8 -2
  87. package/components/Tabs/TabItem.tsx +35 -58
  88. package/components/Tabs/TabLabel.tsx +5 -9
  89. package/components/Tabs/Tabs.tsx +154 -148
  90. package/components/Tabs/utils.ts +15 -2
  91. package/components/TextInput/TextInput.tsx +658 -575
  92. package/components/TextInput/index.tsx +19 -3
  93. package/components/TextInput/types.ts +76 -27
  94. package/components/TextInput/utils.ts +225 -145
  95. package/components/TimeField/TimeField.tsx +75 -0
  96. package/components/TimeField/index.tsx +6 -0
  97. package/components/TimeField/useTimeFieldState.ts +70 -0
  98. package/components/{TimePickerField/sanitizeTime.ts → TimeField/utils.ts} +77 -10
  99. package/components/TimePicker/TimeInput.tsx +87 -37
  100. package/components/TimePicker/TimeInputs.tsx +137 -49
  101. package/components/TimePicker/TimePicker.tsx +73 -10
  102. package/components/TimePicker/TimePickerModal.tsx +186 -0
  103. package/components/TimePicker/context.tsx +17 -0
  104. package/components/TimePicker/index.tsx +15 -3
  105. package/components/TimePicker/utils.ts +93 -0
  106. package/components/Tooltip/Tooltip.tsx +42 -67
  107. package/components/Tooltip/TooltipContent.tsx +32 -5
  108. package/components/Tooltip/TooltipTrigger.tsx +20 -20
  109. package/components/Tooltip/index.tsx +1 -1
  110. package/components/TouchableRipple/TouchableRipple.native.tsx +50 -14
  111. package/components/TouchableRipple/TouchableRipple.tsx +137 -47
  112. package/hocs/withPortal.tsx +1 -1
  113. package/hooks/index.tsx +0 -6
  114. package/hooks/useActionState.tsx +19 -8
  115. package/hooks/useControlledValue.tsx +20 -4
  116. package/hooks/useFilePicker.tsx +6 -16
  117. package/hooks/useWhatHasUpdated.tsx +48 -0
  118. package/package.json +17 -13
  119. package/shortcuts-manager/ShortcutsManager/ShortcutsManager.tsx +5 -2
  120. package/styles/shadow.ts +2 -1
  121. package/styles/themes/LightTheme.tsx +1 -1
  122. package/utils/DocumentPicker/documentPicker.ts +78 -27
  123. package/utils/DocumentPicker/types.ts +0 -1
  124. package/utils/extractPropertiesFromStyles.ts +25 -0
  125. package/utils/extractSubcomponents.ts +89 -0
  126. package/utils/lodash.ts +77 -5
  127. package/components/DatePickerDocked/DatePickerDocked.tsx +0 -30
  128. package/components/DatePickerDocked/DatePickerDockedHeader.tsx +0 -129
  129. package/components/DatePickerDocked/index.tsx +0 -17
  130. package/components/DatePickerDocked/types.ts +0 -11
  131. package/components/DatePickerDocked/utils.ts +0 -157
  132. package/components/DatePickerInput/DatePickerInput.tsx +0 -139
  133. package/components/DatePickerInput/DatePickerInputModal.tsx +0 -48
  134. package/components/DatePickerInput/DatePickerInputWithoutModal.tsx +0 -77
  135. package/components/DatePickerInput/DateRangeInput.tsx +0 -88
  136. package/components/DatePickerInput/index.tsx +0 -10
  137. package/components/DatePickerInput/types.ts +0 -28
  138. package/components/DatePickerInput/utils.ts +0 -15
  139. package/components/DatePickerModal/AnimatedCrossView.tsx +0 -94
  140. package/components/DatePickerModal/CalendarEdit.tsx +0 -139
  141. package/components/DatePickerModal/DatePickerModal.tsx +0 -85
  142. package/components/DatePickerModal/DatePickerModalContent.tsx +0 -155
  143. package/components/DatePickerModal/DatePickerModalContentHeader.tsx +0 -213
  144. package/components/DatePickerModal/DatePickerModalHeader.tsx +0 -74
  145. package/components/DatePickerModal/DatePickerModalHeaderBackground.tsx +0 -13
  146. package/components/DatePickerModal/index.tsx +0 -16
  147. package/components/DatePickerModal/types.ts +0 -92
  148. package/components/DatePickerModal/utils.ts +0 -122
  149. package/components/DateTimePicker/DateTimePicker.tsx +0 -172
  150. package/components/DateTimePicker/index.tsx +0 -10
  151. package/components/DateTimePicker/utils.ts +0 -12
  152. package/components/Popover/Popover.native.tsx +0 -185
  153. package/components/TimePickerField/TimePickerField.tsx +0 -152
  154. package/components/TimePickerField/index.tsx +0 -10
  155. package/components/TimePickerField/utils.ts +0 -94
  156. package/components/TimePickerModal/TimePickerModal.tsx +0 -115
  157. package/components/TimePickerModal/index.tsx +0 -10
  158. package/components/TimePickerModal/utils.ts +0 -47
  159. package/hooks/useSearchable.tsx +0 -74
  160. package/hooks/useSubcomponents.tsx +0 -59
@@ -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);
@@ -1,213 +0,0 @@
1
- import { useMemo } from 'react';
2
- import { type TextStyle, View } from 'react-native';
3
-
4
- import { format } from '../../utils/date-fns';
5
- import type { ModeType } from '../DatePickerInline';
6
- import { IconButton } from '../IconButton';
7
- import { Text } from '../Text';
8
- import type { LocalState, LocalStateMultiple, LocalStateRange, LocalStateSingle } from './types';
9
- import { datePickerModalContentHeaderStyles } from './utils';
10
-
11
- export interface HeaderPickProps {
12
- moreLabel?: string;
13
- label?: string;
14
- emptyLabel?: string;
15
- saveLabel?: string;
16
- uppercase?: boolean;
17
- headerSeparator?: string;
18
- startLabel?: string;
19
- endLabel?: string;
20
- editIcon?: string;
21
- calendarIcon?: string;
22
- closeIcon?: string;
23
- }
24
-
25
- export interface HeaderContentProps extends HeaderPickProps {
26
- state: LocalState;
27
- mode: ModeType;
28
- collapsed: boolean;
29
- onToggle: () => any;
30
- // locale: string | undefined;
31
- textStyle?: TextStyle;
32
- separatorStyle?: TextStyle;
33
- }
34
-
35
- function getLabel(mode: ModeType, configuredLabel?: string) {
36
- if (configuredLabel) {
37
- return configuredLabel;
38
- }
39
- if (mode === 'range') {
40
- return 'Select period';
41
- }
42
- if (mode === 'multiple') {
43
- return 'Select dates';
44
- }
45
- if (mode === 'single') {
46
- return 'Select date';
47
- }
48
- return '...';
49
- }
50
-
51
- export default function DatePickerModalContentHeader(props: HeaderContentProps) {
52
- const {
53
- onToggle,
54
- collapsed,
55
- mode,
56
- moreLabel,
57
- uppercase,
58
- editIcon = 'pencil',
59
- calendarIcon = 'calendar',
60
- } = props;
61
-
62
- const label = getLabel(props.mode, props.label);
63
- const allowEditing = mode !== 'multiple';
64
-
65
- const {
66
- fillContainerStyle,
67
- headerContentContainerStyle,
68
- headerStyle,
69
- labelStyle,
70
- headerTextStyle,
71
- separatorStyle,
72
- iconButtonStyle,
73
- } = useMemo(() => {
74
- const {
75
- fill,
76
- headerContentContainer,
77
- header,
78
- label: _labelStyle,
79
- headerText,
80
- headerSeparator,
81
- icon,
82
- } = datePickerModalContentHeaderStyles;
83
-
84
- return {
85
- fillContainerStyle: fill,
86
- headerContentContainerStyle: headerContentContainer,
87
- headerStyle: header,
88
- labelStyle: _labelStyle,
89
- headerTextStyle: headerText,
90
- separatorStyle: headerSeparator,
91
- iconButtonStyle: icon,
92
- };
93
- }, []);
94
-
95
- return (
96
- <View style={headerStyle}>
97
- <View>
98
- <Text style={labelStyle}>{uppercase ? label.toUpperCase() : label}</Text>
99
- <View style={headerContentContainerStyle}>
100
- <>
101
- {mode === 'range' ? (
102
- <HeaderContentRange
103
- {...props}
104
- textStyle={headerTextStyle}
105
- separatorStyle={separatorStyle}
106
- />
107
- ) : null}
108
- </>
109
- <>
110
- {mode === 'single' ? (
111
- <HeaderContentSingle {...props} textStyle={headerTextStyle} />
112
- ) : null}
113
- </>
114
- <>
115
- {mode === 'multiple' ? (
116
- <HeaderContentMulti
117
- {...props}
118
- moreLabel={moreLabel}
119
- textStyle={headerTextStyle}
120
- />
121
- ) : null}
122
- </>
123
- </View>
124
- </View>
125
- <View style={fillContainerStyle} />
126
- <>
127
- {allowEditing ? (
128
- <IconButton
129
- name={collapsed ? editIcon : calendarIcon}
130
- accessibilityLabel={collapsed ? 'Type in date' : 'Pick date from calendar'}
131
- style={iconButtonStyle}
132
- onPress={onToggle}
133
- />
134
- ) : null}
135
- </>
136
- </View>
137
- );
138
- }
139
-
140
- // TODO add translations
141
- export function HeaderContentSingle({
142
- state,
143
- emptyLabel = ' ',
144
- // locale,
145
- textStyle,
146
- }: HeaderContentProps) {
147
- const singleState = state as LocalStateSingle;
148
-
149
- const label = useMemo(
150
- () => (singleState.date ? format(singleState.date, 'LLL dd') : emptyLabel),
151
- [emptyLabel, singleState.date],
152
- );
153
-
154
- return <Text style={textStyle}>{label}</Text>;
155
- }
156
-
157
- // TODO add translations
158
- export function HeaderContentMulti({
159
- state,
160
- emptyLabel = ' ',
161
- moreLabel = 'more',
162
- textStyle,
163
- }: // locale = 'en',
164
- HeaderContentProps & { moreLabel: string | undefined }) {
165
- const multiState = state as LocalStateMultiple;
166
-
167
- const label = useMemo(() => {
168
- let _label = emptyLabel;
169
- const dateCount = multiState.dates?.length || 0;
170
-
171
- if (dateCount) {
172
- if (dateCount <= 2) {
173
- _label = multiState.dates!.map(date => format(date, 'LLL dd')).join(', ');
174
- } else {
175
- _label =
176
- format(multiState.dates![0], 'LLL dd') + ` (+ ${dateCount - 1} ${moreLabel})`;
177
- }
178
- }
179
- return _label;
180
- }, [emptyLabel, moreLabel, multiState.dates]);
181
-
182
- return <Text style={textStyle}>{label}</Text>;
183
- }
184
-
185
- // TODO add translations
186
- export function HeaderContentRange({
187
- // locale,
188
- state,
189
- headerSeparator = '-',
190
- startLabel = 'Start',
191
- endLabel = 'End',
192
- textStyle,
193
- separatorStyle,
194
- }: HeaderContentProps) {
195
- const rangeState = state as LocalStateRange;
196
-
197
- const startDateLabel = useMemo(
198
- () => (rangeState.startDate ? format(rangeState.startDate, 'LLL dd') : startLabel),
199
- [rangeState.startDate, startLabel],
200
- );
201
- const endDateLabel = useMemo(
202
- () => (rangeState.endDate ? format(rangeState.endDate, 'LLL dd') : endLabel),
203
- [endLabel, rangeState.endDate],
204
- );
205
-
206
- return (
207
- <>
208
- <Text style={textStyle}>{startDateLabel}</Text>
209
- <Text style={separatorStyle}>{headerSeparator}</Text>
210
- <Text style={textStyle}>{endDateLabel}</Text>
211
- </>
212
- );
213
- }
@@ -1,74 +0,0 @@
1
- import { useMemo } from 'react';
2
- import { Animated, SafeAreaView, View } from 'react-native';
3
-
4
- import { resolveStateVariant } from '../../utils';
5
- import { Button } from '../Button';
6
- import { IconButton } from '../IconButton';
7
- import { datePickerModalHeaderStyles } from './utils';
8
-
9
- export interface DatePickerModalHeaderProps {
10
- disableSafeTop?: boolean;
11
- saveLabel?: string;
12
- saveLabelDisabled?: boolean;
13
- onClose: () => void;
14
- onSave: () => void;
15
- closeIcon?: string;
16
- }
17
-
18
- export default function DatePickerModalHeader(props: DatePickerModalHeaderProps) {
19
- const { disableSafeTop, closeIcon = 'close' } = props;
20
-
21
- const state = resolveStateVariant({
22
- disableSafeTop: !!disableSafeTop,
23
- });
24
- datePickerModalHeaderStyles.useVariants({
25
- state: state as any,
26
- });
27
-
28
- const saveLabel = props.saveLabel || 'Save';
29
-
30
- const {
31
- animatedContainerStyle,
32
- safeContentStyle,
33
- appBarHeaderStyle,
34
- iconButtonStyle,
35
- buttonStyle,
36
- } = useMemo(() => {
37
- const { animated, safeContent, appbarHeader } = datePickerModalHeaderStyles;
38
-
39
- return {
40
- iconButtonStyle: { color: datePickerModalHeaderStyles.root.color },
41
- buttonStyle: { color: datePickerModalHeaderStyles.root.color },
42
- animatedContainerStyle: animated,
43
- safeContentStyle: safeContent,
44
- appBarHeaderStyle: appbarHeader,
45
- };
46
- // eslint-disable-next-line react-hooks/exhaustive-deps
47
- }, [state]);
48
-
49
- return (
50
- <>
51
- <Animated.View style={animatedContainerStyle}>
52
- <SafeAreaView style={safeContentStyle}>
53
- <View style={appBarHeaderStyle}>
54
- <IconButton
55
- name={closeIcon}
56
- accessibilityLabel={'Close'}
57
- onPress={props.onClose}
58
- style={iconButtonStyle}
59
- testID="date-picker-close"
60
- />
61
- <Button
62
- variant="contained"
63
- style={buttonStyle}
64
- onPress={props.onSave}
65
- disabled={props.saveLabelDisabled || false}
66
- testID="dates-save">
67
- {saveLabel}
68
- </Button>
69
- </View>
70
- </SafeAreaView>
71
- </Animated.View>
72
- </>
73
- );
74
- }
@@ -1,13 +0,0 @@
1
- import { Animated, SafeAreaView } from 'react-native';
2
-
3
- import { datePickerModalHeaderBackgroundStyles } from './utils';
4
-
5
- export default function DatePickerModalHeaderBackground({ children }: { children: any }) {
6
- return (
7
- <Animated.View style={datePickerModalHeaderBackgroundStyles.header}>
8
- <SafeAreaView style={datePickerModalHeaderBackgroundStyles.safeContent}>
9
- {children}
10
- </SafeAreaView>
11
- </Animated.View>
12
- );
13
- }
@@ -1,16 +0,0 @@
1
- import { getRegisteredComponentWithFallback } from '../../core';
2
- import DatePickerModalDefault from './DatePickerModal';
3
-
4
- export const DatePickerModal = getRegisteredComponentWithFallback(
5
- 'DatePickerModal',
6
- DatePickerModalDefault,
7
- );
8
-
9
- export type { DatePickerModalProps } from './types';
10
- export {
11
- datePickerModalContentHeaderStyles,
12
- datePickerModalEditStyles,
13
- datePickerModalHeaderBackgroundStyles,
14
- datePickerModalHeaderStyles,
15
- datePickerModalStyles,
16
- } from './utils';
@@ -1,92 +0,0 @@
1
- import type { ViewStyle } from 'react-native';
2
-
3
- import type {
4
- BaseDatePickerProps,
5
- CalendarDate,
6
- CalendarDates,
7
- MultiChange,
8
- MultiConfirm,
9
- RangeChange,
10
- SingleChange,
11
- } from '../DatePickerInline';
12
- import type { HeaderPickProps } from './DatePickerModalContentHeader';
13
-
14
- export type LocalState = LocalStateSingle | LocalStateMultiple | LocalStateRange;
15
-
16
- export type LocalStateSingle = {
17
- date: CalendarDate;
18
- };
19
-
20
- export type LocalStateMultiple = {
21
- dates: CalendarDates;
22
- };
23
-
24
- export type LocalStateRange = {
25
- startDate: CalendarDate;
26
- endDate: CalendarDate;
27
- };
28
-
29
- interface DatePickerModalContentBaseProps {
30
- inputFormat?: string;
31
- locale?: string;
32
- onClose: () => any;
33
- disableSafeTop?: boolean;
34
- saveLabelDisabled?: boolean;
35
- }
36
-
37
- export interface DatePickerModalContentRangeProps
38
- extends HeaderPickProps,
39
- BaseDatePickerProps,
40
- DatePickerModalContentBaseProps {
41
- mode?: 'range';
42
- startDate?: CalendarDate;
43
- endDate?: CalendarDate;
44
- onChange?: RangeChange;
45
- onConfirm?: RangeChange;
46
- }
47
-
48
- export interface DatePickerModalContentSingleProps
49
- extends HeaderPickProps,
50
- BaseDatePickerProps,
51
- DatePickerModalContentBaseProps {
52
- mode?: 'single';
53
- date?: CalendarDate;
54
- onChange?: SingleChange;
55
- onConfirm?: SingleChange;
56
- dateMode?: 'start' | 'end';
57
- }
58
-
59
- export interface DatePickerModalContentMultiProps
60
- extends HeaderPickProps,
61
- BaseDatePickerProps,
62
- DatePickerModalContentBaseProps {
63
- mode?: 'multiple';
64
- dates?: CalendarDates;
65
- onChange?: MultiChange;
66
- onConfirm?: MultiConfirm;
67
- }
68
-
69
- interface BaseDatePickerModalProps {
70
- isOpen: boolean;
71
- animationType?: 'slide' | 'fade' | 'none';
72
- disableStatusBar?: boolean;
73
- disableStatusBarPadding?: boolean;
74
- style?: ViewStyle;
75
- }
76
-
77
- export interface DatePickerModalSingleProps
78
- extends DatePickerModalContentSingleProps,
79
- BaseDatePickerModalProps {}
80
-
81
- export interface DatePickerModalMultiProps
82
- extends DatePickerModalContentMultiProps,
83
- BaseDatePickerModalProps {}
84
-
85
- export interface DatePickerModalRangeProps
86
- extends DatePickerModalContentRangeProps,
87
- BaseDatePickerModalProps {}
88
-
89
- export type DatePickerModalProps =
90
- | DatePickerModalRangeProps
91
- | DatePickerModalSingleProps
92
- | DatePickerModalMultiProps;