@elliemae/ds-date-picker 2.3.0-alpha.9 → 2.3.0-next.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.
Files changed (118) hide show
  1. package/cjs/DSDatePicker.js +233 -0
  2. package/cjs/components/DSDatePickerImpl.js +354 -0
  3. package/cjs/components/DatePickerController/DatePickerController.js +360 -0
  4. package/cjs/components/DatePickerDay/DatePickerDay.js +24 -0
  5. package/cjs/components/DatePickerDropdown.js +65 -0
  6. package/cjs/components/DatePickerHeader/DatePickerHeader.js +56 -0
  7. package/cjs/components/DatePickerNavigation/DatePickerNavigation.js +32 -0
  8. package/cjs/components/DatePickerPicker/DatePickerPicker.js +74 -0
  9. package/cjs/components/DatePickerRange/DatePickerRange.js +119 -0
  10. package/cjs/components/DatePickerRangeHeader/DatePickerRangeHeader.js +144 -0
  11. package/cjs/components/DatePickerRenderMonth/DatePickerRenderMonth.js +46 -0
  12. package/cjs/components/DatePickerSingleDate/DatePickerSingleDate.js +85 -0
  13. package/cjs/components/SingleRangeDateSwitcher/SingleRangeDateSwitcher.js +59 -0
  14. package/cjs/components/index.js +27 -0
  15. package/cjs/defaultPhrases.js +261 -0
  16. package/cjs/index.js +35 -0
  17. package/esm/DSDatePicker.js +211 -0
  18. package/esm/components/DSDatePickerImpl.js +346 -0
  19. package/esm/components/DatePickerController/DatePickerController.js +350 -0
  20. package/esm/components/DatePickerDay/DatePickerDay.js +18 -0
  21. package/esm/components/DatePickerDropdown.js +57 -0
  22. package/esm/components/DatePickerHeader/DatePickerHeader.js +49 -0
  23. package/esm/components/DatePickerNavigation/DatePickerNavigation.js +25 -0
  24. package/esm/components/DatePickerPicker/DatePickerPicker.js +60 -0
  25. package/esm/components/DatePickerRange/DatePickerRange.js +111 -0
  26. package/esm/components/DatePickerRangeHeader/DatePickerRangeHeader.js +137 -0
  27. package/esm/components/DatePickerRenderMonth/DatePickerRenderMonth.js +38 -0
  28. package/esm/components/DatePickerSingleDate/DatePickerSingleDate.js +77 -0
  29. package/esm/components/SingleRangeDateSwitcher/SingleRangeDateSwitcher.js +53 -0
  30. package/esm/components/index.js +10 -0
  31. package/{dist/esm → esm}/defaultPhrases.js +80 -48
  32. package/esm/index.js +13 -0
  33. package/package.json +56 -58
  34. package/{dist/types → types}/components/DSDatePickerImpl.d.ts +1 -2
  35. package/{dist/types → types}/components/DatePickerController/DatePickerController.d.ts +1 -1
  36. package/{dist/types → types}/components/DatePickerDay/DatePickerDay.d.ts +0 -1
  37. package/{dist/types → types}/components/DatePickerDropdown.d.ts +0 -1
  38. package/{dist/types → types}/components/DatePickerHeader/DatePickerHeader.d.ts +0 -1
  39. package/{dist/types → types}/components/DatePickerNavigation/DatePickerNavigation.d.ts +3 -4
  40. package/{dist/types → types}/components/DatePickerPicker/DatePickerPicker.d.ts +1 -2
  41. package/{dist/types → types}/components/DatePickerRange/DatePickerRange.d.ts +0 -1
  42. package/{dist/types → types}/components/DatePickerRangeHeader/DatePickerRangeHeader.d.ts +0 -1
  43. package/{dist/types → types}/components/DatePickerRangeHeader/tests/DatePickerRangeHeader.test.d.ts +0 -0
  44. package/{dist/types → types}/components/DatePickerRenderMonth/DatePickerRenderMonth.d.ts +0 -0
  45. package/{dist/types → types}/components/DatePickerSingleDate/DatePickerSingleDate.d.ts +0 -1
  46. package/{dist/types → types}/components/SingleRangeDateSwitcher/SingleRangeDateSwitcher.d.ts +0 -1
  47. package/{dist/types → types}/components/index.d.ts +0 -0
  48. package/{dist/types → types}/components/tests/DatePickerHeader.test.d.ts +0 -0
  49. package/{dist/types → types}/components/tests/DatePickerRange.test.d.ts +0 -0
  50. package/{dist/types → types}/components/tests/DatePickerRangeHeader.test.d.ts +0 -0
  51. package/{dist/types → types}/components/tests/DatePickerSelectedDate.test.d.ts +0 -0
  52. package/{dist/types → types}/components/tests/DatePickerSingleDate.test.d.ts +0 -0
  53. package/{dist/types → types}/components/tests/SingleRangeDateSwitcher.test.d.ts +0 -0
  54. package/{dist/types → types}/defaultPhrases.d.ts +0 -0
  55. package/{dist/types → types}/index.d.ts +0 -0
  56. package/dist/cjs/DSDatePicker.js +0 -231
  57. package/dist/cjs/DSDatePicker.js.map +0 -7
  58. package/dist/cjs/components/DSDatePickerImpl.js +0 -274
  59. package/dist/cjs/components/DSDatePickerImpl.js.map +0 -7
  60. package/dist/cjs/components/DatePickerController/DatePickerController.js +0 -322
  61. package/dist/cjs/components/DatePickerController/DatePickerController.js.map +0 -7
  62. package/dist/cjs/components/DatePickerDay/DatePickerDay.js +0 -49
  63. package/dist/cjs/components/DatePickerDay/DatePickerDay.js.map +0 -7
  64. package/dist/cjs/components/DatePickerDropdown.js +0 -85
  65. package/dist/cjs/components/DatePickerDropdown.js.map +0 -7
  66. package/dist/cjs/components/DatePickerHeader/DatePickerHeader.js +0 -74
  67. package/dist/cjs/components/DatePickerHeader/DatePickerHeader.js.map +0 -7
  68. package/dist/cjs/components/DatePickerNavigation/DatePickerNavigation.js +0 -63
  69. package/dist/cjs/components/DatePickerNavigation/DatePickerNavigation.js.map +0 -7
  70. package/dist/cjs/components/DatePickerPicker/DatePickerPicker.js +0 -85
  71. package/dist/cjs/components/DatePickerPicker/DatePickerPicker.js.map +0 -7
  72. package/dist/cjs/components/DatePickerRange/DatePickerRange.js +0 -110
  73. package/dist/cjs/components/DatePickerRange/DatePickerRange.js.map +0 -7
  74. package/dist/cjs/components/DatePickerRangeHeader/DatePickerRangeHeader.js +0 -138
  75. package/dist/cjs/components/DatePickerRangeHeader/DatePickerRangeHeader.js.map +0 -7
  76. package/dist/cjs/components/DatePickerRenderMonth/DatePickerRenderMonth.js +0 -61
  77. package/dist/cjs/components/DatePickerRenderMonth/DatePickerRenderMonth.js.map +0 -7
  78. package/dist/cjs/components/DatePickerSingleDate/DatePickerSingleDate.js +0 -96
  79. package/dist/cjs/components/DatePickerSingleDate/DatePickerSingleDate.js.map +0 -7
  80. package/dist/cjs/components/SingleRangeDateSwitcher/SingleRangeDateSwitcher.js +0 -80
  81. package/dist/cjs/components/SingleRangeDateSwitcher/SingleRangeDateSwitcher.js.map +0 -7
  82. package/dist/cjs/components/index.js +0 -53
  83. package/dist/cjs/components/index.js.map +0 -7
  84. package/dist/cjs/defaultPhrases.js +0 -246
  85. package/dist/cjs/defaultPhrases.js.map +0 -7
  86. package/dist/cjs/index.js +0 -38
  87. package/dist/cjs/index.js.map +0 -7
  88. package/dist/esm/DSDatePicker.js +0 -213
  89. package/dist/esm/DSDatePicker.js.map +0 -7
  90. package/dist/esm/components/DSDatePickerImpl.js +0 -245
  91. package/dist/esm/components/DSDatePickerImpl.js.map +0 -7
  92. package/dist/esm/components/DatePickerController/DatePickerController.js +0 -293
  93. package/dist/esm/components/DatePickerController/DatePickerController.js.map +0 -7
  94. package/dist/esm/components/DatePickerDay/DatePickerDay.js +0 -20
  95. package/dist/esm/components/DatePickerDay/DatePickerDay.js.map +0 -7
  96. package/dist/esm/components/DatePickerDropdown.js +0 -56
  97. package/dist/esm/components/DatePickerDropdown.js.map +0 -7
  98. package/dist/esm/components/DatePickerHeader/DatePickerHeader.js +0 -45
  99. package/dist/esm/components/DatePickerHeader/DatePickerHeader.js.map +0 -7
  100. package/dist/esm/components/DatePickerNavigation/DatePickerNavigation.js +0 -37
  101. package/dist/esm/components/DatePickerNavigation/DatePickerNavigation.js.map +0 -7
  102. package/dist/esm/components/DatePickerPicker/DatePickerPicker.js +0 -56
  103. package/dist/esm/components/DatePickerPicker/DatePickerPicker.js.map +0 -7
  104. package/dist/esm/components/DatePickerRange/DatePickerRange.js +0 -81
  105. package/dist/esm/components/DatePickerRange/DatePickerRange.js.map +0 -7
  106. package/dist/esm/components/DatePickerRangeHeader/DatePickerRangeHeader.js +0 -109
  107. package/dist/esm/components/DatePickerRangeHeader/DatePickerRangeHeader.js.map +0 -7
  108. package/dist/esm/components/DatePickerRenderMonth/DatePickerRenderMonth.js +0 -32
  109. package/dist/esm/components/DatePickerRenderMonth/DatePickerRenderMonth.js.map +0 -7
  110. package/dist/esm/components/DatePickerSingleDate/DatePickerSingleDate.js +0 -67
  111. package/dist/esm/components/DatePickerSingleDate/DatePickerSingleDate.js.map +0 -7
  112. package/dist/esm/components/SingleRangeDateSwitcher/SingleRangeDateSwitcher.js +0 -51
  113. package/dist/esm/components/SingleRangeDateSwitcher/SingleRangeDateSwitcher.js.map +0 -7
  114. package/dist/esm/components/index.js +0 -24
  115. package/dist/esm/components/index.js.map +0 -7
  116. package/dist/esm/defaultPhrases.js.map +0 -7
  117. package/dist/esm/index.js +0 -9
  118. package/dist/esm/index.js.map +0 -7
