@deephaven/components 0.19.2-beta.0 → 0.19.2-beta.5
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.
- package/dist/AutoCompleteInput.d.ts.map +1 -1
- package/dist/AutoCompleteInput.js +7 -11
- package/dist/AutoCompleteInput.js.map +1 -1
- package/dist/BasicModal.d.ts.map +1 -1
- package/dist/BasicModal.js +5 -7
- package/dist/BasicModal.js.map +1 -1
- package/dist/Button.d.ts +9 -3
- package/dist/Button.d.ts.map +1 -1
- package/dist/Button.js +18 -10
- package/dist/Button.js.map +1 -1
- package/dist/CardFlip.js +1 -1
- package/dist/CardFlip.js.map +1 -1
- package/dist/Collapse.js +2 -2
- package/dist/Collapse.js.map +1 -1
- package/dist/ComboBox.d.ts.map +1 -1
- package/dist/ComboBox.js +11 -15
- package/dist/ComboBox.js.map +1 -1
- package/dist/CustomTimeSelect.js +2 -2
- package/dist/CustomTimeSelect.js.map +1 -1
- package/dist/DraggableItemList.d.ts +1 -1
- package/dist/DraggableItemList.d.ts.map +1 -1
- package/dist/DraggableItemList.js +10 -7
- package/dist/DraggableItemList.js.map +1 -1
- package/dist/HierarchicalCheckboxMenu.d.ts.map +1 -1
- package/dist/HierarchicalCheckboxMenu.js +9 -6
- package/dist/HierarchicalCheckboxMenu.js.map +1 -1
- package/dist/ItemList.js +19 -17
- package/dist/ItemList.js.map +1 -1
- package/dist/LoadingOverlay.js +1 -1
- package/dist/LoadingOverlay.js.map +1 -1
- package/dist/MaskedInput.js +3 -1
- package/dist/MaskedInput.js.map +1 -1
- package/dist/RadioGroup.js +12 -8
- package/dist/RadioGroup.js.map +1 -1
- package/dist/SocketedButton.d.ts.map +1 -1
- package/dist/SocketedButton.js +1 -1
- package/dist/SocketedButton.js.map +1 -1
- package/dist/TimeSlider.d.ts.map +1 -1
- package/dist/TimeSlider.js +2 -2
- package/dist/TimeSlider.js.map +1 -1
- package/dist/ValidateLabelInput.d.ts.map +1 -1
- package/dist/ValidateLabelInput.js +2 -2
- package/dist/ValidateLabelInput.js.map +1 -1
- package/dist/context-actions/ContextActionUtils.d.ts +3 -3
- package/dist/context-actions/ContextActionUtils.js +14 -8
- package/dist/context-actions/ContextActionUtils.js.map +1 -1
- package/dist/context-actions/ContextActions.d.ts.map +1 -1
- package/dist/context-actions/ContextActions.js +9 -16
- package/dist/context-actions/ContextActions.js.map +1 -1
- package/dist/context-actions/ContextMenu.d.ts.map +1 -1
- package/dist/context-actions/ContextMenu.js +11 -13
- package/dist/context-actions/ContextMenu.js.map +1 -1
- package/dist/context-actions/ContextMenuItem.d.ts.map +1 -1
- package/dist/context-actions/ContextMenuItem.js +8 -6
- package/dist/context-actions/ContextMenuItem.js.map +1 -1
- package/dist/context-actions/GlobalContextAction.d.ts.map +1 -1
- package/dist/context-actions/GlobalContextAction.js +7 -12
- package/dist/context-actions/GlobalContextAction.js.map +1 -1
- package/dist/context-actions/GlobalContextActions.js +1 -1
- package/dist/context-actions/GlobalContextActions.js.map +1 -1
- package/dist/menu-actions/DropdownMenu.js +1 -1
- package/dist/menu-actions/DropdownMenu.js.map +1 -1
- package/dist/menu-actions/Menu.d.ts.map +1 -1
- package/dist/menu-actions/Menu.js +3 -3
- package/dist/menu-actions/Menu.js.map +1 -1
- package/dist/navigation/MenuItem.js +2 -2
- package/dist/navigation/MenuItem.js.map +1 -1
- package/dist/navigation/Stack.d.ts.map +1 -1
- package/dist/navigation/Stack.js +2 -2
- package/dist/navigation/Stack.js.map +1 -1
- package/dist/popper/Tooltip.js +1 -1
- package/dist/popper/Tooltip.js.map +1 -1
- package/package.json +8 -8
- package/scss/BaseStyleSheet.scss +5 -0
package/dist/Collapse.js
CHANGED
|
@@ -44,10 +44,10 @@ class Collapse extends Component {
|
|
|
44
44
|
autoFocusOnShow
|
|
45
45
|
} = this.props;
|
|
46
46
|
|
|
47
|
-
if (autoFocusOnShow) {
|
|
47
|
+
if (autoFocusOnShow !== undefined && autoFocusOnShow) {
|
|
48
48
|
var input = elem.querySelector('input, select, textarea');
|
|
49
49
|
|
|
50
|
-
if (input) {
|
|
50
|
+
if (input != null) {
|
|
51
51
|
input.focus();
|
|
52
52
|
}
|
|
53
53
|
}
|
package/dist/Collapse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Collapse.js","names":["React","Component","classNames","PropTypes","CSSTransition","Collapse","handleEnter","elemParam","elem","style","height","handleEntering","getHeight","handleExiting","handleExit","scrollBarWidth","scrollWidth","clientWidth","scrollHeight","constructor","props","handleEntered","bind","autoFocusOnShow","input","querySelector","focus","render","children","className","in","inTransition","dataTestId","enterActive","enterDone","exitActive","exitDone","state","collapse","string","bool","isRequired","node"
|
|
1
|
+
{"version":3,"file":"Collapse.js","names":["React","Component","classNames","PropTypes","CSSTransition","Collapse","handleEnter","elemParam","elem","style","height","handleEntering","getHeight","handleExiting","handleExit","scrollBarWidth","scrollWidth","clientWidth","scrollHeight","constructor","props","handleEntered","bind","autoFocusOnShow","undefined","input","querySelector","focus","render","children","className","in","inTransition","dataTestId","enterActive","enterDone","exitActive","exitDone","state","collapse","string","bool","isRequired","node"],"sources":["../src/Collapse.tsx"],"sourcesContent":["// Port of https://github.com/react-bootstrap/react-bootstrap/blob/master/src/Collapse.js\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { CSSTransition } from 'react-transition-group';\n\ninterface CollapseProps {\n className?: string;\n in: boolean;\n children: React.ReactNode;\n autoFocusOnShow?: boolean;\n 'data-testid'?: string;\n}\n\nclass Collapse extends Component<CollapseProps> {\n static propTypes = {\n className: PropTypes.string,\n in: PropTypes.bool.isRequired,\n children: PropTypes.node.isRequired,\n autoFocusOnShow: PropTypes.bool,\n 'data-testid': PropTypes.string,\n };\n\n static defaultProps = {\n className: '',\n autoFocusOnShow: false,\n 'data-testid': undefined,\n };\n\n static handleEnter(elemParam: HTMLElement): void {\n const elem = elemParam;\n elem.style.height = '0';\n }\n\n static handleEntering(elemParam: HTMLElement): void {\n const elem = elemParam;\n elem.style.height = `${Collapse.getHeight(elem)}px`;\n }\n\n static handleExiting(elemParam: HTMLElement): void {\n const elem = elemParam;\n elem.style.height = '0';\n }\n\n static handleExit(elemParam: HTMLElement): void {\n const elem = elemParam;\n elem.style.height = `${Collapse.getHeight(elem)}px`;\n }\n\n static getHeight(elem: HTMLElement): number {\n const scrollBarWidth = elem.scrollWidth - elem.clientWidth;\n return elem.scrollHeight - scrollBarWidth;\n }\n\n constructor(props: CollapseProps) {\n super(props);\n\n this.handleEntered = this.handleEntered.bind(this);\n }\n\n handleEntered(elemParam: HTMLElement): void {\n const elem = elemParam;\n elem.style.height = '';\n\n const { autoFocusOnShow } = this.props;\n if (autoFocusOnShow !== undefined && autoFocusOnShow) {\n const input = elem.querySelector(\n 'input, select, textarea'\n ) as HTMLInputElement;\n\n if (input != null) {\n input.focus();\n }\n }\n }\n\n render(): JSX.Element {\n const {\n children,\n className,\n in: inTransition,\n 'data-testid': dataTestId,\n } = this.props;\n return (\n <CSSTransition\n in={inTransition}\n classNames={{\n enterActive: 'collapsing',\n enterDone: 'collapse show',\n exitActive: 'collapsing',\n exitDone: 'collapse',\n }}\n onEnter={Collapse.handleEnter}\n onEntering={Collapse.handleEntering}\n onEntered={this.handleEntered}\n onExit={Collapse.handleExit}\n onExiting={Collapse.handleExiting}\n timeout={350}\n >\n {state => (\n <div\n className={classNames({ collapse: state === 'exited' }, className)}\n data-testid={dataTestId}\n >\n {children}\n </div>\n )}\n </CSSTransition>\n );\n }\n}\n\nexport default Collapse;\n"],"mappings":"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"}
|
package/dist/ComboBox.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComboBox.d.ts","sourceRoot":"","sources":["../src/ComboBox.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ComboBox.d.ts","sourceRoot":"","sources":["../src/ComboBox.tsx"],"names":[],"mappings":"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"}
|
package/dist/ComboBox.js
CHANGED
|
@@ -277,10 +277,8 @@ class ComboBox extends Component {
|
|
|
277
277
|
}
|
|
278
278
|
|
|
279
279
|
handleMenuBlur(event) {
|
|
280
|
-
var _this$popper$current2;
|
|
281
|
-
|
|
282
280
|
// close if menu blurs, unless its an internal option or the toggleButton which triggers close via click
|
|
283
|
-
if (event.relatedTarget instanceof Element &&
|
|
281
|
+
if (event.relatedTarget instanceof Element && this.popper.current != null && this.popper.current.element.contains(event.relatedTarget) || event.relatedTarget === this.toggleButton.current) {
|
|
284
282
|
return;
|
|
285
283
|
}
|
|
286
284
|
|
|
@@ -288,14 +286,12 @@ class ComboBox extends Component {
|
|
|
288
286
|
}
|
|
289
287
|
|
|
290
288
|
handleInputBlur(event) {
|
|
291
|
-
var _this$popper$current3;
|
|
292
|
-
|
|
293
289
|
// if blur event is caused by focusing on search input or open menu by keyboard, don't close the menu
|
|
294
290
|
var {
|
|
295
291
|
menuIsOpen
|
|
296
292
|
} = this.state;
|
|
297
293
|
|
|
298
|
-
if (menuIsOpen && event.relatedTarget instanceof Element &&
|
|
294
|
+
if (menuIsOpen && event.relatedTarget instanceof Element && this.popper.current != null && this.popper.current.element.contains(event.relatedTarget)) {
|
|
299
295
|
return;
|
|
300
296
|
}
|
|
301
297
|
|
|
@@ -315,12 +311,12 @@ class ComboBox extends Component {
|
|
|
315
311
|
} = this.state;
|
|
316
312
|
|
|
317
313
|
if (menuIsOpen) {
|
|
318
|
-
var _this$popper$
|
|
314
|
+
var _this$popper$current2;
|
|
319
315
|
|
|
320
316
|
this.setState({
|
|
321
317
|
menuIsOpen: false
|
|
322
318
|
});
|
|
323
|
-
(_this$popper$
|
|
319
|
+
(_this$popper$current2 = this.popper.current) === null || _this$popper$current2 === void 0 ? void 0 : _this$popper$current2.hide();
|
|
324
320
|
}
|
|
325
321
|
|
|
326
322
|
this.setState({
|
|
@@ -349,14 +345,14 @@ class ComboBox extends Component {
|
|
|
349
345
|
menuIsOpen: true
|
|
350
346
|
});
|
|
351
347
|
window.requestAnimationFrame(() => {
|
|
352
|
-
var _this$popper$
|
|
348
|
+
var _this$popper$current3;
|
|
353
349
|
|
|
354
|
-
(_this$popper$
|
|
350
|
+
(_this$popper$current3 = this.popper.current) === null || _this$popper$current3 === void 0 ? void 0 : _this$popper$current3.show();
|
|
355
351
|
});
|
|
356
352
|
}
|
|
357
353
|
|
|
358
354
|
closeMenu() {
|
|
359
|
-
var _this$popper$
|
|
355
|
+
var _this$popper$current4;
|
|
360
356
|
|
|
361
357
|
var focusInput = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
362
358
|
this.setState({
|
|
@@ -369,7 +365,7 @@ class ComboBox extends Component {
|
|
|
369
365
|
(_this$input$current4 = this.input.current) === null || _this$input$current4 === void 0 ? void 0 : _this$input$current4.focus();
|
|
370
366
|
}
|
|
371
367
|
|
|
372
|
-
(_this$popper$
|
|
368
|
+
(_this$popper$current4 = this.popper.current) === null || _this$popper$current4 === void 0 ? void 0 : _this$popper$current4.hide();
|
|
373
369
|
}
|
|
374
370
|
|
|
375
371
|
updateKeyboardIndex() {
|
|
@@ -493,12 +489,12 @@ class ComboBox extends Component {
|
|
|
493
489
|
className: classNames('form-control', className, 'cb-input'),
|
|
494
490
|
ref: this.input,
|
|
495
491
|
onChange: this.handleInputChange,
|
|
496
|
-
placeholder: inputPlaceholder || options[0]
|
|
492
|
+
placeholder: inputPlaceholder || (options[0] != null ? options[0].title : undefined),
|
|
497
493
|
disabled: disabled,
|
|
498
494
|
onBlur: this.handleInputBlur,
|
|
499
495
|
onKeyDown: this.handleInputKeyDown,
|
|
500
496
|
spellCheck: spellCheck,
|
|
501
|
-
"data-testid": dataTestId ? "".concat(dataTestId, "-input") : undefined
|
|
497
|
+
"data-testid": dataTestId !== undefined ? "".concat(dataTestId, "-input") : undefined
|
|
502
498
|
}), /*#__PURE__*/React.createElement("div", {
|
|
503
499
|
className: "input-group-append cb-dropdown"
|
|
504
500
|
}, /*#__PURE__*/React.createElement("button", {
|
|
@@ -508,7 +504,7 @@ class ComboBox extends Component {
|
|
|
508
504
|
onClick: this.toggleMenu,
|
|
509
505
|
onKeyDown: this.handleInputKeyDown,
|
|
510
506
|
disabled: disabled,
|
|
511
|
-
"data-testid": dataTestId ? "".concat(dataTestId, "-btn") : undefined
|
|
507
|
+
"data-testid": dataTestId !== undefined ? "".concat(dataTestId, "-btn") : undefined
|
|
512
508
|
}, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
513
509
|
icon: vsTriangleDown
|
|
514
510
|
}), /*#__PURE__*/React.createElement(Popper, {
|
package/dist/ComboBox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComboBox.js","names":["React","Component","PropTypes","FontAwesomeIcon","vsTriangleDown","memoize","classNames","SearchInput","Popper","MENU_NAVIGATION_DIRECTION","ComboBox","constructor","props","options","input","filter","option","title","toLowerCase","indexOf","value","state","filteredOptions","keyboardOptionIndex","menuIsOpen","inputWidth","toggleMenu","bind","handleMenuKeyDown","handleMenuBlur","closeMenu","handleInputChange","handleInputKeyDown","handleInputBlur","handleFilterChange","handleOptionClick","handleOptionFocus","handleMenuOpened","handleMenuExited","popper","createRef","cbContainer","toggleButton","menuContainer","searchInput","componentDidUpdate","scrollOptionIntoView","setInputWidth","current","setState","getBoundingClientRect","width","focus","resetValue","updateInputValue","onChange","handleResize","event","menuOptions","key","stopPropagation","preventDefault","handleMenuNavigation","UP","DOWN","shiftKey","length","direction","menuOptionsLength","delta","onEnter","openMenu","target","optionIndex","Number","currentTarget","getCachedFilteredOptions","scheduleUpdate","relatedTarget","Element","element","contains","hide","updateKeyboardIndex","window","requestAnimationFrame","show","focusInput","valueIndex","findIndex","activeOption","querySelector","HTMLElement","scrollIntoView","block","inline","renderMenuElement","searchPlaceholder","renderOptions","map","index","render","inputPlaceholder","disabled","className","defaultValue","spellCheck","dataTestId","popperOptions","placement","modifiers","preventOverflow","enabled","undefined","arrayOf","shape","string","isRequired","func","bool"],"sources":["../src/ComboBox.tsx"],"sourcesContent":["/**\n * Combobox that combines a input box with a searchable dropdown menu\n *\n * props:\n * @param {array} options :[{\n * title: 'option title for display',\n * value: 'option value' //option value\n * }]\n * @param {string} inputPlaceholder place holder for the input box\n * @param {string} searchPlaceholder place holder for the search box in drop down search box\n * @param {boolean} disabled disable both input & drop down\n *\n *\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsTriangleDown } from '@deephaven/icons';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport { PopperOptions } from 'popper.js';\nimport SearchInput from './SearchInput';\nimport { Popper } from './popper';\n\nimport './ComboBox.scss';\n\ninterface ComboBoxOption {\n title: string;\n value: string;\n}\n\ninterface ComboBoxProps {\n options: ComboBoxOption[];\n popperOptions: PopperOptions;\n onChange(value: string): void;\n inputPlaceholder: string;\n searchPlaceholder: string;\n disabled: boolean;\n className: string;\n defaultValue: string;\n spellCheck: boolean;\n onEnter(): void;\n 'data-testid'?: string;\n}\n\ninterface ComboBoxState {\n value: string;\n filter: string;\n filteredOptions: ComboBoxOption[];\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n}\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\nclass ComboBox extends Component<ComboBoxProps, ComboBoxState> {\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n static DROP_DOWN_MENU_HEIGHT = 200;\n\n static propTypes = {\n options: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n })\n ).isRequired,\n popperOptions: PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }),\n onChange: PropTypes.func,\n inputPlaceholder: PropTypes.string,\n searchPlaceholder: PropTypes.string,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n defaultValue: PropTypes.string,\n spellCheck: PropTypes.bool,\n onEnter: PropTypes.func,\n 'data-testid': PropTypes.string,\n };\n\n static defaultProps = {\n onChange(): void {\n // no-op\n },\n inputPlaceholder: '',\n searchPlaceholder: 'Search',\n disabled: false,\n className: '',\n defaultValue: '',\n popperOptions: null,\n spellCheck: true,\n onEnter(): void {\n // no-op\n },\n 'data-testid': undefined,\n };\n\n constructor(props: ComboBoxProps) {\n super(props);\n this.state = {\n value: '',\n filter: '',\n filteredOptions: props.options,\n keyboardOptionIndex: -1,\n menuIsOpen: false,\n inputWidth: 100,\n };\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.handleMenuBlur = this.handleMenuBlur.bind(this);\n this.closeMenu = this.closeMenu.bind(this);\n\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleInputKeyDown = this.handleInputKeyDown.bind(this);\n this.handleInputBlur = this.handleInputBlur.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleOptionFocus = this.handleOptionFocus.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n\n this.popper = React.createRef();\n this.cbContainer = React.createRef();\n this.toggleButton = React.createRef();\n this.menuContainer = React.createRef();\n this.input = React.createRef();\n this.searchInput = React.createRef();\n }\n\n componentDidUpdate(): void {\n const { menuIsOpen, keyboardOptionIndex } = this.state;\n if (menuIsOpen && keyboardOptionIndex >= 0) {\n this.scrollOptionIntoView();\n }\n }\n\n popper: React.RefObject<Popper>;\n\n cbContainer: React.RefObject<HTMLDivElement>;\n\n toggleButton: React.RefObject<HTMLButtonElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n input: React.RefObject<HTMLInputElement>;\n\n searchInput: React.RefObject<SearchInput>;\n\n setInputWidth(): void {\n if (this.cbContainer.current) {\n this.setState({\n inputWidth: this.cbContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n getCachedFilteredOptions = memoize(\n (options: ComboBoxOption[], input: string) =>\n options.filter(\n option =>\n option.title.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||\n option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0\n )\n );\n\n focus(): void {\n this.input.current?.focus();\n }\n\n resetValue(): void {\n this.setState({ value: '' });\n }\n\n updateInputValue(value: string): void {\n const { onChange } = this.props;\n this.setState({ value });\n onChange(value);\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent): void {\n const { filter, filteredOptions, keyboardOptionIndex } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n\n switch (event.key) {\n case 'Enter':\n if (menuOptions[keyboardOptionIndex]?.value != null) {\n this.updateInputValue(menuOptions[keyboardOptionIndex].value);\n }\n this.closeMenu();\n this.input.current?.focus();\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.handleMenuNavigation(ComboBox.MENU_NAVIGATION_DIRECTION.UP);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.handleMenuNavigation(ComboBox.MENU_NAVIGATION_DIRECTION.DOWN);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Escape':\n if (filter !== '') {\n this.setState({ filter: '' });\n event.stopPropagation(); // Don't trigger blur on input element\n } else {\n this.closeMenu();\n }\n break;\n case 'Tab':\n if (!event.shiftKey && keyboardOptionIndex === menuOptions.length - 1) {\n this.closeMenu();\n }\n break;\n default:\n break;\n }\n }\n\n handleMenuNavigation(direction: MENU_NAVIGATION_DIRECTION): void {\n const { filter, filteredOptions, keyboardOptionIndex } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n const menuOptionsLength = menuOptions.length;\n let delta = 0;\n switch (direction) {\n case ComboBox.MENU_NAVIGATION_DIRECTION.UP:\n delta = -1;\n break;\n case ComboBox.MENU_NAVIGATION_DIRECTION.DOWN:\n delta = 1;\n break;\n }\n\n if (delta !== 0) {\n this.setState({\n keyboardOptionIndex:\n (keyboardOptionIndex + delta + menuOptionsLength) % menuOptionsLength,\n });\n }\n }\n\n handleInputKeyDown(event: React.KeyboardEvent): void {\n const { onEnter } = this.props;\n const { menuIsOpen } = this.state;\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n if (!menuIsOpen) {\n this.openMenu();\n }\n } else if (event.key === 'Enter') {\n onEnter();\n }\n }\n\n handleInputChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.updateInputValue(event.target.value);\n }\n\n handleOptionClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const optionIndex = Number(event.currentTarget.value);\n const { filter, filteredOptions } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n\n this.updateInputValue(menuOptions[optionIndex].value);\n this.closeMenu();\n this.input.current?.focus();\n }\n\n handleOptionFocus(event: React.FocusEvent<HTMLButtonElement>): void {\n this.setState({ keyboardOptionIndex: Number(event.target.value) });\n }\n\n handleFilterChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const { options } = this.props;\n const filter = event.target.value;\n const filteredOptions = this.getCachedFilteredOptions(options, filter);\n\n this.setState({\n filter,\n filteredOptions,\n keyboardOptionIndex: 0,\n });\n this.popper.current?.scheduleUpdate();\n }\n\n handleMenuBlur(event: React.FocusEvent): void {\n // close if menu blurs, unless its an internal option or the toggleButton which triggers close via click\n if (\n (event.relatedTarget instanceof Element &&\n this.popper.current?.element.contains(event.relatedTarget)) ||\n event.relatedTarget === this.toggleButton.current\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleInputBlur(event: React.FocusEvent<HTMLInputElement>): void {\n // if blur event is caused by focusing on search input or open menu by keyboard, don't close the menu\n const { menuIsOpen } = this.state;\n if (\n menuIsOpen &&\n event.relatedTarget instanceof Element &&\n this.popper.current?.element.contains(event.relatedTarget)\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuOpened(): void {\n this.scrollOptionIntoView();\n this.searchInput.current?.focus();\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false });\n this.popper.current?.hide();\n }\n this.setState({ filter: '' });\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n event.stopPropagation();\n }\n\n openMenu(): void {\n this.updateKeyboardIndex();\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n\n window.requestAnimationFrame(() => {\n this.popper.current?.show();\n });\n }\n\n closeMenu(focusInput = true): void {\n this.setState({ menuIsOpen: false });\n if (focusInput) {\n this.input.current?.focus();\n }\n this.popper.current?.hide();\n }\n\n updateKeyboardIndex(): void {\n const { value, filter, filteredOptions } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n const valueIndex = menuOptions.findIndex(option => option.value === value);\n this.setState({ keyboardOptionIndex: valueIndex });\n }\n\n scrollOptionIntoView(): void {\n const activeOption = this.menuContainer.current?.querySelector(\n '.cb-option-btn.keyboard-active'\n );\n if (activeOption instanceof HTMLElement) {\n activeOption.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { searchPlaceholder } = this.props;\n const { filter, inputWidth } = this.state;\n return (\n <div\n className=\"cb-menu-container\"\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n onClick={event => {\n event.stopPropagation();\n }}\n style={{ width: inputWidth }}\n onBlur={this.handleMenuBlur}\n >\n <div className=\"cb-search-input-container\">\n <SearchInput\n value={filter}\n ref={this.searchInput}\n onChange={this.handleFilterChange}\n className=\"cb-search-input\"\n placeholder={searchPlaceholder}\n />\n </div>\n <div className=\"cb-options-container\">\n <div className=\"cb-options\">{this.renderOptions()}</div>\n </div>\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { options } = this.props;\n const { keyboardOptionIndex, filter, filteredOptions } = this.state;\n const menuOptions = filter ? filteredOptions : options;\n\n return menuOptions.map((option, index) => {\n const key = `option-${index}-${option.value}`;\n return (\n <button\n key={key}\n type=\"button\"\n value={index}\n className={classNames('cb-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {option.title}\n </button>\n );\n });\n }\n\n render(): JSX.Element {\n const {\n options,\n inputPlaceholder,\n disabled,\n className,\n defaultValue,\n spellCheck,\n 'data-testid': dataTestId,\n } = this.props;\n const { value } = this.state;\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n return (\n <div className=\"input-group cb-container\" ref={this.cbContainer}>\n <input\n value={value || defaultValue}\n className={classNames('form-control', className, 'cb-input')}\n ref={this.input}\n onChange={this.handleInputChange}\n placeholder={inputPlaceholder || (options[0] && options[0].title)}\n disabled={disabled}\n onBlur={this.handleInputBlur}\n onKeyDown={this.handleInputKeyDown}\n spellCheck={spellCheck}\n data-testid={dataTestId ? `${dataTestId}-input` : undefined}\n />\n <div className=\"input-group-append cb-dropdown\">\n <button\n type=\"button\"\n className=\"btn cb-btn form-control\"\n ref={this.toggleButton}\n onClick={this.toggleMenu}\n onKeyDown={this.handleInputKeyDown}\n disabled={disabled}\n data-testid={dataTestId ? `${dataTestId}-btn` : undefined}\n >\n <FontAwesomeIcon icon={vsTriangleDown} />\n <Popper\n ref={this.popper}\n options={popperOptions}\n className={classNames('combobox interactive')}\n onEntered={this.handleMenuOpened}\n onExited={this.handleMenuExited}\n >\n {this.renderMenuElement()}\n </Popper>\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default ComboBox;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ComboBox.js","names":["React","Component","PropTypes","FontAwesomeIcon","vsTriangleDown","memoize","classNames","SearchInput","Popper","MENU_NAVIGATION_DIRECTION","ComboBox","constructor","props","options","input","filter","option","title","toLowerCase","indexOf","value","state","filteredOptions","keyboardOptionIndex","menuIsOpen","inputWidth","toggleMenu","bind","handleMenuKeyDown","handleMenuBlur","closeMenu","handleInputChange","handleInputKeyDown","handleInputBlur","handleFilterChange","handleOptionClick","handleOptionFocus","handleMenuOpened","handleMenuExited","popper","createRef","cbContainer","toggleButton","menuContainer","searchInput","componentDidUpdate","scrollOptionIntoView","setInputWidth","current","setState","getBoundingClientRect","width","focus","resetValue","updateInputValue","onChange","handleResize","event","menuOptions","key","stopPropagation","preventDefault","handleMenuNavigation","UP","DOWN","shiftKey","length","direction","menuOptionsLength","delta","onEnter","openMenu","target","optionIndex","Number","currentTarget","getCachedFilteredOptions","scheduleUpdate","relatedTarget","Element","element","contains","hide","updateKeyboardIndex","window","requestAnimationFrame","show","focusInput","valueIndex","findIndex","activeOption","querySelector","HTMLElement","scrollIntoView","block","inline","renderMenuElement","searchPlaceholder","renderOptions","map","index","render","inputPlaceholder","disabled","className","defaultValue","spellCheck","dataTestId","popperOptions","placement","modifiers","preventOverflow","enabled","undefined","arrayOf","shape","string","isRequired","func","bool"],"sources":["../src/ComboBox.tsx"],"sourcesContent":["/**\n * Combobox that combines a input box with a searchable dropdown menu\n *\n * props:\n * @param {array} options :[{\n * title: 'option title for display',\n * value: 'option value' //option value\n * }]\n * @param {string} inputPlaceholder place holder for the input box\n * @param {string} searchPlaceholder place holder for the search box in drop down search box\n * @param {boolean} disabled disable both input & drop down\n *\n *\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsTriangleDown } from '@deephaven/icons';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport { PopperOptions } from 'popper.js';\nimport SearchInput from './SearchInput';\nimport { Popper } from './popper';\n\nimport './ComboBox.scss';\n\ninterface ComboBoxOption {\n title: string;\n value: string;\n}\n\ninterface ComboBoxProps {\n options: ComboBoxOption[];\n popperOptions: PopperOptions;\n onChange(value: string): void;\n inputPlaceholder: string;\n searchPlaceholder: string;\n disabled: boolean;\n className: string;\n defaultValue: string;\n spellCheck: boolean;\n onEnter(): void;\n 'data-testid'?: string;\n}\n\ninterface ComboBoxState {\n value: string;\n filter: string;\n filteredOptions: ComboBoxOption[];\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n}\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\nclass ComboBox extends Component<ComboBoxProps, ComboBoxState> {\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n static DROP_DOWN_MENU_HEIGHT = 200;\n\n static propTypes = {\n options: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n })\n ).isRequired,\n popperOptions: PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }),\n onChange: PropTypes.func,\n inputPlaceholder: PropTypes.string,\n searchPlaceholder: PropTypes.string,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n defaultValue: PropTypes.string,\n spellCheck: PropTypes.bool,\n onEnter: PropTypes.func,\n 'data-testid': PropTypes.string,\n };\n\n static defaultProps = {\n onChange(): void {\n // no-op\n },\n inputPlaceholder: '',\n searchPlaceholder: 'Search',\n disabled: false,\n className: '',\n defaultValue: '',\n popperOptions: null,\n spellCheck: true,\n onEnter(): void {\n // no-op\n },\n 'data-testid': undefined,\n };\n\n constructor(props: ComboBoxProps) {\n super(props);\n this.state = {\n value: '',\n filter: '',\n filteredOptions: props.options,\n keyboardOptionIndex: -1,\n menuIsOpen: false,\n inputWidth: 100,\n };\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.handleMenuBlur = this.handleMenuBlur.bind(this);\n this.closeMenu = this.closeMenu.bind(this);\n\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleInputKeyDown = this.handleInputKeyDown.bind(this);\n this.handleInputBlur = this.handleInputBlur.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleOptionFocus = this.handleOptionFocus.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n\n this.popper = React.createRef();\n this.cbContainer = React.createRef();\n this.toggleButton = React.createRef();\n this.menuContainer = React.createRef();\n this.input = React.createRef();\n this.searchInput = React.createRef();\n }\n\n componentDidUpdate(): void {\n const { menuIsOpen, keyboardOptionIndex } = this.state;\n if (menuIsOpen && keyboardOptionIndex >= 0) {\n this.scrollOptionIntoView();\n }\n }\n\n popper: React.RefObject<Popper>;\n\n cbContainer: React.RefObject<HTMLDivElement>;\n\n toggleButton: React.RefObject<HTMLButtonElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n input: React.RefObject<HTMLInputElement>;\n\n searchInput: React.RefObject<SearchInput>;\n\n setInputWidth(): void {\n if (this.cbContainer.current) {\n this.setState({\n inputWidth: this.cbContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n getCachedFilteredOptions = memoize(\n (options: ComboBoxOption[], input: string) =>\n options.filter(\n option =>\n option.title.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||\n option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0\n )\n );\n\n focus(): void {\n this.input.current?.focus();\n }\n\n resetValue(): void {\n this.setState({ value: '' });\n }\n\n updateInputValue(value: string): void {\n const { onChange } = this.props;\n this.setState({ value });\n onChange(value);\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent): void {\n const { filter, filteredOptions, keyboardOptionIndex } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n\n switch (event.key) {\n case 'Enter':\n if (menuOptions[keyboardOptionIndex]?.value != null) {\n this.updateInputValue(menuOptions[keyboardOptionIndex].value);\n }\n this.closeMenu();\n this.input.current?.focus();\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.handleMenuNavigation(ComboBox.MENU_NAVIGATION_DIRECTION.UP);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.handleMenuNavigation(ComboBox.MENU_NAVIGATION_DIRECTION.DOWN);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Escape':\n if (filter !== '') {\n this.setState({ filter: '' });\n event.stopPropagation(); // Don't trigger blur on input element\n } else {\n this.closeMenu();\n }\n break;\n case 'Tab':\n if (!event.shiftKey && keyboardOptionIndex === menuOptions.length - 1) {\n this.closeMenu();\n }\n break;\n default:\n break;\n }\n }\n\n handleMenuNavigation(direction: MENU_NAVIGATION_DIRECTION): void {\n const { filter, filteredOptions, keyboardOptionIndex } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n const menuOptionsLength = menuOptions.length;\n let delta = 0;\n switch (direction) {\n case ComboBox.MENU_NAVIGATION_DIRECTION.UP:\n delta = -1;\n break;\n case ComboBox.MENU_NAVIGATION_DIRECTION.DOWN:\n delta = 1;\n break;\n }\n\n if (delta !== 0) {\n this.setState({\n keyboardOptionIndex:\n (keyboardOptionIndex + delta + menuOptionsLength) % menuOptionsLength,\n });\n }\n }\n\n handleInputKeyDown(event: React.KeyboardEvent): void {\n const { onEnter } = this.props;\n const { menuIsOpen } = this.state;\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n if (!menuIsOpen) {\n this.openMenu();\n }\n } else if (event.key === 'Enter') {\n onEnter();\n }\n }\n\n handleInputChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.updateInputValue(event.target.value);\n }\n\n handleOptionClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const optionIndex = Number(event.currentTarget.value);\n const { filter, filteredOptions } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n\n this.updateInputValue(menuOptions[optionIndex].value);\n this.closeMenu();\n this.input.current?.focus();\n }\n\n handleOptionFocus(event: React.FocusEvent<HTMLButtonElement>): void {\n this.setState({ keyboardOptionIndex: Number(event.target.value) });\n }\n\n handleFilterChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const { options } = this.props;\n const filter = event.target.value;\n const filteredOptions = this.getCachedFilteredOptions(options, filter);\n\n this.setState({\n filter,\n filteredOptions,\n keyboardOptionIndex: 0,\n });\n this.popper.current?.scheduleUpdate();\n }\n\n handleMenuBlur(event: React.FocusEvent): void {\n // close if menu blurs, unless its an internal option or the toggleButton which triggers close via click\n if (\n (event.relatedTarget instanceof Element &&\n this.popper.current != null &&\n this.popper.current.element.contains(event.relatedTarget)) ||\n event.relatedTarget === this.toggleButton.current\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleInputBlur(event: React.FocusEvent<HTMLInputElement>): void {\n // if blur event is caused by focusing on search input or open menu by keyboard, don't close the menu\n const { menuIsOpen } = this.state;\n if (\n menuIsOpen &&\n event.relatedTarget instanceof Element &&\n this.popper.current != null &&\n this.popper.current.element.contains(event.relatedTarget)\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuOpened(): void {\n this.scrollOptionIntoView();\n this.searchInput.current?.focus();\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false });\n this.popper.current?.hide();\n }\n this.setState({ filter: '' });\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n event.stopPropagation();\n }\n\n openMenu(): void {\n this.updateKeyboardIndex();\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n\n window.requestAnimationFrame(() => {\n this.popper.current?.show();\n });\n }\n\n closeMenu(focusInput = true): void {\n this.setState({ menuIsOpen: false });\n if (focusInput) {\n this.input.current?.focus();\n }\n this.popper.current?.hide();\n }\n\n updateKeyboardIndex(): void {\n const { value, filter, filteredOptions } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n const valueIndex = menuOptions.findIndex(option => option.value === value);\n this.setState({ keyboardOptionIndex: valueIndex });\n }\n\n scrollOptionIntoView(): void {\n const activeOption = this.menuContainer.current?.querySelector(\n '.cb-option-btn.keyboard-active'\n );\n if (activeOption instanceof HTMLElement) {\n activeOption.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { searchPlaceholder } = this.props;\n const { filter, inputWidth } = this.state;\n return (\n <div\n className=\"cb-menu-container\"\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n onClick={event => {\n event.stopPropagation();\n }}\n style={{ width: inputWidth }}\n onBlur={this.handleMenuBlur}\n >\n <div className=\"cb-search-input-container\">\n <SearchInput\n value={filter}\n ref={this.searchInput}\n onChange={this.handleFilterChange}\n className=\"cb-search-input\"\n placeholder={searchPlaceholder}\n />\n </div>\n <div className=\"cb-options-container\">\n <div className=\"cb-options\">{this.renderOptions()}</div>\n </div>\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { options } = this.props;\n const { keyboardOptionIndex, filter, filteredOptions } = this.state;\n const menuOptions = filter ? filteredOptions : options;\n\n return menuOptions.map((option, index) => {\n const key = `option-${index}-${option.value}`;\n return (\n <button\n key={key}\n type=\"button\"\n value={index}\n className={classNames('cb-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {option.title}\n </button>\n );\n });\n }\n\n render(): JSX.Element {\n const {\n options,\n inputPlaceholder,\n disabled,\n className,\n defaultValue,\n spellCheck,\n 'data-testid': dataTestId,\n } = this.props;\n const { value } = this.state;\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n return (\n <div className=\"input-group cb-container\" ref={this.cbContainer}>\n <input\n value={value || defaultValue}\n className={classNames('form-control', className, 'cb-input')}\n ref={this.input}\n onChange={this.handleInputChange}\n placeholder={\n inputPlaceholder ||\n (options[0] != null ? options[0].title : undefined)\n }\n disabled={disabled}\n onBlur={this.handleInputBlur}\n onKeyDown={this.handleInputKeyDown}\n spellCheck={spellCheck}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-input` : undefined\n }\n />\n <div className=\"input-group-append cb-dropdown\">\n <button\n type=\"button\"\n className=\"btn cb-btn form-control\"\n ref={this.toggleButton}\n onClick={this.toggleMenu}\n onKeyDown={this.handleInputKeyDown}\n disabled={disabled}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn` : undefined\n }\n >\n <FontAwesomeIcon icon={vsTriangleDown} />\n <Popper\n ref={this.popper}\n options={popperOptions}\n className={classNames('combobox interactive')}\n onEntered={this.handleMenuOpened}\n onExited={this.handleMenuExited}\n >\n {this.renderMenuElement()}\n </Popper>\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default ComboBox;\n"],"mappings":"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"}
|
package/dist/CustomTimeSelect.js
CHANGED
|
@@ -296,7 +296,7 @@ class CustomTimeSelect extends Component {
|
|
|
296
296
|
|
|
297
297
|
var options = (_this$menuContainer$c2 = this.menuContainer.current) === null || _this$menuContainer$c2 === void 0 ? void 0 : _this$menuContainer$c2.querySelector('.cs-options');
|
|
298
298
|
|
|
299
|
-
if (options && options.children) {
|
|
299
|
+
if (options && options.children != null) {
|
|
300
300
|
var option = options.children.item(index);
|
|
301
301
|
|
|
302
302
|
if (option instanceof HTMLElement) {
|
|
@@ -399,7 +399,7 @@ class CustomTimeSelect extends Component {
|
|
|
399
399
|
|
|
400
400
|
var options = (_this$menuContainer$c3 = this.menuContainer.current) === null || _this$menuContainer$c3 === void 0 ? void 0 : _this$menuContainer$c3.querySelector('.cs-options');
|
|
401
401
|
|
|
402
|
-
if (options && options.children) {
|
|
402
|
+
if (options && options.children != null) {
|
|
403
403
|
var activeOption = options.children.item(index);
|
|
404
404
|
|
|
405
405
|
if (activeOption instanceof HTMLElement && activeOption.offsetTop > CustomTimeSelect.DROP_DOWN_MENU_HEIGHT) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomTimeSelect.js","names":["React","Component","FontAwesomeIcon","vsCheck","dhSort","TimeUtils","classNames","TimeInput","DropdownMenu","CUSTOM_OPTION","MENU_NAVIGATION_DIRECTION","CustomTimeSelect","constructor","props","value","valueToTime","toggleMenu","bind","handleMenuKeyDown","closeMenu","handleOptionClick","handleOptionFocus","handleMenuOpened","handleMenuExited","handleCustomInput","csContainer","createRef","menuContainer","button","input","state","keyboardOptionIndex","menuIsOpen","inputWidth","customTime","inputFocused","getSelectedText","options","placeholder","i","length","option","title","formatTime","setInputWidth","current","setState","getBoundingClientRect","width","focus","updateInputValue","onChange","handleResize","event","key","updateFromCustom","stopPropagation","preventDefault","shiftKey","handleMenuNavigation","UP","DOWN","direction","menuOptionsLength","newKeyboardOptionIndex","focusInput","focusOption","scrollOptionIntoView","optionIndex","Number","currentTarget","timeToValue","update","updateAndClose","target","activeOption","querySelector","HTMLElement","valueIndex","map","indexOf","index","children","item","openMenu","updateKeyboardIndex","focusButton","offsetTop","DROP_DOWN_MENU_HEIGHT","scrollTop","renderMenuElement","renderOptions","icon","customText","matchFound","optionArray","push","render","disabled","invalid","dataTestId","popperOptions","placement","modifiers","preventOverflow","enabled","menuElement","maxWidth","Math","round","time","undefined"],"sources":["../src/CustomTimeSelect.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport { PopperOptions } from 'popper.js';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsCheck, dhSort, IconDefinition } from '@deephaven/icons';\nimport { TimeUtils } from '@deephaven/utils';\nimport classNames from 'classnames';\nimport TimeInput, { TimeInputElement } from './TimeInput';\nimport DropdownMenu from './menu-actions/DropdownMenu';\nimport './CustomTimeSelect.scss';\n\nconst CUSTOM_OPTION = -1;\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\ntype CustomTimeSelectProps = {\n options: { title: string; value: number }[];\n popperOptions: PopperOptions;\n value: number | null;\n onChange(value: number): void;\n disabled: boolean;\n icon: IconDefinition;\n placeholder: string;\n customText: string;\n // Defaults to converting the value in milliseconds to time in seconds\n valueToTime(val: number | null): number;\n // Defaults to converting the time in seconds to value in milliseconds\n timeToValue(time: number): number;\n invalid: boolean;\n 'data-testid'?: string;\n};\n\ntype TimeInSeconds = number;\n\ntype CustomTimeSelectState = {\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n customTime: TimeInSeconds;\n inputFocused: boolean;\n};\n\nclass CustomTimeSelect extends Component<\n CustomTimeSelectProps,\n CustomTimeSelectState\n> {\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n static DROP_DOWN_MENU_HEIGHT = 125;\n\n static defaultProps: Partial<CustomTimeSelectProps> = {\n onChange(): void {\n // no-op\n },\n value: null,\n disabled: false,\n popperOptions: {},\n icon: vsCheck,\n customText: 'Custom',\n placeholder: 'Select a time',\n valueToTime: value => (value === null ? 0 : Math.round(value / 1000)),\n timeToValue: time => time * 1000,\n invalid: false,\n 'data-testid': undefined,\n };\n\n constructor(props: CustomTimeSelectProps) {\n super(props);\n\n const { value, valueToTime } = props;\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.closeMenu = this.closeMenu.bind(this);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleOptionFocus = this.handleOptionFocus.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n this.handleCustomInput = this.handleCustomInput.bind(this);\n\n this.csContainer = React.createRef();\n this.menuContainer = React.createRef();\n this.button = React.createRef();\n this.input = React.createRef();\n\n this.state = {\n keyboardOptionIndex: 0,\n menuIsOpen: false,\n inputWidth: 100,\n customTime: valueToTime(value),\n inputFocused: false,\n };\n }\n\n csContainer: React.RefObject<HTMLDivElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n button: React.RefObject<HTMLButtonElement>;\n\n input: React.RefObject<TimeInputElement>;\n\n getSelectedText(): string {\n const { options, value, placeholder } = this.props;\n const { customTime } = this.state;\n\n if (value === null) {\n return placeholder;\n }\n\n for (let i = 0; i < options.length; i += 1) {\n const option = options[i];\n if (option.value === value) {\n return option.title;\n }\n }\n\n return TimeUtils.formatTime(customTime);\n }\n\n setInputWidth(): void {\n if (this.csContainer.current) {\n this.setState({\n inputWidth: this.csContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n focus(): void {\n this.button.current?.focus();\n }\n\n updateInputValue(value: number): void {\n const { onChange } = this.props;\n onChange(value);\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent<HTMLDivElement>): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n\n switch (event.key) {\n case 'Enter':\n case ' ': // Space Bar\n if (inputFocused) {\n this.updateFromCustom();\n } else {\n this.updateInputValue(options[keyboardOptionIndex].value);\n }\n this.closeMenu();\n this.button.current?.focus();\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Tab':\n if (event.shiftKey) {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n } else {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n }\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Escape':\n this.closeMenu();\n break;\n default:\n break;\n }\n }\n\n handleMenuNavigation(direction: MENU_NAVIGATION_DIRECTION): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n const menuOptionsLength = options.length;\n let newKeyboardOptionIndex = keyboardOptionIndex;\n switch (direction) {\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP:\n if (!inputFocused && keyboardOptionIndex === 0) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (keyboardOptionIndex > 0 && !inputFocused) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex - 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n } else if (keyboardOptionIndex === 0) {\n newKeyboardOptionIndex = menuOptionsLength - 1;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN:\n if (!inputFocused && keyboardOptionIndex === menuOptionsLength - 1) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (\n keyboardOptionIndex < menuOptionsLength &&\n !(inputFocused && keyboardOptionIndex === 0)\n ) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex + 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n default:\n break;\n }\n }\n\n handleOptionClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const optionIndex = Number(event.currentTarget.value);\n const { options, timeToValue } = this.props;\n const { customTime } = this.state;\n\n if (optionIndex === CUSTOM_OPTION) {\n const update = timeToValue(customTime);\n this.updateAndClose(update);\n } else {\n this.updateAndClose(options[optionIndex].value);\n }\n }\n\n updateAndClose(update: number): void {\n this.updateInputValue(update);\n this.closeMenu();\n this.button.current?.focus();\n }\n\n handleOptionFocus(event: React.FocusEvent<HTMLButtonElement>): void {\n this.setState({ keyboardOptionIndex: Number(event.target.value) });\n }\n\n handleMenuOpened(): void {\n const { options, value } = this.props;\n const { keyboardOptionIndex } = this.state;\n this.scrollOptionIntoView(keyboardOptionIndex);\n const activeOption = this.menuContainer.current?.querySelector(\n '.cs-option-btn.keyboard-active'\n );\n if (activeOption instanceof HTMLElement) {\n activeOption.focus();\n }\n\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex < 0) {\n // The custom option should be selected\n this.focusInput();\n }\n }\n\n focusInput(): void {\n this.input.current?.focus();\n }\n\n focusOption(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children) {\n const option = options.children.item(index);\n if (option instanceof HTMLElement) {\n option.focus();\n }\n }\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n }\n }\n\n handleCustomInput(value: number): void {\n const { timeToValue } = this.props;\n\n const update = timeToValue(value);\n this.updateInputValue(update);\n this.setState({\n customTime: value,\n });\n }\n\n updateFromCustom(): void {\n const { timeToValue } = this.props;\n const { customTime } = this.state;\n\n const update = timeToValue(customTime);\n this.updateInputValue(update);\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n event.stopPropagation();\n }\n\n openMenu(): void {\n this.updateKeyboardIndex();\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n }\n\n closeMenu(focusButton = true): void {\n this.setState({ menuIsOpen: false });\n if (focusButton) {\n this.button.current?.focus();\n }\n }\n\n updateKeyboardIndex(): void {\n const { options, value } = this.props;\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex > 0) {\n this.setState({ keyboardOptionIndex: valueIndex });\n }\n }\n\n scrollOptionIntoView(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children) {\n const activeOption = options.children.item(index);\n if (\n activeOption instanceof HTMLElement &&\n activeOption.offsetTop > CustomTimeSelect.DROP_DOWN_MENU_HEIGHT\n ) {\n options.scrollTop =\n activeOption.offsetTop - CustomTimeSelect.DROP_DOWN_MENU_HEIGHT;\n } else if (\n (activeOption instanceof HTMLElement && activeOption.offsetTop < 0) ||\n index === 0\n ) {\n options.scrollTop = 0;\n }\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { inputWidth } = this.state;\n return (\n <div\n className=\"cs-menu-container\"\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n onClick={event => {\n event.stopPropagation();\n }}\n style={{ width: inputWidth }}\n >\n <div className=\"cs-options-container\">\n <div className=\"cs-options\">{this.renderOptions()}</div>\n </div>\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { options, value, icon, customText } = this.props;\n const { keyboardOptionIndex, customTime, inputFocused } = this.state;\n\n let matchFound = false;\n const optionArray: JSX.Element[] = [];\n for (let index = 0; index < options.length; index += 1) {\n const option = options[index];\n const key = `option-${index}-${option.value}`;\n matchFound = matchFound || option.value === value;\n optionArray.push(\n <button\n key={key}\n type=\"button\"\n value={index}\n className={classNames('cs-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index && !inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {option.value === value && (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n )}\n {option.value !== value && <span className=\"mr-4\" />}\n {option.title}\n </button>\n );\n }\n\n optionArray.push(<hr className=\"cs-divider\" key=\"option-divider\" />);\n\n optionArray.push(\n <button\n key=\"option-custom-label\"\n type=\"button\"\n value={CUSTOM_OPTION}\n className={classNames('cs-option-btn', {\n 'keyboard-active': inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {!matchFound && value !== null ? (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n ) : (\n <span className=\"mr-4\" />\n )}\n {customText}\n </button>\n );\n\n optionArray.push(\n <div key=\"cs-custom-container\" className=\"cs-custom-container\">\n <span className=\"mr-2\" />\n <TimeInput\n key=\"option-input\"\n ref={this.input}\n onChange={this.handleCustomInput}\n value={customTime}\n onFocus={() => this.setState({ inputFocused: true })}\n onBlur={() => this.setState({ inputFocused: false })}\n />\n <span className=\"ml-2\" />\n </div>\n );\n\n optionArray.push(<hr key=\"option-end\" className=\"mb-2\" />);\n\n return optionArray;\n }\n\n render(): JSX.Element {\n const { disabled, invalid, value, 'data-testid': dataTestId } = this.props;\n const { menuIsOpen } = this.state;\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n return (\n <div\n className=\"input-group cs-container context-menu\"\n ref={this.csContainer}\n data-testid={dataTestId}\n >\n <div\n className={classNames('input-group-append cs-dropdown', {\n 'cs-dropdown-invalid': invalid,\n })}\n >\n <button\n type=\"button\"\n className={classNames('btn cs-btn form-control', {\n 'cs-btn-invalid': invalid,\n })}\n ref={this.button}\n onClick={this.toggleMenu}\n disabled={disabled}\n >\n <span\n className={classNames({\n 'text-muted': value === null,\n })}\n >\n {this.getSelectedText()}\n </span>\n <span>\n <FontAwesomeIcon icon={dhSort} className=\"cs-caret\" />\n </span>\n <DropdownMenu\n isShown={menuIsOpen}\n actions={{ menuElement: this.renderMenuElement() }}\n popperOptions={popperOptions}\n popperClassName=\"CustomTimeSelect\"\n onMenuOpened={this.handleMenuOpened}\n onMenuClosed={this.handleMenuExited}\n menuStyle={{ maxWidth: '100rem' }}\n />\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomTimeSelect;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CustomTimeSelect.js","names":["React","Component","FontAwesomeIcon","vsCheck","dhSort","TimeUtils","classNames","TimeInput","DropdownMenu","CUSTOM_OPTION","MENU_NAVIGATION_DIRECTION","CustomTimeSelect","constructor","props","value","valueToTime","toggleMenu","bind","handleMenuKeyDown","closeMenu","handleOptionClick","handleOptionFocus","handleMenuOpened","handleMenuExited","handleCustomInput","csContainer","createRef","menuContainer","button","input","state","keyboardOptionIndex","menuIsOpen","inputWidth","customTime","inputFocused","getSelectedText","options","placeholder","i","length","option","title","formatTime","setInputWidth","current","setState","getBoundingClientRect","width","focus","updateInputValue","onChange","handleResize","event","key","updateFromCustom","stopPropagation","preventDefault","shiftKey","handleMenuNavigation","UP","DOWN","direction","menuOptionsLength","newKeyboardOptionIndex","focusInput","focusOption","scrollOptionIntoView","optionIndex","Number","currentTarget","timeToValue","update","updateAndClose","target","activeOption","querySelector","HTMLElement","valueIndex","map","indexOf","index","children","item","openMenu","updateKeyboardIndex","focusButton","offsetTop","DROP_DOWN_MENU_HEIGHT","scrollTop","renderMenuElement","renderOptions","icon","customText","matchFound","optionArray","push","render","disabled","invalid","dataTestId","popperOptions","placement","modifiers","preventOverflow","enabled","menuElement","maxWidth","Math","round","time","undefined"],"sources":["../src/CustomTimeSelect.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport { PopperOptions } from 'popper.js';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsCheck, dhSort, IconDefinition } from '@deephaven/icons';\nimport { TimeUtils } from '@deephaven/utils';\nimport classNames from 'classnames';\nimport TimeInput, { TimeInputElement } from './TimeInput';\nimport DropdownMenu from './menu-actions/DropdownMenu';\nimport './CustomTimeSelect.scss';\n\nconst CUSTOM_OPTION = -1;\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\ntype CustomTimeSelectProps = {\n options: { title: string; value: number }[];\n popperOptions: PopperOptions;\n value: number | null;\n onChange(value: number): void;\n disabled: boolean;\n icon: IconDefinition;\n placeholder: string;\n customText: string;\n // Defaults to converting the value in milliseconds to time in seconds\n valueToTime(val: number | null): number;\n // Defaults to converting the time in seconds to value in milliseconds\n timeToValue(time: number): number;\n invalid: boolean;\n 'data-testid'?: string;\n};\n\ntype TimeInSeconds = number;\n\ntype CustomTimeSelectState = {\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n customTime: TimeInSeconds;\n inputFocused: boolean;\n};\n\nclass CustomTimeSelect extends Component<\n CustomTimeSelectProps,\n CustomTimeSelectState\n> {\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n static DROP_DOWN_MENU_HEIGHT = 125;\n\n static defaultProps: Partial<CustomTimeSelectProps> = {\n onChange(): void {\n // no-op\n },\n value: null,\n disabled: false,\n popperOptions: {},\n icon: vsCheck,\n customText: 'Custom',\n placeholder: 'Select a time',\n valueToTime: value => (value === null ? 0 : Math.round(value / 1000)),\n timeToValue: time => time * 1000,\n invalid: false,\n 'data-testid': undefined,\n };\n\n constructor(props: CustomTimeSelectProps) {\n super(props);\n\n const { value, valueToTime } = props;\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.closeMenu = this.closeMenu.bind(this);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleOptionFocus = this.handleOptionFocus.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n this.handleCustomInput = this.handleCustomInput.bind(this);\n\n this.csContainer = React.createRef();\n this.menuContainer = React.createRef();\n this.button = React.createRef();\n this.input = React.createRef();\n\n this.state = {\n keyboardOptionIndex: 0,\n menuIsOpen: false,\n inputWidth: 100,\n customTime: valueToTime(value),\n inputFocused: false,\n };\n }\n\n csContainer: React.RefObject<HTMLDivElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n button: React.RefObject<HTMLButtonElement>;\n\n input: React.RefObject<TimeInputElement>;\n\n getSelectedText(): string {\n const { options, value, placeholder } = this.props;\n const { customTime } = this.state;\n\n if (value === null) {\n return placeholder;\n }\n\n for (let i = 0; i < options.length; i += 1) {\n const option = options[i];\n if (option.value === value) {\n return option.title;\n }\n }\n\n return TimeUtils.formatTime(customTime);\n }\n\n setInputWidth(): void {\n if (this.csContainer.current) {\n this.setState({\n inputWidth: this.csContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n focus(): void {\n this.button.current?.focus();\n }\n\n updateInputValue(value: number): void {\n const { onChange } = this.props;\n onChange(value);\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent<HTMLDivElement>): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n\n switch (event.key) {\n case 'Enter':\n case ' ': // Space Bar\n if (inputFocused) {\n this.updateFromCustom();\n } else {\n this.updateInputValue(options[keyboardOptionIndex].value);\n }\n this.closeMenu();\n this.button.current?.focus();\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Tab':\n if (event.shiftKey) {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n } else {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n }\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Escape':\n this.closeMenu();\n break;\n default:\n break;\n }\n }\n\n handleMenuNavigation(direction: MENU_NAVIGATION_DIRECTION): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n const menuOptionsLength = options.length;\n let newKeyboardOptionIndex = keyboardOptionIndex;\n switch (direction) {\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP:\n if (!inputFocused && keyboardOptionIndex === 0) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (keyboardOptionIndex > 0 && !inputFocused) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex - 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n } else if (keyboardOptionIndex === 0) {\n newKeyboardOptionIndex = menuOptionsLength - 1;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN:\n if (!inputFocused && keyboardOptionIndex === menuOptionsLength - 1) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (\n keyboardOptionIndex < menuOptionsLength &&\n !(inputFocused && keyboardOptionIndex === 0)\n ) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex + 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n default:\n break;\n }\n }\n\n handleOptionClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const optionIndex = Number(event.currentTarget.value);\n const { options, timeToValue } = this.props;\n const { customTime } = this.state;\n\n if (optionIndex === CUSTOM_OPTION) {\n const update = timeToValue(customTime);\n this.updateAndClose(update);\n } else {\n this.updateAndClose(options[optionIndex].value);\n }\n }\n\n updateAndClose(update: number): void {\n this.updateInputValue(update);\n this.closeMenu();\n this.button.current?.focus();\n }\n\n handleOptionFocus(event: React.FocusEvent<HTMLButtonElement>): void {\n this.setState({ keyboardOptionIndex: Number(event.target.value) });\n }\n\n handleMenuOpened(): void {\n const { options, value } = this.props;\n const { keyboardOptionIndex } = this.state;\n this.scrollOptionIntoView(keyboardOptionIndex);\n const activeOption = this.menuContainer.current?.querySelector(\n '.cs-option-btn.keyboard-active'\n );\n if (activeOption instanceof HTMLElement) {\n activeOption.focus();\n }\n\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex < 0) {\n // The custom option should be selected\n this.focusInput();\n }\n }\n\n focusInput(): void {\n this.input.current?.focus();\n }\n\n focusOption(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children != null) {\n const option = options.children.item(index);\n if (option instanceof HTMLElement) {\n option.focus();\n }\n }\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n }\n }\n\n handleCustomInput(value: number): void {\n const { timeToValue } = this.props;\n\n const update = timeToValue(value);\n this.updateInputValue(update);\n this.setState({\n customTime: value,\n });\n }\n\n updateFromCustom(): void {\n const { timeToValue } = this.props;\n const { customTime } = this.state;\n\n const update = timeToValue(customTime);\n this.updateInputValue(update);\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n event.stopPropagation();\n }\n\n openMenu(): void {\n this.updateKeyboardIndex();\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n }\n\n closeMenu(focusButton = true): void {\n this.setState({ menuIsOpen: false });\n if (focusButton) {\n this.button.current?.focus();\n }\n }\n\n updateKeyboardIndex(): void {\n const { options, value } = this.props;\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex > 0) {\n this.setState({ keyboardOptionIndex: valueIndex });\n }\n }\n\n scrollOptionIntoView(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children != null) {\n const activeOption = options.children.item(index);\n if (\n activeOption instanceof HTMLElement &&\n activeOption.offsetTop > CustomTimeSelect.DROP_DOWN_MENU_HEIGHT\n ) {\n options.scrollTop =\n activeOption.offsetTop - CustomTimeSelect.DROP_DOWN_MENU_HEIGHT;\n } else if (\n (activeOption instanceof HTMLElement && activeOption.offsetTop < 0) ||\n index === 0\n ) {\n options.scrollTop = 0;\n }\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { inputWidth } = this.state;\n return (\n <div\n className=\"cs-menu-container\"\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n onClick={event => {\n event.stopPropagation();\n }}\n style={{ width: inputWidth }}\n >\n <div className=\"cs-options-container\">\n <div className=\"cs-options\">{this.renderOptions()}</div>\n </div>\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { options, value, icon, customText } = this.props;\n const { keyboardOptionIndex, customTime, inputFocused } = this.state;\n\n let matchFound = false;\n const optionArray: JSX.Element[] = [];\n for (let index = 0; index < options.length; index += 1) {\n const option = options[index];\n const key = `option-${index}-${option.value}`;\n matchFound = matchFound || option.value === value;\n optionArray.push(\n <button\n key={key}\n type=\"button\"\n value={index}\n className={classNames('cs-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index && !inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {option.value === value && (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n )}\n {option.value !== value && <span className=\"mr-4\" />}\n {option.title}\n </button>\n );\n }\n\n optionArray.push(<hr className=\"cs-divider\" key=\"option-divider\" />);\n\n optionArray.push(\n <button\n key=\"option-custom-label\"\n type=\"button\"\n value={CUSTOM_OPTION}\n className={classNames('cs-option-btn', {\n 'keyboard-active': inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {!matchFound && value !== null ? (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n ) : (\n <span className=\"mr-4\" />\n )}\n {customText}\n </button>\n );\n\n optionArray.push(\n <div key=\"cs-custom-container\" className=\"cs-custom-container\">\n <span className=\"mr-2\" />\n <TimeInput\n key=\"option-input\"\n ref={this.input}\n onChange={this.handleCustomInput}\n value={customTime}\n onFocus={() => this.setState({ inputFocused: true })}\n onBlur={() => this.setState({ inputFocused: false })}\n />\n <span className=\"ml-2\" />\n </div>\n );\n\n optionArray.push(<hr key=\"option-end\" className=\"mb-2\" />);\n\n return optionArray;\n }\n\n render(): JSX.Element {\n const { disabled, invalid, value, 'data-testid': dataTestId } = this.props;\n const { menuIsOpen } = this.state;\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n return (\n <div\n className=\"input-group cs-container context-menu\"\n ref={this.csContainer}\n data-testid={dataTestId}\n >\n <div\n className={classNames('input-group-append cs-dropdown', {\n 'cs-dropdown-invalid': invalid,\n })}\n >\n <button\n type=\"button\"\n className={classNames('btn cs-btn form-control', {\n 'cs-btn-invalid': invalid,\n })}\n ref={this.button}\n onClick={this.toggleMenu}\n disabled={disabled}\n >\n <span\n className={classNames({\n 'text-muted': value === null,\n })}\n >\n {this.getSelectedText()}\n </span>\n <span>\n <FontAwesomeIcon icon={dhSort} className=\"cs-caret\" />\n </span>\n <DropdownMenu\n isShown={menuIsOpen}\n actions={{ menuElement: this.renderMenuElement() }}\n popperOptions={popperOptions}\n popperClassName=\"CustomTimeSelect\"\n onMenuOpened={this.handleMenuOpened}\n onMenuClosed={this.handleMenuExited}\n menuStyle={{ maxWidth: '100rem' }}\n />\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomTimeSelect;\n"],"mappings":"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"}
|
|
@@ -61,7 +61,7 @@ declare class DraggableItemList<T> extends PureComponent<DraggableItemListProps<
|
|
|
61
61
|
text?: string;
|
|
62
62
|
}): React.ReactNode;
|
|
63
63
|
static renderTextItem({ text, badgeText, className, }: {
|
|
64
|
-
text
|
|
64
|
+
text?: string;
|
|
65
65
|
badgeText?: string;
|
|
66
66
|
className: string;
|
|
67
67
|
}): JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DraggableItemList.d.ts","sourceRoot":"","sources":["../src/DraggableItemList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,OAAO,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAwB,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAGhF,OAAO,EAAc,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,QAAQ,EAAE,EACf,eAAe,EACf,eAAe,EACf,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,OAAO,0BAA0B,CAAC;AAElC,oBAAY,wBAAwB,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,aAAK,qBAAqB,CAAC,CAAC,IAAI,CAC9B,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC,KAC/B,KAAK,CAAC,SAAS,CAAC;AAErB,aAAK,sBAAsB,CAAC,CAAC,IAAI,IAAI,CACnC,aAAa,CAAC,CAAC,CAAC,EAChB,eAAe,GAAG,eAAe,GAAG,cAAc,CACnD,GAAG;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,OAAO,CAAC;IAExB,cAAc,EAAE,OAAO,CAAC;IAExB,UAAU,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACrC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC;IAG3B,eAAe,EAAE,MAAM,CAAC;IAExB,WAAW,EAAE,MAAM,CAAC;IAEpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,aAAK,sBAAsB,GAAG;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF;;;;;;GAMG;AACH,cAAM,iBAAiB,CAAC,CAAC,CAAE,SAAQ,aAAa,CAC9C,sBAAsB,CAAC,CAAC,CAAC,EACzB,sBAAsB,CACvB;IACC,MAAM,CAAC,kBAAkB,SAAM;IAE/B,MAAM,CAAC,YAAY;;;;;;;;;;;;;;yBAcA,IAAI;oBAGT,IAAI;6BAGK,IAAI;4BAGL,IAAI;;;;;;MAQxB;IAEF,MAAM,CAAC,YAAY,IAAI,GAAG,CAAC,OAAO;IASlC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,KAAK,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"DraggableItemList.d.ts","sourceRoot":"","sources":["../src/DraggableItemList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -31,7 +31,7 @@ class DraggableItemList extends PureComponent {
|
|
|
31
31
|
var {
|
|
32
32
|
text
|
|
33
33
|
} = _ref;
|
|
34
|
-
return text ? /*#__PURE__*/React.createElement("span", {
|
|
34
|
+
return text != null && text.length > 0 ? /*#__PURE__*/React.createElement("span", {
|
|
35
35
|
className: "number-badge"
|
|
36
36
|
}, text) : null;
|
|
37
37
|
}
|
|
@@ -52,14 +52,16 @@ class DraggableItemList extends PureComponent {
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
static renderItem(_ref3) {
|
|
55
|
+
var _ref4, _item$displayValue;
|
|
56
|
+
|
|
55
57
|
var {
|
|
56
58
|
item,
|
|
57
59
|
isClone,
|
|
58
60
|
selectedCount
|
|
59
61
|
} = _ref3;
|
|
60
|
-
var text = item
|
|
61
|
-
var badgeText = isClone ? "".concat(selectedCount) : '';
|
|
62
|
-
var className = isClone ? 'item-list-item-clone' : '';
|
|
62
|
+
var text = item != null ? (_ref4 = (_item$displayValue = item.displayValue) !== null && _item$displayValue !== void 0 ? _item$displayValue : item.value) !== null && _ref4 !== void 0 ? _ref4 : "".concat(item) : '';
|
|
63
|
+
var badgeText = isClone !== undefined && isClone ? "".concat(selectedCount) : '';
|
|
64
|
+
var className = isClone !== undefined && isClone ? 'item-list-item-clone' : '';
|
|
63
65
|
return DraggableItemList.renderTextItem({
|
|
64
66
|
text,
|
|
65
67
|
badgeText,
|
|
@@ -72,7 +74,8 @@ class DraggableItemList extends PureComponent {
|
|
|
72
74
|
}
|
|
73
75
|
|
|
74
76
|
static getDraggableIndex(draggableId) {
|
|
75
|
-
|
|
77
|
+
var num = draggableId.split('/').pop();
|
|
78
|
+
return parseInt(num !== undefined ? num : '', 10);
|
|
76
79
|
}
|
|
77
80
|
|
|
78
81
|
constructor(props) {
|
|
@@ -102,14 +105,14 @@ class DraggableItemList extends PureComponent {
|
|
|
102
105
|
max: ItemList.CACHE_SIZE
|
|
103
106
|
}));
|
|
104
107
|
|
|
105
|
-
_defineProperty(this, "getCachedRenderDraggableItem", memoize((draggablePrefix, isDragDisabled, renderItem) =>
|
|
108
|
+
_defineProperty(this, "getCachedRenderDraggableItem", memoize((draggablePrefix, isDragDisabled, renderItem) => _ref5 => {
|
|
106
109
|
var {
|
|
107
110
|
item,
|
|
108
111
|
itemIndex,
|
|
109
112
|
isFocused,
|
|
110
113
|
isSelected,
|
|
111
114
|
style
|
|
112
|
-
} =
|
|
115
|
+
} = _ref5;
|
|
113
116
|
return this.getCachedDraggableItem(draggablePrefix, renderItem, item, itemIndex, isFocused, isSelected, isDragDisabled, style);
|
|
114
117
|
}, {
|
|
115
118
|
max: 1
|