@elliemae/ds-time-picker 2.2.0 → 2.3.0-alpha.3

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 (40) hide show
  1. package/cjs/DSTimePicker.js +100 -115
  2. package/cjs/DSTimePicker.js.map +7 -0
  3. package/cjs/DSTimePickerMenu.js +46 -33
  4. package/cjs/DSTimePickerMenu.js.map +7 -0
  5. package/cjs/PickerPanel.js +151 -254
  6. package/cjs/PickerPanel.js.map +7 -0
  7. package/cjs/TimePickerDropdown.js +73 -52
  8. package/cjs/TimePickerDropdown.js.map +7 -0
  9. package/cjs/TimePickerImpl.js +146 -138
  10. package/cjs/TimePickerImpl.js.map +7 -0
  11. package/cjs/TimePickerMenu.js +138 -209
  12. package/cjs/TimePickerMenu.js.map +7 -0
  13. package/cjs/index.js +40 -17
  14. package/cjs/index.js.map +7 -0
  15. package/cjs/moveElementOnScroll.js +57 -39
  16. package/cjs/moveElementOnScroll.js.map +7 -0
  17. package/cjs/utils.js +57 -24
  18. package/cjs/utils.js.map +7 -0
  19. package/esm/DSTimePicker.js +71 -105
  20. package/esm/DSTimePicker.js.map +7 -0
  21. package/esm/DSTimePickerMenu.js +17 -22
  22. package/esm/DSTimePickerMenu.js.map +7 -0
  23. package/esm/PickerPanel.js +120 -242
  24. package/esm/PickerPanel.js.map +7 -0
  25. package/esm/TimePickerDropdown.js +44 -44
  26. package/esm/TimePickerDropdown.js.map +7 -0
  27. package/esm/TimePickerImpl.js +106 -117
  28. package/esm/TimePickerImpl.js.map +7 -0
  29. package/esm/TimePickerMenu.js +102 -191
  30. package/esm/TimePickerMenu.js.map +7 -0
  31. package/esm/index.js +11 -4
  32. package/esm/index.js.map +7 -0
  33. package/esm/moveElementOnScroll.js +28 -34
  34. package/esm/moveElementOnScroll.js.map +7 -0
  35. package/esm/utils.js +28 -17
  36. package/esm/utils.js.map +7 -0
  37. package/package.json +7 -7
  38. package/types/PickerPanel.d.ts +1 -0
  39. package/types/TimePickerDropdown.d.ts +1 -0
  40. package/types/TimePickerImpl.d.ts +1 -0
