@docsvision/material-ui-pickers 3.2.0-beta.25 → 3.2.0-beta.26

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 (232) hide show
  1. package/.size-snapshot.json +26 -0
  2. package/9db1cba1a61cb58db53f38425bbd1f95.7z +0 -0
  3. package/{DatePicker → build/DatePicker}/DatePicker.d.ts +2 -2
  4. package/{DatePicker → build/DatePicker}/DatePicker.js +1 -1
  5. package/{DateTimePicker → build/DateTimePicker}/DateTimePicker.js +1 -1
  6. package/{Picker → build/Picker}/Picker.js +1 -1
  7. package/{TimePicker → build/TimePicker}/TimePicker.js +1 -1
  8. package/{_helpers → build/_helpers}/text-field-helper.d.ts +1 -1
  9. package/{_shared → build/_shared}/KeyboardDateInput.js +1 -1
  10. package/{_shared → build/_shared}/ModalDialog.d.ts +2 -2
  11. package/{_shared → build/_shared}/PureDateInput.js +1 -1
  12. package/{_shared → build/_shared}/ToolbarButton.d.ts +2 -2
  13. package/{_shared → build/_shared}/hooks/useKeyboardPickerState.js +2 -2
  14. package/{constants → build/constants}/prop-types.js +2 -2
  15. package/{dist → build/dist}/material-ui-pickers.esm.js +12 -12
  16. package/build/dist/material-ui-pickers.esm.js.map +1 -0
  17. package/{dist → build/dist}/material-ui-pickers.js +62 -62
  18. package/build/dist/material-ui-pickers.js.map +1 -0
  19. package/{dist → build/dist}/material-ui-pickers.umd.js +5790 -4511
  20. package/build/dist/material-ui-pickers.umd.min.js +1 -0
  21. package/build/package.json +62 -0
  22. package/{views → build/views}/Calendar/Calendar.js +2 -2
  23. package/{views → build/views}/Clock/Clock.d.ts +1 -1
  24. package/{views → build/views}/Clock/ClockPointer.d.ts +1 -1
  25. package/copy.js +58 -0
  26. package/package.json +135 -62
  27. package/remove-prop-types.js +37 -0
  28. package/rollup.config.js +145 -0
  29. package/src/DatePicker/DatePicker.tsx +91 -0
  30. package/src/DatePicker/DatePickerToolbar.tsx +75 -0
  31. package/src/DatePicker/index.ts +7 -0
  32. package/src/DateTimePicker/DateTimePicker.tsx +72 -0
  33. package/src/DateTimePicker/DateTimePickerTabs.tsx +86 -0
  34. package/src/DateTimePicker/DateTimePickerToolbar.tsx +123 -0
  35. package/src/DateTimePicker/index.ts +7 -0
  36. package/src/MuiPickersUtilsProvider.tsx +39 -0
  37. package/src/Picker/Picker.tsx +275 -0
  38. package/src/Picker/WrappedKeyboardPicker.tsx +136 -0
  39. package/src/Picker/WrappedPurePicker.tsx +128 -0
  40. package/src/Rifm/Rifm.ts +213 -0
  41. package/src/TimePicker/TimePicker.tsx +67 -0
  42. package/src/TimePicker/TimePickerToolbar.tsx +180 -0
  43. package/src/TimePicker/index.tsx +7 -0
  44. package/src/__tests__/DatePicker/Calendar.test.tsx +51 -0
  45. package/src/__tests__/DatePicker/Month.test.tsx +36 -0
  46. package/src/__tests__/DatePicker/MonthSelection.test.tsx +37 -0
  47. package/src/__tests__/MuiPickersUtilsProvider.test.tsx +21 -0
  48. package/src/__tests__/TimePicker/Clock.test.tsx +68 -0
  49. package/src/__tests__/_helpers/date-utils.test.tsx +197 -0
  50. package/src/__tests__/_helpers/text-field-helper.test.tsx +34 -0
  51. package/src/__tests__/_shared/ModalDialog.test.tsx +109 -0
  52. package/src/__tests__/e2e/DatePicker.test.tsx +233 -0
  53. package/src/__tests__/e2e/DatePickerProps.test.tsx +18 -0
  54. package/src/__tests__/e2e/DatePickerRoot.test.tsx +154 -0
  55. package/src/__tests__/e2e/DateTimePicker.test.tsx +86 -0
  56. package/src/__tests__/e2e/DateTimePickerRoot.test.tsx +72 -0
  57. package/src/__tests__/e2e/KeyboardDatePicker.test.tsx +140 -0
  58. package/src/__tests__/e2e/KeyboardDateTimePicker.test.tsx +48 -0
  59. package/src/__tests__/e2e/Theme.test.tsx +30 -0
  60. package/src/__tests__/e2e/TimePicker.test.tsx +121 -0
  61. package/src/__tests__/e2e/commands.tsx +8 -0
  62. package/src/__tests__/setup.js +26 -0
  63. package/src/__tests__/test-utils.tsx +45 -0
  64. package/src/__tests__/tsconfig.json +5 -0
  65. package/src/_helpers/date-utils.ts +92 -0
  66. package/src/_helpers/text-field-helper.ts +239 -0
  67. package/src/_helpers/time-utils.ts +83 -0
  68. package/src/_helpers/utils.ts +8 -0
  69. package/src/_shared/KeyboardDateInput.tsx +161 -0
  70. package/src/_shared/ModalDialog.tsx +114 -0
  71. package/src/_shared/PickerToolbar.tsx +52 -0
  72. package/src/_shared/PureDateInput.tsx +45 -0
  73. package/src/_shared/ToolbarButton.tsx +63 -0
  74. package/src/_shared/ToolbarText.tsx +49 -0
  75. package/src/_shared/WithUtils.tsx +19 -0
  76. package/src/_shared/hooks/useIsLandscape.tsx +27 -0
  77. package/src/_shared/hooks/useKeyDown.ts +34 -0
  78. package/src/_shared/hooks/useKeyboardPickerState.ts +72 -0
  79. package/src/_shared/hooks/useOpenState.ts +22 -0
  80. package/src/_shared/hooks/usePickerState.ts +134 -0
  81. package/src/_shared/hooks/useUtils.ts +20 -0
  82. package/src/_shared/hooks/useViews.tsx +31 -0
  83. package/src/_shared/icons/ArrowLeftIcon.tsx +11 -0
  84. package/src/_shared/icons/ArrowRightIcon.tsx +11 -0
  85. package/src/_shared/icons/DateRangeIcon.tsx +11 -0
  86. package/src/_shared/icons/KeyboardIcon.tsx +11 -0
  87. package/src/_shared/icons/TimeIcon.tsx +12 -0
  88. package/src/constants/ClockType.ts +11 -0
  89. package/src/constants/dimensions.ts +5 -0
  90. package/src/constants/prop-types.ts +37 -0
  91. package/src/index.ts +48 -0
  92. package/src/typings/BasePicker.tsx +60 -0
  93. package/src/typings/date.ts +3 -0
  94. package/src/typings/extendMui.ts +10 -0
  95. package/src/typings/overrides.ts +44 -0
  96. package/src/views/Calendar/Calendar.tsx +361 -0
  97. package/src/views/Calendar/CalendarHeader.tsx +141 -0
  98. package/src/views/Calendar/Day.tsx +97 -0
  99. package/src/views/Calendar/DayWrapper.tsx +33 -0
  100. package/src/views/Calendar/SlideTransition.tsx +100 -0
  101. package/src/views/Clock/Clock.tsx +172 -0
  102. package/src/views/Clock/ClockNumber.tsx +91 -0
  103. package/src/views/Clock/ClockNumbers.tsx +76 -0
  104. package/src/views/Clock/ClockPointer.tsx +104 -0
  105. package/src/views/Clock/ClockView.tsx +105 -0
  106. package/src/views/Month/Month.tsx +76 -0
  107. package/src/views/Month/MonthView.tsx +94 -0
  108. package/src/views/Year/Year.tsx +77 -0
  109. package/src/views/Year/YearView.tsx +91 -0
  110. package/src/wrappers/InlineWrapper.tsx +80 -0
  111. package/src/wrappers/ModalWrapper.tsx +113 -0
  112. package/src/wrappers/StaticWrapper.tsx +22 -0
  113. package/src/wrappers/Wrapper.tsx +75 -0
  114. package/tsconfig.json +21 -0
  115. package/typings.d.ts +6 -0
  116. package/dist/material-ui-pickers.esm.js.map +0 -1
  117. package/dist/material-ui-pickers.js.map +0 -1
  118. package/dist/material-ui-pickers.umd.min.js +0 -1
  119. /package/{DatePicker → build/DatePicker}/DatePickerToolbar.d.ts +0 -0
  120. /package/{DatePicker → build/DatePicker}/DatePickerToolbar.js +0 -0
  121. /package/{DatePicker → build/DatePicker}/index.d.ts +0 -0
  122. /package/{DatePicker → build/DatePicker}/index.js +0 -0
  123. /package/{DateTimePicker → build/DateTimePicker}/DateTimePicker.d.ts +0 -0
  124. /package/{DateTimePicker → build/DateTimePicker}/DateTimePickerTabs.d.ts +0 -0
  125. /package/{DateTimePicker → build/DateTimePicker}/DateTimePickerTabs.js +0 -0
  126. /package/{DateTimePicker → build/DateTimePicker}/DateTimePickerToolbar.d.ts +0 -0
  127. /package/{DateTimePicker → build/DateTimePicker}/DateTimePickerToolbar.js +0 -0
  128. /package/{DateTimePicker → build/DateTimePicker}/index.d.ts +0 -0
  129. /package/{DateTimePicker → build/DateTimePicker}/index.js +0 -0
  130. /package/{MuiPickersUtilsProvider.d.ts → build/MuiPickersUtilsProvider.d.ts} +0 -0
  131. /package/{MuiPickersUtilsProvider.js → build/MuiPickersUtilsProvider.js} +0 -0
  132. /package/{Picker → build/Picker}/Picker.d.ts +0 -0
  133. /package/{Picker → build/Picker}/WrappedKeyboardPicker.d.ts +0 -0
  134. /package/{Picker → build/Picker}/WrappedKeyboardPicker.js +0 -0
  135. /package/{Picker → build/Picker}/WrappedPurePicker.d.ts +0 -0
  136. /package/{Picker → build/Picker}/WrappedPurePicker.js +0 -0
  137. /package/{README.md → build/README.md} +0 -0
  138. /package/{Rifm → build/Rifm}/Rifm.d.ts +0 -0
  139. /package/{Rifm → build/Rifm}/Rifm.js +0 -0
  140. /package/{TimePicker → build/TimePicker}/TimePicker.d.ts +0 -0
  141. /package/{TimePicker → build/TimePicker}/TimePickerToolbar.d.ts +0 -0
  142. /package/{TimePicker → build/TimePicker}/TimePickerToolbar.js +0 -0
  143. /package/{TimePicker → build/TimePicker}/index.d.ts +0 -0
  144. /package/{TimePicker → build/TimePicker}/index.js +0 -0
  145. /package/{_helpers → build/_helpers}/date-utils.d.ts +0 -0
  146. /package/{_helpers → build/_helpers}/date-utils.js +0 -0
  147. /package/{_helpers → build/_helpers}/text-field-helper.js +0 -0
  148. /package/{_helpers → build/_helpers}/time-utils.d.ts +0 -0
  149. /package/{_helpers → build/_helpers}/time-utils.js +0 -0
  150. /package/{_helpers → build/_helpers}/utils.d.ts +0 -0
  151. /package/{_helpers → build/_helpers}/utils.js +0 -0
  152. /package/{_shared → build/_shared}/KeyboardDateInput.d.ts +0 -0
  153. /package/{_shared → build/_shared}/ModalDialog.js +0 -0
  154. /package/{_shared → build/_shared}/PickerToolbar.d.ts +0 -0
  155. /package/{_shared → build/_shared}/PickerToolbar.js +0 -0
  156. /package/{_shared → build/_shared}/PureDateInput.d.ts +0 -0
  157. /package/{_shared → build/_shared}/ToolbarButton.js +0 -0
  158. /package/{_shared → build/_shared}/ToolbarText.d.ts +0 -0
  159. /package/{_shared → build/_shared}/ToolbarText.js +0 -0
  160. /package/{_shared → build/_shared}/WithUtils.d.ts +0 -0
  161. /package/{_shared → build/_shared}/WithUtils.js +0 -0
  162. /package/{_shared → build/_shared}/hooks/useIsLandscape.d.ts +0 -0
  163. /package/{_shared → build/_shared}/hooks/useIsLandscape.js +0 -0
  164. /package/{_shared → build/_shared}/hooks/useKeyDown.d.ts +0 -0
  165. /package/{_shared → build/_shared}/hooks/useKeyDown.js +0 -0
  166. /package/{_shared → build/_shared}/hooks/useKeyboardPickerState.d.ts +0 -0
  167. /package/{_shared → build/_shared}/hooks/useOpenState.d.ts +0 -0
  168. /package/{_shared → build/_shared}/hooks/useOpenState.js +0 -0
  169. /package/{_shared → build/_shared}/hooks/usePickerState.d.ts +0 -0
  170. /package/{_shared → build/_shared}/hooks/usePickerState.js +0 -0
  171. /package/{_shared → build/_shared}/hooks/useUtils.d.ts +0 -0
  172. /package/{_shared → build/_shared}/hooks/useUtils.js +0 -0
  173. /package/{_shared → build/_shared}/hooks/useViews.d.ts +0 -0
  174. /package/{_shared → build/_shared}/hooks/useViews.js +0 -0
  175. /package/{_shared → build/_shared}/icons/ArrowLeftIcon.d.ts +0 -0
  176. /package/{_shared → build/_shared}/icons/ArrowLeftIcon.js +0 -0
  177. /package/{_shared → build/_shared}/icons/ArrowRightIcon.d.ts +0 -0
  178. /package/{_shared → build/_shared}/icons/ArrowRightIcon.js +0 -0
  179. /package/{_shared → build/_shared}/icons/DateRangeIcon.d.ts +0 -0
  180. /package/{_shared → build/_shared}/icons/DateRangeIcon.js +0 -0
  181. /package/{_shared → build/_shared}/icons/KeyboardIcon.d.ts +0 -0
  182. /package/{_shared → build/_shared}/icons/KeyboardIcon.js +0 -0
  183. /package/{_shared → build/_shared}/icons/TimeIcon.d.ts +0 -0
  184. /package/{_shared → build/_shared}/icons/TimeIcon.js +0 -0
  185. /package/{constants → build/constants}/ClockType.d.ts +0 -0
  186. /package/{constants → build/constants}/ClockType.js +0 -0
  187. /package/{constants → build/constants}/dimensions.d.ts +0 -0
  188. /package/{constants → build/constants}/dimensions.js +0 -0
  189. /package/{constants → build/constants}/prop-types.d.ts +0 -0
  190. /package/{index.d.ts → build/index.d.ts} +0 -0
  191. /package/{index.js → build/index.js} +0 -0
  192. /package/{typings → build/typings}/BasePicker.d.ts +0 -0
  193. /package/{typings → build/typings}/BasePicker.js +0 -0
  194. /package/{typings → build/typings}/date.d.ts +0 -0
  195. /package/{typings → build/typings}/date.js +0 -0
  196. /package/{typings → build/typings}/extendMui.d.ts +0 -0
  197. /package/{typings → build/typings}/extendMui.js +0 -0
  198. /package/{typings → build/typings}/overrides.d.ts +0 -0
  199. /package/{typings → build/typings}/overrides.js +0 -0
  200. /package/{views → build/views}/Calendar/Calendar.d.ts +0 -0
  201. /package/{views → build/views}/Calendar/CalendarHeader.d.ts +0 -0
  202. /package/{views → build/views}/Calendar/CalendarHeader.js +0 -0
  203. /package/{views → build/views}/Calendar/Day.d.ts +0 -0
  204. /package/{views → build/views}/Calendar/Day.js +0 -0
  205. /package/{views → build/views}/Calendar/DayWrapper.d.ts +0 -0
  206. /package/{views → build/views}/Calendar/DayWrapper.js +0 -0
  207. /package/{views → build/views}/Calendar/SlideTransition.d.ts +0 -0
  208. /package/{views → build/views}/Calendar/SlideTransition.js +0 -0
  209. /package/{views → build/views}/Clock/Clock.js +0 -0
  210. /package/{views → build/views}/Clock/ClockNumber.d.ts +0 -0
  211. /package/{views → build/views}/Clock/ClockNumber.js +0 -0
  212. /package/{views → build/views}/Clock/ClockNumbers.d.ts +0 -0
  213. /package/{views → build/views}/Clock/ClockNumbers.js +0 -0
  214. /package/{views → build/views}/Clock/ClockPointer.js +0 -0
  215. /package/{views → build/views}/Clock/ClockView.d.ts +0 -0
  216. /package/{views → build/views}/Clock/ClockView.js +0 -0
  217. /package/{views → build/views}/Month/Month.d.ts +0 -0
  218. /package/{views → build/views}/Month/Month.js +0 -0
  219. /package/{views → build/views}/Month/MonthView.d.ts +0 -0
  220. /package/{views → build/views}/Month/MonthView.js +0 -0
  221. /package/{views → build/views}/Year/Year.d.ts +0 -0
  222. /package/{views → build/views}/Year/Year.js +0 -0
  223. /package/{views → build/views}/Year/YearView.d.ts +0 -0
  224. /package/{views → build/views}/Year/YearView.js +0 -0
  225. /package/{wrappers → build/wrappers}/InlineWrapper.d.ts +0 -0
  226. /package/{wrappers → build/wrappers}/InlineWrapper.js +0 -0
  227. /package/{wrappers → build/wrappers}/ModalWrapper.d.ts +0 -0
  228. /package/{wrappers → build/wrappers}/ModalWrapper.js +0 -0
  229. /package/{wrappers → build/wrappers}/StaticWrapper.d.ts +0 -0
  230. /package/{wrappers → build/wrappers}/StaticWrapper.js +0 -0
  231. /package/{wrappers → build/wrappers}/Wrapper.d.ts +0 -0
  232. /package/{wrappers → build/wrappers}/Wrapper.js +0 -0
