@hero-design/rn 8.94.0 → 8.96.0
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.
- package/.turbo/turbo-build.log +7 -2
- package/CHANGELOG.md +12 -0
- package/es/index.js +1319 -966
- package/lib/index.js +1319 -965
- package/locales/en_AU.js +10 -0
- package/locales/en_AU.mjs +8 -0
- package/locales/en_CA.js +10 -0
- package/locales/en_CA.mjs +8 -0
- package/locales/index.js +11 -0
- package/locales/index.mjs +9 -0
- package/locales/types.js +2 -0
- package/locales/types.mjs +1 -0
- package/package.json +4 -3
- package/rollup.config.mjs +97 -58
- package/src/components/DatePicker/DatePickerAndroid.tsx +27 -7
- package/src/components/DatePicker/DatePickerCalendar.tsx +23 -4
- package/src/components/DatePicker/DatePickerIOS.tsx +27 -8
- package/src/components/DatePicker/__tests__/DatePicker.spec.tsx +30 -1
- package/src/components/DatePicker/__tests__/DatePickerAndroid.spec.tsx +27 -0
- package/src/components/DatePicker/__tests__/DatePickerCalendar.spec.tsx +27 -0
- package/src/components/DatePicker/__tests__/DatePickerIOS.spec.tsx +28 -1
- package/src/components/DatePicker/__tests__/__snapshots__/DatePickerIOS.spec.tsx.snap +1 -0
- package/src/components/DatePicker/hooks/__tests__/useFormatDate.spec.ts +61 -0
- package/src/components/DatePicker/{useCalculateDate.tsx → hooks/useCalculateDate.tsx} +1 -1
- package/src/components/DatePicker/hooks/useFormatDate.ts +25 -0
- package/src/components/DatePicker/hooks/utils.ts +30 -0
- package/src/components/DatePicker/types.ts +15 -1
- package/src/components/HeroDesignProvider/index.tsx +19 -6
- package/src/components/LocaleProvider/__tests__/utils.specs.ts +12 -0
- package/src/components/LocaleProvider/context.ts +7 -0
- package/src/components/LocaleProvider/hooks.ts +19 -0
- package/src/components/LocaleProvider/index.tsx +27 -0
- package/src/components/LocaleProvider/utils.ts +14 -0
- package/src/index.ts +2 -0
- package/src/locales/en_AU.ts +10 -0
- package/src/locales/en_CA.ts +10 -0
- package/src/locales/index.ts +7 -0
- package/src/locales/types.ts +12 -0
- package/src/testHelpers/renderWithTheme.tsx +7 -1
- package/src/types.ts +4 -0
- package/stats/8.95.0/rn-stats.html +4842 -0
- package/stats/8.96.0/rn-stats.html +4842 -0
- package/types/components/DatePicker/DatePickerAndroid.d.ts +1 -1
- package/types/components/DatePicker/DatePickerCalendar.d.ts +1 -1
- package/types/components/DatePicker/DatePickerIOS.d.ts +1 -1
- package/types/components/DatePicker/{useCalculateDate.d.ts → hooks/useCalculateDate.d.ts} +1 -1
- package/types/components/DatePicker/hooks/useFormatDate.d.ts +10 -0
- package/types/components/DatePicker/hooks/utils.d.ts +6 -0
- package/types/components/DatePicker/types.d.ts +8 -1
- package/types/components/HeroDesignProvider/index.d.ts +5 -1
- package/types/components/LocaleProvider/__tests__/utils.specs.d.ts +1 -0
- package/types/components/LocaleProvider/context.d.ts +3 -0
- package/types/components/LocaleProvider/hooks.d.ts +5 -0
- package/types/components/LocaleProvider/index.d.ts +7 -0
- package/types/components/LocaleProvider/utils.d.ts +3 -0
- package/types/index.d.ts +2 -1
- package/types/locales/en_AU.d.ts +3 -0
- package/types/locales/en_CA.d.ts +3 -0
- package/types/locales/index.d.ts +5 -0
- package/types/locales/types.d.ts +10 -0
- package/types/types.d.ts +2 -1
package/locales/en_AU.js
ADDED
package/locales/en_CA.js
ADDED
package/locales/index.js
ADDED
package/locales/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hero-design/rn",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.96.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.js",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"@emotion/primitives-core": "11.0.0",
|
|
24
24
|
"@emotion/react": "^11.9.3",
|
|
25
25
|
"@hero-design/colors": "8.46.0",
|
|
26
|
-
"date-fns": "^2.
|
|
26
|
+
"date-fns": "^2.30.0",
|
|
27
27
|
"hero-editor": "^1.15.5",
|
|
28
28
|
"nanoid": "^5.0.9"
|
|
29
29
|
},
|
|
@@ -64,6 +64,7 @@
|
|
|
64
64
|
"@rollup/plugin-replace": "^6.0.1",
|
|
65
65
|
"@rollup/plugin-typescript": "^12.1.1",
|
|
66
66
|
"@testing-library/jest-native": "^5.4.2",
|
|
67
|
+
"@testing-library/react-hooks": "^8.0.1",
|
|
67
68
|
"@testing-library/react-native": "^9.1.0",
|
|
68
69
|
"@types/events": "^3.0.3",
|
|
69
70
|
"@types/jest": "^29.5.3",
|
|
@@ -81,7 +82,7 @@
|
|
|
81
82
|
"prettier-config-hd": "8.42.4",
|
|
82
83
|
"react": "18.2.0",
|
|
83
84
|
"react-dom": "^18.2.0",
|
|
84
|
-
"react-native": "
|
|
85
|
+
"react-native": "0.74.5",
|
|
85
86
|
"react-native-gesture-handler": "^2.15.0",
|
|
86
87
|
"react-native-linear-gradient": "2.8.3",
|
|
87
88
|
"react-native-pager-view": "^6.2.1",
|
package/rollup.config.mjs
CHANGED
|
@@ -7,7 +7,8 @@ import replace from '@rollup/plugin-replace';
|
|
|
7
7
|
import copy from 'rollup-plugin-copy';
|
|
8
8
|
import flow from 'rollup-plugin-flow';
|
|
9
9
|
import { visualizer } from 'rollup-plugin-visualizer';
|
|
10
|
-
|
|
10
|
+
import glob from 'glob';
|
|
11
|
+
import { fileURLToPath } from 'node:url';
|
|
11
12
|
import pkg from './package.json' assert { type: 'json' };
|
|
12
13
|
|
|
13
14
|
const extensions = ['.js', '.jsx', '.ts', '.tsx'];
|
|
@@ -16,60 +17,98 @@ const generateBuildStats = process.env.GENERATE_BUILD_STATS === 'true';
|
|
|
16
17
|
const bundleTemplate = process.env.BUNDLE_TEMPLATE || 'treemap';
|
|
17
18
|
const fileName = process.env.FILE_NAME || `stats/${pkg.version}/rn-stats.html`;
|
|
18
19
|
|
|
19
|
-
export default
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
20
|
+
export default [
|
|
21
|
+
{
|
|
22
|
+
input: 'src/index.ts',
|
|
23
|
+
output: [
|
|
24
|
+
{
|
|
25
|
+
file: pkg.main,
|
|
26
|
+
format: 'cjs',
|
|
27
|
+
interop: 'compat',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
file: pkg.module,
|
|
31
|
+
format: 'es',
|
|
32
|
+
interop: 'compat',
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
external: [
|
|
36
|
+
'react',
|
|
37
|
+
'react-native',
|
|
38
|
+
'react-native-safe-area-context',
|
|
39
|
+
'react-native-svg',
|
|
40
|
+
'@react-native-community/datetimepicker',
|
|
41
|
+
'@react-native-community/slider',
|
|
42
|
+
'react-native-gesture-handler',
|
|
43
|
+
'react-native-webview',
|
|
44
|
+
'react-native-pager-view',
|
|
45
|
+
'react-native-vector-icons',
|
|
46
|
+
'react-native-linear-gradient',
|
|
47
|
+
'@hero-design/react-native-month-year-picker',
|
|
48
|
+
'@ptomasroos/react-native-multi-slider',
|
|
49
|
+
],
|
|
50
|
+
plugins: [
|
|
51
|
+
replace({
|
|
52
|
+
'process.env.NODE_ENV': JSON.stringify('production'),
|
|
53
|
+
}),
|
|
54
|
+
nodeResolve({ extensions, browser: true }),
|
|
55
|
+
flow(),
|
|
56
|
+
commonjs(),
|
|
57
|
+
json(),
|
|
58
|
+
typescript({ tsconfig: './tsconfig.rollup.json' }),
|
|
59
|
+
babel({ extensions, babelHelpers: 'bundled' }),
|
|
60
|
+
copy({
|
|
61
|
+
targets: [
|
|
62
|
+
{
|
|
63
|
+
src: 'assets/fonts/hero-icons-mobile.ttf',
|
|
64
|
+
dest: 'lib/assets/fonts',
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
}),
|
|
68
|
+
...(generateBuildStats
|
|
69
|
+
? [
|
|
70
|
+
visualizer({
|
|
71
|
+
filename: fileName,
|
|
72
|
+
template: bundleTemplate,
|
|
73
|
+
}),
|
|
74
|
+
]
|
|
75
|
+
: []),
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
input: Object.fromEntries(
|
|
80
|
+
glob.sync('src/locales/*.ts').map((file) => [
|
|
81
|
+
// This remove `src/` as well as the file extension from each
|
|
82
|
+
// file, so e.g. src/nested/foo.js becomes locales/foo
|
|
83
|
+
`locales/${file.split('/').pop().split('.')[0]}`,
|
|
84
|
+
// This expands the relative paths to absolute paths, so e.g.
|
|
85
|
+
// src/nested/foo becomes /project/src/nested/foo.js
|
|
86
|
+
fileURLToPath(new URL(file, import.meta.url)),
|
|
87
|
+
])
|
|
88
|
+
),
|
|
89
|
+
output: [
|
|
90
|
+
{
|
|
91
|
+
format: 'es',
|
|
92
|
+
interop: 'auto',
|
|
93
|
+
dir: '.',
|
|
94
|
+
entryFileNames: '[name].mjs',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
format: 'cjs',
|
|
98
|
+
interop: 'auto',
|
|
99
|
+
dir: '.',
|
|
100
|
+
entryFileNames: '[name].js',
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
plugins: [
|
|
104
|
+
typescript({
|
|
105
|
+
tsconfig: './tsconfig.rollup.json',
|
|
106
|
+
declaration: false,
|
|
107
|
+
exclude: ['src/**/*.spec.ts', 'src/**/*.spec.tsx'],
|
|
108
|
+
}),
|
|
109
|
+
copy({
|
|
110
|
+
targets: [{ src: 'types/locales/*.ts', dest: 'locales' }],
|
|
111
|
+
}),
|
|
112
|
+
],
|
|
113
|
+
},
|
|
114
|
+
];
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import DateTimePicker from '@react-native-community/datetimepicker';
|
|
2
|
-
import formatDate from 'date-fns/fp/format';
|
|
3
2
|
import React, { useState } from 'react';
|
|
4
3
|
import { TouchableOpacity, View } from 'react-native';
|
|
5
4
|
|
|
6
5
|
import { MonthYearPickerDialogueAndroid } from '@hero-design/react-native-month-year-picker';
|
|
6
|
+
import { useTheme } from '../../theme';
|
|
7
7
|
import TextInput from '../TextInput';
|
|
8
|
+
import useCalculateDate from './hooks/useCalculateDate';
|
|
9
|
+
import useFormatDate from './hooks/useFormatDate';
|
|
8
10
|
import type { DatePickerProps } from './types';
|
|
9
|
-
import useCalculateDate from './useCalculateDate';
|
|
10
|
-
import { useTheme } from '../../theme';
|
|
11
11
|
|
|
12
12
|
type DatePickerAndroidProps = Omit<
|
|
13
13
|
DatePickerProps,
|
|
@@ -22,7 +22,7 @@ const DatePickerAndroid = ({
|
|
|
22
22
|
label,
|
|
23
23
|
placeholder,
|
|
24
24
|
onChange,
|
|
25
|
-
displayFormat
|
|
25
|
+
displayFormat,
|
|
26
26
|
disabled = false,
|
|
27
27
|
required,
|
|
28
28
|
error,
|
|
@@ -30,12 +30,20 @@ const DatePickerAndroid = ({
|
|
|
30
30
|
style,
|
|
31
31
|
testID,
|
|
32
32
|
variant = 'default',
|
|
33
|
+
renderSelectedValue,
|
|
34
|
+
locale,
|
|
33
35
|
}: DatePickerAndroidProps) => {
|
|
34
36
|
const [open, setOpen] = useState(false);
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
+
|
|
38
|
+
const { displayValue, format } = useFormatDate({
|
|
39
|
+
displayFormat,
|
|
40
|
+
locale,
|
|
41
|
+
value,
|
|
42
|
+
});
|
|
37
43
|
|
|
38
44
|
useCalculateDate({ minDate, maxDate, onChange, value });
|
|
45
|
+
|
|
46
|
+
const pickerInitValue = value || new Date();
|
|
39
47
|
const theme = useTheme();
|
|
40
48
|
|
|
41
49
|
return (
|
|
@@ -45,13 +53,25 @@ const DatePickerAndroid = ({
|
|
|
45
53
|
label={label}
|
|
46
54
|
value={displayValue}
|
|
47
55
|
suffix="calendar-dates-outlined"
|
|
48
|
-
placeholder={placeholder ||
|
|
56
|
+
placeholder={placeholder || format}
|
|
49
57
|
disabled={disabled}
|
|
50
58
|
error={error}
|
|
51
59
|
required={required}
|
|
52
60
|
helpText={helpText}
|
|
53
61
|
style={style}
|
|
54
62
|
testID={testID}
|
|
63
|
+
renderInputValue={
|
|
64
|
+
renderSelectedValue !== undefined && !!value
|
|
65
|
+
? (props) =>
|
|
66
|
+
renderSelectedValue(
|
|
67
|
+
{
|
|
68
|
+
date: value,
|
|
69
|
+
formattedDateString: displayValue,
|
|
70
|
+
},
|
|
71
|
+
props
|
|
72
|
+
)
|
|
73
|
+
: undefined
|
|
74
|
+
}
|
|
55
75
|
/>
|
|
56
76
|
</View>
|
|
57
77
|
{open && variant === 'month-year' ? (
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import formatDate from 'date-fns/fp/format';
|
|
2
1
|
import React, { useState } from 'react';
|
|
3
2
|
import { Platform, ScrollView, TouchableOpacity, View } from 'react-native';
|
|
4
3
|
|
|
@@ -6,8 +5,9 @@ import BottomSheet from '../BottomSheet';
|
|
|
6
5
|
import Button from '../Button';
|
|
7
6
|
import Calendar, { CalendarProps } from '../Calendar';
|
|
8
7
|
import TextInput from '../TextInput';
|
|
8
|
+
import useCalculateDate from './hooks/useCalculateDate';
|
|
9
|
+
import useFormatDate from './hooks/useFormatDate';
|
|
9
10
|
import type { DatePickerProps } from './types';
|
|
10
|
-
import useCalculateDate from './useCalculateDate';
|
|
11
11
|
|
|
12
12
|
const InternalCalendar = ({
|
|
13
13
|
minDate,
|
|
@@ -68,7 +68,7 @@ const DatePickerCalendar = ({
|
|
|
68
68
|
placeholder,
|
|
69
69
|
onChange,
|
|
70
70
|
confirmLabel,
|
|
71
|
-
displayFormat
|
|
71
|
+
displayFormat,
|
|
72
72
|
disabled = false,
|
|
73
73
|
required,
|
|
74
74
|
error,
|
|
@@ -78,13 +78,20 @@ const DatePickerCalendar = ({
|
|
|
78
78
|
monthPickerConfirmLabel,
|
|
79
79
|
monthPickerCancelLabel,
|
|
80
80
|
supportedOrientations = ['portrait'],
|
|
81
|
+
renderSelectedValue,
|
|
82
|
+
locale,
|
|
81
83
|
}: Omit<DatePickerProps, 'variant'>) => {
|
|
82
84
|
const [open, setOpen] = useState(false);
|
|
83
85
|
const [monthPickerVisible, setMonthPickerVisible] = useState(false);
|
|
84
86
|
const shouldHideToolbar = Platform.OS === 'ios' && monthPickerVisible;
|
|
85
87
|
|
|
86
88
|
const [selectingDate, setSelectingDate] = useState<Date>(value || new Date());
|
|
87
|
-
|
|
89
|
+
|
|
90
|
+
const { displayValue } = useFormatDate({
|
|
91
|
+
value,
|
|
92
|
+
displayFormat,
|
|
93
|
+
locale,
|
|
94
|
+
});
|
|
88
95
|
|
|
89
96
|
useCalculateDate({ minDate, maxDate, onChange, value });
|
|
90
97
|
|
|
@@ -102,6 +109,18 @@ const DatePickerCalendar = ({
|
|
|
102
109
|
helpText={helpText}
|
|
103
110
|
testID={testID}
|
|
104
111
|
style={style}
|
|
112
|
+
renderInputValue={
|
|
113
|
+
renderSelectedValue !== undefined && !!value
|
|
114
|
+
? (props) =>
|
|
115
|
+
renderSelectedValue(
|
|
116
|
+
{
|
|
117
|
+
date: value,
|
|
118
|
+
formattedDateString: displayValue,
|
|
119
|
+
},
|
|
120
|
+
props
|
|
121
|
+
)
|
|
122
|
+
: undefined
|
|
123
|
+
}
|
|
105
124
|
/>
|
|
106
125
|
</View>
|
|
107
126
|
<BottomSheet
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import DateTimePicker from '@react-native-community/datetimepicker';
|
|
2
|
-
import formatDate from 'date-fns/fp/format';
|
|
3
2
|
import React, { useState } from 'react';
|
|
4
3
|
import { TouchableOpacity, View } from 'react-native';
|
|
5
4
|
|
|
@@ -7,10 +6,12 @@ import { MonthYearPickerViewIOS } from '@hero-design/react-native-month-year-pic
|
|
|
7
6
|
import { useTheme } from '../../theme';
|
|
8
7
|
import BottomSheet from '../BottomSheet';
|
|
9
8
|
import Button from '../Button';
|
|
9
|
+
import { useLocale } from '../LocaleProvider/hooks';
|
|
10
10
|
import TextInput from '../TextInput';
|
|
11
|
+
import useCalculateDate, { getDateValue } from './hooks/useCalculateDate';
|
|
12
|
+
import useFormatDate from './hooks/useFormatDate';
|
|
11
13
|
import { StyledPickerWrapper } from './StyledDatePicker';
|
|
12
14
|
import type { DatePickerProps } from './types';
|
|
13
|
-
import useCalculateDate, { getDateValue } from './useCalculateDate';
|
|
14
15
|
|
|
15
16
|
type DatePickerIOSProps = Omit<
|
|
16
17
|
DatePickerProps,
|
|
@@ -26,7 +27,7 @@ const DatePickerIOS = ({
|
|
|
26
27
|
placeholder,
|
|
27
28
|
onChange,
|
|
28
29
|
confirmLabel,
|
|
29
|
-
displayFormat
|
|
30
|
+
displayFormat,
|
|
30
31
|
disabled = false,
|
|
31
32
|
required,
|
|
32
33
|
error,
|
|
@@ -36,13 +37,19 @@ const DatePickerIOS = ({
|
|
|
36
37
|
supportedOrientations = ['portrait'],
|
|
37
38
|
variant = 'default',
|
|
38
39
|
locale,
|
|
40
|
+
renderSelectedValue,
|
|
39
41
|
}: DatePickerIOSProps) => {
|
|
42
|
+
const theme = useTheme();
|
|
40
43
|
const [selectingDate, setSelectingDate] = useState<Date>(
|
|
41
44
|
getDateValue(value || new Date(), minDate, maxDate)
|
|
42
45
|
);
|
|
43
46
|
const [open, setOpen] = useState(false);
|
|
44
|
-
const
|
|
45
|
-
const
|
|
47
|
+
const { lang: defaultLocale } = useLocale();
|
|
48
|
+
const { displayValue, format } = useFormatDate({
|
|
49
|
+
displayFormat,
|
|
50
|
+
locale,
|
|
51
|
+
value,
|
|
52
|
+
});
|
|
46
53
|
|
|
47
54
|
useCalculateDate({ minDate, maxDate, onChange, value });
|
|
48
55
|
|
|
@@ -53,13 +60,25 @@ const DatePickerIOS = ({
|
|
|
53
60
|
label={label}
|
|
54
61
|
value={displayValue}
|
|
55
62
|
suffix="calendar-dates-outlined"
|
|
56
|
-
placeholder={placeholder ||
|
|
63
|
+
placeholder={placeholder || format}
|
|
57
64
|
disabled={disabled}
|
|
58
65
|
error={error}
|
|
59
66
|
required={required}
|
|
60
67
|
helpText={helpText}
|
|
61
68
|
testID={testID}
|
|
62
69
|
style={style}
|
|
70
|
+
renderInputValue={
|
|
71
|
+
renderSelectedValue !== undefined && !!value
|
|
72
|
+
? (props) =>
|
|
73
|
+
renderSelectedValue(
|
|
74
|
+
{
|
|
75
|
+
date: value,
|
|
76
|
+
formattedDateString: displayValue,
|
|
77
|
+
},
|
|
78
|
+
props
|
|
79
|
+
)
|
|
80
|
+
: undefined
|
|
81
|
+
}
|
|
63
82
|
/>
|
|
64
83
|
</View>
|
|
65
84
|
<BottomSheet
|
|
@@ -84,7 +103,7 @@ const DatePickerIOS = ({
|
|
|
84
103
|
{variant === 'month-year' ? (
|
|
85
104
|
<MonthYearPickerViewIOS
|
|
86
105
|
value={value}
|
|
87
|
-
locale={locale}
|
|
106
|
+
locale={locale || defaultLocale}
|
|
88
107
|
minimumDate={minDate}
|
|
89
108
|
textColor={theme.colors.onDefaultGlobalSurface}
|
|
90
109
|
maximumDate={maxDate}
|
|
@@ -98,7 +117,7 @@ const DatePickerIOS = ({
|
|
|
98
117
|
) : null}
|
|
99
118
|
{variant === 'default' ? (
|
|
100
119
|
<DateTimePicker
|
|
101
|
-
locale={locale}
|
|
120
|
+
locale={locale || defaultLocale}
|
|
102
121
|
testID="datePickerIOS"
|
|
103
122
|
value={selectingDate}
|
|
104
123
|
minimumDate={minDate}
|
|
@@ -3,7 +3,7 @@ import { Platform } from 'react-native';
|
|
|
3
3
|
import { fireEvent } from '@testing-library/react-native';
|
|
4
4
|
import DatePicker from '..';
|
|
5
5
|
import renderWithTheme from '../../../testHelpers/renderWithTheme';
|
|
6
|
-
import { Button } from '../../..';
|
|
6
|
+
import { Button, Typography } from '../../..';
|
|
7
7
|
|
|
8
8
|
describe('DatePicker', () => {
|
|
9
9
|
it('renders DatePickerIOS when OS is iOS', () => {
|
|
@@ -146,4 +146,33 @@ describe('DatePicker', () => {
|
|
|
146
146
|
fireEvent.press(getByText('Change max date'));
|
|
147
147
|
expect(queryByDisplayValue('21/12/1994')).toBeTruthy();
|
|
148
148
|
});
|
|
149
|
+
|
|
150
|
+
it.each`
|
|
151
|
+
OS | variant
|
|
152
|
+
${'ios'} | ${'default'}
|
|
153
|
+
${'android'} | ${'default'}
|
|
154
|
+
${'ios'} | ${'calendar'}
|
|
155
|
+
${'android'} | ${'calendar'}
|
|
156
|
+
`(
|
|
157
|
+
'renders correct with custom value with OS=$OS and variant=$variant',
|
|
158
|
+
({ OS, variant }) => {
|
|
159
|
+
Platform.OS = OS;
|
|
160
|
+
const { getByTestId } = renderWithTheme(
|
|
161
|
+
<DatePicker
|
|
162
|
+
value={new Date('1995-12-17')}
|
|
163
|
+
label="Start date"
|
|
164
|
+
confirmLabel="Confirm"
|
|
165
|
+
onChange={jest.fn()}
|
|
166
|
+
variant={variant}
|
|
167
|
+
renderSelectedValue={({ date }) => (
|
|
168
|
+
<Typography.Body testID="custom-value">
|
|
169
|
+
{date.toLocaleDateString()}
|
|
170
|
+
</Typography.Body>
|
|
171
|
+
)}
|
|
172
|
+
/>
|
|
173
|
+
);
|
|
174
|
+
|
|
175
|
+
expect(getByTestId('custom-value')).toBeVisible();
|
|
176
|
+
}
|
|
177
|
+
);
|
|
149
178
|
});
|
|
@@ -2,6 +2,11 @@ import { fireEvent } from '@testing-library/react-native';
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import renderWithTheme from '../../../testHelpers/renderWithTheme';
|
|
4
4
|
import DatePickerAndroid from '../DatePickerAndroid';
|
|
5
|
+
import HeroDesignProvider from '../../HeroDesignProvider';
|
|
6
|
+
import { theme } from '../../..';
|
|
7
|
+
|
|
8
|
+
import enAU from '../../../locales/en_AU';
|
|
9
|
+
import enCA from '../../../locales/en_CA';
|
|
5
10
|
|
|
6
11
|
describe('DatePickerAndroid', () => {
|
|
7
12
|
it('renders correctly', () => {
|
|
@@ -79,4 +84,26 @@ describe('DatePickerAndroid', () => {
|
|
|
79
84
|
expect(queryByText('Android month year picker')).toBeNull();
|
|
80
85
|
expect(onChangeSpy).toBeCalledWith(new Date('2019-09-01'));
|
|
81
86
|
});
|
|
87
|
+
|
|
88
|
+
it.each`
|
|
89
|
+
locale | expected
|
|
90
|
+
${enAU} | ${'21/12/1995'}
|
|
91
|
+
${enCA} | ${'Dec 21, 1995'}
|
|
92
|
+
`(
|
|
93
|
+
'renders correct format for $locale.lang locale',
|
|
94
|
+
({ locale, expected }) => {
|
|
95
|
+
const { getByDisplayValue } = renderWithTheme(
|
|
96
|
+
<HeroDesignProvider theme={theme} locale={locale}>
|
|
97
|
+
<DatePickerAndroid
|
|
98
|
+
value={new Date('December 21, 1995')}
|
|
99
|
+
label="Start date"
|
|
100
|
+
confirmLabel="Confirm"
|
|
101
|
+
onChange={jest.fn()}
|
|
102
|
+
/>
|
|
103
|
+
</HeroDesignProvider>
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
expect(getByDisplayValue(expected)).toBeVisible();
|
|
107
|
+
}
|
|
108
|
+
);
|
|
82
109
|
});
|
|
@@ -4,6 +4,11 @@ import type { ModalProps } from 'react-native';
|
|
|
4
4
|
import renderWithTheme from '../../../testHelpers/renderWithTheme';
|
|
5
5
|
import DatePickerCalendar from '../DatePickerCalendar';
|
|
6
6
|
import { setOrientation } from '../../../testHelpers/utils';
|
|
7
|
+
import HeroDesignProvider from '../../HeroDesignProvider';
|
|
8
|
+
import { theme } from '../../..';
|
|
9
|
+
|
|
10
|
+
import enAU from '../../../locales/en_AU';
|
|
11
|
+
import enCA from '../../../locales/en_CA';
|
|
7
12
|
|
|
8
13
|
jest.mock('react-native/Libraries/Modal/Modal', () => {
|
|
9
14
|
const Modal = jest.requireActual('react-native/Libraries/Modal/Modal');
|
|
@@ -137,4 +142,26 @@ describe('DatePickerCalendar', () => {
|
|
|
137
142
|
expect(queryByText('January 1993')).toBeDefined();
|
|
138
143
|
}
|
|
139
144
|
);
|
|
145
|
+
|
|
146
|
+
it.each`
|
|
147
|
+
locale | expected
|
|
148
|
+
${enAU} | ${'21/12/1995'}
|
|
149
|
+
${enCA} | ${'Dec 21, 1995'}
|
|
150
|
+
`(
|
|
151
|
+
'renders correct format for $locale.lang locale',
|
|
152
|
+
({ locale, expected }) => {
|
|
153
|
+
const { getByDisplayValue } = renderWithTheme(
|
|
154
|
+
<HeroDesignProvider theme={theme} locale={locale}>
|
|
155
|
+
<DatePickerCalendar
|
|
156
|
+
value={new Date('December 21, 1995')}
|
|
157
|
+
label="Start date"
|
|
158
|
+
confirmLabel="Confirm"
|
|
159
|
+
onChange={jest.fn()}
|
|
160
|
+
/>
|
|
161
|
+
</HeroDesignProvider>
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
expect(getByDisplayValue(expected)).toBeVisible();
|
|
165
|
+
}
|
|
166
|
+
);
|
|
140
167
|
});
|
|
@@ -3,8 +3,13 @@ import React from 'react';
|
|
|
3
3
|
import type { ModalProps } from 'react-native';
|
|
4
4
|
import renderWithTheme from '../../../testHelpers/renderWithTheme';
|
|
5
5
|
import DatePickerIOS from '../DatePickerIOS';
|
|
6
|
-
import { getDateValue } from '../useCalculateDate';
|
|
6
|
+
import { getDateValue } from '../hooks/useCalculateDate';
|
|
7
7
|
import { setOrientation } from '../../../testHelpers/utils';
|
|
8
|
+
import HeroDesignProvider from '../../HeroDesignProvider';
|
|
9
|
+
import { theme } from '../../..';
|
|
10
|
+
|
|
11
|
+
import enAU from '../../../locales/en_AU';
|
|
12
|
+
import enCA from '../../../locales/en_CA';
|
|
8
13
|
|
|
9
14
|
jest.mock('react-native/Libraries/Modal/Modal', () => {
|
|
10
15
|
const Modal = jest.requireActual('react-native/Libraries/Modal/Modal');
|
|
@@ -178,4 +183,26 @@ describe('DatePickerIOS', () => {
|
|
|
178
183
|
expect(queryByText('iOS month year picker')).toBeNull();
|
|
179
184
|
expect(onChangeSpy).toBeCalledWith(new Date('2019-09-01'));
|
|
180
185
|
});
|
|
186
|
+
|
|
187
|
+
it.each`
|
|
188
|
+
locale | expected
|
|
189
|
+
${enAU} | ${'21/12/1995'}
|
|
190
|
+
${enCA} | ${'Dec 21, 1995'}
|
|
191
|
+
`(
|
|
192
|
+
'renders correct format for $locale.lang locale',
|
|
193
|
+
({ locale, expected }) => {
|
|
194
|
+
const { getByDisplayValue } = renderWithTheme(
|
|
195
|
+
<HeroDesignProvider theme={theme} locale={locale}>
|
|
196
|
+
<DatePickerIOS
|
|
197
|
+
value={new Date('December 21, 1995')}
|
|
198
|
+
label="Start date"
|
|
199
|
+
confirmLabel="Confirm"
|
|
200
|
+
onChange={jest.fn()}
|
|
201
|
+
/>
|
|
202
|
+
</HeroDesignProvider>
|
|
203
|
+
);
|
|
204
|
+
|
|
205
|
+
expect(getByDisplayValue(expected)).toBeVisible();
|
|
206
|
+
}
|
|
207
|
+
);
|
|
181
208
|
});
|