@@ -1,157 +1,117 @@
1
- 'use strict';
2
-
3
- var _defineProperty = require('@babel/runtime/helpers/defineProperty');
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');
15
- var React = require('react');
16
- var lodash = require('lodash');
17
- var dsClassnames = require('@elliemae/ds-classnames');
18
- var memoizeOne = require('memoize-one');
19
- var dsIcons = require('@elliemae/ds-icons');
20
- var DSButton = require('@elliemae/ds-button');
21
- var moveElementOnScroll = require('./moveElementOnScroll.js');
22
- var utils = require('./utils.js');
23
- var jsxRuntime = require('react/jsx-runtime');
24
-
25
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
26
-
27
- var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
28
- var _jsx__default = /*#__PURE__*/_interopDefaultLegacy(_jsx);
29
- var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
30
- var memoizeOne__default = /*#__PURE__*/_interopDefaultLegacy(memoizeOne);
31
- var DSButton__default = /*#__PURE__*/_interopDefaultLegacy(DSButton);
32
-
33
- var _SelectedCircle, _ChevronSmallUp, _ChevronSmallDown;
34
-
35
- 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; }
36
-
37
- 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__default["default"](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; }
38
- const blockName = 'time-picker-panel';
39
- const Container = dsClassnames.aggregatedClasses('div')(blockName, null, _ref => {
40
- let {
41
- scrolling
42
- } = _ref;
43
- return {
44
- scrolling
45
- };
46
- });
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;
56
- return {
57
- selected,
58
- disabled
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __reExport = (target, module2, copyDefault, desc) => {
13
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
14
+ for (let key of __getOwnPropNames(module2))
15
+ if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
16
+ __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
17
+ }
18
+ return target;
19
+ };
20
+ var __toESM = (module2, isNodeMode) => {
21
+ return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
22
+ };
23
+ var __toCommonJS = /* @__PURE__ */ ((cache) => {
24
+ return (module2, temp) => {
25
+ return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
59
26
  };
27
+ })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
28
+ var PickerPanel_exports = {};
29
+ __export(PickerPanel_exports, {
30
+ PickerPanel: () => PickerPanel,
31
+ default: () => PickerPanel
60
32
  });
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);
68
- return utils.validateIndex(index, options);
33
+ var React = __toESM(require("react"));
34
+ var import_react = __toESM(require("react"));
35
+ var import_lodash = require("lodash");
36
+ var import_ds_classnames = require("@elliemae/ds-classnames");
37
+ var import_memoize_one = __toESM(require("memoize-one"));
38
+ var import_ds_icons = require("@elliemae/ds-icons");
39
+ var import_ds_button = require("@elliemae/ds-button");
40
+ var import_moveElementOnScroll = require("./moveElementOnScroll");
41
+ var import_utils = require("./utils");
42
+ const blockName = "time-picker-panel";
43
+ const Container = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, null, ({ scrolling }) => ({ scrolling }));
44
+ const Wrapper = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, "wrapper");
45
+ const PickerItemListContainer = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, "item-list-container");
46
+ const PickerItemList = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, "item-list");
47
+ const PickerHeader = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, "header");
48
+ const PickerItemContainer = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, "item", ({ selected, disabled }) => ({
49
+ selected,
50
+ disabled
51
+ }));
52
+ const PickerSelectedOptionSelected = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, "selected-container");
53
+ const SelectedCircle = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, "selected-circle");
54
+ const ArrowButtonContainer = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, "arrow-container");
55
+ const getOptionIndex = (options, selectedOption, valueProperty = "value") => {
56
+ const index = options.findIndex((option) => option[valueProperty] === selectedOption);
57
+ return (0, import_utils.validateIndex)(index, options);
69
58
  };
70
-
71
59
  const arrowProps = {
72
- buttonType: 'text',
60
+ buttonType: "text",
73
61
  fluidHeight: true,
74
62
  fluidWidth: true,
75
- size: 's'
63
+ size: "s"
76
64
  };