@@ -0,0 +1,180 @@
1
+ import * as React from 'react';
2
+ import clsx from 'clsx';
3
+ import ClockType from '../constants/ClockType';
4
+ import ToolbarText from '../_shared/ToolbarText';
5
+ import ToolbarButton from '../_shared/ToolbarButton';
6
+ import PickerToolbar from '../_shared/PickerToolbar';
7
+ import { arrayIncludes } from '../_helpers/utils';
8
+ import { useUtils } from '../_shared/hooks/useUtils';
9
+ import { MaterialUiPickersDate } from '../typings/date';
10
+ import { ToolbarComponentProps } from '../Picker/Picker';
11
+ import { useTheme, makeStyles } from '@material-ui/core/styles';
12
+ import { convertToMeridiem, getMeridiem } from '../_helpers/time-utils';
13
+
14
+ export const useStyles = makeStyles(
15
+ {
16
+ toolbarLandscape: {
17
+ flexWrap: 'wrap',
18
+ },
19
+ toolbarAmpmLeftPadding: {
20
+ paddingLeft: 50,
21
+ },
22
+ separator: {
23
+ margin: '0 4px 0 2px',
24
+ cursor: 'default',
25
+ },
26
+ hourMinuteLabel: {
27
+ display: 'flex',
28
+ justifyContent: 'flex-end',
29
+ alignItems: 'flex-end',
30
+ },
31
+ hourMinuteLabelLandscape: {
32
+ marginTop: 'auto',
33
+ },
34
+ hourMinuteLabelReverse: {
35
+ flexDirection: 'row-reverse',
36
+ },
37
+ ampmSelection: {
38
+ marginLeft: 20,
39
+ marginRight: -20,
40
+ display: 'flex',
41
+ flexDirection: 'column',
42
+ },
43
+ ampmLandscape: {
44
+ margin: '4px 0 auto',
45
+ flexDirection: 'row',
46
+ justifyContent: 'space-around',
47
+ flexBasis: '100%',
48
+ },
49
+ ampmSelectionWithSeconds: {
50
+ marginLeft: 15,
51
+ marginRight: 10,
52
+ },
53
+ ampmLabel: {
54
+ fontSize: 18,
55
+ },
56
+ },
57
+ { name: 'MuiPickersTimePickerToolbar' }
58
+ );
59
+
60
+ export function useMeridiemMode(
61
+ date: MaterialUiPickersDate,
62
+ ampm: boolean | undefined,
63
+ onChange: (date: MaterialUiPickersDate, isFinished?: boolean | undefined) => void
64
+ ) {
65
+ const utils = useUtils();
66
+ const meridiemMode = getMeridiem(date, utils);
67
+
68
+ const handleMeridiemChange = React.useCallback(
69
+ (mode: 'am' | 'pm') => {
70
+ const timeWithMeridiem = convertToMeridiem(date, mode, Boolean(ampm), utils);
71
+ onChange(timeWithMeridiem, false);
72
+ },
73
+ [ampm, date, onChange, utils]
74
+ );
75
+
76
+ return { meridiemMode, handleMeridiemChange };
77
+ }
78
+
79
+ const TimePickerToolbar: React.FC<ToolbarComponentProps> = ({
80
+ date,
81
+ views,
82
+ ampm,
83
+ openView,
84
+ onChange,
85
+ isLandscape,
86
+ setOpenView,
87
+ }) => {
88
+ const utils = useUtils();
89
+ const theme = useTheme();
90
+ const classes = useStyles();
91
+ const { meridiemMode, handleMeridiemChange } = useMeridiemMode(date, ampm, onChange);
92
+
93
+ const clockTypographyVariant = isLandscape ? 'h3' : 'h2';
94
+
95
+ return (
96
+ <PickerToolbar
97
+ isLandscape={isLandscape}
98
+ className={clsx({
99
+ [classes.toolbarLandscape]: isLandscape,
100
+ [classes.toolbarAmpmLeftPadding]: ampm && !isLandscape,
101
+ })}
102
+ >
103
+ <div
104
+ className={clsx(classes.hourMinuteLabel, {
105
+ [classes.hourMinuteLabelLandscape]: isLandscape,
106
+ [classes.hourMinuteLabelReverse]: theme.direction === 'rtl',
107
+ })}
108
+ >
109
+ {arrayIncludes(views, 'hours') && (
110
+ <ToolbarButton
111
+ variant={clockTypographyVariant}
112
+ onClick={() => setOpenView(ClockType.HOURS)}
113
+ selected={openView === ClockType.HOURS}
114
+ label={utils.getHourText(date, Boolean(ampm))}
115
+ />
116
+ )}
117
+
118
+ {arrayIncludes(views, ['hours', 'minutes']) && (
119
+ <ToolbarText
120
+ label=":"
121
+ variant={clockTypographyVariant}
122
+ selected={false}
123
+ className={classes.separator}
124
+ />
125
+ )}
126
+
127
+ {arrayIncludes(views, 'minutes') && (
128
+ <ToolbarButton
129
+ variant={clockTypographyVariant}
130
+ onClick={() => setOpenView(ClockType.MINUTES)}
131
+ selected={openView === ClockType.MINUTES}
132
+ label={utils.getMinuteText(date)}
133
+ />
134
+ )}
135
+
136
+ {arrayIncludes(views, ['minutes', 'seconds']) && (
137
+ <ToolbarText variant="h2" label=":" selected={false} className={classes.separator} />
138
+ )}
139
+
140
+ {arrayIncludes(views, 'seconds') && (
141
+ <ToolbarButton
142
+ variant="h2"
143
+ onClick={() => setOpenView(ClockType.SECONDS)}
144
+ selected={openView === ClockType.SECONDS}
145
+ label={utils.getSecondText(date)}
146
+ />
147
+ )}
148
+ </div>
149
+
150
+ {ampm && (
151
+ <div
152
+ className={clsx(classes.ampmSelection, {
153
+ [classes.ampmLandscape]: isLandscape,
154
+ [classes.ampmSelectionWithSeconds]: arrayIncludes(views, 'seconds'),
155
+ })}
156
+ >
157
+ <ToolbarButton
158
+ disableRipple
159
+ variant="subtitle1"
160
+ selected={meridiemMode === 'am'}
161
+ typographyClassName={classes.ampmLabel}
162
+ label={utils.getMeridiemText('am')}
163
+ onClick={() => handleMeridiemChange('am')}
164
+ />
165
+
166
+ <ToolbarButton
167
+ disableRipple
168
+ variant="subtitle1"
169
+ selected={meridiemMode === 'pm'}
170
+ typographyClassName={classes.ampmLabel}
171
+ label={utils.getMeridiemText('pm')}
172
+ onClick={() => handleMeridiemChange('pm')}
173
+ />
174
+ </div>
175
+ )}
176
+ </PickerToolbar>
177
+ );
178
+ };
179
+
180
+ export default TimePickerToolbar;
@@ -0,0 +1,7 @@
1
+ import { KeyboardTimePickerProps, TimePickerProps } from './TimePicker';
2
+
3
+ export type TimePickerProps = TimePickerProps;
4
+
5
+ export type KeyboardTimePickerProps = KeyboardTimePickerProps;
6
+
7
+ export { KeyboardTimePicker, TimePicker } from './TimePicker';
@@ -0,0 +1,51 @@
1
+ import * as React from 'react';
2
+ import { ShallowWrapper } from 'enzyme';
3
+ import { shallowRender, utilsToUse } from '../test-utils';
4
+ import { Calendar, CalendarProps } from '../../views/Calendar/Calendar';
5
+
6
+ describe('Calendar', () => {
7
+ let component: ShallowWrapper<CalendarProps>;
8
+ const onChangeMock = jest.fn();
9
+ const onMonthChangeMock = jest.fn();
10
+
11
+ beforeEach(() => {
12
+ component = shallowRender(props => (
13
+ <Calendar
14
+ date={utilsToUse.date('01-01-2017')}
15
+ onMonthChange={onMonthChangeMock}
16
+ onChange={onChangeMock}
17
+ {...props}
18
+ />
19
+ ));
20
+ });
21
+
22
+ it('Should swipe between month', () => {
23
+ component.find('CalendarHeader').prop<any>('onMonthChange')(utilsToUse.date());
24
+ expect(onMonthChangeMock).toHaveBeenCalled();
25
+ });
26
+ });
27
+
28
+ describe('Calendar - disabled selected date on mount', () => {
29
+ let component: ShallowWrapper<any, any, any>;
30
+
31
+ beforeEach(() => {
32
+ component = shallowRender(props => (
33
+ <Calendar
34
+ date={utilsToUse.date('01-01-2017')}
35
+ minDate={new Date('01-01-2018')}
36
+ onChange={jest.fn()}
37
+ utils={utilsToUse}
38
+ {...props}
39
+ />
40
+ ));
41
+ });
42
+
43
+ it('Should dispatch onDateSelect with isFinish = false on mount', () => {
44
+ const { onChange } = component.instance().props;
45
+ if (process.env.UTILS === 'moment') {
46
+ return expect(onChange).toHaveBeenCalled();
47
+ }
48
+
49
+ expect(onChange).toHaveBeenCalledWith(utilsToUse.date('01-01-2018'), false);
50
+ });
51
+ });
@@ -0,0 +1,36 @@
1
+ import * as React from 'react';
2
+ import { ShallowWrapper } from 'enzyme';
3
+ import { shallow, utilsToUse } from '../test-utils';
4
+ import { Month, MonthProps } from '../../views/Month/Month';
5
+
6
+ describe('Month', () => {
7
+ let component: ShallowWrapper<MonthProps>;
8
+
9
+ beforeEach(() => {
10
+ component = shallow(
11
+ <Month value={utilsToUse.date('01-01-2017')} onSelect={jest.fn()}>
12
+ Oct
13
+ </Month>
14
+ );
15
+ });
16
+
17
+ it('Should render', () => {
18
+ expect(component).toBeTruthy();
19
+ });
20
+ });
21
+
22
+ describe('Month - disabled state', () => {
23
+ let component: ShallowWrapper<MonthProps>;
24
+
25
+ beforeEach(() => {
26
+ component = shallow(
27
+ <Month disabled value={utilsToUse.date('01-01-2017')} onSelect={jest.fn()}>
28
+ Oct
29
+ </Month>
30
+ );
31
+ });
32
+
33
+ it('Should render in disabled state', () => {
34
+ expect(component.prop('tabIndex')).toBe(-1);
35
+ });
36
+ });
@@ -0,0 +1,37 @@
1
+ import * as React from 'react';
2
+ import Month from '../../views/Month/Month';
3
+ import { ReactWrapper } from 'enzyme';
4
+ import { mount, utilsToUse } from '../test-utils';
5
+ import { MonthSelection, MonthSelectionProps } from '../../views/Month/MonthView';
6
+
7
+ describe('MonthSelection', () => {
8
+ let component: ReactWrapper<MonthSelectionProps>;
9
+
10
+ beforeEach(() => {
11
+ component = mount(
12
+ <MonthSelection
13
+ minDate={new Date('03-01-2017')}
14
+ maxDate={new Date('05-01-2017')}
15
+ date={utilsToUse.date('04-01-2017')}
16
+ onChange={jest.fn()}
17
+ />
18
+ );
19
+ });
20
+
21
+ it('Should render disabled months before min date and after max date', () => {
22
+ expect(component.find(Month).map(month => month.prop('disabled'))).toEqual([
23
+ true,
24
+ true,
25
+ false,
26
+ false,
27
+ false,
28
+ true,
29
+ true,
30
+ true,
31
+ true,
32
+ true,
33
+ true,
34
+ true,
35
+ ]);
36
+ });
37
+ });
@@ -0,0 +1,21 @@
1
+ // required to use just shallow here because utils prop override
2
+ import * as React from 'react';
3
+ import DateFnsUtils from '@date-io/date-fns';
4
+ import MuiPickersUtilsProvider, { MuiPickersUtilsProviderProps } from '../MuiPickersUtilsProvider';
5
+ import { shallow, ShallowWrapper } from 'enzyme'; // required to use just shallow here because utils prop override
6
+
7
+ describe('MuiPickersUtilsProvider', () => {
8
+ let component: ShallowWrapper<MuiPickersUtilsProviderProps>;
9
+
10
+ beforeEach(() => {
11
+ component = shallow(
12
+ <MuiPickersUtilsProvider utils={DateFnsUtils}>
13
+ <div />
14
+ </MuiPickersUtilsProvider>
15
+ );
16
+ });
17
+
18
+ it('Should render context provider', () => {
19
+ expect(component).toBeTruthy();
20
+ });
21
+ });
@@ -0,0 +1,68 @@
1
+ import * as React from 'react';
2
+ import { ShallowWrapper } from 'enzyme';
3
+ import { shallow } from '../test-utils';
4
+ import { Clock, ClockProps } from '../../views/Clock/Clock';
5
+
6
+ const mouseClockEvent = {
7
+ preventDefault: jest.fn(),
8
+ stopPropagation: jest.fn(),
9
+ buttons: 1,
10
+ nativeEvent: {
11
+ offsetX: 10,
12
+ offsetY: 25,
13
+ },
14
+ };
15
+
16
+ describe('Clock', () => {
17
+ let component: ShallowWrapper<ClockProps>;
18
+ const onChangeMock = jest.fn();
19
+
20
+ beforeEach(() => {
21
+ onChangeMock.mockReset();
22
+ component = shallow(
23
+ <Clock
24
+ type="minutes"
25
+ onChange={onChangeMock}
26
+ classes={{} as any}
27
+ value={12}
28
+ children={[<div key="foo">foo</div>]}
29
+ />
30
+ );
31
+ });
32
+
33
+ it('Should renders', () => {
34
+ // console.log(component.debug());
35
+ expect(component).toBeTruthy();
36
+ });
37
+
38
+ it('Should set time on mouse move with click', () => {
39
+ component.find('[role="menu"]').simulate('mouseMove', mouseClockEvent);
40
+
41
+ expect(onChangeMock).toHaveBeenCalledWith(52, false);
42
+ });
43
+
44
+ it('Should set isMoving = false on mouse up', () => {
45
+ (component.instance() as Clock).isMoving = true;
46
+ component.find('[role="menu"]').simulate('mouseUp', mouseClockEvent);
47
+
48
+ expect((component.instance() as Clock).isMoving).toBeFalsy();
49
+ });
50
+
51
+ it('Should set time on touch move', () => {
52
+ component.find('[role="menu"]').simulate('touchMove', {
53
+ preventDefault: jest.fn(),
54
+ stopPropagation: jest.fn(),
55
+ changedTouches: [{ clientX: 10, clientY: 15 }],
56
+ target: {
57
+ getBoundingClientRect: () => ({ left: 0, top: 0 }),
58
+ },
59
+ });
60
+
61
+ expect(onChangeMock).toHaveBeenCalledWith(52, false);
62
+ });
63
+
64
+ it('Should set isMoving = false on touch end', () => {
65
+ component.find('[role="menu"]').simulate('touchEnd');
66
+ expect((component.instance() as Clock).isMoving).toBeFalsy();
67
+ });
68
+ });
@@ -0,0 +1,197 @@
1
+ import { utilsToUse } from '../test-utils';
2
+ import { findClosestEnabledDate } from '../../_helpers/date-utils';
3
+
4
+ describe('findClosestEnabledDate', () => {
5
+ const day18thText = utilsToUse.getDayText(utilsToUse.date('2018-08-18'));
6
+ const only18th = (date: any) => utilsToUse.getDayText(date) !== day18thText;
7
+
8
+ it('Should return null if all dates are disabled', () => {
9
+ const result = findClosestEnabledDate({
10
+ date: utilsToUse.date('2000-01-01'),
11
+ minDate: utilsToUse.date('1999-01-01'), // Use close-by min/max dates to reduce the test runtime.
12
+ maxDate: utilsToUse.date('2001-01-01'),
13
+ utils: utilsToUse,
14
+ shouldDisableDate: () => true,
15
+ disableFuture: false,
16
+ disablePast: false,
17
+ });
18
+
19
+ expect(result).toBe(null);
20
+ });
21
+
22
+ it('Should return given date if it is enabled', () => {
23
+ const result = findClosestEnabledDate({
24
+ date: utilsToUse.date('2000-01-01'),
25
+ minDate: utilsToUse.date('1900-01-01'),
26
+ maxDate: utilsToUse.date('2200-01-01'),
27
+ utils: utilsToUse,
28
+ shouldDisableDate: () => false,
29
+ disableFuture: false,
30
+ disablePast: false,
31
+ });
32
+
33
+ expect(utilsToUse.isSameDay(result, utilsToUse.date('2000-01-01'))).toBe(true);
34
+ });
35
+
36
+ it('Should return next 18th going from 10th', () => {
37
+ const result = findClosestEnabledDate({
38
+ date: utilsToUse.date('2018-08-10'),
39
+ minDate: utilsToUse.date('1900-01-01'),
40
+ maxDate: utilsToUse.date('2200-01-01'),
41
+ utils: utilsToUse,
42
+ shouldDisableDate: only18th,
43
+ disableFuture: false,
44
+ disablePast: false,
45
+ });
46
+
47
+ expect(utilsToUse.isSameDay(result, utilsToUse.date('2018-08-18'))).toBe(true);
48
+ });
49
+
50
+ it('Should return previous 18th going from 1st', () => {
51
+ const result = findClosestEnabledDate({
52
+ date: utilsToUse.date('2018-08-01'),
53
+ minDate: utilsToUse.date('1900-01-01'),
54
+ maxDate: utilsToUse.date('2200-01-01'),
55
+ utils: utilsToUse,
56
+ shouldDisableDate: only18th,
57
+ disableFuture: false,
58
+ disablePast: false,
59
+ });
60
+
61
+ expect(utilsToUse.isSameDay(result, utilsToUse.date('2018-07-18'))).toBe(true);
62
+ });
63
+
64
+ it('Should return future 18th if disablePast', () => {
65
+ const today = utilsToUse.startOfDay(utilsToUse.date());
66
+ const result = findClosestEnabledDate({
67
+ date: utilsToUse.date('2000-01-01'),
68
+ minDate: utilsToUse.date('1900-01-01'),
69
+ maxDate: utilsToUse.date('2200-01-01'),
70
+ utils: utilsToUse,
71
+ shouldDisableDate: only18th,
72
+ disableFuture: false,
73
+ disablePast: true,
74
+ });
75
+
76
+ expect(utilsToUse.getDayText(result)).toBe(day18thText);
77
+ expect(utilsToUse.isBefore(result, today)).toBe(false);
78
+ expect(utilsToUse.isBefore(result, utilsToUse.addDays(today, 31))).toBe(true);
79
+ });
80
+
81
+ it('Should return past Saturday if disableFuture', () => {
82
+ const today = utilsToUse.startOfDay(utilsToUse.date());
83
+ const result = findClosestEnabledDate({
84
+ date: utilsToUse.date('2099-01-01'),
85
+ minDate: utilsToUse.date('1900-01-01'),
86
+ maxDate: utilsToUse.date('2200-01-01'),
87
+ utils: utilsToUse,
88
+ shouldDisableDate: only18th,
89
+ disableFuture: true,
90
+ disablePast: false,
91
+ });
92
+
93
+ expect(utilsToUse.isBeforeDay(result, today)).toBe(true);
94
+ expect(utilsToUse.getDayText(result)).toBe(day18thText);
95
+ expect(utilsToUse.isBefore(result, utilsToUse.addDays(today, -31))).toBe(false);
96
+ });
97
+
98
+ it('Should return now if disablePast+disableFuture and now is valid', () => {
99
+ const today = utilsToUse.startOfDay(utilsToUse.date());
100
+ const result = findClosestEnabledDate({
101
+ date: utilsToUse.date('2000-01-01'),
102
+ minDate: utilsToUse.date('1900-01-01'),
103
+ maxDate: utilsToUse.date('2200-01-01'),
104
+ utils: utilsToUse,
105
+ shouldDisableDate: () => false,
106
+ disableFuture: true,
107
+ disablePast: true,
108
+ });
109
+
110
+ expect(utilsToUse.isSameDay(result, today)).toBe(true);
111
+ });
112
+
113
+ it('Should return null if disablePast+disableFuture and now is invalid', () => {
114
+ const today = utilsToUse.date();
115
+ const result = findClosestEnabledDate({
116
+ date: utilsToUse.date('2000-01-01'),
117
+ minDate: utilsToUse.date('1900-01-01'),
118
+ maxDate: utilsToUse.date('2200-01-01'),
119
+ utils: utilsToUse,
120
+ shouldDisableDate: date => utilsToUse.isSameDay(date, today),
121
+ disableFuture: true,
122
+ disablePast: true,
123
+ });
124
+
125
+ expect(result).toBeNull();
126
+ });
127
+
128
+ it('Should return minDate if it is after the date and valid', () => {
129
+ const result = findClosestEnabledDate({
130
+ date: utilsToUse.date('2000-01-01'),
131
+ minDate: utilsToUse.date('2018-08-18'),
132
+ maxDate: utilsToUse.date('2200-01-01'),
133
+ utils: utilsToUse,
134
+ shouldDisableDate: only18th,
135
+ disableFuture: false,
136
+ disablePast: false,
137
+ });
138
+
139
+ expect(utilsToUse.isSameDay(result, utilsToUse.date('2018-08-18'))).toBe(true);
140
+ });
141
+
142
+ it('Should return next 18th after minDate', () => {
143
+ const result = findClosestEnabledDate({
144
+ date: utilsToUse.date('2000-01-01'),
145
+ minDate: utilsToUse.date('2018-08-01'),
146
+ maxDate: utilsToUse.date('2200-01-01'),
147
+ utils: utilsToUse,
148
+ shouldDisableDate: only18th,
149
+ disableFuture: false,
150
+ disablePast: false,
151
+ });
152
+
153
+ expect(utilsToUse.isSameDay(result, utilsToUse.date('2018-08-18'))).toBe(true);
154
+ });
155
+
156
+ it('Should return maxDate if it is before the date and valid', () => {
157
+ const result = findClosestEnabledDate({
158
+ date: utilsToUse.date('2050-01-01'),
159
+ minDate: utilsToUse.date('1900-01-01'),
160
+ maxDate: utilsToUse.date('2018-07-18'),
161
+ utils: utilsToUse,
162
+ shouldDisableDate: only18th,
163
+ disableFuture: false,
164
+ disablePast: false,
165
+ });
166
+
167
+ expect(utilsToUse.isSameDay(result, utilsToUse.date('2018-07-18'))).toBe(true);
168
+ });
169
+
170
+ it('Should return previous 18th before maxDate', () => {
171
+ const result = findClosestEnabledDate({
172
+ date: utilsToUse.date('2050-01-01'),
173
+ minDate: utilsToUse.date('1900-01-01'),
174
+ maxDate: utilsToUse.date('2018-08-17'),
175
+ utils: utilsToUse,
176
+ shouldDisableDate: only18th,
177
+ disableFuture: false,
178
+ disablePast: false,
179
+ });
180
+
181
+ expect(utilsToUse.isSameDay(result, utilsToUse.date('2018-07-18'))).toBe(true);
182
+ });
183
+
184
+ it('Should return null if minDate is after maxDate', () => {
185
+ const result = findClosestEnabledDate({
186
+ date: utilsToUse.date('2000-01-01'),
187
+ minDate: utilsToUse.date('2000-01-01'),
188
+ maxDate: utilsToUse.date('1999-01-01'),
189
+ utils: utilsToUse,
190
+ shouldDisableDate: () => false,
191
+ disableFuture: false,
192
+ disablePast: false,
193
+ });
194
+
195
+ expect(result).toBeNull();
196
+ });
197
+ });
@@ -0,0 +1,34 @@
1
+ import {
2
+ makeMaskFromFormat,
3
+ maskedDateFormatter,
4
+ pick12hOr24hFormat,
5
+ } from '../../_helpers/text-field-helper';
6
+
7
+ const refuse = /[^\d]+/gi;
8
+ describe('test-field-helper', () => {
9
+ test('maskedDateFormatter', () => {
10
+ const formatterFn = maskedDateFormatter('__/__/____', '_', refuse);
11
+
12
+ expect(formatterFn('21')).toBe('21/__/____');
13
+ expect(formatterFn('21-12-21')).toBe('21/12/21__');
14
+ expect(formatterFn('21-12-2010')).toBe('21/12/2010');
15
+ });
16
+
17
+ test('makeMaskFromFormat', () => {
18
+ expect(makeMaskFromFormat('yyyy-mm-dd', '_')).toBe('____-__-__');
19
+ expect(makeMaskFromFormat('YYYY/LL/DD', '_')).toBe('____/__/__');
20
+ expect(makeMaskFromFormat('yyyy-mm-dd mm:hh', '_')).toBe('____-__-__ __:__');
21
+ });
22
+
23
+ test('pick12hOr24hFormat', () => {
24
+ expect(pick12hOr24hFormat(undefined, true, { '12h': 'hh:mm a', '24h': 'HH:mm' })).toBe(
25
+ 'hh:mm a'
26
+ );
27
+ expect(pick12hOr24hFormat(undefined, undefined, { '12h': 'hh:mm a', '24h': 'HH:mm' })).toBe(
28
+ 'hh:mm a'
29
+ );
30
+ expect(pick12hOr24hFormat(undefined, false, { '12h': 'hh:mm a', '24h': 'HH:mm' })).toBe(
31
+ 'HH:mm'
32
+ );
33
+ });
34
+ });