@deephaven/components 1.22.1 → 1.22.2-alpha-pivot-builder.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AutoCompleteInput.js +41 -79
- package/dist/AutoCompleteInput.js.map +1 -1
- package/dist/AutoResizeTextarea.js +29 -13
- package/dist/AutoResizeTextarea.js.map +1 -1
- package/dist/BasicModal.js +17 -15
- package/dist/BasicModal.js.map +1 -1
- package/dist/BulkActionBar.js +3 -5
- package/dist/BulkActionBar.js.map +1 -1
- package/dist/Button.js +24 -25
- package/dist/Button.js.map +1 -1
- package/dist/CardFlip.js +4 -6
- package/dist/CardFlip.js.map +1 -1
- package/dist/Checkbox.js +22 -13
- package/dist/Checkbox.js.map +1 -1
- package/dist/Collapse.js +6 -9
- package/dist/Collapse.js.map +1 -1
- package/dist/CopyButton.js +14 -6
- package/dist/CopyButton.js.map +1 -1
- package/dist/CustomTimeSelect.js +49 -88
- package/dist/CustomTimeSelect.js.map +1 -1
- package/dist/DateInput.js +25 -10
- package/dist/DateInput.js.map +1 -1
- package/dist/DateInputUtils.js +1 -3
- package/dist/DateInputUtils.js.map +1 -1
- package/dist/DateTimeInput.js +28 -12
- package/dist/DateTimeInput.js.map +1 -1
- package/dist/DebouncedSearchInput.js +10 -19
- package/dist/DebouncedSearchInput.js.map +1 -1
- package/dist/DragUtils.js +15 -6
- package/dist/DragUtils.js.map +1 -1
- package/dist/DraggableItemList.js +42 -57
- package/dist/DraggableItemList.js.map +1 -1
- package/dist/EditableItemList.js +28 -13
- package/dist/EditableItemList.js.map +1 -1
- package/dist/ErrorBoundary.js +6 -11
- package/dist/ErrorBoundary.js.map +1 -1
- package/dist/ErrorView.js +20 -8
- package/dist/ErrorView.js.map +1 -1
- package/dist/HierarchicalCheckboxMenu.js +30 -28
- package/dist/HierarchicalCheckboxMenu.js.map +1 -1
- package/dist/ItemList.js +96 -168
- package/dist/ItemList.js.map +1 -1
- package/dist/ItemListItem.js +46 -60
- package/dist/ItemListItem.js.map +1 -1
- package/dist/LoadingOverlay.js +13 -9
- package/dist/LoadingOverlay.js.map +1 -1
- package/dist/LoadingSpinner.js +3 -4
- package/dist/LoadingSpinner.js.map +1 -1
- package/dist/MaskedInput.js +44 -41
- package/dist/MaskedInput.js.map +1 -1
- package/dist/MaskedInputUtils.js +1 -3
- package/dist/MaskedInputUtils.js.map +1 -1
- package/dist/Option.js +1 -3
- package/dist/Option.js.map +1 -1
- package/dist/RadioGroup.js +17 -9
- package/dist/RadioGroup.js.map +1 -1
- package/dist/RadioItem.js +25 -14
- package/dist/RadioItem.js.map +1 -1
- package/dist/RandomAreaPlotAnimation.js +17 -13
- package/dist/RandomAreaPlotAnimation.js.map +1 -1
- package/dist/SearchInput.js +13 -14
- package/dist/SearchInput.js.map +1 -1
- package/dist/SearchableCombobox.js +3 -5
- package/dist/SearchableCombobox.js.map +1 -1
- package/dist/Select.js +5 -7
- package/dist/Select.js.map +1 -1
- package/dist/SelectValueList.js +21 -30
- package/dist/SelectValueList.js.map +1 -1
- package/dist/SocketedButton.js +18 -17
- package/dist/SocketedButton.js.map +1 -1
- package/dist/SplitButtonGroup.js +4 -6
- package/dist/SplitButtonGroup.js.map +1 -1
- package/dist/TableViewEmptyState.js +14 -6
- package/dist/TableViewEmptyState.js.map +1 -1
- package/dist/TextWithTooltip.js +3 -4
- package/dist/TextWithTooltip.js.map +1 -1
- package/dist/TimeInput.js +29 -12
- package/dist/TimeInput.js.map +1 -1
- package/dist/TimeSlider.js +46 -38
- package/dist/TimeSlider.js.map +1 -1
- package/dist/ToastNotification.js +9 -10
- package/dist/ToastNotification.js.map +1 -1
- package/dist/UISwitch.js +8 -9
- package/dist/UISwitch.js.map +1 -1
- package/dist/actions/ConfirmActionButton.js +7 -9
- package/dist/actions/ConfirmActionButton.js.map +1 -1
- package/dist/actions/IconActionButton.js +3 -5
- package/dist/actions/IconActionButton.js.map +1 -1
- package/dist/context-actions/ContextActionUtils.js +1 -3
- package/dist/context-actions/ContextActionUtils.js.map +1 -1
- package/dist/context-actions/ContextActions.js +8 -18
- package/dist/context-actions/ContextActions.js.map +1 -1
- package/dist/context-actions/ContextMenu.js +53 -89
- package/dist/context-actions/ContextMenu.js.map +1 -1
- package/dist/context-actions/ContextMenuItem.js +11 -11
- package/dist/context-actions/ContextMenuItem.js.map +1 -1
- package/dist/context-actions/ContextMenuRoot.js +6 -11
- package/dist/context-actions/ContextMenuRoot.js.map +1 -1
- package/dist/context-actions/GlobalContextAction.js +2 -6
- package/dist/context-actions/GlobalContextAction.js.map +1 -1
- package/dist/context-actions/GlobalContextActions.js +4 -7
- package/dist/context-actions/GlobalContextActions.js.map +1 -1
- package/dist/dialogs/ActionButtonDialogTrigger.js +7 -9
- package/dist/dialogs/ActionButtonDialogTrigger.js.map +1 -1
- package/dist/dialogs/ConfirmationDialog.js +8 -11
- package/dist/dialogs/ConfirmationDialog.js.map +1 -1
- package/dist/menu-actions/DropdownMenu.js +12 -22
- package/dist/menu-actions/DropdownMenu.js.map +1 -1
- package/dist/menu-actions/Menu.js +19 -45
- package/dist/menu-actions/Menu.js.map +1 -1
- package/dist/modal/DebouncedModal.js +8 -9
- package/dist/modal/DebouncedModal.js.map +1 -1
- package/dist/modal/InfoModal.js +6 -7
- package/dist/modal/InfoModal.js.map +1 -1
- package/dist/modal/Modal.js +27 -15
- package/dist/modal/Modal.js.map +1 -1
- package/dist/modal/ModalBody.js +4 -6
- package/dist/modal/ModalBody.js.map +1 -1
- package/dist/modal/ModalFooter.js +3 -5
- package/dist/modal/ModalFooter.js.map +1 -1
- package/dist/modal/ModalHeader.js +7 -8
- package/dist/modal/ModalHeader.js.map +1 -1
- package/dist/navigation/DashboardList.js +17 -6
- package/dist/navigation/DashboardList.js.map +1 -1
- package/dist/navigation/Menu.js +4 -5
- package/dist/navigation/Menu.js.map +1 -1
- package/dist/navigation/MenuItem.js +7 -10
- package/dist/navigation/MenuItem.js.map +1 -1
- package/dist/navigation/NavTab.js +14 -17
- package/dist/navigation/NavTab.js.map +1 -1
- package/dist/navigation/NavTabList.js +39 -33
- package/dist/navigation/NavTabList.js.map +1 -1
- package/dist/navigation/Page.js +5 -7
- package/dist/navigation/Page.js.map +1 -1
- package/dist/navigation/Stack.js +20 -7
- package/dist/navigation/Stack.js.map +1 -1
- package/dist/popper/Popper.js +30 -57
- package/dist/popper/Popper.js.map +1 -1
- package/dist/popper/Tooltip.js +24 -54
- package/dist/popper/Tooltip.js.map +1 -1
- package/dist/shortcuts/Shortcut.js +10 -15
- package/dist/shortcuts/Shortcut.js.map +1 -1
- package/dist/shortcuts/ShortcutRegistry.js +1 -3
- package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
- package/dist/spectrum/ActionGroup.js +7 -9
- package/dist/spectrum/ActionGroup.js.map +1 -1
- package/dist/spectrum/ActionMenu.js +3 -5
- package/dist/spectrum/ActionMenu.js.map +1 -1
- package/dist/spectrum/CheckboxGroup.js +1 -3
- package/dist/spectrum/CheckboxGroup.js.map +1 -1
- package/dist/spectrum/Heading.js +2 -4
- package/dist/spectrum/Heading.js.map +1 -1
- package/dist/spectrum/ItemContent.js +16 -10
- package/dist/spectrum/ItemContent.js.map +1 -1
- package/dist/spectrum/ItemTooltip.js +2 -4
- package/dist/spectrum/ItemTooltip.js.map +1 -1
- package/dist/spectrum/TabPanels.js +3 -4
- package/dist/spectrum/TabPanels.js.map +1 -1
- package/dist/spectrum/Text.js +2 -4
- package/dist/spectrum/Text.js.map +1 -1
- package/dist/spectrum/View.js +11 -14
- package/dist/spectrum/View.js.map +1 -1
- package/dist/spectrum/comboBox/ComboBox.js +5 -9
- package/dist/spectrum/comboBox/ComboBox.js.map +1 -1
- package/dist/spectrum/comboBox/ComboBoxNormalized.js +3 -7
- package/dist/spectrum/comboBox/ComboBoxNormalized.js.map +1 -1
- package/dist/spectrum/listView/ListView.js +11 -11
- package/dist/spectrum/listView/ListView.js.map +1 -1
- package/dist/spectrum/listView/ListViewNormalized.js +22 -24
- package/dist/spectrum/listView/ListViewNormalized.js.map +1 -1
- package/dist/spectrum/listView/ListViewWrapper.js +11 -15
- package/dist/spectrum/listView/ListViewWrapper.js.map +1 -1
- package/dist/spectrum/multiSelect/MultiSelect.js +113 -100
- package/dist/spectrum/multiSelect/MultiSelect.js.map +1 -1
- package/dist/spectrum/multiSelect/MultiSelectListBox.js +9 -11
- package/dist/spectrum/multiSelect/MultiSelectListBox.js.map +1 -1
- package/dist/spectrum/multiSelect/MultiSelectNormalized.js +3 -7
- package/dist/spectrum/multiSelect/MultiSelectNormalized.js.map +1 -1
- package/dist/spectrum/multiSelect/MultiSelectTag.js +5 -7
- package/dist/spectrum/multiSelect/MultiSelectTag.js.map +1 -1
- package/dist/spectrum/multiSelect/useMultiSelectFilter.js +20 -14
- package/dist/spectrum/multiSelect/useMultiSelectFilter.js.map +1 -1
- package/dist/spectrum/multiSelect/useMultiSelectKeyboard.js +27 -20
- package/dist/spectrum/multiSelect/useMultiSelectKeyboard.js.map +1 -1
- package/dist/spectrum/multiSelect/useMultiSelectLoadingSpinner.js +14 -7
- package/dist/spectrum/multiSelect/useMultiSelectLoadingSpinner.js.map +1 -1
- package/dist/spectrum/multiSelect/useMultiSelectNormalizedProps.js +20 -22
- package/dist/spectrum/multiSelect/useMultiSelectNormalizedProps.js.map +1 -1
- package/dist/spectrum/multiSelect/useMultiSelectScrollListener.js +13 -6
- package/dist/spectrum/multiSelect/useMultiSelectScrollListener.js.map +1 -1
- package/dist/spectrum/multiSelect/useMultiSelectState.js +16 -9
- package/dist/spectrum/multiSelect/useMultiSelectState.js.map +1 -1
- package/dist/spectrum/picker/Picker.js +5 -9
- package/dist/spectrum/picker/Picker.js.map +1 -1
- package/dist/spectrum/picker/PickerNormalized.js +2 -6
- package/dist/spectrum/picker/PickerNormalized.js.map +1 -1
- package/dist/spectrum/picker/usePickerItemScale.js +2 -3
- package/dist/spectrum/picker/usePickerItemScale.js.map +1 -1
- package/dist/spectrum/picker/usePickerNormalizedProps.js +31 -33
- package/dist/spectrum/picker/usePickerNormalizedProps.js.map +1 -1
- package/dist/spectrum/picker/usePickerProps.js +26 -29
- package/dist/spectrum/picker/usePickerProps.js.map +1 -1
- package/dist/spectrum/picker/usePickerScrollOnOpen.js +6 -9
- package/dist/spectrum/picker/usePickerScrollOnOpen.js.map +1 -1
- package/dist/spectrum/utils/itemUtils.js +4 -6
- package/dist/spectrum/utils/itemUtils.js.map +1 -1
- package/dist/spectrum/utils/propsUtils.js +35 -37
- package/dist/spectrum/utils/propsUtils.js.map +1 -1
- package/dist/spectrum/utils/themeUtils.js +5 -7
- package/dist/spectrum/utils/themeUtils.js.map +1 -1
- package/dist/spectrum/utils/useOnChangeTrackUncontrolled.js +13 -6
- package/dist/spectrum/utils/useOnChangeTrackUncontrolled.js.map +1 -1
- package/dist/spectrum/utils/useRenderNormalizedItem.js +5 -7
- package/dist/spectrum/utils/useRenderNormalizedItem.js.map +1 -1
- package/dist/spectrum/utils/useStaticItemInitialScrollPosition.js +4 -6
- package/dist/spectrum/utils/useStaticItemInitialScrollPosition.js.map +1 -1
- package/dist/spectrum/utils/useStringifiedMultiSelection.js +5 -7
- package/dist/spectrum/utils/useStringifiedMultiSelection.js.map +1 -1
- package/dist/spectrum/utils/useStringifiedSelection.js +5 -7
- package/dist/spectrum/utils/useStringifiedSelection.js.map +1 -1
- package/dist/theme/FontBootstrap.js +13 -5
- package/dist/theme/FontBootstrap.js.map +1 -1
- package/dist/theme/FontsLoaded.js +1 -3
- package/dist/theme/FontsLoaded.js.map +1 -1
- package/dist/theme/Logo.js +2 -4
- package/dist/theme/Logo.js.map +1 -1
- package/dist/theme/SpectrumThemeProvider.js +17 -9
- package/dist/theme/SpectrumThemeProvider.js.map +1 -1
- package/dist/theme/ThemePicker.js +4 -5
- package/dist/theme/ThemePicker.js.map +1 -1
- package/dist/theme/ThemeProvider.js +20 -8
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/ThemeUtils.js +35 -19
- package/dist/theme/ThemeUtils.js.map +1 -1
- package/dist/theme/useExternalTheme.js +16 -7
- package/dist/theme/useExternalTheme.js.map +1 -1
- package/dist/transitions/FadeTransition.js +5 -6
- package/dist/transitions/FadeTransition.js.map +1 -1
- package/dist/transitions/SlideTransition.js +6 -7
- package/dist/transitions/SlideTransition.js.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HierarchicalCheckboxMenu.js","names":["React","Component","FontAwesomeIcon","classNames","Checkbox","Popper","Button","jsx","_jsx","jsxs","_jsxs","HierarchicalCheckboxMenu","isParentSelected","parent","valueMap","children","get","undefined","includesTrue","Array","from","values","includes","includesFalse","constructor","props","toggleMenu","bind","toggleValueFor","selectAll","clear","state","menuIsOpen","event","stopPropagation","preventDefault","setState","child","onUpdateValueMap","map","Map","newChildren","set","parentSelected","newChildValue","forEach","_","key","currentChildren","setAllValues","value","copy","renderMenuElement","dataTestId","className","entries","_ref","checked","onChange","_ref2","kind","onClick","concat","render","menuText","icon","id","type","options","placement","isShown","onExited","closeOnBlur","interactive","_defineProperty"],"sources":["../src/HierarchicalCheckboxMenu.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { type IconDefinition } from '@deephaven/icons';\nimport classNames from 'classnames';\nimport Checkbox from './Checkbox';\nimport Popper from './popper/Popper';\nimport './HierarchicalCheckboxMenu.scss';\nimport Button from './Button';\n\nexport type HierarchicalCheckboxValueMap = Map<\n string,\n boolean | Map<string, boolean>\n>;\n\ntype HierarchicalCheckboxMenuProps = {\n className: string;\n menuText: string;\n valueMap: HierarchicalCheckboxValueMap;\n onUpdateValueMap: (map: HierarchicalCheckboxValueMap) => void;\n icon: IconDefinition | null;\n id: string;\n 'data-testid'?: string;\n};\n\ntype HierarchicalCheckboxMenuState = {\n menuIsOpen: boolean;\n};\n\n/**\n * A pull down menu that displays a hierarchy of checkboxes.\n *\n * Currently supports only two levels of check boxes. The input should be a Map\n * where the keys are the parent names. The values can a boolean if the parent\n * has no children or another Map where keys are child names and values are booleans.\n *\n * Here is an example:\n * const INITIAL_TYPE_MAP = new Map([\n * ['Queries', new Map([['Live', true], ['Batch', true]])],\n * [\n * 'DBA Queries',\n * new Map([\n * ['Data Merge', true],\n * ['Data Validation', true],\n * ['Imports', true],\n * ['Data Services', true],\n * ]),\n * ],\n * ['Helper Queries', true],\n * ]);\n *\n * When a checkbox is changed, this component will make a deep copy of the Map\n * with the appropriate booleans changed. It will then call onUpdateValueMap\n * with the new Map.\n */\nclass HierarchicalCheckboxMenu extends Component<\n HierarchicalCheckboxMenuProps,\n HierarchicalCheckboxMenuState\n> {\n static defaultProps: Partial<HierarchicalCheckboxMenuProps> = {\n className: '',\n icon: null,\n id: '',\n 'data-testid': undefined,\n };\n\n static isParentSelected(\n parent: string,\n valueMap: HierarchicalCheckboxValueMap\n ): boolean | null {\n const children = valueMap.get(parent);\n if (children === undefined) {\n return false;\n }\n if (typeof children === 'boolean') {\n // This parent has no children\n return children;\n }\n const includesTrue = Array.from(children.values()).includes(true);\n const includesFalse = Array.from(children.values()).includes(false);\n if (includesTrue && includesFalse) {\n // Indeterminate\n return null;\n }\n return includesTrue;\n }\n\n constructor(props: HierarchicalCheckboxMenuProps) {\n super(props);\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.toggleValueFor = this.toggleValueFor.bind(this);\n this.selectAll = this.selectAll.bind(this);\n this.clear = this.clear.bind(this);\n\n this.state = {\n menuIsOpen: false,\n };\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n event.stopPropagation();\n event.preventDefault();\n this.setState(state => {\n const { menuIsOpen } = state;\n return { menuIsOpen: !menuIsOpen };\n });\n }\n\n toggleValueFor(parent: string, child?: string): void {\n const { valueMap, onUpdateValueMap } = this.props;\n\n // Make a deep copy of the Map and toggle the boolean for parent / child\n const map = new Map(valueMap);\n const children = map.get(parent);\n if (children instanceof Map) {\n const newChildren = new Map(children);\n if (child != null) {\n newChildren.set(child, children.get(child) !== true);\n } else {\n const parentSelected = HierarchicalCheckboxMenu.isParentSelected(\n parent,\n map\n );\n const newChildValue = parentSelected == null || !parentSelected;\n children.forEach((_, key) => newChildren.set(key, newChildValue));\n }\n map.set(parent, newChildren);\n } else {\n map.set(parent, children == null || !children);\n }\n\n // The parent was clicked so all children must be toggled\n const currentChildren = map.get(parent);\n if (\n child === undefined &&\n currentChildren !== undefined &&\n typeof currentChildren !== 'boolean'\n ) {\n const parentSelected = HierarchicalCheckboxMenu.isParentSelected(\n parent,\n valueMap\n );\n if (parentSelected != null && parentSelected) {\n currentChildren.forEach((_, key) => currentChildren.set(key, false));\n } else {\n // for parent selection of false or null (indeterminate), select everything\n currentChildren.forEach((_, key) => currentChildren.set(key, true));\n }\n }\n\n onUpdateValueMap(map);\n }\n\n setAllValues(value: boolean): void {\n const { valueMap, onUpdateValueMap } = this.props;\n\n // Make a deep copy of the Map and set everything\n const copy = new Map();\n valueMap.forEach((child, parent) => {\n if (typeof child === 'boolean') {\n copy.set(parent, value);\n } else {\n const children = new Map();\n child.forEach((_, key) => children.set(key, value));\n copy.set(parent, children);\n }\n });\n\n onUpdateValueMap(copy);\n }\n\n selectAll(): void {\n this.setAllValues(true);\n }\n\n clear(): void {\n this.setAllValues(false);\n }\n\n renderMenuElement(): JSX.Element {\n const { valueMap, 'data-testid': dataTestId } = this.props;\n return (\n <div className=\"hcm-menu-container\">\n {Array.from(valueMap.entries()).map(([parent, children]) => (\n <div key={parent}>\n <Checkbox\n className=\"hcm-parent\"\n checked={HierarchicalCheckboxMenu.isParentSelected(\n parent,\n valueMap\n )}\n onChange={() => this.toggleValueFor(parent)}\n >\n {parent}\n </Checkbox>\n {children !== undefined &&\n typeof children !== 'boolean' &&\n Array.from(children.entries()).map(([child, value]) => (\n <Checkbox\n className=\"hcm-child\"\n key={child}\n checked={value}\n onChange={() => this.toggleValueFor(parent, child)}\n >\n {child}\n </Checkbox>\n ))}\n </div>\n ))}\n <Button\n kind=\"ghost\"\n onClick={this.selectAll}\n data-testid={\n dataTestId !== undefined\n ? `${dataTestId}-btn-select-all`\n : undefined\n }\n >\n Select All\n </Button>\n <Button\n kind=\"ghost\"\n onClick={this.clear}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn-clear` : undefined\n }\n >\n Clear\n </Button>\n </div>\n );\n }\n\n render(): JSX.Element {\n const {\n menuText,\n className,\n icon,\n id,\n 'data-testid': dataTestId,\n } = this.props;\n const { menuIsOpen } = this.state;\n\n return (\n <button\n type=\"button\"\n className={classNames('btn hcm-btn', className)}\n onClick={this.toggleMenu}\n id={id}\n data-testid={dataTestId}\n >\n <span>\n {icon && <FontAwesomeIcon icon={icon} className=\"hcm-icon mr-1\" />}\n {menuText}\n </span>\n <span className=\"cs-caret\" />\n <Popper\n options={{ placement: 'bottom' }}\n isShown={menuIsOpen}\n onExited={() => {\n this.setState({ menuIsOpen: false });\n }}\n closeOnBlur\n interactive\n >\n {this.renderMenuElement()}\n </Popper>\n </button>\n );\n }\n}\n\nexport default HierarchicalCheckboxMenu;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"HierarchicalCheckboxMenu.js","names":["React","Component","FontAwesomeIcon","classNames","Checkbox","Popper","Button","jsx","_jsx","jsxs","_jsxs","HierarchicalCheckboxMenu","isParentSelected","parent","valueMap","children","get","undefined","includesTrue","Array","from","values","includes","includesFalse","constructor","props","toggleMenu","bind","toggleValueFor","selectAll","clear","state","menuIsOpen","event","stopPropagation","preventDefault","setState","child","_this$props","onUpdateValueMap","map","Map","newChildren","set","parentSelected","newChildValue","forEach","_","key","currentChildren","setAllValues","value","_this$props2","copy","renderMenuElement","_this$props3","dataTestId","className","entries","_ref","_ref2","_slicedToArray","checked","onChange","_ref3","_ref4","kind","onClick","concat","render","_this$props4","menuText","icon","id","type","options","placement","isShown","onExited","closeOnBlur","interactive","_defineProperty"],"sources":["../src/HierarchicalCheckboxMenu.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { type IconDefinition } from '@deephaven/icons';\nimport classNames from 'classnames';\nimport Checkbox from './Checkbox';\nimport Popper from './popper/Popper';\nimport './HierarchicalCheckboxMenu.scss';\nimport Button from './Button';\n\nexport type HierarchicalCheckboxValueMap = Map<\n string,\n boolean | Map<string, boolean>\n>;\n\ntype HierarchicalCheckboxMenuProps = {\n className: string;\n menuText: string;\n valueMap: HierarchicalCheckboxValueMap;\n onUpdateValueMap: (map: HierarchicalCheckboxValueMap) => void;\n icon: IconDefinition | null;\n id: string;\n 'data-testid'?: string;\n};\n\ntype HierarchicalCheckboxMenuState = {\n menuIsOpen: boolean;\n};\n\n/**\n * A pull down menu that displays a hierarchy of checkboxes.\n *\n * Currently supports only two levels of check boxes. The input should be a Map\n * where the keys are the parent names. The values can a boolean if the parent\n * has no children or another Map where keys are child names and values are booleans.\n *\n * Here is an example:\n * const INITIAL_TYPE_MAP = new Map([\n * ['Queries', new Map([['Live', true], ['Batch', true]])],\n * [\n * 'DBA Queries',\n * new Map([\n * ['Data Merge', true],\n * ['Data Validation', true],\n * ['Imports', true],\n * ['Data Services', true],\n * ]),\n * ],\n * ['Helper Queries', true],\n * ]);\n *\n * When a checkbox is changed, this component will make a deep copy of the Map\n * with the appropriate booleans changed. It will then call onUpdateValueMap\n * with the new Map.\n */\nclass HierarchicalCheckboxMenu extends Component<\n HierarchicalCheckboxMenuProps,\n HierarchicalCheckboxMenuState\n> {\n static defaultProps: Partial<HierarchicalCheckboxMenuProps> = {\n className: '',\n icon: null,\n id: '',\n 'data-testid': undefined,\n };\n\n static isParentSelected(\n parent: string,\n valueMap: HierarchicalCheckboxValueMap\n ): boolean | null {\n const children = valueMap.get(parent);\n if (children === undefined) {\n return false;\n }\n if (typeof children === 'boolean') {\n // This parent has no children\n return children;\n }\n const includesTrue = Array.from(children.values()).includes(true);\n const includesFalse = Array.from(children.values()).includes(false);\n if (includesTrue && includesFalse) {\n // Indeterminate\n return null;\n }\n return includesTrue;\n }\n\n constructor(props: HierarchicalCheckboxMenuProps) {\n super(props);\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.toggleValueFor = this.toggleValueFor.bind(this);\n this.selectAll = this.selectAll.bind(this);\n this.clear = this.clear.bind(this);\n\n this.state = {\n menuIsOpen: false,\n };\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n event.stopPropagation();\n event.preventDefault();\n this.setState(state => {\n const { menuIsOpen } = state;\n return { menuIsOpen: !menuIsOpen };\n });\n }\n\n toggleValueFor(parent: string, child?: string): void {\n const { valueMap, onUpdateValueMap } = this.props;\n\n // Make a deep copy of the Map and toggle the boolean for parent / child\n const map = new Map(valueMap);\n const children = map.get(parent);\n if (children instanceof Map) {\n const newChildren = new Map(children);\n if (child != null) {\n newChildren.set(child, children.get(child) !== true);\n } else {\n const parentSelected = HierarchicalCheckboxMenu.isParentSelected(\n parent,\n map\n );\n const newChildValue = parentSelected == null || !parentSelected;\n children.forEach((_, key) => newChildren.set(key, newChildValue));\n }\n map.set(parent, newChildren);\n } else {\n map.set(parent, children == null || !children);\n }\n\n // The parent was clicked so all children must be toggled\n const currentChildren = map.get(parent);\n if (\n child === undefined &&\n currentChildren !== undefined &&\n typeof currentChildren !== 'boolean'\n ) {\n const parentSelected = HierarchicalCheckboxMenu.isParentSelected(\n parent,\n valueMap\n );\n if (parentSelected != null && parentSelected) {\n currentChildren.forEach((_, key) => currentChildren.set(key, false));\n } else {\n // for parent selection of false or null (indeterminate), select everything\n currentChildren.forEach((_, key) => currentChildren.set(key, true));\n }\n }\n\n onUpdateValueMap(map);\n }\n\n setAllValues(value: boolean): void {\n const { valueMap, onUpdateValueMap } = this.props;\n\n // Make a deep copy of the Map and set everything\n const copy = new Map();\n valueMap.forEach((child, parent) => {\n if (typeof child === 'boolean') {\n copy.set(parent, value);\n } else {\n const children = new Map();\n child.forEach((_, key) => children.set(key, value));\n copy.set(parent, children);\n }\n });\n\n onUpdateValueMap(copy);\n }\n\n selectAll(): void {\n this.setAllValues(true);\n }\n\n clear(): void {\n this.setAllValues(false);\n }\n\n renderMenuElement(): JSX.Element {\n const { valueMap, 'data-testid': dataTestId } = this.props;\n return (\n <div className=\"hcm-menu-container\">\n {Array.from(valueMap.entries()).map(([parent, children]) => (\n <div key={parent}>\n <Checkbox\n className=\"hcm-parent\"\n checked={HierarchicalCheckboxMenu.isParentSelected(\n parent,\n valueMap\n )}\n onChange={() => this.toggleValueFor(parent)}\n >\n {parent}\n </Checkbox>\n {children !== undefined &&\n typeof children !== 'boolean' &&\n Array.from(children.entries()).map(([child, value]) => (\n <Checkbox\n className=\"hcm-child\"\n key={child}\n checked={value}\n onChange={() => this.toggleValueFor(parent, child)}\n >\n {child}\n </Checkbox>\n ))}\n </div>\n ))}\n <Button\n kind=\"ghost\"\n onClick={this.selectAll}\n data-testid={\n dataTestId !== undefined\n ? `${dataTestId}-btn-select-all`\n : undefined\n }\n >\n Select All\n </Button>\n <Button\n kind=\"ghost\"\n onClick={this.clear}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn-clear` : undefined\n }\n >\n Clear\n </Button>\n </div>\n );\n }\n\n render(): JSX.Element {\n const {\n menuText,\n className,\n icon,\n id,\n 'data-testid': dataTestId,\n } = this.props;\n const { menuIsOpen } = this.state;\n\n return (\n <button\n type=\"button\"\n className={classNames('btn hcm-btn', className)}\n onClick={this.toggleMenu}\n id={id}\n data-testid={dataTestId}\n >\n <span>\n {icon && <FontAwesomeIcon icon={icon} className=\"hcm-icon mr-1\" />}\n {menuText}\n </span>\n <span className=\"cs-caret\" />\n <Popper\n options={{ placement: 'bottom' }}\n isShown={menuIsOpen}\n onExited={() => {\n this.setState({ menuIsOpen: false });\n }}\n closeOnBlur\n interactive\n >\n {this.renderMenuElement()}\n </Popper>\n </button>\n );\n }\n}\n\nexport default HierarchicalCheckboxMenu;\n"],"mappings":"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","ignoreList":[]}
|
package/dist/ItemList.js
CHANGED
|
@@ -24,9 +24,7 @@ var MIN_DRAG_DELTA = 5;
|
|
|
24
24
|
export class ItemList extends PureComponent {
|
|
25
25
|
static renderItem(_ref) {
|
|
26
26
|
var _ref2, _item$displayValue;
|
|
27
|
-
var
|
|
28
|
-
item
|
|
29
|
-
} = _ref;
|
|
27
|
+
var item = _ref.item;
|
|
30
28
|
return /*#__PURE__*/_jsx("div", {
|
|
31
29
|
className: "item-list-item-content",
|
|
32
30
|
children: item != null && ((_ref2 = (_item$displayValue = item.displayValue) !== null && _item$displayValue !== void 0 ? _item$displayValue : item.value) !== null && _ref2 !== void 0 ? _ref2 : "".concat(item))
|
|
@@ -115,10 +113,8 @@ export class ItemList extends PureComponent {
|
|
|
115
113
|
this.renderInnerElement = this.renderInnerElement.bind(this);
|
|
116
114
|
this.list = /*#__PURE__*/React.createRef();
|
|
117
115
|
this.listContainer = /*#__PURE__*/React.createRef();
|
|
118
|
-
var
|
|
119
|
-
|
|
120
|
-
selectedRanges: _selectedRanges
|
|
121
|
-
} = _props;
|
|
116
|
+
var isStickyBottom = _props.isStickyBottom,
|
|
117
|
+
_selectedRanges = _props.selectedRanges;
|
|
122
118
|
this.state = {
|
|
123
119
|
focusIndex: null,
|
|
124
120
|
mouseDownIndex: null,
|
|
@@ -133,17 +129,15 @@ export class ItemList extends PureComponent {
|
|
|
133
129
|
};
|
|
134
130
|
}
|
|
135
131
|
componentDidUpdate(prevProps, prevState) {
|
|
136
|
-
var
|
|
137
|
-
selectedRanges
|
|
138
|
-
itemCount
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
selectedRanges
|
|
146
|
-
} = this.state;
|
|
132
|
+
var _this$props = this.props,
|
|
133
|
+
propSelectedRanges = _this$props.selectedRanges,
|
|
134
|
+
itemCount = _this$props.itemCount;
|
|
135
|
+
var _this$state = this.state,
|
|
136
|
+
focusIndex = _this$state.focusIndex,
|
|
137
|
+
isStuckToBottom = _this$state.isStuckToBottom,
|
|
138
|
+
scrollOffset = _this$state.scrollOffset,
|
|
139
|
+
height = _this$state.height,
|
|
140
|
+
selectedRanges = _this$state.selectedRanges;
|
|
147
141
|
if (isStuckToBottom && !this.isListAtBottom() && itemCount > 0) {
|
|
148
142
|
this.scrollToBottom();
|
|
149
143
|
}
|
|
@@ -153,15 +147,11 @@ export class ItemList extends PureComponent {
|
|
|
153
147
|
if (propSelectedRanges !== prevProps.selectedRanges && propSelectedRanges !== selectedRanges) {
|
|
154
148
|
this.setSelectedRanges(propSelectedRanges);
|
|
155
149
|
} else if (selectedRanges !== prevState.selectedRanges) {
|
|
156
|
-
var
|
|
157
|
-
onSelectionChange
|
|
158
|
-
} = this.props;
|
|
150
|
+
var onSelectionChange = this.props.onSelectionChange;
|
|
159
151
|
onSelectionChange(selectedRanges);
|
|
160
152
|
}
|
|
161
153
|
if (focusIndex !== prevState.focusIndex) {
|
|
162
|
-
var
|
|
163
|
-
onFocusChange
|
|
164
|
-
} = this.props;
|
|
154
|
+
var onFocusChange = this.props.onFocusChange;
|
|
165
155
|
onFocusChange(focusIndex);
|
|
166
156
|
}
|
|
167
157
|
}
|
|
@@ -173,9 +163,7 @@ export class ItemList extends PureComponent {
|
|
|
173
163
|
(_this$listContainer$c = this.listContainer.current) === null || _this$listContainer$c === void 0 || _this$listContainer$c.focus();
|
|
174
164
|
}
|
|
175
165
|
restoreScrollPosition() {
|
|
176
|
-
var
|
|
177
|
-
scrollOffset
|
|
178
|
-
} = this.state;
|
|
166
|
+
var scrollOffset = this.state.scrollOffset;
|
|
179
167
|
if (scrollOffset != null) {
|
|
180
168
|
var _this$listContainer$c2;
|
|
181
169
|
// manually restore the scroll containers offset
|
|
@@ -187,20 +175,14 @@ export class ItemList extends PureComponent {
|
|
|
187
175
|
if (this.listContainer.current == null) {
|
|
188
176
|
return null;
|
|
189
177
|
}
|
|
190
|
-
var
|
|
191
|
-
|
|
192
|
-
} = this.props;
|
|
193
|
-
var {
|
|
194
|
-
overscanStartIndex
|
|
195
|
-
} = this.state;
|
|
178
|
+
var focusSelector = this.props.focusSelector;
|
|
179
|
+
var overscanStartIndex = this.state.overscanStartIndex;
|
|
196
180
|
var elements = this.listContainer.current.querySelectorAll(focusSelector);
|
|
197
181
|
var elementIndex = itemIndex - overscanStartIndex;
|
|
198
182
|
return elements[elementIndex];
|
|
199
183
|
}
|
|
200
184
|
focusItem(itemIndex) {
|
|
201
|
-
var
|
|
202
|
-
disableSelect
|
|
203
|
-
} = this.props;
|
|
185
|
+
var disableSelect = this.props.disableSelect;
|
|
204
186
|
if (disableSelect) return;
|
|
205
187
|
this.setState({
|
|
206
188
|
focusIndex: itemIndex
|
|
@@ -224,9 +206,7 @@ export class ItemList extends PureComponent {
|
|
|
224
206
|
});
|
|
225
207
|
|
|
226
208
|
// Update the selection, but don't consume the mouse event - it will trigger the context menu
|
|
227
|
-
var
|
|
228
|
-
selectedRanges
|
|
229
|
-
} = this.state;
|
|
209
|
+
var selectedRanges = this.state.selectedRanges;
|
|
230
210
|
var isSelected = RangeUtils.isSelected(selectedRanges, itemIndex);
|
|
231
211
|
|
|
232
212
|
// When right-clicking, we want to maintain the current selection if the right click happened within the selection even if the modifier key isn't down
|
|
@@ -234,15 +214,12 @@ export class ItemList extends PureComponent {
|
|
|
234
214
|
this.toggleSelect(itemIndex, e.shiftKey, isModifierDown, false);
|
|
235
215
|
}
|
|
236
216
|
handleItemDoubleClick(itemIndex, e) {
|
|
237
|
-
var
|
|
238
|
-
isDoubleClickSelect,
|
|
239
|
-
onSelect
|
|
240
|
-
} = this.props;
|
|
217
|
+
var _this$props2 = this.props,
|
|
218
|
+
isDoubleClickSelect = _this$props2.isDoubleClickSelect,
|
|
219
|
+
onSelect = _this$props2.onSelect;
|
|
241
220
|
if (isDoubleClickSelect) {
|
|
242
221
|
this.setState(_ref3 => {
|
|
243
|
-
var
|
|
244
|
-
selectedRanges
|
|
245
|
-
} = _ref3;
|
|
222
|
+
var selectedRanges = _ref3.selectedRanges;
|
|
246
223
|
return {
|
|
247
224
|
selectedRanges: RangeUtils.selectRange(selectedRanges, [itemIndex, itemIndex])
|
|
248
225
|
};
|
|
@@ -252,9 +229,7 @@ export class ItemList extends PureComponent {
|
|
|
252
229
|
}
|
|
253
230
|
}
|
|
254
231
|
handleItemMouseDown(index, e) {
|
|
255
|
-
var
|
|
256
|
-
selectedRanges
|
|
257
|
-
} = this.state;
|
|
232
|
+
var selectedRanges = this.state.selectedRanges;
|
|
258
233
|
if (e.target instanceof HTMLElement && ['button', 'select', 'input', 'textarea'].indexOf(e.target.tagName.toLowerCase()) !== -1) {
|
|
259
234
|
// allow these elements to do their own behaviours
|
|
260
235
|
return;
|
|
@@ -289,9 +264,7 @@ export class ItemList extends PureComponent {
|
|
|
289
264
|
handleItemFocus(itemIndex, e) {
|
|
290
265
|
log.debug2('item focus', itemIndex, e.target);
|
|
291
266
|
this.setState(state => {
|
|
292
|
-
var
|
|
293
|
-
focusIndex
|
|
294
|
-
} = state;
|
|
267
|
+
var focusIndex = state.focusIndex;
|
|
295
268
|
if (focusIndex !== itemIndex) {
|
|
296
269
|
return {
|
|
297
270
|
focusIndex: itemIndex
|
|
@@ -301,17 +274,15 @@ export class ItemList extends PureComponent {
|
|
|
301
274
|
});
|
|
302
275
|
}
|
|
303
276
|
handleItemMouseMove(itemIndex, e) {
|
|
304
|
-
var
|
|
305
|
-
isDragSelect,
|
|
306
|
-
isMultiSelect,
|
|
307
|
-
disableSelect
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
mouseY
|
|
314
|
-
} = this.state;
|
|
277
|
+
var _this$props3 = this.props,
|
|
278
|
+
isDragSelect = _this$props3.isDragSelect,
|
|
279
|
+
isMultiSelect = _this$props3.isMultiSelect,
|
|
280
|
+
disableSelect = _this$props3.disableSelect;
|
|
281
|
+
var _this$state2 = this.state,
|
|
282
|
+
mouseDownIndex = _this$state2.mouseDownIndex,
|
|
283
|
+
selectedRanges = _this$state2.selectedRanges,
|
|
284
|
+
mouseX = _this$state2.mouseX,
|
|
285
|
+
mouseY = _this$state2.mouseY;
|
|
315
286
|
if (mouseDownIndex == null || disableSelect) return;
|
|
316
287
|
var mouseMoveX = Math.abs(e.clientX - (mouseX !== null && mouseX !== void 0 ? mouseX : 0));
|
|
317
288
|
var mouseMoveY = Math.abs(e.clientY - (mouseY !== null && mouseY !== void 0 ? mouseY : 0));
|
|
@@ -334,15 +305,13 @@ export class ItemList extends PureComponent {
|
|
|
334
305
|
}
|
|
335
306
|
}
|
|
336
307
|
handleItemMouseUp(index, e) {
|
|
337
|
-
var
|
|
338
|
-
isDeselectOnClick,
|
|
339
|
-
isDoubleClickSelect,
|
|
340
|
-
onSelect
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
isDragging
|
|
345
|
-
} = this.state;
|
|
308
|
+
var _this$props4 = this.props,
|
|
309
|
+
isDeselectOnClick = _this$props4.isDeselectOnClick,
|
|
310
|
+
isDoubleClickSelect = _this$props4.isDoubleClickSelect,
|
|
311
|
+
onSelect = _this$props4.onSelect;
|
|
312
|
+
var _this$state3 = this.state,
|
|
313
|
+
mouseDownIndex = _this$state3.mouseDownIndex,
|
|
314
|
+
isDragging = _this$state3.isDragging;
|
|
346
315
|
if (e.target instanceof HTMLElement && ['button', 'select', 'input', 'textarea'].indexOf(e.target.tagName.toLowerCase()) !== -1) {
|
|
347
316
|
return;
|
|
348
317
|
}
|
|
@@ -358,17 +327,13 @@ export class ItemList extends PureComponent {
|
|
|
358
327
|
this.resetMouseState();
|
|
359
328
|
}
|
|
360
329
|
handleItemsRendered(_ref4) {
|
|
361
|
-
var
|
|
362
|
-
overscanStartIndex
|
|
363
|
-
} = _ref4;
|
|
330
|
+
var overscanStartIndex = _ref4.overscanStartIndex;
|
|
364
331
|
this.setState({
|
|
365
332
|
overscanStartIndex
|
|
366
333
|
});
|
|
367
334
|
}
|
|
368
335
|
handleResize(_ref5) {
|
|
369
|
-
var
|
|
370
|
-
height
|
|
371
|
-
} = _ref5;
|
|
336
|
+
var height = _ref5.height;
|
|
372
337
|
this.setState({
|
|
373
338
|
height
|
|
374
339
|
});
|
|
@@ -383,14 +348,11 @@ export class ItemList extends PureComponent {
|
|
|
383
348
|
window.removeEventListener('mouseup', this.handleWindowMouseUp);
|
|
384
349
|
}
|
|
385
350
|
handleKeyDown(e) {
|
|
386
|
-
var
|
|
387
|
-
isMultiSelect,
|
|
388
|
-
itemCount,
|
|
389
|
-
onSelect
|
|
390
|
-
|
|
391
|
-
var {
|
|
392
|
-
focusIndex: oldFocus
|
|
393
|
-
} = this.state;
|
|
351
|
+
var _this$props5 = this.props,
|
|
352
|
+
isMultiSelect = _this$props5.isMultiSelect,
|
|
353
|
+
itemCount = _this$props5.itemCount,
|
|
354
|
+
onSelect = _this$props5.onSelect;
|
|
355
|
+
var oldFocus = this.state.focusIndex;
|
|
394
356
|
var newFocus = oldFocus;
|
|
395
357
|
if (e.key === 'Enter' || e.key === ' ') {
|
|
396
358
|
if (!isMultiSelect && newFocus != null) {
|
|
@@ -423,9 +385,7 @@ export class ItemList extends PureComponent {
|
|
|
423
385
|
e.stopPropagation();
|
|
424
386
|
e.preventDefault();
|
|
425
387
|
this.focusItem(newFocus);
|
|
426
|
-
var
|
|
427
|
-
selectedRanges
|
|
428
|
-
} = this.state;
|
|
388
|
+
var selectedRanges = this.state.selectedRanges;
|
|
429
389
|
if (e.shiftKey && selectedRanges.length > 0) {
|
|
430
390
|
var lastRange = selectedRanges[selectedRanges.length - 1];
|
|
431
391
|
this.selectRange([Math.min(newFocus, lastRange[0]), Math.max(newFocus, lastRange[1])]);
|
|
@@ -442,10 +402,8 @@ export class ItemList extends PureComponent {
|
|
|
442
402
|
}
|
|
443
403
|
}
|
|
444
404
|
handleScroll(_ref6) {
|
|
445
|
-
var
|
|
446
|
-
|
|
447
|
-
scrollOffset
|
|
448
|
-
} = _ref6;
|
|
405
|
+
var scrollUpdateWasRequested = _ref6.scrollUpdateWasRequested,
|
|
406
|
+
scrollOffset = _ref6.scrollOffset;
|
|
449
407
|
this.setState(state => {
|
|
450
408
|
if (scrollUpdateWasRequested) {
|
|
451
409
|
// The scroll was caused by scrollTo() or scrollToItem()
|
|
@@ -454,12 +412,8 @@ export class ItemList extends PureComponent {
|
|
|
454
412
|
scrollOffset
|
|
455
413
|
};
|
|
456
414
|
}
|
|
457
|
-
var
|
|
458
|
-
|
|
459
|
-
} = this.props;
|
|
460
|
-
var {
|
|
461
|
-
height
|
|
462
|
-
} = state;
|
|
415
|
+
var isStickyBottom = this.props.isStickyBottom;
|
|
416
|
+
var height = state.height;
|
|
463
417
|
var isStuckToBottom = isStickyBottom && this.isListAtBottom({
|
|
464
418
|
scrollOffset,
|
|
465
419
|
height
|
|
@@ -477,9 +431,7 @@ export class ItemList extends PureComponent {
|
|
|
477
431
|
});
|
|
478
432
|
}
|
|
479
433
|
scrollToBottom() {
|
|
480
|
-
var
|
|
481
|
-
itemCount
|
|
482
|
-
} = this.props;
|
|
434
|
+
var itemCount = this.props.itemCount;
|
|
483
435
|
if (this.list.current) {
|
|
484
436
|
this.list.current.scrollToItem(itemCount);
|
|
485
437
|
}
|
|
@@ -498,12 +450,8 @@ export class ItemList extends PureComponent {
|
|
|
498
450
|
*/
|
|
499
451
|
toggleSelect(index, isShiftDown, isModifierDown) {
|
|
500
452
|
var isDeselectable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
|
|
501
|
-
var
|
|
502
|
-
|
|
503
|
-
} = this.props;
|
|
504
|
-
var {
|
|
505
|
-
selectedRanges
|
|
506
|
-
} = this.state;
|
|
453
|
+
var isMultiSelect = this.props.isMultiSelect;
|
|
454
|
+
var selectedRanges = this.state.selectedRanges;
|
|
507
455
|
if (isMultiSelect && isShiftDown && selectedRanges.length > 0) {
|
|
508
456
|
var lastRange = selectedRanges[selectedRanges.length - 1];
|
|
509
457
|
this.selectRange([Math.min(lastRange[0], index), Math.max(index, lastRange[1])]);
|
|
@@ -525,9 +473,7 @@ export class ItemList extends PureComponent {
|
|
|
525
473
|
}
|
|
526
474
|
}
|
|
527
475
|
deselectAll() {
|
|
528
|
-
var
|
|
529
|
-
itemCount
|
|
530
|
-
} = this.props;
|
|
476
|
+
var itemCount = this.props.itemCount;
|
|
531
477
|
this.deselectRange([0, itemCount]);
|
|
532
478
|
}
|
|
533
479
|
deselectItem(index) {
|
|
@@ -536,27 +482,21 @@ export class ItemList extends PureComponent {
|
|
|
536
482
|
deselectRange(range) {
|
|
537
483
|
RangeUtils.validateRange(range);
|
|
538
484
|
this.setState(_ref7 => {
|
|
539
|
-
var
|
|
540
|
-
selectedRanges
|
|
541
|
-
} = _ref7;
|
|
485
|
+
var selectedRanges = _ref7.selectedRanges;
|
|
542
486
|
return {
|
|
543
487
|
selectedRanges: RangeUtils.deselectRange(selectedRanges, range)
|
|
544
488
|
};
|
|
545
489
|
});
|
|
546
490
|
}
|
|
547
491
|
selectItem(index) {
|
|
548
|
-
var
|
|
549
|
-
disableSelect
|
|
550
|
-
} = this.props;
|
|
492
|
+
var disableSelect = this.props.disableSelect;
|
|
551
493
|
if (disableSelect) return;
|
|
552
494
|
this.selectRange([index, index]);
|
|
553
495
|
}
|
|
554
496
|
selectRange(range) {
|
|
555
497
|
RangeUtils.validateRange(range);
|
|
556
498
|
this.setState(_ref8 => {
|
|
557
|
-
var
|
|
558
|
-
selectedRanges
|
|
559
|
-
} = _ref8;
|
|
499
|
+
var selectedRanges = _ref8.selectedRanges;
|
|
560
500
|
return {
|
|
561
501
|
selectedRanges: RangeUtils.selectRange(selectedRanges, range)
|
|
562
502
|
};
|
|
@@ -568,49 +508,41 @@ export class ItemList extends PureComponent {
|
|
|
568
508
|
});
|
|
569
509
|
}
|
|
570
510
|
sendViewportUpdate() {
|
|
571
|
-
var
|
|
572
|
-
scrollOffset,
|
|
573
|
-
height
|
|
574
|
-
} = this.state;
|
|
511
|
+
var _this$state4 = this.state,
|
|
512
|
+
scrollOffset = _this$state4.scrollOffset,
|
|
513
|
+
height = _this$state4.height;
|
|
575
514
|
if (scrollOffset != null && height != null) {
|
|
576
|
-
var
|
|
577
|
-
onViewportChange,
|
|
578
|
-
rowHeight
|
|
579
|
-
} = this.props;
|
|
515
|
+
var _this$props6 = this.props,
|
|
516
|
+
onViewportChange = _this$props6.onViewportChange,
|
|
517
|
+
rowHeight = _this$props6.rowHeight;
|
|
580
518
|
var topRow = Math.floor(scrollOffset / rowHeight);
|
|
581
519
|
var bottomRow = topRow + Math.ceil(height / rowHeight);
|
|
582
520
|
onViewportChange(topRow, bottomRow);
|
|
583
521
|
}
|
|
584
522
|
}
|
|
585
523
|
isListAtBottom() {
|
|
586
|
-
var
|
|
587
|
-
scrollOffset,
|
|
588
|
-
height
|
|
589
|
-
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state;
|
|
524
|
+
var _ref9 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state,
|
|
525
|
+
scrollOffset = _ref9.scrollOffset,
|
|
526
|
+
height = _ref9.height;
|
|
590
527
|
if (height == null || scrollOffset == null) {
|
|
591
528
|
return false;
|
|
592
529
|
}
|
|
593
|
-
var
|
|
594
|
-
itemCount,
|
|
595
|
-
rowHeight
|
|
596
|
-
} = this.props;
|
|
530
|
+
var _this$props7 = this.props,
|
|
531
|
+
itemCount = _this$props7.itemCount,
|
|
532
|
+
rowHeight = _this$props7.rowHeight;
|
|
597
533
|
return scrollOffset + height >= itemCount * rowHeight;
|
|
598
534
|
}
|
|
599
|
-
renderInnerElement(
|
|
600
|
-
var
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
var {
|
|
611
|
-
focusIndex,
|
|
612
|
-
selectedRanges
|
|
613
|
-
} = this.state;
|
|
535
|
+
renderInnerElement(_ref0) {
|
|
536
|
+
var itemIndex = _ref0.index,
|
|
537
|
+
style = _ref0.style;
|
|
538
|
+
var _this$props8 = this.props,
|
|
539
|
+
items = _this$props8.items,
|
|
540
|
+
offset = _this$props8.offset,
|
|
541
|
+
renderItem = _this$props8.renderItem,
|
|
542
|
+
disableSelect = _this$props8.disableSelect;
|
|
543
|
+
var _this$state5 = this.state,
|
|
544
|
+
focusIndex = _this$state5.focusIndex,
|
|
545
|
+
selectedRanges = _this$state5.selectedRanges;
|
|
614
546
|
if (itemIndex < offset || itemIndex >= offset + items.length) {
|
|
615
547
|
return null;
|
|
616
548
|
}
|
|
@@ -618,26 +550,22 @@ export class ItemList extends PureComponent {
|
|
|
618
550
|
return this.getCachedItem(itemIndex, itemIndex, item, itemIndex === focusIndex && !disableSelect, this.getItemSelected(itemIndex, selectedRanges), renderItem, style, disableSelect);
|
|
619
551
|
}
|
|
620
552
|
render() {
|
|
621
|
-
var
|
|
622
|
-
items,
|
|
623
|
-
itemCount,
|
|
624
|
-
overscanCount,
|
|
625
|
-
renderItem,
|
|
626
|
-
rowHeight,
|
|
627
|
-
'data-testid'
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
isStuckToBottom
|
|
632
|
-
} = this.state;
|
|
553
|
+
var _this$props9 = this.props,
|
|
554
|
+
items = _this$props9.items,
|
|
555
|
+
itemCount = _this$props9.itemCount,
|
|
556
|
+
overscanCount = _this$props9.overscanCount,
|
|
557
|
+
renderItem = _this$props9.renderItem,
|
|
558
|
+
rowHeight = _this$props9.rowHeight,
|
|
559
|
+
dataTestId = _this$props9['data-testid'];
|
|
560
|
+
var _this$state6 = this.state,
|
|
561
|
+
selectedRanges = _this$state6.selectedRanges,
|
|
562
|
+
isStuckToBottom = _this$state6.isStuckToBottom;
|
|
633
563
|
return /*#__PURE__*/_jsx(AutoSizer, {
|
|
634
564
|
className: "item-list-auto-sizer",
|
|
635
565
|
onResize: this.handleResize,
|
|
636
|
-
children:
|
|
637
|
-
var
|
|
638
|
-
|
|
639
|
-
height
|
|
640
|
-
} = _ref0;
|
|
566
|
+
children: _ref1 => {
|
|
567
|
+
var width = _ref1.width,
|
|
568
|
+
height = _ref1.height;
|
|
641
569
|
return /*#__PURE__*/_jsx(List, {
|
|
642
570
|
className: "item-list-scroll-pane",
|
|
643
571
|
height: height,
|