77
- class PickerPanel extends React.Component {
65
+ class PickerPanel extends import_react.Component {
78
66
  constructor(props) {
79
67
  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;
68
+ this.computeContainerTranslation = (0, import_memoize_one.default)((index) => {
69
+ const { options, valueProperty } = this.props;
70
+ const { selectedOption, scrolling } = this.state;
89
71
  const selectedOptionIndex = index || getOptionIndex(options, selectedOption, valueProperty);
90
72
  const listYPosition = this.minYListPosition - selectedOptionIndex * this.optionHeight;
91
- if (this.scrollHandler && !scrolling) this.scrollHandler.updatePosition(listYPosition);
73
+ if (this.scrollHandler && !scrolling)
74
+ this.scrollHandler.updatePosition(listYPosition);
92
75
  return listYPosition;
93
76
  });
94
-
95
77
  this.renderHeader = () => {
96
- const {
97
- header
98
- } = this.props;
99
- return /*#__PURE__*/_jsx__default["default"](PickerHeader, {}, void 0, header);
78
+ const { header } = this.props;
79
+ return /* @__PURE__ */ import_react.default.createElement(PickerHeader, null, header);
100
80
  };
101
-
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();
81
+ this.pickerListContainerRef = import_react.default.createRef();
82
+ this.pickerListRef = import_react.default.createRef();
83
+ this.pickerItemRef = import_react.default.createRef();
84
+ this.selectedOptionRef = import_react.default.createRef();
106
85
  this.state = {
107
86
  selectedOption: props.selected,
108
87
  activeIndex: 0,
109
- // eslint-disable-next-line react/no-unused-state
110
88
  prevProps: {}
111
89
  };
112
- this.handleKeyDown = this.handleKeyDown.bind(this);
113
- this.handleStepMoveUp = this.handleStepMoveUp.bind(this);
114
- this.handleStepMoveDown = this.handleStepMoveDown.bind(this);
115
90
  }
116
-
117
91
  componentDidMount() {
118
92
  this.computeSizes();
119
93
  const pickerListContainerEl = this.pickerListContainerRef.current;
120
94
  const pickerListEl = this.pickerListRef.current;
121
- this.scrollHandler = new moveElementOnScroll.MoveElementOnScroll(pickerListEl, {
95
+ this.scrollHandler = new import_moveElementOnScroll.MoveElementOnScroll(pickerListEl, {
122
96
  container: pickerListContainerEl,
123
97
  min: -this.minYListPosition,
124
98
  max: this.maxYListPosition,
125
99
  onUpdate: (pos, delta) => {
126
- const {
127
- options
128
- } = this.props;
100
+ const { options } = this.props;
129
101
  const index = options.length - -Math.floor((pos - this.maxYListPosition) / this.optionHeight) + (delta > 0 ? 1 : -1);
130
102
  this.moveTo(index, true);
131
103
  },
132
104
  onEndScroll: () => {
133
- this.setState({
134
- scrolling: false
135
- });
105
+ this.setState({ scrolling: false });
136
106
  }
137
107
  });
138
108
  this.computeContainerTranslation();
139
109
  }
140
-
141
110
  componentWillUnmount() {
142
111
  this.scrollHandler.unsubscribe();
143
112
  }
144
-
145
- static getDerivedStateFromProps(nextProps, _ref3) {
146
- let {
147
- prevProps
148
- } = _ref3;
149
- const {
150
- selected,
151
- valueProperty,
152
- options
153
- } = nextProps;
154
-
113
+ static getDerivedStateFromProps(nextProps, { prevProps }) {
114
+ const { selected, valueProperty, options } = nextProps;
155
115
  if (selected !== prevProps.selected) {
156
116
  return {
157
117
  selectedOption: selected,
@@ -159,244 +119,181 @@ class PickerPanel extends React.Component {
159
119
  prevProps: nextProps
160
120
  };
161
121
  }
162
-
163
122
  return null;
164
123
  }
165
-
166
124
  getOptionValue(option) {
167
- const {
168
- valueProperty
169
- } = this.props;
125
+ const { valueProperty } = this.props;
170
126
  return option[valueProperty];
171
127
  }
172
-
173
128
  getOptionLabel(option) {
174
- const {
175
- labelProperty
176
- } = this.props;
129
+ const { labelProperty } = this.props;
177
130
  return option[labelProperty];
178
131
  }
179
-
180
132
  computeSizes() {
181
- const {
182
- options,
183
- numberItemsOnScreen
184
- } = this.props;
185
- const {
186
- offsetHeight: optionHeight
187
- } = this.pickerItemRef.current;
133
+ const { options, numberItemsOnScreen } = this.props;
134
+ const { offsetHeight: optionHeight } = this.pickerItemRef.current;
188
135
  this.optionHeight = optionHeight;
189
136
  this.listHeight = this.optionHeight * numberItemsOnScreen;
190
137
  this.minYListPosition = this.listHeight / 2 - this.optionHeight / 2;
191
138
  this.maxYListPosition = this.optionHeight * (options.length - Math.ceil(numberItemsOnScreen / 2));
192
139
  }
193
-
194
140
  handleOptionSelect(optionValue, index, scrolling) {
195
- const {
196
- onChange
197
- } = this.props;
198
- this.setState(state => _objectSpread(_objectSpread({}, state), {}, {
141
+ const { onChange } = this.props;
142
+ this.setState((state) => ({
143
+ ...state,
199
144
  scrolling,
200
145
  selectedOption: optionValue,
201
146
  activeIndex: index
202
147
  }), () => {
203
148
  onChange(optionValue, index);
204
149
  });
205
- } // TODO: this needs a refactor from de FocusGroup
206
- // eslint-disable-next-line max-statements
207
-
208
-
150
+ }
209
151
  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');
152
+ const { activeIndex } = this.state;
153
+ const { options } = this.props;
154
+ const [firstColumn, ...restColumns] = document.getElementsByClassName("em-ds-time-picker-panel");
217
155
  const [lastColumn] = restColumns.slice(-1);
218
- const [prev] = document.getElementsByClassName('DayPickerNavigation_button');
156
+ const [prev] = document.getElementsByClassName("DayPickerNavigation_button");
219
157
  const focusedElement = document.activeElement;
220
-
221
158
  switch (e.key) {
222
- case 'Home':
159
+ case "Home":
223
160
  this.moveTo(0);
224
161
  break;
225
-
226
- case 'End':
162
+ case "End":
227
163
  this.moveTo(options.length - 1);
228
164
  break;
229
-
230
- case 'ArrowUp':
165
+ case "ArrowUp":
231
166
  this.moveTo(activeIndex - 1);
232
167
  break;
233
-
234
- case 'ArrowDown':
168
+ case "ArrowDown":
235
169
  this.moveTo(activeIndex + 1);
236
170
  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();
249
- }
250
-
251
- break;
171
+ case "Tab": {
172
+ e.preventDefault();
173
+ if (prev && focusedElement === lastColumn) {
174
+ prev.focus();
175
+ } else if (focusedElement === lastColumn) {
176
+ firstColumn.focus();
177
+ } else {
178
+ const position = (0, import_lodash.findIndex)(restColumns, focusedElement);
179
+ restColumns[position + 1].focus();
252
180
  }
181
+ break;
182
+ }
183
+ default:
184
+ break;
253
185
  }
254
186
  }
255
-
256
187
  moveTo(index, scrolling) {
257
- const {
258
- options
259
- } = this.props;
260
- const {
261
- selectedOption
262
- } = this.state;
263
- const validIndex = utils.validateIndex(index, options);
188
+ const { options } = this.props;
189
+ const { selectedOption } = this.state;
190
+ const validIndex = (0, import_utils.validateIndex)(index, options);
264
191
  const option = options[validIndex];
265
192
  const optionValue = this.getOptionValue(option);
266
-
267
193
  if (selectedOption !== optionValue && option.disabled !== true) {
268
194
  this.handleOptionSelect(optionValue, validIndex, scrolling);
269
- } // TO-DO: if date disabled, add nextValidOption selection
270
-
195
+ }
271
196
  }
272
-
273
197
  handleStepMoveUp() {
274
- const {
275
- activeIndex
276
- } = this.state;
277
- const {
278
- arrowStep,
279
- options
280
- } = this.props;
198
+ const { activeIndex } = this.state;
199
+ const { arrowStep, options } = this.props;
281
200
  const supposedPos = activeIndex - arrowStep;
282
201
  const nextPos = supposedPos >= 0 ? supposedPos : activeIndex - 1;
283
- const nextValidOption = options.find(op => !op.disabled);
202
+ const nextValidOption = options.find((op) => !op.disabled);
284
203
  this.moveTo(nextPos, true, nextValidOption);
285
204
  }
286
-
287
205
  handleStepMoveDown() {
288
- const {
289
- activeIndex
290
- } = this.state;
291
- const {
292
- arrowStep,
293
- options
294
- } = this.props;
206
+ const { activeIndex } = this.state;
207
+ const { arrowStep, options } = this.props;
295
208
  const supposedPos = activeIndex + arrowStep;
296
209
  const nextPos = supposedPos <= options.length ? supposedPos : activeIndex + 1;
297
210
  this.moveTo(nextPos);
298
211
  }
299
-
300
212
  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;
213
+ const { options, hasHeader, type, time, meridiem, disabledTimes } = this.props;
214
+ const { selectedOption, activeIndex, scrolling } = this.state;
314
215
  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
- },
216
+ return /* @__PURE__ */ import_react.default.createElement(Wrapper, null, hasHeader && this.renderHeader(), /* @__PURE__ */ import_react.default.createElement(Container, {
217
+ classProps: { scrolling },
319
218
  onKeyDown: this.handleKeyDown,
320
219
  tabIndex: 0
321
- }, void 0, /*#__PURE__*/_jsx__default["default"](PickerSelectedOptionSelected, {
220
+ }, /* @__PURE__ */ import_react.default.createElement(PickerSelectedOptionSelected, {
322
221
  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), {}, {
222
+ }, /* @__PURE__ */ import_react.default.createElement(SelectedCircle, null)), /* @__PURE__ */ import_react.default.createElement(ArrowButtonContainer, null, /* @__PURE__ */ import_react.default.createElement(import_ds_button.DSButton, {
223
+ ...arrowProps,
324
224
  "aria-label": "Chevron Up",
325
- "data-testid": "".concat(type, "-chevron-up"),
225
+ "data-testid": `${type}-chevron-up`,
326
226
  disabled: activeIndex <= 0,
327
- icon: _ChevronSmallUp || (_ChevronSmallUp = /*#__PURE__*/_jsx__default["default"](dsIcons.ChevronSmallUp, {})),
227
+ icon: /* @__PURE__ */ import_react.default.createElement(import_ds_icons.ChevronSmallUp, null),
328
228
  onClick: this.handleStepMoveUp,
329
229
  tabIndex: -1
330
- }))), /*#__PURE__*/_jsx__default["default"](PickerItemListContainer, {
230
+ })), /* @__PURE__ */ import_react.default.createElement(PickerItemListContainer, {
331
231
  innerRef: this.pickerListContainerRef,
332
232
  style: {
333
233
  height: this.listHeight
334
234
  }
335
- }, void 0, /*#__PURE__*/_jsx__default["default"](PickerItemList, {
336
- "data-testid": "".concat(type, "-list"),
235
+ }, /* @__PURE__ */ import_react.default.createElement(PickerItemList, {
236
+ "data-testid": `${type}-list`,
337
237
  innerRef: this.pickerListRef,
338
238
  style: {
339
- transform: "translateY(".concat(listYPosition, "px)")
239
+ transform: `translateY(${listYPosition}px)`
340
240
  }
341
- }, void 0, options.map((option, index) => {
241
+ }, options.map((option, index) => {
342
242
  const value = this.getOptionValue(option);
343
243
  const label = this.getOptionLabel(option);
344
244
  let valueFormatted;
345
- if (meridiem === 'AM') valueFormatted = value;else if (meridiem === 'PM' && value === 12) valueFormatted = value;else if (meridiem === 'PM') valueFormatted = value + 12;
245
+ if (meridiem === "AM")
246
+ valueFormatted = value;
247
+ else if (meridiem === "PM" && value === 12)
248
+ valueFormatted = value;
249
+ else if (meridiem === "PM")
250
+ valueFormatted = value + 12;
346
251
  let disabled = false;
347
-
348
252
  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)) {
253
+ const { from, to } = disabledTimes;
254
+ if (type === "hour" && valueFormatted >= from?.hour && valueFormatted < to?.hour || type === "minutes" && value >= from?.min && value < to?.min) {
355
255
  disabled = true;
356
256
  }
357
-
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))) {
257
+ if (type === "minutes" && (time?.hour() > to?.hour || time?.hour() < from?.hour)) {
359
258
  disabled = false;
360
259
  }
361
-
362
- if (label === 'am' && (from === null || from === void 0 ? void 0 : from.hour) == 0 && (to === null || to === void 0 ? void 0 : to.hour) >= 12) {
260
+ if (label === "am" && from?.hour == 0 && to?.hour >= 12) {
363
261
  disabled = true;
364
262
  }
365
-
366
- if (label === 'pm' && (to === null || to === void 0 ? void 0 : to.hour) == 24) {
263
+ if (label === "pm" && to?.hour == 24) {
367
264
  disabled = true;
368
265
  }
369
266
  }
370
-
371
267
  option.disabled = disabled;
372
- return /*#__PURE__*/_jsx__default["default"](PickerItemContainer, {
268
+ return /* @__PURE__ */ import_react.default.createElement(PickerItemContainer, {
269
+ key: value,
373
270
  classProps: {
374
271
  selected: selectedOption ? value === selectedOption : index === 0,
375
272
  disabled
376
273
  },
377
274
  innerRef: this.pickerItemRef,
378
275
  onClick: () => {
379
- if (!disabled) this.handleOptionSelect(value, index);
276
+ if (!disabled)
277
+ this.handleOptionSelect(value, index);
380
278
  }
381
- }, value, label);
382
- }))), /*#__PURE__*/_jsx__default["default"](ArrowButtonContainer, {}, void 0, /*#__PURE__*/jsxRuntime.jsx(DSButton__default["default"], _objectSpread(_objectSpread({}, arrowProps), {}, {
279
+ }, label);
280
+ }))), /* @__PURE__ */ import_react.default.createElement(ArrowButtonContainer, null, /* @__PURE__ */ import_react.default.createElement(import_ds_button.DSButton, {
281
+ ...arrowProps,
383
282
  "aria-label": "Chevron Down",
384
- "data-testid": "".concat(type, "-chevron-down"),
283
+ "data-testid": `${type}-chevron-down`,
385
284
  disabled: activeIndex >= options.length - 1,
386
- icon: _ChevronSmallDown || (_ChevronSmallDown = /*#__PURE__*/_jsx__default["default"](dsIcons.ChevronSmallDown, {})),
285
+ icon: /* @__PURE__ */ import_react.default.createElement(import_ds_icons.ChevronSmallDown, null),
387
286
  onClick: this.handleStepMoveDown,
388
287
  tabIndex: -1
389
- })))));
288
+ }))));
390
289
  }
