@elliemae/ds-time-picker 1.60.0 → 2.0.0-alpha.12

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 (54) hide show
  1. package/cjs/DSTimePicker.js +28 -71
  2. package/cjs/DSTimePickerMenu.js +17 -27
  3. package/cjs/PickerPanel.js +323 -340
  4. package/cjs/TimePickerDropdown.js +19 -29
  5. package/cjs/TimePickerImpl.js +89 -124
  6. package/cjs/TimePickerMenu.js +257 -295
  7. package/cjs/index.js +1 -30
  8. package/cjs/moveElementOnScroll.js +19 -28
  9. package/cjs/utils.js +14 -19
  10. package/esm/DSTimePicker.js +27 -69
  11. package/esm/DSTimePickerMenu.js +14 -25
  12. package/esm/PickerPanel.js +321 -330
  13. package/esm/TimePickerDropdown.js +18 -27
  14. package/esm/TimePickerImpl.js +84 -117
  15. package/esm/TimePickerMenu.js +254 -285
  16. package/esm/index.js +0 -29
  17. package/esm/moveElementOnScroll.js +18 -27
  18. package/esm/utils.js +14 -19
  19. package/package.json +66 -17
  20. package/types/DSTimePicker.d.ts +181 -0
  21. package/types/DSTimePickerMenu.d.ts +4 -0
  22. package/types/PickerPanel.d.ts +24 -0
  23. package/types/TimePickerDropdown.d.ts +25 -0
  24. package/types/TimePickerImpl.d.ts +35 -0
  25. package/types/TimePickerMenu.d.ts +19 -0
  26. package/types/index.d.ts +5 -0
  27. package/types/moveElementOnScroll.d.ts +13 -0
  28. package/types/utils.d.ts +8 -0
  29. package/DSTimePicker/package.json +0 -10
  30. package/DSTimePickerMenu/package.json +0 -10
  31. package/PickerPanel/package.json +0 -10
  32. package/TimePickerDropdown/package.json +0 -10
  33. package/TimePickerImpl/package.json +0 -10
  34. package/TimePickerMenu/package.json +0 -10
  35. package/cjs/DSTimePicker.js.map +0 -1
  36. package/cjs/DSTimePickerMenu.js.map +0 -1
  37. package/cjs/PickerPanel.js.map +0 -1
  38. package/cjs/TimePickerDropdown.js.map +0 -1
  39. package/cjs/TimePickerImpl.js.map +0 -1
  40. package/cjs/TimePickerMenu.js.map +0 -1
  41. package/cjs/index.js.map +0 -1
  42. package/cjs/moveElementOnScroll.js.map +0 -1
  43. package/cjs/utils.js.map +0 -1
  44. package/esm/DSTimePicker.js.map +0 -1
  45. package/esm/DSTimePickerMenu.js.map +0 -1
  46. package/esm/PickerPanel.js.map +0 -1
  47. package/esm/TimePickerDropdown.js.map +0 -1
  48. package/esm/TimePickerImpl.js.map +0 -1
  49. package/esm/TimePickerMenu.js.map +0 -1
  50. package/esm/index.js.map +0 -1
  51. package/esm/moveElementOnScroll.js.map +0 -1
  52. package/esm/utils.js.map +0 -1
  53. package/moveElementOnScroll/package.json +0 -10
  54. package/utils/package.json +0 -10
@@ -1,15 +1,17 @@
1
1
  'use strict';
2
2
 
3
- var _extends = require('@babel/runtime/helpers/extends');
4
- var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
5
- var _toArray = require('@babel/runtime/helpers/toArray');
6
3
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
7
- var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
8
- var _createClass = require('@babel/runtime/helpers/createClass');
9
- var _assertThisInitialized = require('@babel/runtime/helpers/assertThisInitialized');
10
- var _inherits = require('@babel/runtime/helpers/inherits');
11
- var _possibleConstructorReturn = require('@babel/runtime/helpers/possibleConstructorReturn');
12
- var _getPrototypeOf = require('@babel/runtime/helpers/getPrototypeOf');
4
+ var _jsx = require('@babel/runtime/helpers/jsx');
5
+ require('core-js/modules/web.dom-collections.iterator.js');
6
+ require('core-js/modules/esnext.async-iterator.find.js');
7
+ require('core-js/modules/esnext.iterator.constructor.js');
8
+ require('core-js/modules/esnext.iterator.find.js');
9
+ require('core-js/modules/esnext.async-iterator.map.js');
10
+ require('core-js/modules/esnext.iterator.map.js');
11
+ require('core-js/modules/esnext.async-iterator.filter.js');
12
+ require('core-js/modules/esnext.iterator.filter.js');
13
+ require('core-js/modules/esnext.async-iterator.for-each.js');
14
+ require('core-js/modules/esnext.iterator.for-each.js');
13
15
  var React = require('react');
