@deephaven/components 0.5.2-beta.0 → 0.6.1-demo.8
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 +410 -448
- package/dist/AutoCompleteInput.js.map +1 -1
- package/dist/AutoResizeTextarea.js +17 -46
- package/dist/AutoResizeTextarea.js.map +1 -1
- package/dist/BasicModal.js +18 -19
- package/dist/BasicModal.js.map +1 -1
- package/dist/Button.js +30 -21
- package/dist/Button.js.map +1 -1
- package/dist/ButtonGroup.js +6 -4
- package/dist/ButtonGroup.js.map +1 -1
- package/dist/ButtonOld.js +10 -8
- package/dist/ButtonOld.js.map +1 -1
- package/dist/CardFlip.js +10 -8
- package/dist/CardFlip.js.map +1 -1
- package/dist/Checkbox.js +18 -31
- package/dist/Checkbox.js.map +1 -1
- package/dist/Collapse.js +65 -105
- package/dist/Collapse.js.map +1 -1
- package/dist/ComboBox.js +432 -460
- package/dist/ComboBox.js.map +1 -1
- package/dist/CustomTimeSelect.js +485 -517
- package/dist/CustomTimeSelect.js.map +1 -1
- package/dist/DebouncedSearchInput.js +61 -91
- package/dist/DebouncedSearchInput.js.map +1 -1
- package/dist/DeephavenSpinner.js +6 -6
- package/dist/DeephavenSpinner.js.map +1 -1
- package/dist/DragUtils.js +65 -113
- package/dist/DragUtils.js.map +1 -1
- package/dist/DraggableItemList.d.ts +1 -0
- package/dist/DraggableItemList.d.ts.map +1 -1
- package/dist/DraggableItemList.js +219 -257
- package/dist/DraggableItemList.js.map +1 -1
- package/dist/HierarchicalCheckboxMenu.js +160 -227
- package/dist/HierarchicalCheckboxMenu.js.map +1 -1
- package/dist/ItemList.d.ts +4 -2
- package/dist/ItemList.d.ts.map +1 -1
- package/dist/ItemList.js +595 -598
- package/dist/ItemList.js.map +1 -1
- package/dist/ItemListItem.js +194 -215
- package/dist/ItemListItem.js.map +1 -1
- package/dist/LoadingOverlay.js +9 -10
- package/dist/LoadingOverlay.js.map +1 -1
- package/dist/LoadingSpinner.js +4 -3
- package/dist/LoadingSpinner.js.map +1 -1
- package/dist/MaskedInput.js +59 -70
- package/dist/MaskedInput.js.map +1 -1
- package/dist/Option.js +5 -3
- package/dist/Option.js.map +1 -1
- package/dist/RadioGroup.js +16 -34
- package/dist/RadioGroup.js.map +1 -1
- package/dist/RadioItem.js +14 -33
- package/dist/RadioItem.js.map +1 -1
- package/dist/SearchInput.js +42 -75
- package/dist/SearchInput.js.map +1 -1
- package/dist/Select.js +10 -8
- package/dist/Select.js.map +1 -1
- package/dist/SelectValueList.js +97 -134
- package/dist/SelectValueList.js.map +1 -1
- package/dist/SocketedButton.js +13 -11
- package/dist/SocketedButton.js.map +1 -1
- package/dist/ThemeExport.js.map +1 -1
- package/dist/TimeInput.js +16 -53
- package/dist/TimeInput.js.map +1 -1
- package/dist/TimeSlider.js +62 -88
- package/dist/TimeSlider.js.map +1 -1
- package/dist/ToastNotification.js +14 -13
- package/dist/ToastNotification.js.map +1 -1
- package/dist/UISwitch.js +9 -8
- package/dist/UISwitch.js.map +1 -1
- package/dist/context-actions/ContextActionUtils.js +173 -231
- package/dist/context-actions/ContextActionUtils.js.map +1 -1
- package/dist/context-actions/ContextActions.js +135 -177
- package/dist/context-actions/ContextActions.js.map +1 -1
- package/dist/context-actions/ContextMenu.js +509 -543
- package/dist/context-actions/ContextMenu.js.map +1 -1
- package/dist/context-actions/ContextMenuItem.js +32 -22
- package/dist/context-actions/ContextMenuItem.js.map +1 -1
- package/dist/context-actions/ContextMenuRoot.js +112 -152
- package/dist/context-actions/ContextMenuRoot.js.map +1 -1
- package/dist/context-actions/GlobalContextAction.js +49 -84
- package/dist/context-actions/GlobalContextAction.js.map +1 -1
- package/dist/context-actions/GlobalContextActions.js +25 -57
- package/dist/context-actions/GlobalContextActions.js.map +1 -1
- package/dist/context-actions/index.js +4 -4
- package/dist/context-actions/index.js.map +1 -1
- package/dist/index.js +39 -39
- package/dist/index.js.map +1 -1
- package/dist/menu-actions/DropdownMenu.js +126 -159
- package/dist/menu-actions/DropdownMenu.js.map +1 -1
- package/dist/menu-actions/Menu.js +215 -245
- package/dist/menu-actions/Menu.js.map +1 -1
- package/dist/menu-actions/index.js +1 -1
- package/dist/menu-actions/index.js.map +1 -1
- package/dist/navigation/Menu.js +14 -18
- package/dist/navigation/Menu.js.map +1 -1
- package/dist/navigation/MenuItem.js +15 -14
- package/dist/navigation/MenuItem.js.map +1 -1
- package/dist/navigation/Page.js +7 -5
- package/dist/navigation/Page.js.map +1 -1
- package/dist/navigation/Stack.js +14 -39
- package/dist/navigation/Stack.js.map +1 -1
- package/dist/navigation/index.js +4 -4
- package/dist/navigation/index.js.map +1 -1
- package/dist/popper/Popper.js +209 -235
- package/dist/popper/Popper.js.map +1 -1
- package/dist/popper/Tooltip.js +227 -257
- package/dist/popper/Tooltip.js.map +1 -1
- package/dist/popper/index.js +2 -2
- package/dist/popper/index.js.map +1 -1
- package/dist/shortcuts/GlobalShortcuts.js +2 -2
- package/dist/shortcuts/GlobalShortcuts.js.map +1 -1
- package/dist/shortcuts/Shortcut.js +263 -291
- package/dist/shortcuts/Shortcut.js.map +1 -1
- package/dist/shortcuts/ShortcutRegistry.js +48 -71
- package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
- package/dist/shortcuts/index.js +4 -4
- package/dist/shortcuts/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +30 -54
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/DraggableItemList.tsx"],"names":["React","PureComponent","classNames","memoize","Draggable","Droppable","FontAwesomeIcon","vsGripper","RangeUtils","ItemList","Tooltip","DraggableItemList","props","draggablePrefix","renderItem","item","itemIndex","isFocused","isSelected","isDragDisabled","style","getDraggableId","provided","innerRef","draggableProps","dragHandleProps","isClone","max","CACHE_SIZE","getCachedDraggableItem","draggingItemClassName","items","offset","snapshot","rubric","selectedCount","state","source","index","handleSelectionChange","bind","itemList","createRef","current","selectItem","focusItem","scrollToItem","selectedRanges","setState","count","onSelectionChange","className","droppableId","isDoubleClickSelect","isDropDisabled","isMultiSelect","isStickyBottom","itemCount","onFocusChange","onSelect","onViewportChange","rowHeight","getCachedRenderClone","draggingFromThisWith","isDraggingOver","draggingOverWith","droppableProps","getCachedRenderDraggableItem","text","badgeText","renderBadge","renderHandle","displayValue","value","renderTextItem","draggableId","parseInt","split","pop","DEFAULT_ROW_HEIGHT","disableSelect"],"mappings":"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","sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoizee';\nimport { Draggable, Droppable, DraggableChildrenFn } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsGripper } from '@deephaven/icons';\nimport { RangeUtils, Range } from '@deephaven/utils';\nimport ItemList, {\n RenderItemProps,\n DefaultListItem,\n ItemListProps,\n} from './ItemList';\nimport { Tooltip } from './popper';\nimport './DraggableItemList.scss';\n\nexport type DraggableRenderItemProps<T> = RenderItemProps<T> & {\n isClone?: boolean;\n selectedCount?: number;\n};\n\ntype DraggableRenderItemFn<T> = (\n props: DraggableRenderItemProps<T>\n) => React.ReactNode;\n\ntype DraggableItemListProps<T> = Omit<\n ItemListProps<T>,\n 'overscanCount' | 'focusSelector' | 'isDragSelect'\n> & {\n className: string;\n draggingItemClassName: string;\n isDropDisabled: boolean;\n // Whether to allow dragging items from this list\n isDragDisabled: boolean;\n\n renderItem: DraggableRenderItemFn<T>;\n style: React.CSSProperties;\n\n // The prefix to add to all draggable item IDs\n draggablePrefix: string;\n // The ID to give the droppable list\n droppableId: string;\n};\n\ntype DraggableItemListState = {\n selectedCount: number;\n};\n\n/**\n * Show a draggable item list. It _must_ be used within a `DragDropContext`.\n * This implementation uses react-beautiful-dnd for handling dragging and dropping of items.\n * We use ItemList to handle selection for multi drag and drop (not built in to react-beautiful-dnd).\n * One caveat with the use of react-beautiful-dnd is that it doesn't allow a drag to be initiated while\n * using a modifier key: https://github.com/atlassian/react-beautiful-dnd/issues/1678\n */\nclass DraggableItemList<T> extends PureComponent<\n DraggableItemListProps<T>,\n DraggableItemListState\n> {\n static DEFAULT_ROW_HEIGHT = 30;\n\n static defaultProps = {\n className: '',\n draggingItemClassName: '',\n offset: 0,\n items: [],\n rowHeight: DraggableItemList.DEFAULT_ROW_HEIGHT,\n isDoubleClickSelect: true,\n isDropDisabled: false,\n isDragDisabled: false,\n isMultiSelect: false,\n isStickyBottom: false,\n disableSelect: false,\n style: null,\n onFocusChange(): void {\n // no-op\n },\n onSelect(): void {\n // no-op\n },\n onSelectionChange(): void {\n // no-op\n },\n onViewportChange(): void {\n // no-op\n },\n renderItem: DraggableItemList.renderItem,\n selectedRanges: [],\n draggablePrefix: 'draggable-item',\n droppableId: 'droppable-item-list',\n };\n\n static renderHandle(): JSX.Element {\n return (\n <div>\n <Tooltip>Drag to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </div>\n );\n }\n\n static renderBadge({ text }: { text?: string }): React.ReactNode {\n return text ? <span className=\"number-badge\">{text}</span> : null;\n }\n\n static renderTextItem({\n text,\n badgeText = '',\n className = '',\n }: {\n text: string;\n badgeText: string;\n className: string;\n }): JSX.Element {\n return (\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">{text}</span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n );\n }\n\n static renderItem<P extends DefaultListItem>({\n item,\n isClone,\n selectedCount,\n }: DraggableRenderItemProps<P>): JSX.Element {\n const text = item && (item.displayValue || item.value || `${item}`);\n const badgeText = isClone ? `${selectedCount}` : '';\n const className = isClone ? 'item-list-item-clone' : '';\n return DraggableItemList.renderTextItem({ text, badgeText, className });\n }\n\n static getDraggableId(draggablePrefix: string, itemIndex: number): string {\n return `${draggablePrefix}/${itemIndex}`;\n }\n\n static getDraggableIndex(draggableId: string): number {\n return parseInt(draggableId.split('/').pop() || '', 10);\n }\n\n constructor(props: DraggableItemListProps<T>) {\n super(props);\n\n this.handleSelectionChange = this.handleSelectionChange.bind(this);\n\n this.itemList = React.createRef();\n\n this.state = {\n selectedCount: 0,\n };\n }\n\n itemList: React.RefObject<ItemList<T>>;\n\n selectItem(itemIndex: number): void {\n this.itemList.current?.selectItem(itemIndex);\n }\n\n focusItem(itemIndex: number): void {\n this.itemList.current?.focusItem(itemIndex);\n }\n\n scrollToItem(itemIndex: number): void {\n this.itemList.current?.scrollToItem(itemIndex);\n }\n\n getCachedDraggableItem = memoize(\n (\n draggablePrefix: string,\n renderItem: DraggableRenderItemFn<T>,\n item: T,\n itemIndex: number,\n isFocused: boolean,\n isSelected: boolean,\n isDragDisabled: boolean,\n style: React.CSSProperties\n ) => (\n <Draggable\n key={itemIndex}\n draggableId={DraggableItemList.getDraggableId(\n draggablePrefix,\n itemIndex\n )}\n index={itemIndex}\n isDragDisabled={isDragDisabled}\n >\n {provided => (\n <div\n role=\"menuitem\"\n className=\"draggable-item-list-item\"\n ref={provided.innerRef}\n tabIndex={-1}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n {renderItem({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n isClone: false,\n })}\n </div>\n )}\n </Draggable>\n ),\n { max: ItemList.CACHE_SIZE }\n );\n\n handleSelectionChange(selectedRanges: Range[]): void {\n this.setState({ selectedCount: RangeUtils.count(selectedRanges) });\n\n const { onSelectionChange } = this.props;\n onSelectionChange(selectedRanges);\n }\n\n getCachedRenderDraggableItem = memoize(\n (\n draggablePrefix: string,\n isDragDisabled: boolean,\n renderItem: DraggableRenderItemFn<T>\n ) => ({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n }: RenderItemProps<T>) =>\n this.getCachedDraggableItem(\n draggablePrefix,\n renderItem,\n item,\n itemIndex,\n isFocused,\n isSelected,\n isDragDisabled,\n style\n ),\n { max: 1 }\n );\n\n getCachedRenderClone = memoize(\n (\n draggingItemClassName: string,\n items: T[],\n offset: number,\n renderItem: DraggableRenderItemFn<T>\n ): DraggableChildrenFn => (provided, snapshot, rubric) => {\n const { selectedCount } = this.state;\n const { index: itemIndex } = rubric.source;\n const item = items[itemIndex - offset];\n return (\n <div\n className={classNames(\n 'draggable-item-list-dragging-item-container',\n draggingItemClassName\n )}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n ref={provided.innerRef}\n >\n <div\n className={classNames(\n 'draggable-item-list-dragging-item',\n { 'two-dragged': selectedCount === 2 },\n { 'multiple-dragged': selectedCount > 2 }\n )}\n >\n {renderItem({\n item,\n itemIndex,\n isFocused: false,\n isSelected: true,\n style: {},\n isClone: true,\n selectedCount,\n })}\n </div>\n </div>\n );\n },\n { max: 1 }\n );\n\n render(): JSX.Element {\n const {\n className,\n draggablePrefix,\n draggingItemClassName,\n droppableId,\n isDoubleClickSelect,\n isDragDisabled,\n isDropDisabled,\n isMultiSelect,\n isStickyBottom,\n itemCount,\n items,\n offset,\n onFocusChange,\n onSelect,\n onViewportChange,\n renderItem,\n rowHeight,\n selectedRanges,\n style,\n } = this.props;\n return (\n <Droppable\n isDropDisabled={isDropDisabled}\n droppableId={droppableId}\n mode=\"virtual\"\n renderClone={this.getCachedRenderClone(\n draggingItemClassName,\n items,\n offset,\n renderItem\n )}\n >\n {(provided, snapshot) => (\n <div\n role=\"menu\"\n className={classNames('draggable-item-list', className, {\n 'is-drop-disabled': isDropDisabled,\n 'is-drag-disabled': isDragDisabled,\n 'is-dragging-from-this': snapshot.draggingFromThisWith,\n 'is-dragging-over': snapshot.isDraggingOver,\n 'is-dropping': snapshot.draggingOverWith,\n })}\n style={style}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n >\n <ItemList\n focusSelector=\".draggable-item-list-item\"\n isDoubleClickSelect={isDoubleClickSelect}\n isDragSelect={false}\n isMultiSelect={isMultiSelect}\n isStickyBottom={isStickyBottom}\n itemCount={itemCount}\n items={items}\n onFocusChange={onFocusChange}\n onSelect={onSelect}\n onSelectionChange={this.handleSelectionChange}\n onViewportChange={onViewportChange}\n offset={offset}\n ref={this.itemList}\n renderItem={this.getCachedRenderDraggableItem(\n draggablePrefix,\n isDragDisabled,\n renderItem\n )}\n rowHeight={rowHeight}\n selectedRanges={selectedRanges}\n />\n </div>\n )}\n </Droppable>\n );\n }\n}\n\nexport default DraggableItemList;\n"],"file":"DraggableItemList.js"}
|
|
1
|
+
{"version":3,"sources":["../src/DraggableItemList.tsx"],"names":["React","PureComponent","classNames","memoize","Draggable","Droppable","FontAwesomeIcon","vsGripper","RangeUtils","ItemList","Tooltip","DraggableItemList","renderHandle","renderBadge","text","renderTextItem","badgeText","className","renderItem","item","isClone","selectedCount","displayValue","value","getDraggableId","draggablePrefix","itemIndex","getDraggableIndex","draggableId","parseInt","split","pop","constructor","props","isFocused","isSelected","isDragDisabled","style","provided","innerRef","draggableProps","dragHandleProps","max","CACHE_SIZE","getCachedDraggableItem","draggingItemClassName","items","offset","snapshot","rubric","state","index","source","handleSelectionChange","bind","itemList","createRef","selectItem","current","focusItem","scrollToItem","selectedRanges","setState","count","onSelectionChange","render","droppableId","isDoubleClickSelect","isDropDisabled","isMultiSelect","isStickyBottom","itemCount","onFocusChange","onSelect","onViewportChange","rowHeight","getCachedRenderClone","draggingFromThisWith","isDraggingOver","draggingOverWith","droppableProps","getCachedRenderDraggableItem","DEFAULT_ROW_HEIGHT","isDeselectOnClick","disableSelect"],"mappings":"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","sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoizee';\nimport { Draggable, Droppable, DraggableChildrenFn } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsGripper } from '@deephaven/icons';\nimport { RangeUtils, Range } from '@deephaven/utils';\nimport ItemList, {\n RenderItemProps,\n DefaultListItem,\n ItemListProps,\n} from './ItemList';\nimport { Tooltip } from './popper';\nimport './DraggableItemList.scss';\n\nexport type DraggableRenderItemProps<T> = RenderItemProps<T> & {\n isClone?: boolean;\n selectedCount?: number;\n};\n\ntype DraggableRenderItemFn<T> = (\n props: DraggableRenderItemProps<T>\n) => React.ReactNode;\n\ntype DraggableItemListProps<T> = Omit<\n ItemListProps<T>,\n 'overscanCount' | 'focusSelector' | 'isDragSelect'\n> & {\n className: string;\n draggingItemClassName: string;\n isDropDisabled: boolean;\n // Whether to allow dragging items from this list\n isDragDisabled: boolean;\n\n renderItem: DraggableRenderItemFn<T>;\n style: React.CSSProperties;\n\n // The prefix to add to all draggable item IDs\n draggablePrefix: string;\n // The ID to give the droppable list\n droppableId: string;\n};\n\ntype DraggableItemListState = {\n selectedCount: number;\n};\n\n/**\n * Show a draggable item list. It _must_ be used within a `DragDropContext`.\n * This implementation uses react-beautiful-dnd for handling dragging and dropping of items.\n * We use ItemList to handle selection for multi drag and drop (not built in to react-beautiful-dnd).\n * One caveat with the use of react-beautiful-dnd is that it doesn't allow a drag to be initiated while\n * using a modifier key: https://github.com/atlassian/react-beautiful-dnd/issues/1678\n */\nclass DraggableItemList<T> extends PureComponent<\n DraggableItemListProps<T>,\n DraggableItemListState\n> {\n static DEFAULT_ROW_HEIGHT = 30;\n\n static defaultProps = {\n className: '',\n draggingItemClassName: '',\n offset: 0,\n items: [],\n rowHeight: DraggableItemList.DEFAULT_ROW_HEIGHT,\n isDeselectOnClick: true,\n isDoubleClickSelect: true,\n isDropDisabled: false,\n isDragDisabled: false,\n isMultiSelect: false,\n isStickyBottom: false,\n disableSelect: false,\n style: null,\n onFocusChange(): void {\n // no-op\n },\n onSelect(): void {\n // no-op\n },\n onSelectionChange(): void {\n // no-op\n },\n onViewportChange(): void {\n // no-op\n },\n renderItem: DraggableItemList.renderItem,\n selectedRanges: [],\n draggablePrefix: 'draggable-item',\n droppableId: 'droppable-item-list',\n };\n\n static renderHandle(): JSX.Element {\n return (\n <div>\n <Tooltip>Drag to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </div>\n );\n }\n\n static renderBadge({ text }: { text?: string }): React.ReactNode {\n return text ? <span className=\"number-badge\">{text}</span> : null;\n }\n\n static renderTextItem({\n text,\n badgeText = '',\n className = '',\n }: {\n text: string;\n badgeText: string;\n className: string;\n }): JSX.Element {\n return (\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">{text}</span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n );\n }\n\n static renderItem<P extends DefaultListItem>({\n item,\n isClone,\n selectedCount,\n }: DraggableRenderItemProps<P>): JSX.Element {\n const text = item && (item.displayValue || item.value || `${item}`);\n const badgeText = isClone ? `${selectedCount}` : '';\n const className = isClone ? 'item-list-item-clone' : '';\n return DraggableItemList.renderTextItem({ text, badgeText, className });\n }\n\n static getDraggableId(draggablePrefix: string, itemIndex: number): string {\n return `${draggablePrefix}/${itemIndex}`;\n }\n\n static getDraggableIndex(draggableId: string): number {\n return parseInt(draggableId.split('/').pop() || '', 10);\n }\n\n constructor(props: DraggableItemListProps<T>) {\n super(props);\n\n this.handleSelectionChange = this.handleSelectionChange.bind(this);\n\n this.itemList = React.createRef();\n\n this.state = {\n selectedCount: 0,\n };\n }\n\n itemList: React.RefObject<ItemList<T>>;\n\n selectItem(itemIndex: number): void {\n this.itemList.current?.selectItem(itemIndex);\n }\n\n focusItem(itemIndex: number): void {\n this.itemList.current?.focusItem(itemIndex);\n }\n\n scrollToItem(itemIndex: number): void {\n this.itemList.current?.scrollToItem(itemIndex);\n }\n\n getCachedDraggableItem = memoize(\n (\n draggablePrefix: string,\n renderItem: DraggableRenderItemFn<T>,\n item: T,\n itemIndex: number,\n isFocused: boolean,\n isSelected: boolean,\n isDragDisabled: boolean,\n style: React.CSSProperties\n ) => (\n <Draggable\n key={itemIndex}\n draggableId={DraggableItemList.getDraggableId(\n draggablePrefix,\n itemIndex\n )}\n index={itemIndex}\n isDragDisabled={isDragDisabled}\n >\n {provided => (\n <div\n role=\"menuitem\"\n className=\"draggable-item-list-item\"\n ref={provided.innerRef}\n tabIndex={-1}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n {renderItem({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n isClone: false,\n })}\n </div>\n )}\n </Draggable>\n ),\n { max: ItemList.CACHE_SIZE }\n );\n\n handleSelectionChange(selectedRanges: Range[]): void {\n this.setState({ selectedCount: RangeUtils.count(selectedRanges) });\n\n const { onSelectionChange } = this.props;\n onSelectionChange(selectedRanges);\n }\n\n getCachedRenderDraggableItem = memoize(\n (\n draggablePrefix: string,\n isDragDisabled: boolean,\n renderItem: DraggableRenderItemFn<T>\n ) => ({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n }: RenderItemProps<T>) =>\n this.getCachedDraggableItem(\n draggablePrefix,\n renderItem,\n item,\n itemIndex,\n isFocused,\n isSelected,\n isDragDisabled,\n style\n ),\n { max: 1 }\n );\n\n getCachedRenderClone = memoize(\n (\n draggingItemClassName: string,\n items: T[],\n offset: number,\n renderItem: DraggableRenderItemFn<T>\n ): DraggableChildrenFn => (provided, snapshot, rubric) => {\n const { selectedCount } = this.state;\n const { index: itemIndex } = rubric.source;\n const item = items[itemIndex - offset];\n return (\n <div\n className={classNames(\n 'draggable-item-list-dragging-item-container',\n draggingItemClassName\n )}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n ref={provided.innerRef}\n >\n <div\n className={classNames(\n 'draggable-item-list-dragging-item',\n { 'two-dragged': selectedCount === 2 },\n { 'multiple-dragged': selectedCount > 2 }\n )}\n >\n {renderItem({\n item,\n itemIndex,\n isFocused: false,\n isSelected: true,\n style: {},\n isClone: true,\n selectedCount,\n })}\n </div>\n </div>\n );\n },\n { max: 1 }\n );\n\n render(): JSX.Element {\n const {\n className,\n draggablePrefix,\n draggingItemClassName,\n droppableId,\n isDoubleClickSelect,\n isDragDisabled,\n isDropDisabled,\n isMultiSelect,\n isStickyBottom,\n itemCount,\n items,\n offset,\n onFocusChange,\n onSelect,\n onViewportChange,\n renderItem,\n rowHeight,\n selectedRanges,\n style,\n } = this.props;\n return (\n <Droppable\n isDropDisabled={isDropDisabled}\n droppableId={droppableId}\n mode=\"virtual\"\n renderClone={this.getCachedRenderClone(\n draggingItemClassName,\n items,\n offset,\n renderItem\n )}\n >\n {(provided, snapshot) => (\n <div\n role=\"menu\"\n className={classNames('draggable-item-list', className, {\n 'is-drop-disabled': isDropDisabled,\n 'is-drag-disabled': isDragDisabled,\n 'is-dragging-from-this': snapshot.draggingFromThisWith,\n 'is-dragging-over': snapshot.isDraggingOver,\n 'is-dropping': snapshot.draggingOverWith,\n })}\n style={style}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n >\n <ItemList\n focusSelector=\".draggable-item-list-item\"\n isDoubleClickSelect={isDoubleClickSelect}\n isDragSelect={false}\n isMultiSelect={isMultiSelect}\n isStickyBottom={isStickyBottom}\n itemCount={itemCount}\n items={items}\n onFocusChange={onFocusChange}\n onSelect={onSelect}\n onSelectionChange={this.handleSelectionChange}\n onViewportChange={onViewportChange}\n offset={offset}\n ref={this.itemList}\n renderItem={this.getCachedRenderDraggableItem(\n draggablePrefix,\n isDragDisabled,\n renderItem\n )}\n rowHeight={rowHeight}\n selectedRanges={selectedRanges}\n />\n </div>\n )}\n </Droppable>\n );\n }\n}\n\nexport default DraggableItemList;\n"],"file":"DraggableItemList.js"}
|
|
@@ -1,45 +1,11 @@
|
|
|
1
|
-
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
2
|
-
|
|
3
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
4
|
-
|
|
5
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
6
|
-
|
|
7
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
8
|
-
|
|
9
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
10
|
-
|
|
11
|
-
function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
12
|
-
|
|
13
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
14
|
-
|
|
15
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
16
|
-
|
|
17
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
18
|
-
|
|
19
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
20
|
-
|
|
21
|
-
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
22
|
-
|
|
23
|
-
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
24
|
-
|
|
25
|
-
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
26
|
-
|
|
27
|
-
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
|
28
|
-
|
|
29
|
-
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
30
|
-
|
|
31
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
32
|
-
|
|
33
|
-
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
34
|
-
|
|
35
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
36
2
|
|
|
37
3
|
import React, { Component } from 'react';
|
|
38
4
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
39
5
|
import { dhSort } from '@deephaven/icons';
|
|
40
6
|
import classNames from 'classnames';
|
|
41
|
-
import Checkbox from
|
|
42
|
-
import Popper from
|
|
7
|
+
import Checkbox from "./Checkbox.js";
|
|
8
|
+
import Popper from "./popper/Popper.js";
|
|
43
9
|
import "./HierarchicalCheckboxMenu.css";
|
|
44
10
|
|
|
45
11
|
/**
|
|
@@ -68,224 +34,191 @@ import "./HierarchicalCheckboxMenu.css";
|
|
|
68
34
|
* with the appropriate booleans changed. It will then call onUpdateValueMap
|
|
69
35
|
* with the new Map.
|
|
70
36
|
*/
|
|
71
|
-
|
|
72
|
-
|
|
37
|
+
class HierarchicalCheckboxMenu extends Component {
|
|
38
|
+
static isParentSelected(parent, valueMap) {
|
|
39
|
+
var children = valueMap.get(parent);
|
|
40
|
+
|
|
41
|
+
if (children === undefined) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
73
44
|
|
|
74
|
-
|
|
45
|
+
if (typeof children === 'boolean') {
|
|
46
|
+
// This parent has no children
|
|
47
|
+
return children;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
var includesTrue = Array.from(children.values()).includes(true);
|
|
51
|
+
var includesFalse = Array.from(children.values()).includes(false);
|
|
75
52
|
|
|
76
|
-
|
|
77
|
-
|
|
53
|
+
if (includesTrue && includesFalse) {
|
|
54
|
+
// Indeterminate
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
78
57
|
|
|
79
|
-
|
|
58
|
+
return includesTrue;
|
|
59
|
+
}
|
|
80
60
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
61
|
+
constructor(props) {
|
|
62
|
+
super(props);
|
|
63
|
+
this.toggleMenu = this.toggleMenu.bind(this);
|
|
64
|
+
this.toggleValueFor = this.toggleValueFor.bind(this);
|
|
65
|
+
this.selectAll = this.selectAll.bind(this);
|
|
66
|
+
this.clear = this.clear.bind(this);
|
|
67
|
+
this.state = {
|
|
87
68
|
menuIsOpen: false
|
|
88
69
|
};
|
|
89
|
-
return _this;
|
|
90
70
|
}
|
|
91
71
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}, {
|
|
105
|
-
key: "toggleValueFor",
|
|
106
|
-
value: function toggleValueFor(parent, child) {
|
|
107
|
-
var _this$props = this.props,
|
|
108
|
-
valueMap = _this$props.valueMap,
|
|
109
|
-
onUpdateValueMap = _this$props.onUpdateValueMap; // Make a deep copy of the Map and toggle the boolean for parent / child
|
|
72
|
+
toggleMenu(event) {
|
|
73
|
+
event.stopPropagation();
|
|
74
|
+
event.preventDefault();
|
|
75
|
+
this.setState(state => {
|
|
76
|
+
var {
|
|
77
|
+
menuIsOpen
|
|
78
|
+
} = state;
|
|
79
|
+
return {
|
|
80
|
+
menuIsOpen: !menuIsOpen
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
}
|
|
110
84
|
|
|
111
|
-
|
|
112
|
-
|
|
85
|
+
toggleValueFor(parent, child) {
|
|
86
|
+
var {
|
|
87
|
+
valueMap,
|
|
88
|
+
onUpdateValueMap
|
|
89
|
+
} = this.props; // Make a deep copy of the Map and toggle the boolean for parent / child
|
|
113
90
|
|
|
114
|
-
|
|
115
|
-
|
|
91
|
+
var map = new Map(valueMap);
|
|
92
|
+
var children = map.get(parent);
|
|
116
93
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
} else {
|
|
120
|
-
var newChildValue = !HierarchicalCheckboxMenu.isParentSelected(parent, map);
|
|
121
|
-
children.forEach(function (_, key) {
|
|
122
|
-
return newChildren.set(key, newChildValue);
|
|
123
|
-
});
|
|
124
|
-
}
|
|
94
|
+
if (children instanceof Map) {
|
|
95
|
+
var newChildren = new Map(children);
|
|
125
96
|
|
|
126
|
-
|
|
97
|
+
if (child != null) {
|
|
98
|
+
newChildren.set(child, !children.get(child));
|
|
127
99
|
} else {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
var currentChildren = map.get(parent);
|
|
133
|
-
|
|
134
|
-
if (child === undefined && currentChildren !== undefined && typeof currentChildren !== 'boolean') {
|
|
135
|
-
if (HierarchicalCheckboxMenu.isParentSelected(parent, valueMap)) {
|
|
136
|
-
currentChildren.forEach(function (_, key) {
|
|
137
|
-
return currentChildren.set(key, false);
|
|
138
|
-
});
|
|
139
|
-
} else {
|
|
140
|
-
// for parent selection of false or null (indeterminate), select everything
|
|
141
|
-
currentChildren.forEach(function (_, key) {
|
|
142
|
-
return currentChildren.set(key, true);
|
|
143
|
-
});
|
|
144
|
-
}
|
|
100
|
+
var newChildValue = !HierarchicalCheckboxMenu.isParentSelected(parent, map);
|
|
101
|
+
children.forEach((_, key) => newChildren.set(key, newChildValue));
|
|
145
102
|
}
|
|
146
103
|
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
value: function setAllValues(value) {
|
|
152
|
-
var _this$props2 = this.props,
|
|
153
|
-
valueMap = _this$props2.valueMap,
|
|
154
|
-
onUpdateValueMap = _this$props2.onUpdateValueMap; // Make a deep copy of the Map and set everything
|
|
155
|
-
|
|
156
|
-
var copy = new Map();
|
|
157
|
-
valueMap.forEach(function (child, parent) {
|
|
158
|
-
if (typeof child === 'boolean') {
|
|
159
|
-
copy.set(parent, value);
|
|
160
|
-
} else {
|
|
161
|
-
var children = new Map();
|
|
162
|
-
child.forEach(function (_, key) {
|
|
163
|
-
return children.set(key, value);
|
|
164
|
-
});
|
|
165
|
-
copy.set(parent, children);
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
onUpdateValueMap(copy);
|
|
169
|
-
}
|
|
170
|
-
}, {
|
|
171
|
-
key: "selectAll",
|
|
172
|
-
value: function selectAll() {
|
|
173
|
-
this.setAllValues(true);
|
|
174
|
-
}
|
|
175
|
-
}, {
|
|
176
|
-
key: "clear",
|
|
177
|
-
value: function clear() {
|
|
178
|
-
this.setAllValues(false);
|
|
179
|
-
}
|
|
180
|
-
}, {
|
|
181
|
-
key: "renderMenuElement",
|
|
182
|
-
value: function renderMenuElement() {
|
|
183
|
-
var _this2 = this;
|
|
104
|
+
map.set(parent, newChildren);
|
|
105
|
+
} else {
|
|
106
|
+
map.set(parent, !children);
|
|
107
|
+
} // The parent was clicked so all children must be toggled
|
|
184
108
|
|
|
185
|
-
var valueMap = this.props.valueMap;
|
|
186
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
187
|
-
className: "hcm-menu-container"
|
|
188
|
-
}, Array.from(valueMap.entries()).map(function (_ref) {
|
|
189
|
-
var _ref2 = _slicedToArray(_ref, 2),
|
|
190
|
-
parent = _ref2[0],
|
|
191
|
-
children = _ref2[1];
|
|
192
109
|
|
|
193
|
-
|
|
194
|
-
key: parent
|
|
195
|
-
}, /*#__PURE__*/React.createElement(Checkbox, {
|
|
196
|
-
className: "hcm-parent",
|
|
197
|
-
checked: HierarchicalCheckboxMenu.isParentSelected(parent, valueMap),
|
|
198
|
-
onChange: function onChange() {
|
|
199
|
-
return _this2.toggleValueFor(parent);
|
|
200
|
-
}
|
|
201
|
-
}, parent), children !== undefined && typeof children !== 'boolean' && Array.from(children.entries()).map(function (_ref3) {
|
|
202
|
-
var _ref4 = _slicedToArray(_ref3, 2),
|
|
203
|
-
child = _ref4[0],
|
|
204
|
-
value = _ref4[1];
|
|
110
|
+
var currentChildren = map.get(parent);
|
|
205
111
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
}, child);
|
|
214
|
-
}));
|
|
215
|
-
}), /*#__PURE__*/React.createElement("button", {
|
|
216
|
-
type: "button",
|
|
217
|
-
className: "btn btn-link",
|
|
218
|
-
onClick: this.selectAll
|
|
219
|
-
}, "Select All"), /*#__PURE__*/React.createElement("button", {
|
|
220
|
-
type: "button",
|
|
221
|
-
className: "btn btn-link",
|
|
222
|
-
onClick: this.clear
|
|
223
|
-
}, "Clear"));
|
|
112
|
+
if (child === undefined && currentChildren !== undefined && typeof currentChildren !== 'boolean') {
|
|
113
|
+
if (HierarchicalCheckboxMenu.isParentSelected(parent, valueMap)) {
|
|
114
|
+
currentChildren.forEach((_, key) => currentChildren.set(key, false));
|
|
115
|
+
} else {
|
|
116
|
+
// for parent selection of false or null (indeterminate), select everything
|
|
117
|
+
currentChildren.forEach((_, key) => currentChildren.set(key, true));
|
|
118
|
+
}
|
|
224
119
|
}
|
|
225
|
-
}, {
|
|
226
|
-
key: "render",
|
|
227
|
-
value: function render() {
|
|
228
|
-
var _this3 = this;
|
|
229
120
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
className = _this$props3.className,
|
|
233
|
-
icon = _this$props3.icon,
|
|
234
|
-
id = _this$props3.id;
|
|
235
|
-
var menuIsOpen = this.state.menuIsOpen;
|
|
236
|
-
return /*#__PURE__*/React.createElement("button", {
|
|
237
|
-
type: "button",
|
|
238
|
-
className: classNames('btn hcm-btn', className),
|
|
239
|
-
onClick: this.toggleMenu,
|
|
240
|
-
id: id
|
|
241
|
-
}, /*#__PURE__*/React.createElement("span", null, icon && /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
242
|
-
icon: icon,
|
|
243
|
-
className: "hcm-icon mr-1"
|
|
244
|
-
}), menuText), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
245
|
-
icon: dhSort,
|
|
246
|
-
className: "hcm-icon ml-1"
|
|
247
|
-
}), /*#__PURE__*/React.createElement(Popper, {
|
|
248
|
-
options: {
|
|
249
|
-
placement: 'bottom'
|
|
250
|
-
},
|
|
251
|
-
isShown: menuIsOpen,
|
|
252
|
-
onExited: function onExited() {
|
|
253
|
-
_this3.setState({
|
|
254
|
-
menuIsOpen: false
|
|
255
|
-
});
|
|
256
|
-
},
|
|
257
|
-
closeOnBlur: true,
|
|
258
|
-
interactive: true
|
|
259
|
-
}, this.renderMenuElement()));
|
|
260
|
-
}
|
|
261
|
-
}], [{
|
|
262
|
-
key: "isParentSelected",
|
|
263
|
-
value: function isParentSelected(parent, valueMap) {
|
|
264
|
-
var children = valueMap.get(parent);
|
|
121
|
+
onUpdateValueMap(map);
|
|
122
|
+
}
|
|
265
123
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
124
|
+
setAllValues(value) {
|
|
125
|
+
var {
|
|
126
|
+
valueMap,
|
|
127
|
+
onUpdateValueMap
|
|
128
|
+
} = this.props; // Make a deep copy of the Map and set everything
|
|
269
129
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
130
|
+
var copy = new Map();
|
|
131
|
+
valueMap.forEach((child, parent) => {
|
|
132
|
+
if (typeof child === 'boolean') {
|
|
133
|
+
copy.set(parent, value);
|
|
134
|
+
} else {
|
|
135
|
+
var children = new Map();
|
|
136
|
+
child.forEach((_, key) => children.set(key, value));
|
|
137
|
+
copy.set(parent, children);
|
|
273
138
|
}
|
|
139
|
+
});
|
|
140
|
+
onUpdateValueMap(copy);
|
|
141
|
+
}
|
|
274
142
|
|
|
275
|
-
|
|
276
|
-
|
|
143
|
+
selectAll() {
|
|
144
|
+
this.setAllValues(true);
|
|
145
|
+
}
|
|
277
146
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
}
|
|
147
|
+
clear() {
|
|
148
|
+
this.setAllValues(false);
|
|
149
|
+
}
|
|
282
150
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
151
|
+
renderMenuElement() {
|
|
152
|
+
var {
|
|
153
|
+
valueMap
|
|
154
|
+
} = this.props;
|
|
155
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
156
|
+
className: "hcm-menu-container"
|
|
157
|
+
}, Array.from(valueMap.entries()).map((_ref) => {
|
|
158
|
+
var [parent, children] = _ref;
|
|
159
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
160
|
+
key: parent
|
|
161
|
+
}, /*#__PURE__*/React.createElement(Checkbox, {
|
|
162
|
+
className: "hcm-parent",
|
|
163
|
+
checked: HierarchicalCheckboxMenu.isParentSelected(parent, valueMap),
|
|
164
|
+
onChange: () => this.toggleValueFor(parent)
|
|
165
|
+
}, parent), children !== undefined && typeof children !== 'boolean' && Array.from(children.entries()).map((_ref2) => {
|
|
166
|
+
var [child, value] = _ref2;
|
|
167
|
+
return /*#__PURE__*/React.createElement(Checkbox, {
|
|
168
|
+
className: "hcm-child",
|
|
169
|
+
key: child,
|
|
170
|
+
checked: value,
|
|
171
|
+
onChange: () => this.toggleValueFor(parent, child)
|
|
172
|
+
}, child);
|
|
173
|
+
}));
|
|
174
|
+
}), /*#__PURE__*/React.createElement("button", {
|
|
175
|
+
type: "button",
|
|
176
|
+
className: "btn btn-link",
|
|
177
|
+
onClick: this.selectAll
|
|
178
|
+
}, "Select All"), /*#__PURE__*/React.createElement("button", {
|
|
179
|
+
type: "button",
|
|
180
|
+
className: "btn btn-link",
|
|
181
|
+
onClick: this.clear
|
|
182
|
+
}, "Clear"));
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
render() {
|
|
186
|
+
var {
|
|
187
|
+
menuText,
|
|
188
|
+
className,
|
|
189
|
+
icon,
|
|
190
|
+
id
|
|
191
|
+
} = this.props;
|
|
192
|
+
var {
|
|
193
|
+
menuIsOpen
|
|
194
|
+
} = this.state;
|
|
195
|
+
return /*#__PURE__*/React.createElement("button", {
|
|
196
|
+
type: "button",
|
|
197
|
+
className: classNames('btn hcm-btn', className),
|
|
198
|
+
onClick: this.toggleMenu,
|
|
199
|
+
id: id
|
|
200
|
+
}, /*#__PURE__*/React.createElement("span", null, icon && /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
201
|
+
icon: icon,
|
|
202
|
+
className: "hcm-icon mr-1"
|
|
203
|
+
}), menuText), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
204
|
+
icon: dhSort,
|
|
205
|
+
className: "hcm-icon ml-1"
|
|
206
|
+
}), /*#__PURE__*/React.createElement(Popper, {
|
|
207
|
+
options: {
|
|
208
|
+
placement: 'bottom'
|
|
209
|
+
},
|
|
210
|
+
isShown: menuIsOpen,
|
|
211
|
+
onExited: () => {
|
|
212
|
+
this.setState({
|
|
213
|
+
menuIsOpen: false
|
|
214
|
+
});
|
|
215
|
+
},
|
|
216
|
+
closeOnBlur: true,
|
|
217
|
+
interactive: true
|
|
218
|
+
}, this.renderMenuElement()));
|
|
219
|
+
}
|
|
286
220
|
|
|
287
|
-
|
|
288
|
-
}(Component);
|
|
221
|
+
}
|
|
289
222
|
|
|
290
223
|
_defineProperty(HierarchicalCheckboxMenu, "defaultProps", {
|
|
291
224
|
className: '',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/HierarchicalCheckboxMenu.tsx"],"names":["React","Component","FontAwesomeIcon","dhSort","classNames","Checkbox","Popper","HierarchicalCheckboxMenu","props","toggleMenu","bind","toggleValueFor","selectAll","clear","state","menuIsOpen","event","stopPropagation","preventDefault","setState","parent","child","valueMap","onUpdateValueMap","map","Map","children","get","newChildren","set","newChildValue","isParentSelected","forEach","_","key","currentChildren","undefined","value","copy","setAllValues","Array","from","entries","menuText","className","icon","id","placement","renderMenuElement","includesTrue","values","includes","includesFalse"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhSort, IconDefinition } from '@deephaven/icons';\nimport classNames from 'classnames';\nimport Checkbox from './Checkbox';\nimport Popper from './popper/Popper';\nimport './HierarchicalCheckboxMenu.scss';\n\ntype HierarchicalCheckboxValueMap = Map<string, boolean | Map<string, boolean>>;\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};\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 };\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));\n } else {\n const newChildValue = !HierarchicalCheckboxMenu.isParentSelected(\n parent,\n map\n );\n children.forEach((_, key) => newChildren.set(key, newChildValue));\n }\n map.set(parent, newChildren);\n } else {\n map.set(parent, !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 if (HierarchicalCheckboxMenu.isParentSelected(parent, valueMap)) {\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(): React.ReactNode {\n const { valueMap } = 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 type=\"button\" className=\"btn btn-link\" onClick={this.selectAll}>\n Select All\n </button>\n <button type=\"button\" className=\"btn btn-link\" onClick={this.clear}>\n Clear\n </button>\n </div>\n );\n }\n\n render(): JSX.Element {\n const { menuText, className, icon, id } = 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 >\n <span>\n {icon && <FontAwesomeIcon icon={icon} className=\"hcm-icon mr-1\" />}\n {menuText}\n </span>\n <FontAwesomeIcon icon={dhSort} className=\"hcm-icon ml-1\" />\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"],"file":"HierarchicalCheckboxMenu.js"}
|
|
1
|
+
{"version":3,"sources":["../src/HierarchicalCheckboxMenu.tsx"],"names":["React","Component","FontAwesomeIcon","dhSort","classNames","Checkbox","Popper","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","newChildValue","forEach","_","key","currentChildren","setAllValues","value","copy","renderMenuElement","entries","render","menuText","className","icon","id","placement"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhSort, IconDefinition } from '@deephaven/icons';\nimport classNames from 'classnames';\nimport Checkbox from './Checkbox';\nimport Popper from './popper/Popper';\nimport './HierarchicalCheckboxMenu.scss';\n\ntype HierarchicalCheckboxValueMap = Map<string, boolean | Map<string, boolean>>;\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};\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 };\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));\n } else {\n const newChildValue = !HierarchicalCheckboxMenu.isParentSelected(\n parent,\n map\n );\n children.forEach((_, key) => newChildren.set(key, newChildValue));\n }\n map.set(parent, newChildren);\n } else {\n map.set(parent, !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 if (HierarchicalCheckboxMenu.isParentSelected(parent, valueMap)) {\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(): React.ReactNode {\n const { valueMap } = 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 type=\"button\" className=\"btn btn-link\" onClick={this.selectAll}>\n Select All\n </button>\n <button type=\"button\" className=\"btn btn-link\" onClick={this.clear}>\n Clear\n </button>\n </div>\n );\n }\n\n render(): JSX.Element {\n const { menuText, className, icon, id } = 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 >\n <span>\n {icon && <FontAwesomeIcon icon={icon} className=\"hcm-icon mr-1\" />}\n {menuText}\n </span>\n <FontAwesomeIcon icon={dhSort} className=\"hcm-icon ml-1\" />\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"],"file":"HierarchicalCheckboxMenu.js"}
|
package/dist/ItemList.d.ts
CHANGED
|
@@ -22,12 +22,13 @@ export declare type ItemListProps<T> = {
|
|
|
22
22
|
rowHeight: number;
|
|
23
23
|
offset: number;
|
|
24
24
|
items: T[];
|
|
25
|
+
isDeselectOnClick: boolean;
|
|
25
26
|
isDoubleClickSelect: boolean;
|
|
26
27
|
isDragSelect: boolean;
|
|
27
28
|
isMultiSelect: boolean;
|
|
28
29
|
isStickyBottom: boolean;
|
|
29
30
|
onFocusChange(index: number | null): void;
|
|
30
|
-
onSelect(index: number): void;
|
|
31
|
+
onSelect(index: number, event: React.SyntheticEvent): void;
|
|
31
32
|
onSelectionChange(ranges: Range[]): void;
|
|
32
33
|
onViewportChange(topRow: number, bottomRow: number): void;
|
|
33
34
|
overscanCount: number;
|
|
@@ -58,6 +59,7 @@ export declare class ItemList<T> extends PureComponent<ItemListProps<T>, ItemLis
|
|
|
58
59
|
offset: number;
|
|
59
60
|
items: never[];
|
|
60
61
|
rowHeight: number;
|
|
62
|
+
isDeselectOnClick: boolean;
|
|
61
63
|
isDoubleClickSelect: boolean;
|
|
62
64
|
isDragSelect: boolean;
|
|
63
65
|
isMultiSelect: boolean;
|
|
@@ -97,7 +99,7 @@ export declare class ItemList<T> extends PureComponent<ItemListProps<T>, ItemLis
|
|
|
97
99
|
focusItem(itemIndex: number): void;
|
|
98
100
|
scrollToItem(itemIndex: number): void;
|
|
99
101
|
handleItemContextMenu(itemIndex: number, e: React.MouseEvent<HTMLDivElement>): void;
|
|
100
|
-
handleItemDoubleClick(itemIndex: number): void;
|
|
102
|
+
handleItemDoubleClick(itemIndex: number, e: React.MouseEvent): void;
|
|
101
103
|
handleItemMouseDown(index: number, e: React.MouseEvent): void;
|
|
102
104
|
handleItemBlur(itemIndex: number, e: React.FocusEvent): void;
|
|
103
105
|
handleItemFocus(itemIndex: number, e: React.FocusEvent): void;
|