@@ -0,0 +1,346 @@
1
+ import _jsx from '@babel/runtime/helpers/esm/jsx';
2
+ import 'core-js/modules/web.dom-collections.iterator.js';
3
+ import React from 'react';
4
+ import moment from 'moment';
5
+ import { DSInputGroup, DSDateInputV2 } from '@elliemae/ds-form';
6
+ import DSDatePickerController from './DatePickerController/DatePickerController.js';
7
+ import DatePickerDropdown from './DatePickerDropdown.js';
8
+
9
+ const FORMAT = 'MMDDYYYY';
10
+ class DSdatePickerImpl extends React.Component {
11
+ constructor(props) {
12
+ super(props);
13
+
14
+ this.onClickPicker = () => {
15
+ this.setState({
16
+ inputFocused: true
17
+ });
18
+ };
19
+
20
+ this.getSafeValue = () => {
21
+ const {
22
+ value,
23
+ date,
24
+ defaultValue
25
+ } = this.props;
26
+ const {
27
+ selectedDate
28
+ } = this.state;
29
+
30
+ if (value) {
31
+ return moment(value, FORMAT, true);
32
+ }
33
+
34
+ if (date) {
35
+ return moment(date, FORMAT, true);
36
+ }
37
+
38
+ if (defaultValue) {
39
+ return moment(defaultValue, FORMAT, true);
40
+ }
41
+
42
+ if (selectedDate) {
43
+ return selectedDate;
44
+ }
45
+
46
+ return null;
47
+ };
48
+
49
+ this.getSafeInputValue = () => {
50
+ const safeValue = this.getSafeValue();
51
+
52
+ if (safeValue && safeValue.isValid()) {
53
+ return safeValue.format(FORMAT);
54
+ }
55
+
56
+ const {
57
+ dataInput
58
+ } = this.state;
59
+ return dataInput;
60
+ };
61
+
62
+ this.isControlled = () => {
63
+ const {
64
+ value,
65
+ date
66
+ } = this.props;
67
+ return Boolean(value) || Boolean(date);
68
+ };
69
+
70
+ this.handleDateChange = (date, event) => {
71
+ const {
72
+ readOnly,
73
+ onDateChange,
74
+ keepOpenOnDateSelect,
75
+ onChange,
76
+ onBlur
77
+ } = this.props;
78
+
79
+ if (!readOnly) {
80
+ if (!this.isControlled()) {
81
+ this.setState({
82
+ dataInput: date.format(FORMAT),
83
+ selectedDate: date
84
+ });
85
+ }
86
+
87
+ onChange(date.format(FORMAT), date);
88
+ onDateChange(date);
89
+
90
+ if (!keepOpenOnDateSelect || event.key === 'Enter') {
91
+ this.setState({
92
+ inputFocused: false
93
+ });
94
+ onBlur(date.format(FORMAT), date);
95
+ }
96
+ }
97
+ };
98
+
99
+ this.handleInputChange = (dataInput, newDate) => {
100
+ const {
101
+ onChange
102
+ } = this.props;
103
+ const newState = {
104
+ dataInput,
105
+ selectedDate: newDate
106
+ };
107
+ this.setState(() => newState);
108
+ onChange(dataInput, newDate);
109
+ };
110
+
111
+ this.handleChange = newDate => {
112
+ if (!newDate) return;
113
+ const {
114
+ onDateChange
115
+ } = this.props;
116
+ const momentValue = moment(newDate, FORMAT, true);
117
+ if (!momentValue.isValid()) return;
118
+ this.setState({
119
+ selectedDate: momentValue
120
+ });
121
+ onDateChange(momentValue);
122
+ };
123
+
124
+ this.handleFocus = _ref => {
125
+ let {
126
+ focused
127
+ } = _ref;
128
+ this.setState({
129
+ inputFocused: focused
130
+ });
131
+ };
132
+
133
+ this.handleCalendarClose = () => {
134
+ const {
135
+ onClose
136
+ } = this.props;
137
+ this.setState({
138
+ inputFocused: false
139
+ });
140
+ this.handleOnBlur();
141
+ onClose();
142
+ };
143
+
144
+ this.handleClickEscape = () => {
145
+ const {
146
+ onClose
147
+ } = this.props;
148
+ this.setState({
149
+ inputFocused: false
150
+ });
151
+ this.handleOnBlur();
152
+ onClose();
153
+ };
154
+
155
+ this.handleOnBlur = () => {
156
+ setTimeout(() => {
157
+ const {
158
+ onBlur,
159
+ autoClear
160
+ } = this.props;
161
+ const {
162
+ dataInput,
163
+ selectedDate
164
+ } = this.state;
165
+
166
+ if (moment(selectedDate, FORMAT, true).isValid()) {
167
+ onBlur(dataInput, selectedDate);
168
+ } else {
169
+ if (autoClear) {
170
+ this.setState({
171
+ dataInput: undefined
172
+ });
173
+ }
174
+
175
+ onBlur(dataInput, null);
176
+ }
177
+ });
178
+ };
179
+
180
+ this.handleInputFocus = dataInput => {
181
+ const {
182
+ onFocus
183
+ } = this.props;
184
+ onFocus(dataInput);
185
+ };
186
+
187
+ this.state = {
188
+ pickerRef: /*#__PURE__*/React.createRef(),
189
+ dataInput: '',
190
+ selectedDate: null,
191
+ inputFocused: false
192
+ };
193
+ }
194
+
195
+ static getDerivedStateFromProps(nextProps, prevState) {
196
+ const {
197
+ dataInput: prevVal,
198
+ selectedDate: prevDate
199
+ } = prevState || {};
200
+ const {
201
+ value: nextVal,
202
+ date: nextDate
203
+ } = nextProps;
204
+ const isPrevValMoment = prevVal instanceof moment;
205
+ const isPrevDateMoment = prevDate instanceof moment;
206
+ const prevValAsString = isPrevValMoment ? prevVal.format(FORMAT) : prevVal; // if users wants to clear, we use '==' to catch both undefined AND null
207
+
208
+ if (nextVal == null && nextDate == null) {
209
+ return {
210
+ dataInput: '',
211
+ selectedDate: null
212
+ };
213
+ } // when val is an incomplete state, we don't want to mess with the state
214
+ // it's incomplete when length is not the full mmddyyyy (length === 8)
215
+
216
+
217
+ if ((prevValAsString === null || prevValAsString === void 0 ? void 0 : prevValAsString.length) < 8) {
218
+ return null;
219
+ }
220
+
221
+ const prevDateAsString = isPrevDateMoment ? prevDate.format(FORMAT) : prevDate;
222
+ const isNextValMoment = nextVal instanceof moment;
223
+ const isNextDateMoment = nextDate instanceof moment;
224
+ const nextValAsString = isNextValMoment ? nextVal.format(FORMAT) : nextVal;
225
+ const nextValAsMoment = isNextValMoment ? nextVal : moment(nextVal);
226
+ const nextDateAsString = isNextDateMoment ? nextDate.format(FORMAT) : nextDate;
227
+ const nextDateAsMoment = isNextDateMoment ? nextDate : moment(nextDate);
228
+ const hasValChanged = nextValAsString !== prevValAsString;
229
+ const hasDateChanged = nextDateAsString !== prevDateAsString;
230
+ const newState = {};
231
+ let skipStateChange = true; // value has priority over date, if both date and value change we take date
232
+ // as such, order of condition is meaningful
233
+
234
+ if (hasDateChanged) {
235
+ skipStateChange = false;
236
+ newState.dataInput = nextDateAsString;
237
+ newState.selectedDate = nextDateAsMoment;
238
+ }
239
+
240
+ if (hasValChanged) {
241
+ skipStateChange = false;
242
+ newState.dataInput = nextValAsString;
243
+ newState.selectedDate = nextValAsMoment;
244
+ }
245
+
246
+ if (skipStateChange) return null;
247
+ return newState;
248
+ }
249
+
250
+ render() {
251
+ var _this = this;
252
+
253
+ const {
254
+ inputFocused
255
+ } = this.state;
256
+ const {
257
+ disabled,
258
+ numberOfMonths,
259
+ readOnly,
260
+ enableOutsideDays,
261
+ transitionDuration,
262
+ firstDayOfWeek,
263
+ keepOpenOnDateSelect,
264
+ hideKeyboardShortcutsPanel,
265
+ onPrevMonthClick,
266
+ onNextMonthClick,
267
+ onClose,
268
+ phrases,
269
+ placeholder,
270
+ displayFormatDay,
271
+ isDayBlocked,
272
+ isOutsideRange,
273
+ isDayHighlighted,
274
+ tabIndex,
275
+ zIndex,
276
+ pickerProps,
277
+ calendarProps,
278
+ focusCurrentDate
279
+ } = this.props;
280
+ const safedate = this.getSafeValue();
281
+ const safeInputValue = this.getSafeInputValue();
282
+ const hasSelectedDate = !!safedate;
283
+ return /*#__PURE__*/_jsx(DSInputGroup, {
284
+ rightAddon: /*#__PURE__*/_jsx(DatePickerDropdown, {
285
+ pickerRef: this.state.pickerRef,
286
+ disabled: disabled,
287
+ isOpen: inputFocused,
288
+ menu: /*#__PURE__*/_jsx("div", {
289
+ style: {
290
+ minHeight: '310px',
291
+ zIndex: 1
292
+ },
293
+ className: hasSelectedDate ? 'has-selected-date' : 'without-selected-date',
294
+ "data-testid": "date-picker-portal-wrapper"
295
+ }, void 0, /*#__PURE__*/_jsx(DSDatePickerController, {
296
+ date: safedate,
297
+ displayFormatDay: displayFormatDay,
298
+ enableOutsideDays: enableOutsideDays,
299
+ firstDayOfWeek: firstDayOfWeek,
300
+ hideKeyboardShortcutsPanel: hideKeyboardShortcutsPanel,
301
+ isDayBlocked: isDayBlocked,
302
+ isDayHighlighted: isDayHighlighted,
303
+ isOutsideRange: isOutsideRange,
304
+ keepOpenOnDateSelect: keepOpenOnDateSelect,
305
+ numberOfMonths: numberOfMonths,
306
+ onClickEscape: this.handleClickEscape,
307
+ onClose: function () {
308
+ if (_this.state.pickerRef.current) _this.state.pickerRef.current.focus();
309
+ onClose(...arguments);
310
+
311
+ _this.setState({
312
+ inputFocused: false
313
+ });
314
+ },
315
+ onDateChange: this.handleDateChange,
316
+ onFocusChange: this.handleFocus,
317
+ onNextMonthClick: onNextMonthClick,
318
+ onOutsideClick: this.handleCalendarClose,
319
+ onPrevMonthClick: onPrevMonthClick,
320
+ phrases: phrases,
321
+ transitionDuration: transitionDuration,
322
+ calendarProps: calendarProps,
323
+ focusCurrentDate: focusCurrentDate
324
+ })),
325
+ onClick: this.onClickPicker,
326
+ readOnly: readOnly,
327
+ zIndex: zIndex,
328
+ pickerProps: pickerProps
329
+ })
330
+ }, void 0, /*#__PURE__*/_jsx(DSDateInputV2, {
331
+ "data-testid": "datepicker-input",
332
+ "aria-label": placeholder || 'Date Picker Input',
333
+ disabled: disabled,
334
+ onBlur: this.handleOnBlur,
335
+ onChange: this.handleInputChange,
336
+ onDateChange: this.handleChange,
337
+ onFocus: this.handleInputFocus,
338
+ placeholder: placeholder,
339
+ tabIndex: tabIndex,
340
+ value: safeInputValue
341
+ }));
342
+ }
343
+
344
+ }
345
+
346
+ export { DSdatePickerImpl as default };
@@ -0,0 +1,350 @@
1
+ import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
2
+ import _jsx from '@babel/runtime/helpers/esm/jsx';
3
+ import 'core-js/modules/esnext.async-iterator.filter.js';
4
+ import 'core-js/modules/esnext.iterator.constructor.js';
5
+ import 'core-js/modules/esnext.iterator.filter.js';
6
+ import 'core-js/modules/web.dom-collections.iterator.js';
7
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
8
+ import 'core-js/modules/esnext.iterator.for-each.js';
9
+ import React from 'react';
10
+ import { debounce } from 'lodash';
11
+ import PropTypes from 'prop-types';
12
+ import moment from 'moment';
13
+ import 'react-dates/initialize';
14
+ import { DayPickerSingleDateController } from 'react-dates';
15
+ import { convertPropToCssClassName } from '@elliemae/ds-classnames';
16
+ import { ChevronLeft } from '@elliemae/ds-icons';
17
+ import { SingleDatePickerPhrases } from '../../defaultPhrases.js';
18
+ import { renderMonthElement } from '../DatePickerRenderMonth/DatePickerRenderMonth.js';
19
+ import Navigation from '../DatePickerNavigation/DatePickerNavigation.js';
20
+ import Day from '../DatePickerDay/DatePickerDay.js';
21
+ import { jsx } from 'react/jsx-runtime';
22
+
23
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
24
+
25
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
26
+ const {
27
+ classNameElement,
28
+ classNameBlock
29
+ } = convertPropToCssClassName('datepicker-range');
30
+ const focusElementOnOpen = debounce((datePickerDom, firstFocusableItemDom, focusCurrentDate) => {
31
+ if (datePickerDom) {
32
+ const currentDay = Array.from(datePickerDom === null || datePickerDom === void 0 ? void 0 : datePickerDom.getElementsByClassName('CalendarDay__today')).filter(el => !el.className.includes('CalendarDay__outside'))[0];
33
+ const [calendarDaySelected] = datePickerDom === null || datePickerDom === void 0 ? void 0 : datePickerDom.getElementsByClassName('CalendarDay__selected');
34
+
35
+ if (calendarDaySelected) {
36
+ var _calendarDaySelected$;
37
+
38
+ calendarDaySelected === null || calendarDaySelected === void 0 ? void 0 : (_calendarDaySelected$ = calendarDaySelected.focus) === null || _calendarDaySelected$ === void 0 ? void 0 : _calendarDaySelected$.call(calendarDaySelected);
39
+ } else if (focusCurrentDate && !calendarDaySelected) currentDay.focus();else {
40
+ var _navButton$focus;
41
+
42
+ const navButton = firstFocusableItemDom === null || firstFocusableItemDom === void 0 ? void 0 : firstFocusableItemDom.closest('.DayPickerNavigation_button>div');
43
+ navButton === null || navButton === void 0 ? void 0 : (_navButton$focus = navButton.focus) === null || _navButton$focus === void 0 ? void 0 : _navButton$focus.call(navButton);
44
+ }
45
+ }
46
+ }, 100);
47
+ class DSDatePickerController extends React.Component {
48
+ // eslint-disable-next-line react/static-property-placement
49
+ constructor(props) {
50
+ super(props);
51
+
52
+ this.handleMouseUp = () => {
53
+ var _focusedElement$blur;
54
+
55
+ const focusedElement = document.activeElement;
56
+ focusedElement === null || focusedElement === void 0 ? void 0 : (_focusedElement$blur = focusedElement.blur) === null || _focusedElement$blur === void 0 ? void 0 : _focusedElement$blur.call(focusedElement);
57
+ };
58
+
59
+ this.handleKeyDown = event => {
60
+ const [firstDay, ...restOfDays] = document.getElementsByClassName('CalendarMonthGrid_month__horizontal')[1].getElementsByClassName('CalendarDay');
61
+ const [lastDay] = restOfDays.slice(-1);
62
+ const {
63
+ onClickEscape
64
+ } = this.props;
65
+
66
+ switch (event.key) {
67
+ case 'Home':
68
+ firstDay.focus();
69
+ break;
70
+
71
+ case 'End':
72
+ lastDay.focus();
73
+ break;
74
+
75
+ case 'Escape':
76
+ onClickEscape();
77
+ break;
78
+ }
79
+ };
80
+
81
+ this.getSafeValue = () => {
82
+ const {
83
+ value,
84
+ date,
85
+ defaultValue
86
+ } = this.props;
87
+ const {
88
+ selectedDate
89
+ } = this.state;
90
+ if (value) return moment(value);
91
+ if (date) return moment(date);
92
+ if (defaultValue) return moment(defaultValue);
93
+ if (selectedDate) return moment(selectedDate);
94
+ return null;
95
+ };
96
+
97
+ this.isControlled = () => {
98
+ const {
99
+ value,
100
+ date
101
+ } = this.props;
102
+ return Boolean(value) || Boolean(date);
103
+ };
104
+
105
+ this.handleDateChange = date => {
106
+ const {
107
+ readOnly,
108
+ onDateChange,
109
+ onChange
110
+ } = this.props;
111
+
112
+ if (!readOnly) {
113
+ if (!this.isControlled()) {
114
+ this.setState({
115
+ selectedDate: date
116
+ });
117
+ }
118
+
119
+ onDateChange(date);
120
+ onChange(date);
121
+ }
122
+ };
123
+
124
+ this.handleChange = dataInput => {
125
+ const {
126
+ onDateChange,
127
+ onChange
128
+ } = this.props;
129
+ const momentvalue = moment(dataInput.target.value);
130
+ this.setState({
131
+ selectedDate: momentvalue
132
+ });
133
+ onDateChange(momentvalue);
134
+ onChange(momentvalue);
135
+ };
136
+
137
+ this.handleNavClick = (date, nav) => {
138
+ const [prev, next] = document.getElementsByClassName('DayPickerNavigation_button');
139
+ const {
140
+ onPrevMonthClick,
141
+ onNextMonthClick
142
+ } = this.props;
143
+
144
+ if (nav === 'prev') {
145
+ var _prev$focus;
146
+
147
+ prev === null || prev === void 0 ? void 0 : (_prev$focus = prev.focus) === null || _prev$focus === void 0 ? void 0 : _prev$focus.call(prev);
148
+ onPrevMonthClick(date);
149
+ } else {
150
+ var _next$focus;
151
+
152
+ next === null || next === void 0 ? void 0 : (_next$focus = next.focus) === null || _next$focus === void 0 ? void 0 : _next$focus.call(next);
153
+ onNextMonthClick(date);
154
+ }
155
+ };
156
+
157
+ this.insideBlur = event => {
158
+ const {
159
+ datePicker
160
+ } = this.state;
161
+
162
+ if (!datePicker.current.contains(event.currentTarget)) {
163
+ this.props.onClose();
164
+ }
165
+ };
166
+
167
+ this.state = {
168
+ selectedDate: null,
169
+ firstFocusableItem: /*#__PURE__*/React.createRef(),
170
+ datePicker: /*#__PURE__*/React.createRef()
171
+ };
172
+ }
173
+
174
+ componentDidMount() {
175
+ const {
176
+ datePicker,
177
+ firstFocusableItem
178
+ } = this.state;
179
+ datePicker.current.addEventListener('mouseup', this.handleMouseUp, false);
180
+ document.addEventListener('keydown', this.handleKeyDown, false);
181
+ setTimeout(() => {
182
+ focusElementOnOpen(datePicker === null || datePicker === void 0 ? void 0 : datePicker.current, firstFocusableItem === null || firstFocusableItem === void 0 ? void 0 : firstFocusableItem.current, this.props.focusCurrentDate);
183
+ }, 400);
184
+ }
185
+
186
+ componentWillUnmount() {
187
+ const {
188
+ datePicker
189
+ } = this.state;
190
+ datePicker.current.removeEventListener('mouseup', this.handleMouseUp, false);
191
+ document.removeEventListener('keydown', this.handleKeyDown, false);
192
+ }
193
+
194
+ render() {
195
+ const {
196
+ numberOfMonths,
197
+ enableOutsideDays,
198
+ transitionDuration,
199
+ initialVisibleMonth,
200
+ firstDayOfWeek,
201
+ keepOpenOnDateSelect,
202
+ hideKeyboardShortcutsPanel,
203
+ onClose,
204
+ phrases,
205
+ displayFormatDay,
206
+ isDayBlocked,
207
+ isOutsideRange,
208
+ isDayHighlighted,
209
+ onOutsideClick,
210
+ key,
211
+ calendarProps
212
+ } = this.props;
213
+ const {
214
+ datePicker,
215
+ firstFocusableItem
216
+ } = this.state;
217
+ const safedate = this.getSafeValue();
218
+ const safeinitialMonth = safedate && safedate.isValid() ? () => safedate : () => initialVisibleMonth;
219
+ return /*#__PURE__*/_jsx("div", {}, void 0, /*#__PURE__*/jsx("div", _objectSpread(_objectSpread({
220
+ onBlur: this.insideBlur,
221
+ ref: datePicker,
222
+ className: classNameBlock('wrapper-day-picker-single-date-controller'),
223
+ "data-testid": "calendar-wrapper"
224
+ }, calendarProps), {}, {
225
+ children: /*#__PURE__*/_jsx(DayPickerSingleDateController, {
226
+ date: safedate,
227
+ enableOutsideDays: enableOutsideDays,
228
+ firstDayOfWeek: firstDayOfWeek,
229
+ focused: true,
230
+ hideKeyboardShortcutsPanel: hideKeyboardShortcutsPanel,
231
+ initialVisibleMonth: safeinitialMonth,
232
+ isDayBlocked: isDayBlocked,
233
+ isDayHighlighted: isDayHighlighted,
234
+ isOutsideRange: isOutsideRange,
235
+ keepOpenOnDateSelect: keepOpenOnDateSelect,
236
+ navNext: /*#__PURE__*/_jsx(Navigation, {
237
+ className: classNameElement('navigation-next')
238
+ }),
239
+ navPrev: /*#__PURE__*/_jsx(Navigation, {
240
+ className: classNameElement('navigation-prev'),
241
+ icon: ChevronLeft,
242
+ innerRef: firstFocusableItem
243
+ }),
244
+ renderMonthElement: renderMonthElement,
245
+ numberOfMonths: numberOfMonths,
246
+ onClose: onClose,
247
+ onDateChange: this.handleDateChange,
248
+ onNextMonthClick: e => {
249
+ this.handleNavClick(e, 'next');
250
+ },
251
+ onOutsideClick: onOutsideClick,
252
+ onPrevMonthClick: e => {
253
+ this.handleNavClick(e, 'prev');
254
+ },
255
+ phrases: phrases,
256
+ renderDayContents: date => /*#__PURE__*/_jsx(Day, {
257
+ className: classNameElement('day-contents'),
258
+ date: date.format(displayFormatDay)
259
+ }),
260
+ transitionDuration: transitionDuration,
261
+ onTab: e => {
262
+ if (e.target.classList.contains('CalendarDay')) {
263
+ e.preventDefault();
264
+ onClose();
265
+ }
266
+ }
267
+ }, key)
268
+ })));
269
+ }
270
+
271
+ }
272
+ DSDatePickerController.defaultProps = {
273
+ date: '',
274
+ value: '',
275
+ enableOutsideDays: false,
276
+ initialVisibleMonth: moment(),
277
+ firstDayOfWeek: 0,
278
+ keepOpenOnDateSelect: true,
279
+ hideKeyboardShortcutsPanel: true,
280
+ onPrevMonthClick: () => null,
281
+ onNextMonthClick: () => null,
282
+ onClose: () => null,
283
+ onChange: () => null,
284
+ onClickEscape: () => null,
285
+ onDateChange: () => null,
286
+ phrases: SingleDatePickerPhrases,
287
+ // displayFormat: 'L',
288
+ displayFormatDay: 'D',
289
+ transitionDuration: 0,
290
+ // verticalSpacing: 0,
291
+ isDayBlocked: () => false,
292
+ isOutsideRange: () => false,
293
+ isDayHighlighted: () => false,
294
+ numberOfMonths: 1
295
+ };
296
+ DSDatePickerController.defaultProps = {
297
+ date: '',
298
+ value: '',
299
+ enableOutsideDays: false,
300
+ initialVisibleMonth: moment(),
301
+ firstDayOfWeek: 0,
302
+ keepOpenOnDateSelect: true,
303
+ hideKeyboardShortcutsPanel: true,
304
+ onPrevMonthClick: () => null,
305
+ onNextMonthClick: () => null,
306
+ onClose: () => null,
307
+ onClickEscape: () => null,
308
+ onChange: () => null,
309
+ onDateChange: () => null,
310
+ phrases: PropTypes.shape({
311
+ calendarLabel: PropTypes.string,
312
+ closeDatePicker: PropTypes.string,
313
+ clearDates: PropTypes.string,
314
+ focusStartDate: PropTypes.string,
315
+ jumpToPrevMonth: PropTypes.string,
316
+ jumpToNextMonth: PropTypes.string,
317
+ keyboardShortcuts: PropTypes.string,
318
+ showKeyboardShortcutsPanel: PropTypes.string,
319
+ hideKeyboardShortcutsPanel: PropTypes.string,
320
+ openThisPanel: PropTypes.string,
321
+ enterKey: PropTypes.string,
322
+ leftArrowRightArrow: PropTypes.string,
323
+ upArrowDownArrow: PropTypes.string,
324
+ pageUpPageDown: PropTypes.string,
325
+ homeEnd: PropTypes.string,
326
+ escape: PropTypes.string,
327
+ questionMark: PropTypes.string,
328
+ selectFocusedDate: PropTypes.string,
329
+ moveFocusByOneDay: PropTypes.string,
330
+ moveFocusByOneWeek: PropTypes.string,
331
+ moveFocusByOneMonth: PropTypes.string,
332
+ moveFocustoStartAndEndOfWeek: PropTypes.string,
333
+ returnFocusToInput: PropTypes.string,
334
+ keyboardNavigationInstructions: PropTypes.string,
335
+ chooseAvailableStartDate: PropTypes.func,
336
+ chooseAvailableEndDate: PropTypes.func,
337
+ dateIsUnavailable: PropTypes.func,
338
+ dateIsSelected: PropTypes.func
339
+ }),
340
+ // displayFormat: 'L',
341
+ displayFormatDay: 'D',
342
+ transitionDuration: 0,
343
+ // verticalSpacing: 0,
344
+ isDayBlocked: () => false,
345
+ isOutsideRange: () => false,
346
+ isDayHighlighted: () => false,
347
+ numberOfMonths: 1
348
+ };
349
+
350
+ export { DSDatePickerController as default };
@@ -0,0 +1,18 @@
1
+ import _jsx from '@babel/runtime/helpers/esm/jsx';
2
+ import 'react';
3
+
4
+ const Day = _ref => {
5
+ let {
6
+ className = 'date-picker-content-day',
7
+ date = ''
8
+ } = _ref;
9
+ return /*#__PURE__*/_jsx("div", {
10
+ className: className,
11
+ "data-testid": "datepicker-day-".concat(date)
12
+ }, void 0, /*#__PURE__*/_jsx("div", {
13
+ className: "".concat(className, "-half"),
14
+ "data-testid": "datepicker-day"
15
+ }, void 0, date));
16
+ };
17
+
18
+ export { Day as default };