14
16
  var lodash = require('lodash');
15
17
  var dsClassnames = require('@elliemae/ds-classnames');
@@ -18,394 +20,376 @@ var dsIcons = require('@elliemae/ds-icons');
18
20
  var DSButton = require('@elliemae/ds-button');
19
21
  var moveElementOnScroll = require('./moveElementOnScroll.js');
20
22
  var utils = require('./utils.js');
23
+ var jsxRuntime = require('react/jsx-runtime');
21
24
 
22
25
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
23
26
 
24
- var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends);
25
- var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
26
- var _toArray__default = /*#__PURE__*/_interopDefaultLegacy(_toArray);
27
27
  var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
28
- var _classCallCheck__default = /*#__PURE__*/_interopDefaultLegacy(_classCallCheck);
29
- var _createClass__default = /*#__PURE__*/_interopDefaultLegacy(_createClass);
30
- var _assertThisInitialized__default = /*#__PURE__*/_interopDefaultLegacy(_assertThisInitialized);
31
- var _inherits__default = /*#__PURE__*/_interopDefaultLegacy(_inherits);
32
- var _possibleConstructorReturn__default = /*#__PURE__*/_interopDefaultLegacy(_possibleConstructorReturn);
33
- var _getPrototypeOf__default = /*#__PURE__*/_interopDefaultLegacy(_getPrototypeOf);
28
+ var _jsx__default = /*#__PURE__*/_interopDefaultLegacy(_jsx);
34
29
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
35
30
  var memoizeOne__default = /*#__PURE__*/_interopDefaultLegacy(memoizeOne);
36
31
  var DSButton__default = /*#__PURE__*/_interopDefaultLegacy(DSButton);
37
32
 
38
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
39
-
40
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
33
+ var _SelectedCircle, _ChevronSmallUp, _ChevronSmallDown;
41
34
 
42
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf__default['default'](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default['default'](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default['default'](this, result); }; }
35
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
43
36
 