391
-
392
290
  }
393
291
  PickerPanel.defaultProps = {
394
- valueProperty: 'value',
395
- labelProperty: 'label',
292
+ valueProperty: "value",
293
+ labelProperty: "label",
396
294
  numberItemsOnScreen: 5,
397
- // this number should be impair
398
295
  options: [],
399
296
  arrowStep: 1
400
297
  };
401
-
402
- module.exports = PickerPanel;
298
+ module.exports = __toCommonJS(PickerPanel_exports);
299
+ //# sourceMappingURL=PickerPanel.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/PickerPanel.tsx", "../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["/* eslint-disable eqeqeq */\n/* eslint-disable react/prop-types */\n/* eslint-disable complexity */\n/* eslint-disable max-lines */\nimport React, { Component } from 'react';\nimport { findIndex } from 'lodash';\nimport { aggregatedClasses } from '@elliemae/ds-classnames';\nimport memoizeOne from 'memoize-one';\nimport { ChevronSmallUp, ChevronSmallDown } from '@elliemae/ds-icons';\nimport { DSButton } from '@elliemae/ds-button';\nimport { MoveElementOnScroll } from './moveElementOnScroll';\nimport { validateIndex } from './utils';\n\nconst blockName = 'time-picker-panel';\n\nconst Container = aggregatedClasses('div')(blockName, null, ({ scrolling }) => ({ scrolling }));\nconst Wrapper = aggregatedClasses('div')(blockName, 'wrapper');\nconst PickerItemListContainer = aggregatedClasses('div')(blockName, 'item-list-container');\nconst PickerItemList = aggregatedClasses('div')(blockName, 'item-list');\nconst PickerHeader = aggregatedClasses('div')(blockName, 'header');\nconst PickerItemContainer = aggregatedClasses('div')(blockName, 'item', ({ selected, disabled }) => ({\n selected,\n disabled,\n}));\nconst PickerSelectedOptionSelected = aggregatedClasses('div')(blockName, 'selected-container');\nconst SelectedCircle = aggregatedClasses('div')(blockName, 'selected-circle');\nconst ArrowButtonContainer = aggregatedClasses('div')(blockName, 'arrow-container');\n\nconst getOptionIndex = (options, selectedOption, valueProperty = 'value') => {\n const index = options.findIndex((option) => option[valueProperty] === selectedOption);\n return validateIndex(index, options);\n};\n\nconst arrowProps = {\n buttonType: 'text',\n fluidHeight: true,\n fluidWidth: true,\n size: 's',\n};\n\nexport default class PickerPanel extends Component {\n computeContainerTranslation = memoizeOne((index) => {\n const { options, valueProperty } = this.props;\n const { selectedOption, scrolling } = this.state;\n\n const selectedOptionIndex = index || getOptionIndex(options, selectedOption, valueProperty);\n const listYPosition = this.minYListPosition - selectedOptionIndex * this.optionHeight;\n\n if (this.scrollHandler && !scrolling) this.scrollHandler.updatePosition(listYPosition);\n\n return listYPosition;\n });\n\n constructor(props) {\n super(props);\n this.pickerListContainerRef = React.createRef();\n this.pickerListRef = React.createRef();\n this.pickerItemRef = React.createRef();\n this.selectedOptionRef = React.createRef();\n\n this.state = {\n selectedOption: props.selected,\n activeIndex: 0,\n // eslint-disable-next-line react/no-unused-state\n prevProps: {},\n };\n }\n\n componentDidMount() {\n this.computeSizes();\n const pickerListContainerEl = this.pickerListContainerRef.current;\n const pickerListEl = this.pickerListRef.current;\n\n this.scrollHandler = new MoveElementOnScroll(pickerListEl, {\n container: pickerListContainerEl,\n min: -this.minYListPosition,\n max: this.maxYListPosition,\n onUpdate: (pos, delta) => {\n const { options } = this.props;\n const index =\n options.length - -Math.floor((pos - this.maxYListPosition) / this.optionHeight) + (delta > 0 ? 1 : -1);\n this.moveTo(index, true);\n },\n onEndScroll: () => {\n this.setState({ scrolling: false });\n },\n });\n this.computeContainerTranslation();\n }\n\n componentWillUnmount() {\n this.scrollHandler.unsubscribe();\n }\n\n static getDerivedStateFromProps(nextProps, { prevProps }) {\n const { selected, valueProperty, options } = nextProps;\n if (selected !== prevProps.selected) {\n return {\n selectedOption: selected,\n activeIndex: getOptionIndex(options, selected, valueProperty),\n prevProps: nextProps,\n };\n }\n return null;\n }\n\n getOptionValue(option) {\n const { valueProperty } = this.props;\n return option[valueProperty];\n }\n\n getOptionLabel(option) {\n const { labelProperty } = this.props;\n return option[labelProperty];\n }\n\n computeSizes() {\n const { options, numberItemsOnScreen } = this.props;\n const { offsetHeight: optionHeight } = this.pickerItemRef.current;\n\n this.optionHeight = optionHeight;\n this.listHeight = this.optionHeight * numberItemsOnScreen;\n\n this.minYListPosition = this.listHeight / 2 - this.optionHeight / 2;\n this.maxYListPosition = this.optionHeight * (options.length - Math.ceil(numberItemsOnScreen / 2));\n }\n\n handleOptionSelect(optionValue, index, scrolling) {\n const { onChange } = this.props;\n this.setState(\n (state) => ({\n ...state,\n scrolling,\n selectedOption: optionValue,\n activeIndex: index,\n }),\n () => {\n onChange(optionValue, index);\n },\n );\n }\n\n // TODO: this needs a refactor from de FocusGroup\n // eslint-disable-next-line max-statements\n handleKeyDown(e) {\n const { activeIndex } = this.state;\n const { options } = this.props;\n const [firstColumn, ...restColumns] = document.getElementsByClassName('em-ds-time-picker-panel');\n const [lastColumn] = restColumns.slice(-1);\n const [prev] = document.getElementsByClassName('DayPickerNavigation_button');\n const focusedElement = document.activeElement;\n\n switch (e.key) {\n case 'Home':\n this.moveTo(0);\n break;\n case 'End':\n this.moveTo(options.length - 1);\n break;\n case 'ArrowUp':\n this.moveTo(activeIndex - 1);\n break;\n case 'ArrowDown':\n this.moveTo(activeIndex + 1);\n break;\n case 'Tab': {\n e.preventDefault();\n // If it is DateTimePicker, move focus to prev arrow element\n if (prev && focusedElement === lastColumn) {\n prev.focus();\n } else if (focusedElement === lastColumn) {\n firstColumn.focus();\n } else {\n const position = findIndex(restColumns, focusedElement);\n restColumns[position + 1].focus();\n }\n break;\n }\n default:\n break;\n }\n }\n\n moveTo(index, scrolling) {\n const { options } = this.props;\n const { selectedOption } = this.state;\n const validIndex = validateIndex(index, options);\n const option = options[validIndex];\n const optionValue = this.getOptionValue(option);\n if (selectedOption !== optionValue && option.disabled !== true) {\n this.handleOptionSelect(optionValue, validIndex, scrolling);\n }\n // TO-DO: if date disabled, add nextValidOption selection\n }\n\n handleStepMoveUp() {\n const { activeIndex } = this.state;\n const { arrowStep, options } = this.props;\n const supposedPos = activeIndex - arrowStep;\n const nextPos = supposedPos >= 0 ? supposedPos : activeIndex - 1;\n\n const nextValidOption = options.find((op) => !op.disabled);\n this.moveTo(nextPos, true, nextValidOption);\n }\n\n handleStepMoveDown() {\n const { activeIndex } = this.state;\n const { arrowStep, options } = this.props;\n const supposedPos = activeIndex + arrowStep;\n const nextPos = supposedPos <= options.length ? supposedPos : activeIndex + 1;\n this.moveTo(nextPos);\n }\n\n renderHeader = () => {\n const { header } = this.props;\n\n return <PickerHeader>{header}</PickerHeader>;\n };\n\n render() {\n const { options, hasHeader, type, time, meridiem, disabledTimes } = this.props;\n const { selectedOption, activeIndex, scrolling } = this.state;\n\n const listYPosition = this.computeContainerTranslation(activeIndex);\n\n return (\n <Wrapper>\n {hasHeader && this.renderHeader()}\n <Container classProps={{ scrolling }} onKeyDown={this.handleKeyDown} tabIndex={0}>\n <PickerSelectedOptionSelected innerRef={this.selectedOptionRef}>\n <SelectedCircle />\n </PickerSelectedOptionSelected>\n <ArrowButtonContainer>\n <DSButton\n {...arrowProps}\n aria-label=\"Chevron Up\"\n data-testid={`${type}-chevron-up`}\n disabled={activeIndex <= 0}\n icon={<ChevronSmallUp />}\n onClick={this.handleStepMoveUp}\n tabIndex={-1}\n />\n </ArrowButtonContainer>\n <PickerItemListContainer\n innerRef={this.pickerListContainerRef}\n style={{\n height: this.listHeight,\n }}\n >\n <PickerItemList\n data-testid={`${type}-list`}\n innerRef={this.pickerListRef}\n style={{\n transform: `translateY(${listYPosition}px)`,\n }}\n >\n {options.map((option, index) => {\n const value = this.getOptionValue(option);\n const label = this.getOptionLabel(option);\n let valueFormatted;\n if (meridiem === 'AM') valueFormatted = value;\n else if (meridiem === 'PM' && value === 12) valueFormatted = value;\n else if (meridiem === 'PM') valueFormatted = value + 12;\n\n let disabled = false;\n if (disabledTimes) {\n const { from, to } = disabledTimes;\n if (\n (type === 'hour' && valueFormatted >= from?.hour && valueFormatted < to?.hour) ||\n (type === 'minutes' && value >= from?.min && value < to?.min)\n ) {\n disabled = true;\n }\n if (type === 'minutes' && (time?.hour() > to?.hour || time?.hour() < from?.hour)) {\n disabled = false;\n }\n if (label === 'am' && from?.hour == 0 && to?.hour >= 12) {\n disabled = true;\n }\n if (label === 'pm' && to?.hour == 24) {\n disabled = true;\n }\n }\n\n option.disabled = disabled;\n\n return (\n <PickerItemContainer\n key={value}\n classProps={{\n selected: selectedOption ? value === selectedOption : index === 0,\n disabled,\n }}\n innerRef={this.pickerItemRef}\n onClick={() => {\n if (!disabled) this.handleOptionSelect(value, index);\n }}\n >\n {label}\n </PickerItemContainer>\n );\n })}\n </PickerItemList>\n </PickerItemListContainer>\n <ArrowButtonContainer>\n <DSButton\n {...arrowProps}\n aria-label=\"Chevron Down\"\n data-testid={`${type}-chevron-down`}\n disabled={activeIndex >= options.length - 1}\n icon={<ChevronSmallDown />}\n onClick={this.handleStepMoveDown}\n tabIndex={-1}\n />\n </ArrowButtonContainer>\n </Container>\n </Wrapper>\n );\n }\n}\n\nPickerPanel.defaultProps = {\n valueProperty: 'value',\n labelProperty: 'label',\n numberItemsOnScreen: 5, // this number should be impair\n options: [],\n arrowStep: 1,\n};\n\nexport { PickerPanel };", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }