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

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 (233) hide show
  1. package/{build/DatePicker → DatePicker}/DatePickerToolbar.js +3 -3
  2. package/{build/DateTimePicker → DateTimePicker}/DateTimePicker.d.ts +2 -2
  3. package/{build/DateTimePicker → DateTimePicker}/DateTimePicker.js +2 -2
  4. package/{build/DateTimePicker → DateTimePicker}/DateTimePickerToolbar.js +4 -4
  5. package/{build/MuiPickersUtilsProvider.d.ts → MuiPickersUtilsProvider.d.ts} +1 -1
  6. package/{build/Picker → Picker}/Picker.d.ts +3 -3
  7. package/{build/Picker → Picker}/Picker.js +1 -1
  8. package/{build/Picker → Picker}/WrappedPurePicker.js +2 -1
  9. package/{build/TimePicker → TimePicker}/TimePicker.d.ts +4 -2
  10. package/{build/TimePicker → TimePicker}/TimePicker.js +2 -2
  11. package/{build/TimePicker → TimePicker}/TimePickerToolbar.js +3 -3
  12. package/{build/_helpers → _helpers}/date-utils.d.ts +2 -2
  13. package/{build/_helpers → _helpers}/date-utils.js +3 -3
  14. package/_helpers/text-field-helper.d.ts +32 -0
  15. package/{build/_helpers → _helpers}/text-field-helper.js +1 -1
  16. package/{build/_helpers → _helpers}/time-utils.d.ts +2 -2
  17. package/{build/_shared → _shared}/WithUtils.d.ts +1 -1
  18. package/{build/_shared → _shared}/hooks/useKeyboardPickerState.js +1 -1
  19. package/{build/_shared → _shared}/hooks/useUtils.d.ts +2 -2
  20. package/{build/dist → dist}/material-ui-pickers.esm.js +1187 -834
  21. package/dist/material-ui-pickers.esm.js.map +1 -0
  22. package/{build/dist → dist}/material-ui-pickers.js +1187 -834
  23. package/dist/material-ui-pickers.js.map +1 -0
  24. package/{build/dist → dist}/material-ui-pickers.umd.js +1178 -825
  25. package/dist/material-ui-pickers.umd.min.js +1 -0
  26. package/{build/index.d.ts → index.d.ts} +11 -11
  27. package/package.json +62 -135
  28. package/{build/typings → typings}/BasePicker.d.ts +1 -1
  29. package/{build/views → views}/Calendar/Calendar.js +1 -1
  30. package/{build/views → views}/Calendar/CalendarHeader.js +1 -1
  31. package/{build/views → views}/Clock/Clock.js +1 -1
  32. package/{build/views → views}/Clock/ClockNumbers.d.ts +2 -2
  33. package/{build/views → views}/Clock/ClockView.js +1 -1
  34. package/{build/views → views}/Month/MonthView.js +1 -1
  35. package/{build/views → views}/Year/YearView.js +2 -2
  36. package/.size-snapshot.json +0 -26
  37. package/9db1cba1a61cb58db53f38425bbd1f95.7z +0 -0
  38. package/build/_helpers/text-field-helper.d.ts +0 -32
  39. package/build/dist/material-ui-pickers.esm.js.map +0 -1
  40. package/build/dist/material-ui-pickers.js.map +0 -1
  41. package/build/dist/material-ui-pickers.umd.min.js +0 -1
  42. package/build/package.json +0 -62
  43. package/copy.js +0 -58
  44. package/remove-prop-types.js +0 -37
  45. package/rollup.config.js +0 -145
  46. package/src/DatePicker/DatePicker.tsx +0 -91
  47. package/src/DatePicker/DatePickerToolbar.tsx +0 -75
  48. package/src/DatePicker/index.ts +0 -7
  49. package/src/DateTimePicker/DateTimePicker.tsx +0 -72
  50. package/src/DateTimePicker/DateTimePickerTabs.tsx +0 -86
  51. package/src/DateTimePicker/DateTimePickerToolbar.tsx +0 -123
  52. package/src/DateTimePicker/index.ts +0 -7
  53. package/src/MuiPickersUtilsProvider.tsx +0 -39
  54. package/src/Picker/Picker.tsx +0 -275
  55. package/src/Picker/WrappedKeyboardPicker.tsx +0 -136
  56. package/src/Picker/WrappedPurePicker.tsx +0 -128
  57. package/src/Rifm/Rifm.ts +0 -213
  58. package/src/TimePicker/TimePicker.tsx +0 -67
  59. package/src/TimePicker/TimePickerToolbar.tsx +0 -180
  60. package/src/TimePicker/index.tsx +0 -7
  61. package/src/__tests__/DatePicker/Calendar.test.tsx +0 -51
  62. package/src/__tests__/DatePicker/Month.test.tsx +0 -36
  63. package/src/__tests__/DatePicker/MonthSelection.test.tsx +0 -37
  64. package/src/__tests__/MuiPickersUtilsProvider.test.tsx +0 -21
  65. package/src/__tests__/TimePicker/Clock.test.tsx +0 -68
  66. package/src/__tests__/_helpers/date-utils.test.tsx +0 -197
  67. package/src/__tests__/_helpers/text-field-helper.test.tsx +0 -34
  68. package/src/__tests__/_shared/ModalDialog.test.tsx +0 -109
  69. package/src/__tests__/e2e/DatePicker.test.tsx +0 -233
  70. package/src/__tests__/e2e/DatePickerProps.test.tsx +0 -18
  71. package/src/__tests__/e2e/DatePickerRoot.test.tsx +0 -154
  72. package/src/__tests__/e2e/DateTimePicker.test.tsx +0 -86
  73. package/src/__tests__/e2e/DateTimePickerRoot.test.tsx +0 -72
  74. package/src/__tests__/e2e/KeyboardDatePicker.test.tsx +0 -140
  75. package/src/__tests__/e2e/KeyboardDateTimePicker.test.tsx +0 -48
  76. package/src/__tests__/e2e/Theme.test.tsx +0 -30
  77. package/src/__tests__/e2e/TimePicker.test.tsx +0 -121
  78. package/src/__tests__/e2e/commands.tsx +0 -8
  79. package/src/__tests__/setup.js +0 -26
  80. package/src/__tests__/test-utils.tsx +0 -45
  81. package/src/__tests__/tsconfig.json +0 -5
  82. package/src/_helpers/date-utils.ts +0 -92
  83. package/src/_helpers/text-field-helper.ts +0 -239
  84. package/src/_helpers/time-utils.ts +0 -83
  85. package/src/_helpers/utils.ts +0 -8
  86. package/src/_shared/KeyboardDateInput.tsx +0 -161
  87. package/src/_shared/ModalDialog.tsx +0 -114
  88. package/src/_shared/PickerToolbar.tsx +0 -52
  89. package/src/_shared/PureDateInput.tsx +0 -45
  90. package/src/_shared/ToolbarButton.tsx +0 -63
  91. package/src/_shared/ToolbarText.tsx +0 -49
  92. package/src/_shared/WithUtils.tsx +0 -19
  93. package/src/_shared/hooks/useIsLandscape.tsx +0 -27
  94. package/src/_shared/hooks/useKeyDown.ts +0 -34
  95. package/src/_shared/hooks/useKeyboardPickerState.ts +0 -72
  96. package/src/_shared/hooks/useOpenState.ts +0 -22
  97. package/src/_shared/hooks/usePickerState.ts +0 -134
  98. package/src/_shared/hooks/useUtils.ts +0 -20
  99. package/src/_shared/hooks/useViews.tsx +0 -31
  100. package/src/_shared/icons/ArrowLeftIcon.tsx +0 -11
  101. package/src/_shared/icons/ArrowRightIcon.tsx +0 -11
  102. package/src/_shared/icons/DateRangeIcon.tsx +0 -11
  103. package/src/_shared/icons/KeyboardIcon.tsx +0 -11
  104. package/src/_shared/icons/TimeIcon.tsx +0 -12
  105. package/src/constants/ClockType.ts +0 -11
  106. package/src/constants/dimensions.ts +0 -5
  107. package/src/constants/prop-types.ts +0 -37
  108. package/src/index.ts +0 -48
  109. package/src/typings/BasePicker.tsx +0 -60
  110. package/src/typings/date.ts +0 -3
  111. package/src/typings/extendMui.ts +0 -10
  112. package/src/typings/overrides.ts +0 -44
  113. package/src/views/Calendar/Calendar.tsx +0 -361
  114. package/src/views/Calendar/CalendarHeader.tsx +0 -141
  115. package/src/views/Calendar/Day.tsx +0 -97
  116. package/src/views/Calendar/DayWrapper.tsx +0 -33
  117. package/src/views/Calendar/SlideTransition.tsx +0 -100
  118. package/src/views/Clock/Clock.tsx +0 -172
  119. package/src/views/Clock/ClockNumber.tsx +0 -91
  120. package/src/views/Clock/ClockNumbers.tsx +0 -76
  121. package/src/views/Clock/ClockPointer.tsx +0 -104
  122. package/src/views/Clock/ClockView.tsx +0 -105
  123. package/src/views/Month/Month.tsx +0 -76
  124. package/src/views/Month/MonthView.tsx +0 -94
  125. package/src/views/Year/Year.tsx +0 -77
  126. package/src/views/Year/YearView.tsx +0 -91
  127. package/src/wrappers/InlineWrapper.tsx +0 -80
  128. package/src/wrappers/ModalWrapper.tsx +0 -113
  129. package/src/wrappers/StaticWrapper.tsx +0 -22
  130. package/src/wrappers/Wrapper.tsx +0 -75
  131. package/tsconfig.json +0 -21
  132. package/typings.d.ts +0 -6
  133. /package/{build/DatePicker → DatePicker}/DatePicker.d.ts +0 -0
  134. /package/{build/DatePicker → DatePicker}/DatePicker.js +0 -0
  135. /package/{build/DatePicker → DatePicker}/DatePickerToolbar.d.ts +0 -0
  136. /package/{build/DatePicker → DatePicker}/index.d.ts +0 -0
  137. /package/{build/DatePicker → DatePicker}/index.js +0 -0
  138. /package/{build/DateTimePicker → DateTimePicker}/DateTimePickerTabs.d.ts +0 -0
  139. /package/{build/DateTimePicker → DateTimePicker}/DateTimePickerTabs.js +0 -0
  140. /package/{build/DateTimePicker → DateTimePicker}/DateTimePickerToolbar.d.ts +0 -0
  141. /package/{build/DateTimePicker → DateTimePicker}/index.d.ts +0 -0
  142. /package/{build/DateTimePicker → DateTimePicker}/index.js +0 -0
  143. /package/{build/MuiPickersUtilsProvider.js → MuiPickersUtilsProvider.js} +0 -0
  144. /package/{build/Picker → Picker}/WrappedKeyboardPicker.d.ts +0 -0
  145. /package/{build/Picker → Picker}/WrappedKeyboardPicker.js +0 -0
  146. /package/{build/Picker → Picker}/WrappedPurePicker.d.ts +0 -0
  147. /package/{build/README.md → README.md} +0 -0
  148. /package/{build/Rifm → Rifm}/Rifm.d.ts +0 -0
  149. /package/{build/Rifm → Rifm}/Rifm.js +0 -0
  150. /package/{build/TimePicker → TimePicker}/TimePickerToolbar.d.ts +0 -0
  151. /package/{build/TimePicker → TimePicker}/index.d.ts +0 -0
  152. /package/{build/TimePicker → TimePicker}/index.js +0 -0
  153. /package/{build/_helpers → _helpers}/time-utils.js +0 -0
  154. /package/{build/_helpers → _helpers}/utils.d.ts +0 -0
  155. /package/{build/_helpers → _helpers}/utils.js +0 -0
  156. /package/{build/_shared → _shared}/KeyboardDateInput.d.ts +0 -0
  157. /package/{build/_shared → _shared}/KeyboardDateInput.js +0 -0
  158. /package/{build/_shared → _shared}/ModalDialog.d.ts +0 -0
  159. /package/{build/_shared → _shared}/ModalDialog.js +0 -0
  160. /package/{build/_shared → _shared}/PickerToolbar.d.ts +0 -0
  161. /package/{build/_shared → _shared}/PickerToolbar.js +0 -0
  162. /package/{build/_shared → _shared}/PureDateInput.d.ts +0 -0
  163. /package/{build/_shared → _shared}/PureDateInput.js +0 -0
  164. /package/{build/_shared → _shared}/ToolbarButton.d.ts +0 -0
  165. /package/{build/_shared → _shared}/ToolbarButton.js +0 -0
  166. /package/{build/_shared → _shared}/ToolbarText.d.ts +0 -0
  167. /package/{build/_shared → _shared}/ToolbarText.js +0 -0
  168. /package/{build/_shared → _shared}/WithUtils.js +0 -0
  169. /package/{build/_shared → _shared}/hooks/useIsLandscape.d.ts +0 -0
  170. /package/{build/_shared → _shared}/hooks/useIsLandscape.js +0 -0
  171. /package/{build/_shared → _shared}/hooks/useKeyDown.d.ts +0 -0
  172. /package/{build/_shared → _shared}/hooks/useKeyDown.js +0 -0
  173. /package/{build/_shared → _shared}/hooks/useKeyboardPickerState.d.ts +0 -0
  174. /package/{build/_shared → _shared}/hooks/useOpenState.d.ts +0 -0
  175. /package/{build/_shared → _shared}/hooks/useOpenState.js +0 -0
  176. /package/{build/_shared → _shared}/hooks/usePickerState.d.ts +0 -0
  177. /package/{build/_shared → _shared}/hooks/usePickerState.js +0 -0
  178. /package/{build/_shared → _shared}/hooks/useUtils.js +0 -0
  179. /package/{build/_shared → _shared}/hooks/useViews.d.ts +0 -0
  180. /package/{build/_shared → _shared}/hooks/useViews.js +0 -0
  181. /package/{build/_shared → _shared}/icons/ArrowLeftIcon.d.ts +0 -0
  182. /package/{build/_shared → _shared}/icons/ArrowLeftIcon.js +0 -0
  183. /package/{build/_shared → _shared}/icons/ArrowRightIcon.d.ts +0 -0
  184. /package/{build/_shared → _shared}/icons/ArrowRightIcon.js +0 -0
  185. /package/{build/_shared → _shared}/icons/DateRangeIcon.d.ts +0 -0
  186. /package/{build/_shared → _shared}/icons/DateRangeIcon.js +0 -0
  187. /package/{build/_shared → _shared}/icons/KeyboardIcon.d.ts +0 -0
  188. /package/{build/_shared → _shared}/icons/KeyboardIcon.js +0 -0
  189. /package/{build/_shared → _shared}/icons/TimeIcon.d.ts +0 -0
  190. /package/{build/_shared → _shared}/icons/TimeIcon.js +0 -0
  191. /package/{build/constants → constants}/ClockType.d.ts +0 -0
  192. /package/{build/constants → constants}/ClockType.js +0 -0
  193. /package/{build/constants → constants}/dimensions.d.ts +0 -0
  194. /package/{build/constants → constants}/dimensions.js +0 -0
  195. /package/{build/constants → constants}/prop-types.d.ts +0 -0
  196. /package/{build/constants → constants}/prop-types.js +0 -0
  197. /package/{build/index.js → index.js} +0 -0
  198. /package/{build/typings → typings}/BasePicker.js +0 -0
  199. /package/{build/typings → typings}/date.d.ts +0 -0
  200. /package/{build/typings → typings}/date.js +0 -0
  201. /package/{build/typings → typings}/extendMui.d.ts +0 -0
  202. /package/{build/typings → typings}/extendMui.js +0 -0
  203. /package/{build/typings → typings}/overrides.d.ts +0 -0
  204. /package/{build/typings → typings}/overrides.js +0 -0
  205. /package/{build/views → views}/Calendar/Calendar.d.ts +0 -0
  206. /package/{build/views → views}/Calendar/CalendarHeader.d.ts +0 -0
  207. /package/{build/views → views}/Calendar/Day.d.ts +0 -0
  208. /package/{build/views → views}/Calendar/Day.js +0 -0
  209. /package/{build/views → views}/Calendar/DayWrapper.d.ts +0 -0
  210. /package/{build/views → views}/Calendar/DayWrapper.js +0 -0
  211. /package/{build/views → views}/Calendar/SlideTransition.d.ts +0 -0
  212. /package/{build/views → views}/Calendar/SlideTransition.js +0 -0
  213. /package/{build/views → views}/Clock/Clock.d.ts +0 -0
  214. /package/{build/views → views}/Clock/ClockNumber.d.ts +0 -0
  215. /package/{build/views → views}/Clock/ClockNumber.js +0 -0
  216. /package/{build/views → views}/Clock/ClockNumbers.js +0 -0
  217. /package/{build/views → views}/Clock/ClockPointer.d.ts +0 -0
  218. /package/{build/views → views}/Clock/ClockPointer.js +0 -0
  219. /package/{build/views → views}/Clock/ClockView.d.ts +0 -0
  220. /package/{build/views → views}/Month/Month.d.ts +0 -0
  221. /package/{build/views → views}/Month/Month.js +0 -0
  222. /package/{build/views → views}/Month/MonthView.d.ts +0 -0
  223. /package/{build/views → views}/Year/Year.d.ts +0 -0
  224. /package/{build/views → views}/Year/Year.js +0 -0
  225. /package/{build/views → views}/Year/YearView.d.ts +0 -0
  226. /package/{build/wrappers → wrappers}/InlineWrapper.d.ts +0 -0
  227. /package/{build/wrappers → wrappers}/InlineWrapper.js +0 -0
  228. /package/{build/wrappers → wrappers}/ModalWrapper.d.ts +0 -0
  229. /package/{build/wrappers → wrappers}/ModalWrapper.js +0 -0
  230. /package/{build/wrappers → wrappers}/StaticWrapper.d.ts +0 -0
  231. /package/{build/wrappers → wrappers}/StaticWrapper.js +0 -0
  232. /package/{build/wrappers → wrappers}/Wrapper.d.ts +0 -0
  233. /package/{build/wrappers → wrappers}/Wrapper.js +0 -0
@@ -1,45 +0,0 @@
1
- import * as React from 'react';
2
- import * as enzyme from 'enzyme';
3
- import LuxonUtils from '@date-io/luxon';
4
- import MomentUtils from '@date-io/moment';
5
- import DateFnsUtils from '@date-io/date-fns';
6
- import MuiPickersUtilsProvider from '../MuiPickersUtilsProvider';
7
- import { WithUtilsProps } from '../_shared/WithUtils';
8
-
9
- const getUtilClass = () => {
10
- switch (process.env.UTILS) {
11
- case 'moment':
12
- return MomentUtils;
13
- case 'date-fns':
14
- return DateFnsUtils;
15
- case 'luxon':
16
- return LuxonUtils;
17
- default:
18
- return DateFnsUtils;
19
- }
20
- };
21
-
22
- export const UtilClassToUse: any = getUtilClass();
23
- export const utilsToUse = new UtilClassToUse();
24
-
25
- const getComponentWithUtils = <P extends WithUtilsProps>(element: React.ReactElement<P>) =>
26
- React.cloneElement(element, { utils: utilsToUse } as any);
27
-
28
- export const shallow = <P extends WithUtilsProps>(element: React.ReactElement<P>) =>
29
- enzyme.shallow(getComponentWithUtils(element));
30
-
31
- export const mount = <P extends WithUtilsProps>(element: React.ReactElement<P>) =>
32
- enzyme.mount(<MuiPickersUtilsProvider utils={UtilClassToUse}>{element}</MuiPickersUtilsProvider>);
33
-
34
- export const shallowRender = (render: (props: any) => React.ReactElement<any>) => {
35
- return enzyme.shallow(render({ utils: utilsToUse, classes: {} as any, theme: {} as any }));
36
- };
37
-
38
- // toHaveBeenCalledWith doesn't work with moment because of changing some internal props
39
- export const toHaveBeenCalledExceptMoment = (mock: jest.Mock<any, any>, params: any[]) => {
40
- if (process.env.UTILS === 'moment') {
41
- return expect(mock).toHaveBeenCalled();
42
- }
43
-
44
- return expect(mock).toHaveBeenCalledWith(...params);
45
- };
@@ -1,5 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
- "include": ["./**/*.tsx", "../../typings.d.ts"],
4
- "exclude": []
5
- }
@@ -1,92 +0,0 @@
1
- import { arrayIncludes } from './utils';
2
- import { IUtils } from '@date-io/core/IUtils';
3
- import { MaterialUiPickersDate } from '../typings/date';
4
- import { DatePickerView } from '../DatePicker/DatePicker';
5
-
6
- interface FindClosestDateParams {
7
- date: MaterialUiPickersDate;
8
- utils: IUtils<MaterialUiPickersDate>;
9
- minDate: MaterialUiPickersDate;
10
- maxDate: MaterialUiPickersDate;
11
- disableFuture: boolean;
12
- disablePast: boolean;
13
- shouldDisableDate: (date: MaterialUiPickersDate) => boolean;
14
- }
15
-
16
- export const findClosestEnabledDate = ({
17
- date,
18
- utils,
19
- minDate,
20
- maxDate,
21
- disableFuture,
22
- disablePast,
23
- shouldDisableDate,
24
- }: FindClosestDateParams) => {
25
- const today = utils.startOfDay(utils.date());
26
-
27
- if (disablePast && utils.isBefore(minDate!, today)) {
28
- minDate = today;
29
- }
30
-
31
- if (disableFuture && utils.isAfter(maxDate, today)) {
32
- maxDate = today;
33
- }
34
-
35
- let forward = date;
36
- let backward = date;
37
- if (utils.isBefore(date, minDate)) {
38
- forward = utils.date(minDate);
39
- backward = null;
40
- }
41
-
42
- if (utils.isAfter(date, maxDate)) {
43
- if (backward) {
44
- backward = utils.date(maxDate);
45
- }
46
-
47
- forward = null;
48
- }
49
-
50
- while (forward || backward) {
51
- if (forward && utils.isAfter(forward, maxDate)) {
52
- forward = null;
53
- }
54
- if (backward && utils.isBefore(backward, minDate)) {
55
- backward = null;
56
- }
57
-
58
- if (forward) {
59
- if (!shouldDisableDate(forward)) {
60
- return forward;
61
- }
62
- forward = utils.addDays(forward, 1);
63
- }
64
-
65
- if (backward) {
66
- if (!shouldDisableDate(backward)) {
67
- return backward;
68
- }
69
- backward = utils.addDays(backward, -1);
70
- }
71
- }
72
-
73
- return null;
74
- };
75
-
76
- export const isYearOnlyView = (views: DatePickerView[]) =>
77
- views.length === 1 && views[0] === 'year';
78
-
79
- export const isYearAndMonthViews = (views: DatePickerView[]) =>
80
- views.length === 2 && arrayIncludes(views, 'month') && arrayIncludes(views, 'year');
81
-
82
- export const getFormatByViews = (views: DatePickerView[], utils: IUtils<MaterialUiPickersDate>) => {
83
- if (isYearOnlyView(views)) {
84
- return utils.yearFormat;
85
- }
86
-
87
- if (isYearAndMonthViews(views)) {
88
- return utils.yearMonthFormat;
89
- }
90
-
91
- return utils.dateFormat;
92
- };
@@ -1,239 +0,0 @@
1
- import { DatePickerProps } from '..';
2
- import { Omit } from '@material-ui/core';
3
- import { IUtils } from '@date-io/core/IUtils';
4
- import { ParsableDate } from '../constants/prop-types';
5
- import { BasePickerProps } from '../typings/BasePicker';
6
-
7
- const replaceAt = (str: string, index: number, replacement: string) => {
8
- replacement = replacement || '';
9
- return str.substr(0, index) + replacement + str.substr(index + replacement.length);
10
- };
11
-
12
- export const getDisplayDate = (
13
- value: ParsableDate,
14
- format: string,
15
- utils: IUtils<any>,
16
- isEmpty: boolean,
17
- { invalidLabel, emptyLabel, labelFunc }: Omit<BasePickerProps, 'value' | 'onChange'>
18
- ) => {
19
- const date = utils.date(value);
20
- if (labelFunc) {
21
- return labelFunc(isEmpty ? null : date, invalidLabel!);
22
- }
23
-
24
- if (isEmpty) {
25
- return emptyLabel || '';
26
- }
27
-
28
- return utils.isValid(date) ? utils.format(date, format) : invalidLabel!;
29
- };
30
-
31
- export interface BaseValidationProps {
32
- /**
33
- * Message, appearing when date cannot be parsed
34
- * @default 'Invalid Date Format'
35
- */
36
- invalidDateMessage?: React.ReactNode;
37
- }
38
-
39
- export interface DateValidationProps extends BaseValidationProps {
40
- /**
41
- * Error message, shown if date is less then minimal date
42
- * @default 'Date should not be before minimal date'
43
- */
44
- minDateMessage?: React.ReactNode;
45
- /**
46
- * Error message, shown if date is more then maximal date
47
- * @default 'Date should not be after maximal date'
48
- */
49
- maxDateMessage?: React.ReactNode;
50
- }
51
-
52
- const getComparisonMaxDate = (utils: IUtils<any>, strictCompareDates: boolean, date: Date) => {
53
- if (strictCompareDates) {
54
- return date;
55
- }
56
-
57
- return utils.endOfDay(date);
58
- };
59
-
60
- const getComparisonMinDate = (utils: IUtils<any>, strictCompareDates: boolean, date: Date) => {
61
- if (strictCompareDates) {
62
- return date;
63
- }
64
-
65
- return utils.startOfDay(date);
66
- };
67
-
68
- export const validate = (
69
- value: ParsableDate,
70
- utils: IUtils<any>,
71
- {
72
- maxDate,
73
- minDate,
74
- disablePast,
75
- disableFuture,
76
- maxDateMessage,
77
- minDateMessage,
78
- invalidDateMessage,
79
- strictCompareDates,
80
- }: Omit<DatePickerProps, 'views' | 'openTo'> // DateTimePicker doesn't support
81
- ): React.ReactNode => {
82
- const parsedValue = utils.date(value);
83
-
84
- // if null - do not show error
85
- if (value === null) {
86
- return '';
87
- }
88
-
89
- if (!utils.isValid(value)) {
90
- return invalidDateMessage;
91
- }
92
-
93
- if (
94
- maxDate &&
95
- utils.isAfter(
96
- parsedValue,
97
- getComparisonMaxDate(utils, !!strictCompareDates, utils.date(maxDate))
98
- )
99
- ) {
100
- return maxDateMessage;
101
- }
102
-
103
- if (
104
- disableFuture &&
105
- utils.isAfter(parsedValue, getComparisonMaxDate(utils, !!strictCompareDates, utils.date()))
106
- ) {
107
- return maxDateMessage;
108
- }
109
-
110
- if (
111
- minDate &&
112
- utils.isBefore(
113
- parsedValue,
114
- getComparisonMinDate(utils, !!strictCompareDates, utils.date(minDate))
115
- )
116
- ) {
117
- return minDateMessage;
118
- }
119
- if (
120
- disablePast &&
121
- utils.isBefore(parsedValue, getComparisonMinDate(utils, !!strictCompareDates, utils.date()))
122
- ) {
123
- return minDateMessage;
124
- }
125
-
126
- return '';
127
- };
128
-
129
- export function pick12hOr24hFormat(
130
- userFormat: string | undefined,
131
- ampm: boolean | undefined = true,
132
- formats: { '12h': string; '24h': string }
133
- ) {
134
- if (userFormat) {
135
- return userFormat;
136
- }
137
-
138
- return ampm ? formats['12h'] : formats['24h'];
139
- }
140
-
141
- export function makeMaskFromFormat(format: string, numberMaskChar: string) {
142
- return format.replace(/[a-z]/gi, numberMaskChar);
143
- }
144
-
145
- export const maskedDateFormatter = (mask: string, numberMaskChar: string) => (
146
- value: string,
147
- oldValue: string,
148
- currentCaretPosition?: number
149
- ) => {
150
- const refuse = /[^\d\w_]+/gi;
151
-
152
- if (!value || value === '') {
153
- return value;
154
- }
155
-
156
- if (!oldValue) {
157
- oldValue = '';
158
- }
159
-
160
- if (value == oldValue) {
161
- return value;
162
- }
163
-
164
- if (value.length < oldValue.length && currentCaretPosition != null) {
165
- value =
166
- value.slice(0, currentCaretPosition) +
167
- '_' +
168
- value.slice(currentCaretPosition, oldValue.length);
169
- }
170
-
171
- let refusedOldValue = oldValue.replace(refuse, '');
172
- let refusedNewValue = value.replace(refuse, '');
173
- let refusedMaskSymbols = mask.replace(refuse, '');
174
-
175
- const minLength =
176
- refusedOldValue.length > refusedNewValue.length
177
- ? refusedNewValue.length
178
- : refusedOldValue.length;
179
-
180
- let startPos = 0;
181
- let endPosShift = 0;
182
- while (startPos < minLength) {
183
- if (refusedNewValue[startPos] == refusedOldValue[startPos]) {
184
- startPos++;
185
- } else {
186
- break;
187
- }
188
- }
189
-
190
- while (
191
- endPosShift < minLength &&
192
- startPos < refusedNewValue.length - endPosShift &&
193
- startPos < refusedOldValue.length - endPosShift
194
- ) {
195
- if (
196
- refusedNewValue[refusedNewValue.length - endPosShift - 1] ==
197
- refusedOldValue[refusedOldValue.length - endPosShift - 1]
198
- ) {
199
- endPosShift++;
200
- } else {
201
- break;
202
- }
203
- }
204
-
205
- let endStartPos = refusedNewValue.length - endPosShift;
206
- endStartPos = endStartPos < startPos ? startPos : endStartPos;
207
-
208
- let firstPart = refusedNewValue.slice(0, startPos);
209
- let addedPart = refusedNewValue.slice(startPos, endStartPos);
210
- let endPart = refusedNewValue.slice(endStartPos, refusedNewValue.length);
211
-
212
- let maxSymbolsInEnd = refusedMaskSymbols.length - firstPart.length - addedPart.length;
213
- while (maxSymbolsInEnd > endPart.length) {
214
- addedPart += numberMaskChar;
215
- maxSymbolsInEnd--;
216
- }
217
- let entireRefusedString =
218
- firstPart + addedPart + endPart.slice(endPart.length - maxSymbolsInEnd, endPart.length);
219
-
220
- // Do nothing ?...
221
- entireRefusedString = entireRefusedString.slice(0, refusedMaskSymbols.length);
222
-
223
- let i = 0;
224
- let n = 0;
225
- let result = '';
226
- while (i < mask.length) {
227
- const maskChar = mask[i];
228
- if (maskChar === numberMaskChar && n < entireRefusedString.length) {
229
- const parsedChar = entireRefusedString[n];
230
- result += parsedChar;
231
- n += 1;
232
- } else {
233
- result += maskChar;
234
- }
235
- i += 1;
236
- }
237
-
238
- return result;
239
- };
@@ -1,83 +0,0 @@
1
- import { IUtils } from '@date-io/core/IUtils';
2
- import { MaterialUiPickersDate } from '../typings/date';
3
-
4
- const center = {
5
- x: 260 / 2,
6
- y: 260 / 2,
7
- };
8
-
9
- const basePoint = {
10
- x: center.x,
11
- y: 0,
12
- };
13
-
14
- const cx = basePoint.x - center.x;
15
- const cy = basePoint.y - center.y;
16
-
17
- const rad2deg = (rad: number) => rad * 57.29577951308232;
18
-
19
- const getAngleValue = (step: number, offsetX: number, offsetY: number) => {
20
- const x = offsetX - center.x;
21
- const y = offsetY - center.y;
22
-
23
- const atan = Math.atan2(cx, cy) - Math.atan2(x, y);
24
-
25
- let deg = rad2deg(atan);
26
- deg = Math.round(deg / step) * step;
27
- deg %= 360;
28
-
29
- const value = Math.floor(deg / step) || 0;
30
- const delta = Math.pow(x, 2) + Math.pow(y, 2);
31
- const distance = Math.sqrt(delta);
32
-
33
- return { value, distance };
34
- };
35
-
36
- export const getHours = (offsetX: number, offsetY: number, ampm: boolean) => {
37
- let { value, distance } = getAngleValue(30, offsetX, offsetY);
38
- value = value || 12;
39
-
40
- if (!ampm) {
41
- if (distance < 90) {
42
- value += 12;
43
- value %= 24;
44
- }
45
- } else {
46
- value %= 12;
47
- }
48
-
49
- return value;
50
- };
51
-
52
- export const getMinutes = (offsetX: number, offsetY: number, step = 1) => {
53
- const angleStep = step * 6;
54
- let { value } = getAngleValue(angleStep, offsetX, offsetY);
55
- value = (value * step) % 60;
56
-
57
- return value;
58
- };
59
-
60
- export const getMeridiem = (
61
- date: MaterialUiPickersDate,
62
- utils: IUtils<MaterialUiPickersDate>
63
- ): 'am' | 'pm' => {
64
- return utils.getHours(date) >= 12 ? 'pm' : 'am';
65
- };
66
-
67
- export const convertToMeridiem = (
68
- time: MaterialUiPickersDate,
69
- meridiem: 'am' | 'pm',
70
- ampm: boolean,
71
- utils: IUtils<MaterialUiPickersDate>
72
- ) => {
73
- if (ampm) {
74
- const currentMeridiem = utils.getHours(time) >= 12 ? 'pm' : 'am';
75
- if (currentMeridiem !== meridiem) {
76
- const hours = meridiem === 'am' ? utils.getHours(time) - 12 : utils.getHours(time) + 12;
77
-
78
- return utils.setHours(time, hours);
79
- }
80
- }
81
-
82
- return time;
83
- };
@@ -1,8 +0,0 @@
1
- /** Use it instead of .includes method for IE support */
2
- export function arrayIncludes<T>(array: T[], itemOrItems: T | T[]) {
3
- if (Array.isArray(itemOrItems)) {
4
- return itemOrItems.every(item => array.indexOf(item) !== -1);
5
- }
6
-
7
- return array.indexOf(itemOrItems) !== -1;
8
- }
@@ -1,161 +0,0 @@
1
- import * as React from 'react';
2
- import InputAdornment, { InputAdornmentProps } from '@material-ui/core/InputAdornment';
3
- import TextField, { BaseTextFieldProps, TextFieldProps } from '@material-ui/core/TextField';
4
- import { IconButton } from '@material-ui/core';
5
- import { ExtendMui } from '../typings/extendMui';
6
- import { KeyboardIcon } from './icons/KeyboardIcon';
7
- import { IconButtonProps } from '@material-ui/core/IconButton';
8
- import { makeMaskFromFormat, maskedDateFormatter } from '../_helpers/text-field-helper';
9
- import { useState } from 'react';
10
- import { Rifm } from '../Rifm/Rifm';
11
-
12
- export interface KeyboardDateInputProps
13
- extends ExtendMui<BaseTextFieldProps, 'variant' | 'onError' | 'onChange' | 'value'> {
14
- format: string;
15
- onChange: (value: string | null) => void;
16
- onBlur?: () => void;
17
- onClick?: () => void;
18
- validationError?: React.ReactNode;
19
- inputValue: string;
20
- InputProps?: TextFieldProps['InputProps'];
21
- /** Override input component */
22
- TextFieldComponent?: React.ComponentType<TextFieldProps>;
23
- /** Icon displaying for open picker button */
24
- keyboardIcon?: React.ReactNode;
25
- /** Pass material-ui text field variant down, bypass internal variant prop */
26
- inputVariant?: TextFieldProps['variant'];
27
- /**
28
- * Custom mask. Can be used to override generate from format. (e.g. __/__/____ __:__)
29
- */
30
- mask?: string;
31
- /**
32
- * Char string that will be replaced with number (for "_" mask will be "__/__/____")
33
- * @default '_'
34
- */
35
- maskChar?: string;
36
- /**
37
- * Refuse values regexp
38
- * @default /[^\d]+/gi
39
- */
40
- refuse?: RegExp;
41
- /**
42
- * Props to pass to keyboard input adornment
43
- * @type {Partial<InputAdornmentProps>}
44
- */
45
- InputAdornmentProps?: Partial<InputAdornmentProps>;
46
- /**
47
- * Props to pass to keyboard adornment button
48
- * @type {Partial<IconButtonProps>}
49
- */
50
- KeyboardButtonProps?: Partial<IconButtonProps>;
51
- /** Custom formatter to be passed into Rifm component */
52
- rifmFormatter?: (str: string) => string;
53
- /**
54
- * Show errors only when input blur
55
- */
56
- showErrorOnBlur?: boolean;
57
- }
58
-
59
- const KeyboardDateInput: React.FunctionComponent<KeyboardDateInputProps> = ({
60
- inputValue,
61
- showErrorOnBlur = false,
62
- inputVariant,
63
- validationError,
64
- KeyboardButtonProps,
65
- InputAdornmentProps,
66
- onClick,
67
- onChange,
68
- onBlur,
69
- onFocus,
70
- InputProps,
71
- mask,
72
- maskChar = '_',
73
- refuse = /[^\d_]+/gi,
74
- format,
75
- keyboardIcon,
76
- disabled,
77
- rifmFormatter,
78
- TextFieldComponent = TextField,
79
- ...other
80
- }) => {
81
- const inputMask = mask || makeMaskFromFormat(format, maskChar);
82
- const letterPosition = format.indexOf('a');
83
- // prettier-ignore
84
- const formatter = React.useCallback(
85
- maskedDateFormatter(inputMask, maskChar),
86
- [mask, maskChar]
87
- );
88
-
89
- const position =
90
- InputAdornmentProps && InputAdornmentProps.position ? InputAdornmentProps.position : 'end';
91
-
92
- const handleChange = (text: string) => {
93
- const finalString = text === '' || text === inputMask ? null : text;
94
- onChange(finalString);
95
- };
96
-
97
- const replace = (text: string): string => {
98
- return text;
99
- };
100
-
101
- const [showErrorFlag, handleBlur] = useState(showErrorOnBlur ? true : false);
102
-
103
- return (
104
- <Rifm
105
- value={inputValue}
106
- onChange={handleChange}
107
- format={rifmFormatter || formatter}
108
- replace={replace}
109
- mask={true}
110
- maskChar={maskChar}
111
- letterPosition={letterPosition}
112
- >
113
- {({ onChange, value }) => (
114
- <TextFieldComponent
115
- disabled={disabled}
116
- error={Boolean(validationError) && !showErrorFlag}
117
- helperText={!showErrorFlag && validationError}
118
- {...other}
119
- value={value}
120
- onChange={onChange}
121
- // onInput={changeInputStringValue}
122
- // onKeyUp={handleKeyUp}
123
- // onMouseUp={handleClick}
124
- onBlur={() => {
125
- if (onBlur) {
126
- onBlur();
127
- }
128
- if (showErrorOnBlur) {
129
- handleBlur(false);
130
- }
131
- }}
132
- onFocus={(ev: any) => {
133
- if (onFocus) {
134
- onFocus(ev);
135
- }
136
- if (showErrorOnBlur) {
137
- handleBlur(true);
138
- }
139
- }}
140
- variant={inputVariant as any}
141
- InputProps={{
142
- ...InputProps,
143
- [`${position}Adornment`]: (
144
- <InputAdornment position={position} {...InputAdornmentProps}>
145
- <IconButton disabled={disabled} {...KeyboardButtonProps} onClick={onClick}>
146
- {keyboardIcon}
147
- </IconButton>
148
- </InputAdornment>
149
- ),
150
- }}
151
- />
152
- )}
153
- </Rifm>
154
- );
155
- };
156
-
157
- KeyboardDateInput.defaultProps = {
158
- keyboardIcon: <KeyboardIcon />,
159
- };
160
-
161
- export default KeyboardDateInput;