44
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
45
- var blockName = 'time-picker-panel';
46
- var Container = dsClassnames.aggregatedClasses('div')(blockName, null, function (_ref) {
47
- var scrolling = _ref.scrolling;
37
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
38
+ const blockName = 'time-picker-panel';
39
+ const Container = dsClassnames.aggregatedClasses('div')(blockName, null, _ref => {
40
+ let {
41
+ scrolling
42
+ } = _ref;
48
43
  return {
49
- scrolling: scrolling
44
+ scrolling
50
45
  };
51
46
  });
52
- var Wrapper = dsClassnames.aggregatedClasses('div')(blockName, 'wrapper');
53
- var PickerItemListContainer = dsClassnames.aggregatedClasses('div')(blockName, 'item-list-container');
54
- var PickerItemList = dsClassnames.aggregatedClasses('div')(blockName, 'item-list');
55
- var PickerHeader = dsClassnames.aggregatedClasses('div')(blockName, 'header');
56
- var PickerItemContainer = dsClassnames.aggregatedClasses('div')(blockName, 'item', function (_ref2) {
57
- var selected = _ref2.selected,
58
- disabled = _ref2.disabled;
47
+ const Wrapper = dsClassnames.aggregatedClasses('div')(blockName, 'wrapper');
48
+ const PickerItemListContainer = dsClassnames.aggregatedClasses('div')(blockName, 'item-list-container');
49
+ const PickerItemList = dsClassnames.aggregatedClasses('div')(blockName, 'item-list');
50
+ const PickerHeader = dsClassnames.aggregatedClasses('div')(blockName, 'header');
51
+ const PickerItemContainer = dsClassnames.aggregatedClasses('div')(blockName, 'item', _ref2 => {
52
+ let {
53
+ selected,
54
+ disabled
55
+ } = _ref2;
59
56
  return {
60
- selected: selected,
61
- disabled: disabled
57
+ selected,
58
+ disabled
62
59
  };
63
60
  });
64
- var PickerSelectedOptionSelected = dsClassnames.aggregatedClasses('div')(blockName, 'selected-container');
65
- var SelectedCircle = dsClassnames.aggregatedClasses('div')(blockName, 'selected-circle');
66
- var ArrowButtonContainer = dsClassnames.aggregatedClasses('div')(blockName, 'arrow-container');
67
-
68
- var getOptionIndex = function getOptionIndex(options, selectedOption) {
69
- var valueProperty = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'value';
70
- var index = options.findIndex(function (option) {
71
- return option[valueProperty] === selectedOption;
72
- });
61
+ const PickerSelectedOptionSelected = dsClassnames.aggregatedClasses('div')(blockName, 'selected-container');
62
+ const SelectedCircle = dsClassnames.aggregatedClasses('div')(blockName, 'selected-circle');
63
+ const ArrowButtonContainer = dsClassnames.aggregatedClasses('div')(blockName, 'arrow-container');
64
+
65
+ const getOptionIndex = function (options, selectedOption) {
66
+ let valueProperty = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'value';
67
+ const index = options.findIndex(option => option[valueProperty] === selectedOption);
73
68
  return utils.validateIndex(index, options);
74
69
  };
75
70
 
76
- var arrowProps = {
71
+ const arrowProps = {
77
72
  buttonType: 'text',
78
73
  fluidHeight: true,
79
74
  fluidWidth: true,
80
75
  size: 's'
81
76
  };
82
-
83
- var PickerPanel = /*#__PURE__*/function (_Component) {
84
- _inherits__default['default'](PickerPanel, _Component);
85
-
86
- var _super = _createSuper(PickerPanel);
87
-
88
- function PickerPanel(props) {
89
- var _this;
90
-
91
- _classCallCheck__default['default'](this, PickerPanel);
92
-
93
- _this = _super.call(this, props);
94
- _this.computeContainerTranslation = memoizeOne__default['default'](function (index) {
95
- var _this$props = _this.props,
96
- options = _this$props.options,
97
- valueProperty = _this$props.valueProperty;
98
- var _this$state = _this.state,
99
- selectedOption = _this$state.selectedOption,
100
- scrolling = _this$state.scrolling;
101
- var selectedOptionIndex = index || getOptionIndex(options, selectedOption, valueProperty);
102
- var listYPosition = _this.minYListPosition - selectedOptionIndex * _this.optionHeight;
103
- if (_this.scrollHandler && !scrolling) _this.scrollHandler.updatePosition(listYPosition);
77
+ class PickerPanel extends React.Component {
78
+ constructor(props) {
79
+ super(props);
80
+ this.computeContainerTranslation = memoizeOne__default["default"](index => {
81
+ const {
82
+ options,
83
+ valueProperty
84
+ } = this.props;
85
+ const {
86
+ selectedOption,
87
+ scrolling
88
+ } = this.state;
89
+ const selectedOptionIndex = index || getOptionIndex(options, selectedOption, valueProperty);
90
+ const listYPosition = this.minYListPosition - selectedOptionIndex * this.optionHeight;
91
+ if (this.scrollHandler && !scrolling) this.scrollHandler.updatePosition(listYPosition);
104
92
  return listYPosition;
105
93
  });
106
94
 
107
- _this.renderHeader = function () {
108
- var header = _this.props.header;
109
- return /*#__PURE__*/React__default['default'].createElement(PickerHeader, null, header);
95
+ this.renderHeader = () => {
96
+ const {
97
+ header
98
+ } = this.props;
99
+ return /*#__PURE__*/_jsx__default["default"](PickerHeader, {}, void 0, header);
110
100
  };
111
101
 
112
- _this.pickerListContainerRef = /*#__PURE__*/React__default['default'].createRef();
113
- _this.pickerListRef = /*#__PURE__*/React__default['default'].createRef();
114
- _this.pickerItemRef = /*#__PURE__*/React__default['default'].createRef();
115
- _this.selectedOptionRef = /*#__PURE__*/React__default['default'].createRef();
116
- _this.state = {
102
+ this.pickerListContainerRef = /*#__PURE__*/React__default["default"].createRef();
103
+ this.pickerListRef = /*#__PURE__*/React__default["default"].createRef();
104
+ this.pickerItemRef = /*#__PURE__*/React__default["default"].createRef();
105
+ this.selectedOptionRef = /*#__PURE__*/React__default["default"].createRef();
106
+ this.state = {
117
107
  selectedOption: props.selected,
118
108
  activeIndex: 0,
119
109
  // eslint-disable-next-line react/no-unused-state
120
110
  prevProps: {}
121
111
  };
122
- _this.handleKeyDown = _this.handleKeyDown.bind(_assertThisInitialized__default['default'](_this));
123
- _this.handleStepMoveUp = _this.handleStepMoveUp.bind(_assertThisInitialized__default['default'](_this));
124
- _this.handleStepMoveDown = _this.handleStepMoveDown.bind(_assertThisInitialized__default['default'](_this));
125
- return _this;
112
+ this.handleKeyDown = this.handleKeyDown.bind(this);
113
+ this.handleStepMoveUp = this.handleStepMoveUp.bind(this);
114
+ this.handleStepMoveDown = this.handleStepMoveDown.bind(this);
126
115
  }
127
116
 
128
- _createClass__default['default'](PickerPanel, [{
129
- key: "componentDidMount",
130
- value: function componentDidMount() {
131
- var _this2 = this;
132
-
133
- this.computeSizes();
134
- var pickerListContainerEl = this.pickerListContainerRef.current;
135
- var pickerListEl = this.pickerListRef.current;
136
- this.scrollHandler = new moveElementOnScroll.MoveElementOnScroll(pickerListEl, {
137
- container: pickerListContainerEl,
138
- min: -this.minYListPosition,
139
- max: this.maxYListPosition,
140
- onUpdate: function onUpdate(pos, delta) {
141
- var options = _this2.props.options;
142
- var index = options.length - -Math.floor((pos - _this2.maxYListPosition) / _this2.optionHeight) + (delta > 0 ? 1 : -1);
143
-
144
- _this2.moveTo(index, true);
145
- },
146
- onEndScroll: function onEndScroll() {
147
- _this2.setState({
148
- scrolling: false
149
- });
150
- }
151
- });
152
- this.computeContainerTranslation();
153
- }
154
- }, {
155
- key: "componentWillUnmount",
156
- value: function componentWillUnmount() {
157
- this.scrollHandler.unsubscribe();
158
- }
159
- }, {
160
- key: "getOptionValue",
161
- value: function getOptionValue(option) {
162
- var valueProperty = this.props.valueProperty;
163
- return option[valueProperty];
164
- }
165
- }, {
166
- key: "getOptionLabel",
167
- value: function getOptionLabel(option) {
168
- var labelProperty = this.props.labelProperty;
169
- return option[labelProperty];
170
- }
171
- }, {
172
- key: "computeSizes",
173
- value: function computeSizes() {
174
- var _this$props2 = this.props,
175
- options = _this$props2.options,
176
- numberItemsOnScreen = _this$props2.numberItemsOnScreen;
177
- var optionHeight = this.pickerItemRef.current.offsetHeight;
178
- this.optionHeight = optionHeight;
179
- this.listHeight = this.optionHeight * numberItemsOnScreen;
180
- this.minYListPosition = this.listHeight / 2 - this.optionHeight / 2;
181
- this.maxYListPosition = this.optionHeight * (options.length - Math.ceil(numberItemsOnScreen / 2));
182
- }
183
- }, {
184
- key: "handleOptionSelect",
185
- value: function handleOptionSelect(optionValue, index, scrolling) {
186
- var onChange = this.props.onChange;
187
- this.setState(function (state) {
188
- return _objectSpread(_objectSpread({}, state), {}, {
189
- scrolling: scrolling,
190
- selectedOption: optionValue,
191
- activeIndex: index
117
+ componentDidMount() {
118
+ this.computeSizes();
119
+ const pickerListContainerEl = this.pickerListContainerRef.current;
120
+ const pickerListEl = this.pickerListRef.current;
121
+ this.scrollHandler = new moveElementOnScroll.MoveElementOnScroll(pickerListEl, {
122
+ container: pickerListContainerEl,
123
+ min: -this.minYListPosition,
124
+ max: this.maxYListPosition,
125
+ onUpdate: (pos, delta) => {
126
+ const {
127
+ options
128
+ } = this.props;
129
+ const index = options.length - -Math.floor((pos - this.maxYListPosition) / this.optionHeight) + (delta > 0 ? 1 : -1);
130
+ this.moveTo(index, true);
131
+ },
132
+ onEndScroll: () => {
133
+ this.setState({
134
+ scrolling: false
192
135
  });
193
- }, function () {
194
- onChange(optionValue, index);
195
- });
196
- } // TODO: this needs a refactor from de FocusGroup
197
- // eslint-disable-next-line max-statements
198
-
199
- }, {
200
- key: "handleKeyDown",
201
- value: function handleKeyDown(e) {
202
- var activeIndex = this.state.activeIndex;
203
- var options = this.props.options;
204
-
205
- var _document$getElements = document.getElementsByClassName('em-ds-time-picker-panel'),
206
- _document$getElements2 = _toArray__default['default'](_document$getElements),
207
- firstColumn = _document$getElements2[0],
208
- restColumns = _document$getElements2.slice(1);
209
-
210
- var _restColumns$slice = restColumns.slice(-1),
211
- _restColumns$slice2 = _slicedToArray__default['default'](_restColumns$slice, 1),
212
- lastColumn = _restColumns$slice2[0];
213
-
214
- var _document$getElements3 = document.getElementsByClassName('DayPickerNavigation_button'),
215
- _document$getElements4 = _slicedToArray__default['default'](_document$getElements3, 1),
216
- prev = _document$getElements4[0];
217
-
218
- var focusedElement = document.activeElement;
219
-
220
- switch (e.key) {
221
- case 'Home':
222
- this.moveTo(0);
223
- break;
136
+ }
137
+ });
138
+ this.computeContainerTranslation();
139
+ }
224
140
 
225
- case 'End':
226
- this.moveTo(options.length - 1);
227
- break;
141
+ componentWillUnmount() {
142
+ this.scrollHandler.unsubscribe();
143
+ }
228
144
 
229
- case 'ArrowUp':
230
- this.moveTo(activeIndex - 1);
231
- break;
145
+ static getDerivedStateFromProps(nextProps, _ref3) {
146
+ let {
147
+ prevProps
148
+ } = _ref3;
149
+ const {
150
+ selected,
151
+ valueProperty,
152
+ options
153
+ } = nextProps;
154
+
155
+ if (selected !== prevProps.selected) {
156
+ return {
157
+ selectedOption: selected,
158
+ activeIndex: getOptionIndex(options, selected, valueProperty),
159
+ prevProps: nextProps
160
+ };
161
+ }
232
162
 
233
- case 'ArrowDown':
234
- this.moveTo(activeIndex + 1);
235
- break;
163
+ return null;
164
+ }
236
165
 
237
- case 'Tab':
238
- {
239
- e.preventDefault(); // If it is DateTimePicker, move focus to prev arrow element
166
+ getOptionValue(option) {
167
+ const {
168
+ valueProperty
169
+ } = this.props;
170
+ return option[valueProperty];
171
+ }
240
172
 
241
- if (prev && focusedElement === lastColumn) {
242
- prev.focus();
243
- } else if (focusedElement === lastColumn) {
244
- firstColumn.focus();
245
- } else {
246
- var position = lodash.findIndex(restColumns, focusedElement);
247
- restColumns[position + 1].focus();
248
- }
173
+ getOptionLabel(option) {
174
+ const {
175
+ labelProperty
176
+ } = this.props;
177
+ return option[labelProperty];
178
+ }
249
179
 
250
- break;
180
+ computeSizes() {
181
+ const {
182
+ options,
183
+ numberItemsOnScreen
184
+ } = this.props;
185
+ const {
186
+ offsetHeight: optionHeight
187
+ } = this.pickerItemRef.current;
188
+ this.optionHeight = optionHeight;
189
+ this.listHeight = this.optionHeight * numberItemsOnScreen;
190
+ this.minYListPosition = this.listHeight / 2 - this.optionHeight / 2;
191
+ this.maxYListPosition = this.optionHeight * (options.length - Math.ceil(numberItemsOnScreen / 2));
192
+ }
193
+
194
+ handleOptionSelect(optionValue, index, scrolling) {
195
+ const {
196
+ onChange
197
+ } = this.props;
198
+ this.setState(state => _objectSpread(_objectSpread({}, state), {}, {
199
+ scrolling,
200
+ selectedOption: optionValue,
201
+ activeIndex: index
202
+ }), () => {
203
+ onChange(optionValue, index);
204
+ });
205
+ } // TODO: this needs a refactor from de FocusGroup
206
+ // eslint-disable-next-line max-statements
207
+
208
+
209
+ handleKeyDown(e) {
210
+ const {
211
+ activeIndex
212
+ } = this.state;
213
+ const {
214
+ options
215
+ } = this.props;
216
+ const [firstColumn, ...restColumns] = document.getElementsByClassName('em-ds-time-picker-panel');
217
+ const [lastColumn] = restColumns.slice(-1);
218
+ const [prev] = document.getElementsByClassName('DayPickerNavigation_button');
219
+ const focusedElement = document.activeElement;
220
+
221
+ switch (e.key) {
222
+ case 'Home':
223
+ this.moveTo(0);
224
+ break;
225
+
226
+ case 'End':
227
+ this.moveTo(options.length - 1);
228
+ break;
229
+
230
+ case 'ArrowUp':
231
+ this.moveTo(activeIndex - 1);
232
+ break;
233
+
234
+ case 'ArrowDown':
235
+ this.moveTo(activeIndex + 1);
236
+ break;
237
+
238
+ case 'Tab':
239
+ {
240
+ e.preventDefault(); // If it is DateTimePicker, move focus to prev arrow element
241
+
242
+ if (prev && focusedElement === lastColumn) {
243
+ prev.focus();
244
+ } else if (focusedElement === lastColumn) {
245
+ firstColumn.focus();
246
+ } else {
247
+ const position = lodash.findIndex(restColumns, focusedElement);
248
+ restColumns[position + 1].focus();
251
249
  }
252
- }
253
- }
254
- }, {
255
- key: "moveTo",
256
- value: function moveTo(index, scrolling) {
257
- var options = this.props.options;
258
- var selectedOption = this.state.selectedOption;
259
- var validIndex = utils.validateIndex(index, options);
260
- var option = options[validIndex];
261
- var optionValue = this.getOptionValue(option);
262
-
263
- if (selectedOption !== optionValue && option.disabled !== true) {
264
- this.handleOptionSelect(optionValue, validIndex, scrolling);
265
- } // TO-DO: if date disabled, add nextValidOption selection
266
250
 
267
- }
268
- }, {
269
- key: "handleStepMoveUp",
270
- value: function handleStepMoveUp() {
271
- var activeIndex = this.state.activeIndex;
272
- var _this$props3 = this.props,
273
- arrowStep = _this$props3.arrowStep,
274
- options = _this$props3.options;
275
- var supposedPos = activeIndex - arrowStep;
276
- var nextPos = supposedPos >= 0 ? supposedPos : activeIndex - 1;
277
- var nextValidOption = options.find(function (op) {
278
- return !op.disabled;
279
- });
280
- this.moveTo(nextPos, true, nextValidOption);
281
- }
282
- }, {
283
- key: "handleStepMoveDown",
284
- value: function handleStepMoveDown() {
285
- var activeIndex = this.state.activeIndex;
286
- var _this$props4 = this.props,
287
- arrowStep = _this$props4.arrowStep,
288
- options = _this$props4.options;
289
- var supposedPos = activeIndex + arrowStep;
290
- var nextPos = supposedPos <= options.length ? supposedPos : activeIndex + 1;
291
- this.moveTo(nextPos);
292
- }
293
- }, {
294
- key: "render",
295
- value: function render() {
296
- var _this3 = this;
297
-
298
- var _this$props5 = this.props,
299
- options = _this$props5.options,
300
- hasHeader = _this$props5.hasHeader,
301
- type = _this$props5.type,
302
- time = _this$props5.time,
303
- meridiem = _this$props5.meridiem,
304
- disabledTimes = _this$props5.disabledTimes;
305
- var _this$state2 = this.state,
306
- selectedOption = _this$state2.selectedOption,
307
- activeIndex = _this$state2.activeIndex,
308
- scrolling = _this$state2.scrolling;
309
- var listYPosition = this.computeContainerTranslation(activeIndex);
310
- return /*#__PURE__*/React__default['default'].createElement(Wrapper, null, hasHeader && this.renderHeader(), /*#__PURE__*/React__default['default'].createElement(Container, {
311
- classProps: {
312
- scrolling: scrolling
313
- },
314
- onKeyDown: this.handleKeyDown,
315
- tabIndex: 0
316
- }, /*#__PURE__*/React__default['default'].createElement(PickerSelectedOptionSelected, {
317
- innerRef: this.selectedOptionRef
318
- }, /*#__PURE__*/React__default['default'].createElement(SelectedCircle, null)), /*#__PURE__*/React__default['default'].createElement(ArrowButtonContainer, null, /*#__PURE__*/React__default['default'].createElement(DSButton__default['default'], _extends__default['default']({}, arrowProps, {
319
- "aria-label": "Chevron Up",
320
- "data-testid": "".concat(type, "-chevron-up"),
321
- disabled: activeIndex <= 0,
322
- icon: /*#__PURE__*/React__default['default'].createElement(dsIcons.ChevronSmallUp, null),
323
- onClick: this.handleStepMoveUp,
324
- tabIndex: -1
325
- }))), /*#__PURE__*/React__default['default'].createElement(PickerItemListContainer, {
326
- innerRef: this.pickerListContainerRef,
327
- style: {
328
- height: this.listHeight
329
- }
330
- }, /*#__PURE__*/React__default['default'].createElement(PickerItemList, {
331
- "data-testid": "".concat(type, "-list"),
332
- innerRef: this.pickerListRef,
333
- style: {
334
- transform: "translateY(".concat(listYPosition, "px)")
251
+ break;
335
252
  }
336
- }, options.map(function (option, index) {
337
- var value = _this3.getOptionValue(option);
253
+ }
254
+ }
338
255
 
339
- var label = _this3.getOptionLabel(option);
256
+ moveTo(index, scrolling) {
257
+ const {
258
+ options
259
+ } = this.props;
260
+ const {
261
+ selectedOption
262
+ } = this.state;
263
+ const validIndex = utils.validateIndex(index, options);
264
+ const option = options[validIndex];
265
+ const optionValue = this.getOptionValue(option);
266
+
267
+ if (selectedOption !== optionValue && option.disabled !== true) {
268
+ this.handleOptionSelect(optionValue, validIndex, scrolling);
269
+ } // TO-DO: if date disabled, add nextValidOption selection
340
270
 
341
- var valueFormatted;
342
- if (meridiem === 'AM') valueFormatted = value;else if (meridiem === 'PM' && value === 12) valueFormatted = value;else if (meridiem === 'PM') valueFormatted = value + 12;
343
- var disabled = false;
271
+ }
344
272
 
345
- if (disabledTimes) {
346
- var from = disabledTimes.from,
347
- to = disabledTimes.to;
273
+ handleStepMoveUp() {
274
+ const {
275
+ activeIndex
276
+ } = this.state;
277
+ const {
278
+ arrowStep,
279
+ options
280
+ } = this.props;
281
+ const supposedPos = activeIndex - arrowStep;
282
+ const nextPos = supposedPos >= 0 ? supposedPos : activeIndex - 1;
283
+ const nextValidOption = options.find(op => !op.disabled);
284
+ this.moveTo(nextPos, true, nextValidOption);
285
+ }
348
286
 
349
- if (type === 'hour' && valueFormatted >= (from === null || from === void 0 ? void 0 : from.hour) && valueFormatted < (to === null || to === void 0 ? void 0 : to.hour) || type === 'minutes' && value >= (from === null || from === void 0 ? void 0 : from.min) && value < (to === null || to === void 0 ? void 0 : to.min)) {
350
- disabled = true;
351
- }
287
+ handleStepMoveDown() {
288
+ const {
289
+ activeIndex
290
+ } = this.state;
291
+ const {
292
+ arrowStep,
293
+ options
294
+ } = this.props;
295
+ const supposedPos = activeIndex + arrowStep;
296
+ const nextPos = supposedPos <= options.length ? supposedPos : activeIndex + 1;
297
+ this.moveTo(nextPos);
298
+ }
352
299
 
353
- if (type === 'minutes' && ((time === null || time === void 0 ? void 0 : time.hour()) > (to === null || to === void 0 ? void 0 : to.hour) || (time === null || time === void 0 ? void 0 : time.hour()) < (from === null || from === void 0 ? void 0 : from.hour))) {
354
- disabled = false;
355
- }
300
+ render() {
301
+ const {
302
+ options,
303
+ hasHeader,
304
+ type,
305
+ time,
306
+ meridiem,
307
+ disabledTimes
308
+ } = this.props;
309
+ const {
310
+ selectedOption,
311
+ activeIndex,
312
+ scrolling
313
+ } = this.state;
314
+ const listYPosition = this.computeContainerTranslation(activeIndex);
315
+ return /*#__PURE__*/_jsx__default["default"](Wrapper, {}, void 0, hasHeader && this.renderHeader(), /*#__PURE__*/_jsx__default["default"](Container, {
316
+ classProps: {
317
+ scrolling
318
+ },
319
+ onKeyDown: this.handleKeyDown,
320
+ tabIndex: 0
321
+ }, void 0, /*#__PURE__*/_jsx__default["default"](PickerSelectedOptionSelected, {
322
+ innerRef: this.selectedOptionRef
323
+ }, void 0, _SelectedCircle || (_SelectedCircle = /*#__PURE__*/_jsx__default["default"](SelectedCircle, {}))), /*#__PURE__*/_jsx__default["default"](ArrowButtonContainer, {}, void 0, /*#__PURE__*/jsxRuntime.jsx(DSButton__default["default"], _objectSpread(_objectSpread({}, arrowProps), {}, {
324
+ "aria-label": "Chevron Up",
325
+ "data-testid": "".concat(type, "-chevron-up"),
326
+ disabled: activeIndex <= 0,
327
+ icon: _ChevronSmallUp || (_ChevronSmallUp = /*#__PURE__*/_jsx__default["default"](dsIcons.ChevronSmallUp, {})),
328
+ onClick: this.handleStepMoveUp,
329
+ tabIndex: -1
330
+ }))), /*#__PURE__*/_jsx__default["default"](PickerItemListContainer, {
331
+ innerRef: this.pickerListContainerRef,
332
+ style: {
333
+ height: this.listHeight
334
+ }
335
+ }, void 0, /*#__PURE__*/_jsx__default["default"](PickerItemList, {
336
+ "data-testid": "".concat(type, "-list"),
337
+ innerRef: this.pickerListRef,
338
+ style: {
339
+ transform: "translateY(".concat(listYPosition, "px)")
340
+ }
341
+ }, void 0, options.map((option, index) => {
342
+ const value = this.getOptionValue(option);
343
+ const label = this.getOptionLabel(option);
344
+ let valueFormatted;
345
+ if (meridiem === 'AM') valueFormatted = value;else if (meridiem === 'PM' && value === 12) valueFormatted = value;else if (meridiem === 'PM') valueFormatted = value + 12;
346
+ let disabled = false;
347
+
348
+ if (disabledTimes) {
349
+ const {
350
+ from,
351
+ to
352
+ } = disabledTimes;
353
+
354
+ if (type === 'hour' && valueFormatted >= (from === null || from === void 0 ? void 0 : from.hour) && valueFormatted < (to === null || to === void 0 ? void 0 : to.hour) || type === 'minutes' && value >= (from === null || from === void 0 ? void 0 : from.min) && value < (to === null || to === void 0 ? void 0 : to.min)) {
355
+ disabled = true;
356
+ }
356
357
 
357
- if (label === 'am' && (from === null || from === void 0 ? void 0 : from.hour) == 0 && (to === null || to === void 0 ? void 0 : to.hour) >= 12) {
358
- disabled = true;
359
- }
358
+ if (type === 'minutes' && ((time === null || time === void 0 ? void 0 : time.hour()) > (to === null || to === void 0 ? void 0 : to.hour) || (time === null || time === void 0 ? void 0 : time.hour()) < (from === null || from === void 0 ? void 0 : from.hour))) {
359
+ disabled = false;
360
+ }
360
361
 
361
- if (label === 'pm' && (to === null || to === void 0 ? void 0 : to.hour) == 24) {
362
- disabled = true;
363
- }
362
+ if (label === 'am' && (from === null || from === void 0 ? void 0 : from.hour) == 0 && (to === null || to === void 0 ? void 0 : to.hour) >= 12) {
363
+ disabled = true;
364
364
  }
365
365
 
366
- option.disabled = disabled;
367
- return /*#__PURE__*/React__default['default'].createElement(PickerItemContainer, {
368
- key: value,
369
- classProps: {
370
- selected: selectedOption ? value === selectedOption : index === 0,
371
- disabled: disabled
372
- },
373
- innerRef: _this3.pickerItemRef,
374
- onClick: function onClick() {
375
- if (!disabled) _this3.handleOptionSelect(value, index);
376
- }
377
- }, label);
378
- }))), /*#__PURE__*/React__default['default'].createElement(ArrowButtonContainer, null, /*#__PURE__*/React__default['default'].createElement(DSButton__default['default'], _extends__default['default']({}, arrowProps, {
379
- "aria-label": "Chevron Down",
380
- "data-testid": "".concat(type, "-chevron-down"),
381
- disabled: activeIndex >= options.length - 1,
382
- icon: /*#__PURE__*/React__default['default'].createElement(dsIcons.ChevronSmallDown, null),
383
- onClick: this.handleStepMoveDown,
384
- tabIndex: -1
385
- })))));
386
- }
387
- }], [{
388
- key: "getDerivedStateFromProps",
389
- value: function getDerivedStateFromProps(nextProps, _ref3) {
390
- var prevProps = _ref3.prevProps;
391
- var selected = nextProps.selected,
392
- valueProperty = nextProps.valueProperty,
393
- options = nextProps.options;
394
-
395
- if (selected !== prevProps.selected) {
396
- return {
397
- selectedOption: selected,
398
- activeIndex: getOptionIndex(options, selected, valueProperty),
399
- prevProps: nextProps
400
- };
366
+ if (label === 'pm' && (to === null || to === void 0 ? void 0 : to.hour) == 24) {
367
+ disabled = true;
368
+ }
401
369
  }
402
370
 
403
- return null;
404
- }
405
- }]);
371
+ option.disabled = disabled;
372
+ return /*#__PURE__*/_jsx__default["default"](PickerItemContainer, {
373
+ classProps: {
374
+ selected: selectedOption ? value === selectedOption : index === 0,
375
+ disabled
376
+ },
377
+ innerRef: this.pickerItemRef,
378
+ onClick: () => {
379
+ if (!disabled) this.handleOptionSelect(value, index);
380
+ }
381
+ }, value, label);
382
+ }))), /*#__PURE__*/_jsx__default["default"](ArrowButtonContainer, {}, void 0, /*#__PURE__*/jsxRuntime.jsx(DSButton__default["default"], _objectSpread(_objectSpread({}, arrowProps), {}, {
383
+ "aria-label": "Chevron Down",
384
+ "data-testid": "".concat(type, "-chevron-down"),
385
+ disabled: activeIndex >= options.length - 1,
386
+ icon: _ChevronSmallDown || (_ChevronSmallDown = /*#__PURE__*/_jsx__default["default"](dsIcons.ChevronSmallDown, {})),
387
+ onClick: this.handleStepMoveDown,
388
+ tabIndex: -1
389
+ })))));
390
+ }
406
391
 
407
- return PickerPanel;
408
- }(React.Component);
392
+ }
409
393
  PickerPanel.defaultProps = {
410
394
  valueProperty: 'value',
411
395
  labelProperty: 'label',
@@ -416,4 +400,3 @@ PickerPanel.defaultProps = {
416
400
  };
417
401
 
418
402
  module.exports = PickerPanel;
419
- //# sourceMappingURL=PickerPanel.js.map