@deephaven/components 0.28.1-beta.0 → 0.29.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/DraggableItemList.d.ts +1 -1
- package/dist/DraggableItemList.d.ts.map +1 -1
- package/dist/DraggableItemList.js.map +1 -1
- package/dist/ItemList.d.ts +12 -12
- package/dist/ItemList.d.ts.map +1 -1
- package/dist/ItemList.js.map +1 -1
- package/dist/navigation/Menu.d.ts +1 -1
- package/dist/navigation/Menu.d.ts.map +1 -1
- package/dist/navigation/Menu.js.map +1 -1
- package/package.json +8 -8
|
@@ -76,7 +76,7 @@ declare class DraggableItemList<T> extends PureComponent<DraggableItemListProps<
|
|
|
76
76
|
getCachedDraggableItem: ((draggablePrefix: string, renderItem: DraggableRenderItemFn<T>, item: T, itemIndex: number, isFocused: boolean, isSelected: boolean, isDragDisabled: boolean, style: React.CSSProperties) => JSX.Element) & memoize.Memoized<(draggablePrefix: string, renderItem: DraggableRenderItemFn<T>, item: T, itemIndex: number, isFocused: boolean, isSelected: boolean, isDragDisabled: boolean, style: React.CSSProperties) => JSX.Element>;
|
|
77
77
|
handleSelectionChange(selectedRanges: Range[]): void;
|
|
78
78
|
getCachedRenderDraggableItem: ((draggablePrefix: string, isDragDisabled: boolean, renderItem: DraggableRenderItemFn<T>) => ({ item, itemIndex, isFocused, isSelected, style, }: RenderItemProps<T>) => JSX.Element) & memoize.Memoized<(draggablePrefix: string, isDragDisabled: boolean, renderItem: DraggableRenderItemFn<T>) => ({ item, itemIndex, isFocused, isSelected, style, }: RenderItemProps<T>) => JSX.Element>;
|
|
79
|
-
getCachedRenderClone: ((draggingItemClassName: string, items: T[], offset: number, renderItem: DraggableRenderItemFn<T>) => DraggableChildrenFn) & memoize.Memoized<(draggingItemClassName: string, items: T[], offset: number, renderItem: DraggableRenderItemFn<T>) => DraggableChildrenFn>;
|
|
79
|
+
getCachedRenderClone: ((draggingItemClassName: string, items: readonly T[], offset: number, renderItem: DraggableRenderItemFn<T>) => DraggableChildrenFn) & memoize.Memoized<(draggingItemClassName: string, items: readonly T[], offset: number, renderItem: DraggableRenderItemFn<T>) => DraggableChildrenFn>;
|
|
80
80
|
render(): JSX.Element;
|
|
81
81
|
}
|
|
82
82
|
export default DraggableItemList;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DraggableItemList.d.ts","sourceRoot":"","sources":["../src/DraggableItemList.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"DraggableItemList.d.ts","sourceRoot":"","sources":["../src/DraggableItemList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DraggableItemList.js","names":["React","PureComponent","classNames","memoize","Draggable","Droppable","FontAwesomeIcon","vsGripper","RangeUtils","ItemList","Tooltip","DraggableItemList","renderHandle","renderBadge","text","length","renderTextItem","badgeText","className","renderItem","item","isClone","selectedCount","displayValue","value","undefined","getDraggableId","draggablePrefix","itemIndex","getDraggableIndex","draggableId","num","split","pop","parseInt","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","dataTestId","getCachedRenderClone","draggingFromThisWith","isDraggingOver","draggingOverWith","droppableProps","getCachedRenderDraggableItem","DEFAULT_ROW_HEIGHT","isDeselectOnClick","disableSelect"],"sources":["../src/DraggableItemList.tsx"],"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 'data-testid'?: 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 'data-testid': undefined,\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 != null && text.length > 0 ? (\n <span className=\"number-badge\">{text}</span>\n ) : 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 =\n item != null ? item.displayValue ?? item.value ?? `${item}` : '';\n const badgeText =\n isClone !== undefined && isClone ? `${selectedCount}` : '';\n const className =\n isClone !== undefined && 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 const num = draggableId.split('/').pop();\n return parseInt(num !== undefined ? num : '', 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 // eslint-disable-next-line react/no-unstable-nested-components, react/display-name, react/function-component-definition\n ): DraggableChildrenFn => (provided, snapshot, rubric) => {\n // eslint-disable-next-line react/no-this-in-sfc\n const { selectedCount } = this.state;\n const { draggableProps, dragHandleProps, innerRef } = provided;\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 {...draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...dragHandleProps}\n ref={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 'data-testid': dataTestId,\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 data-testid={dataTestId}\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DraggableItemList.js","names":["React","PureComponent","classNames","memoize","Draggable","Droppable","FontAwesomeIcon","vsGripper","RangeUtils","ItemList","Tooltip","DraggableItemList","renderHandle","renderBadge","text","length","renderTextItem","badgeText","className","renderItem","item","isClone","selectedCount","displayValue","value","undefined","getDraggableId","draggablePrefix","itemIndex","getDraggableIndex","draggableId","num","split","pop","parseInt","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","dataTestId","getCachedRenderClone","draggingFromThisWith","isDraggingOver","draggingOverWith","droppableProps","getCachedRenderDraggableItem","DEFAULT_ROW_HEIGHT","isDeselectOnClick","disableSelect"],"sources":["../src/DraggableItemList.tsx"],"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 'data-testid'?: 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 'data-testid': undefined,\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 != null && text.length > 0 ? (\n <span className=\"number-badge\">{text}</span>\n ) : 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 =\n item != null ? item.displayValue ?? item.value ?? `${item}` : '';\n const badgeText =\n isClone !== undefined && isClone ? `${selectedCount}` : '';\n const className =\n isClone !== undefined && 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 const num = draggableId.split('/').pop();\n return parseInt(num !== undefined ? num : '', 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: readonly T[],\n offset: number,\n renderItem: DraggableRenderItemFn<T>\n // eslint-disable-next-line react/no-unstable-nested-components, react/display-name, react/function-component-definition\n ): DraggableChildrenFn => (provided, snapshot, rubric) => {\n // eslint-disable-next-line react/no-this-in-sfc\n const { selectedCount } = this.state;\n const { draggableProps, dragHandleProps, innerRef } = provided;\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 {...draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...dragHandleProps}\n ref={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 'data-testid': dataTestId,\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 data-testid={dataTestId}\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"],"mappings":"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"}
|
package/dist/ItemList.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export type ItemListProps<T> = {
|
|
|
21
21
|
itemCount: number;
|
|
22
22
|
rowHeight: number;
|
|
23
23
|
offset: number;
|
|
24
|
-
items: T[];
|
|
24
|
+
items: readonly T[];
|
|
25
25
|
isDeselectOnClick: boolean;
|
|
26
26
|
isDoubleClickSelect: boolean;
|
|
27
27
|
isDragSelect: boolean;
|
|
@@ -29,10 +29,10 @@ export type ItemListProps<T> = {
|
|
|
29
29
|
isStickyBottom: boolean;
|
|
30
30
|
onFocusChange(index: number | null): void;
|
|
31
31
|
onSelect(index: number, event: React.SyntheticEvent): void;
|
|
32
|
-
onSelectionChange(ranges: Range[]): void;
|
|
32
|
+
onSelectionChange(ranges: readonly Range[]): void;
|
|
33
33
|
onViewportChange(topRow: number, bottomRow: number): void;
|
|
34
34
|
overscanCount: number;
|
|
35
|
-
selectedRanges: Range[];
|
|
35
|
+
selectedRanges: readonly Range[];
|
|
36
36
|
disableSelect: boolean;
|
|
37
37
|
renderItem: RenderItemFn<T>;
|
|
38
38
|
focusSelector: string;
|
|
@@ -41,7 +41,7 @@ export type ItemListProps<T> = {
|
|
|
41
41
|
type ItemListState = {
|
|
42
42
|
focusIndex: number | null;
|
|
43
43
|
mouseDownIndex: number | null;
|
|
44
|
-
selectedRanges: Range[];
|
|
44
|
+
selectedRanges: readonly Range[];
|
|
45
45
|
overscanStartIndex: number;
|
|
46
46
|
height: number | null;
|
|
47
47
|
isDragging: boolean;
|
|
@@ -82,17 +82,17 @@ export declare class ItemList<T> extends PureComponent<ItemListProps<T>, ItemLis
|
|
|
82
82
|
componentWillUnmount(): void;
|
|
83
83
|
list: React.RefObject<List>;
|
|
84
84
|
listContainer: React.RefObject<HTMLDivElement>;
|
|
85
|
-
getItemSelected: ((index: number, selectedRanges: Range[]) => boolean) & memoize.Memoized<(index: number, selectedRanges: Range[]) => boolean>;
|
|
85
|
+
getItemSelected: ((index: number, selectedRanges: readonly Range[]) => boolean) & memoize.Memoized<(index: number, selectedRanges: readonly Range[]) => boolean>;
|
|
86
86
|
getCachedItem: ((itemIndex: number, key: number, item: T, isFocused: boolean, isSelected: boolean, renderItem: RenderItemFn<T>, style: React.CSSProperties, disableSelect: boolean) => JSX.Element) & memoize.Memoized<(itemIndex: number, key: number, item: T, isFocused: boolean, isSelected: boolean, renderItem: RenderItemFn<T>, style: React.CSSProperties, disableSelect: boolean) => JSX.Element>;
|
|
87
87
|
getOuterElement: ((onKeyDown: React.KeyboardEventHandler) => React.ForwardRefExoticComponent<React.RefAttributes<HTMLDivElement>>) & memoize.Memoized<(onKeyDown: React.KeyboardEventHandler) => React.ForwardRefExoticComponent<React.RefAttributes<HTMLDivElement>>>;
|
|
88
88
|
getInnerElement: (() => React.ForwardRefExoticComponent<React.RefAttributes<HTMLDivElement>>) & memoize.Memoized<() => React.ForwardRefExoticComponent<React.RefAttributes<HTMLDivElement>>>;
|
|
89
|
-
getItemData: ((items: T[], selectedRanges: Range[], renderItem: RenderItemFn<T>) => {
|
|
90
|
-
items: T[];
|
|
91
|
-
selectedRanges: Range[];
|
|
89
|
+
getItemData: ((items: readonly T[], selectedRanges: readonly Range[], renderItem: RenderItemFn<T>) => {
|
|
90
|
+
items: readonly T[];
|
|
91
|
+
selectedRanges: readonly Range[];
|
|
92
92
|
renderItem: RenderItemFn<T>;
|
|
93
|
-
}) & memoize.Memoized<(items: T[], selectedRanges: Range[], renderItem: RenderItemFn<T>) => {
|
|
94
|
-
items: T[];
|
|
95
|
-
selectedRanges: Range[];
|
|
93
|
+
}) & memoize.Memoized<(items: readonly T[], selectedRanges: readonly Range[], renderItem: RenderItemFn<T>) => {
|
|
94
|
+
items: readonly T[];
|
|
95
|
+
selectedRanges: readonly Range[];
|
|
96
96
|
renderItem: RenderItemFn<T>;
|
|
97
97
|
}>;
|
|
98
98
|
focus(): void;
|
|
@@ -128,7 +128,7 @@ export declare class ItemList<T> extends PureComponent<ItemListProps<T>, ItemLis
|
|
|
128
128
|
deselectRange(range: Range): void;
|
|
129
129
|
selectItem(index: number): void;
|
|
130
130
|
selectRange(range: Range): void;
|
|
131
|
-
setSelectedRanges(selectedRanges: Range[]): void;
|
|
131
|
+
setSelectedRanges(selectedRanges: readonly Range[]): void;
|
|
132
132
|
sendViewportUpdate(): void;
|
|
133
133
|
isListAtBottom({ scrollOffset, height, }?: Pick<ItemListState, 'scrollOffset' | 'height'>): boolean;
|
|
134
134
|
renderInnerElement({ index: itemIndex, style, }: {
|
package/dist/ItemList.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItemList.d.ts","sourceRoot":"","sources":["../src/ItemList.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,OAAO,MAAM,UAAU,CAAC;AAC/B,OAAO,EACL,aAAa,IAAI,IAAI,EACrB,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AACtB,OAAkB,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAc,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGrD,OAAO,iBAAiB,CAAC;AAIzB,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;AAE7E,MAAM,MAAM,oBAAoB,GAAG,CACjC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,KACnC,IAAI,CAAC;AAEV,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI;IAE7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAElB,MAAM,EAAE,MAAM,CAAC;IAKf,KAAK,EAAE,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ItemList.d.ts","sourceRoot":"","sources":["../src/ItemList.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,OAAO,MAAM,UAAU,CAAC;AAC/B,OAAO,EACL,aAAa,IAAI,IAAI,EACrB,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AACtB,OAAkB,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAc,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGrD,OAAO,iBAAiB,CAAC;AAIzB,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;AAE7E,MAAM,MAAM,oBAAoB,GAAG,CACjC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,KACnC,IAAI,CAAC;AAEV,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI;IAE7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAElB,MAAM,EAAE,MAAM,CAAC;IAKf,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IAEpB,iBAAiB,EAAE,OAAO,CAAC;IAE3B,mBAAmB,EAAE,OAAO,CAAC;IAE7B,YAAY,EAAE,OAAO,CAAC;IAEtB,aAAa,EAAE,OAAO,CAAC;IAEvB,cAAc,EAAE,OAAO,CAAC;IAExB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAG1C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;IAC3D,iBAAiB,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,IAAI,CAAC;IAClD,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,SAAS,KAAK,EAAE,CAAC;IACjC,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,SAAS,KAAK,EAAE,CAAC;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF;;;GAGG;AACH,qBAAa,QAAQ,CAAC,CAAC,CAAE,SAAQ,aAAa,CAC5C,aAAa,CAAC,CAAC,CAAC,EAChB,aAAa,CACd;IACC,MAAM,CAAC,UAAU,SAAQ;IAEzB,MAAM,CAAC,kBAAkB,SAAM;IAG/B,MAAM,CAAC,gBAAgB,SAAM;IAE7B,MAAM,CAAC,YAAY;;;;;;;;;;yBAiBA,IAAI;oBAGT,IAAI;6BAGK,IAAI;4BAGL,IAAI;;;;;;MAYxB;IAEF,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,eAAe,EAAE,EAC3C,IAAI,GACL,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO;gBAQvB,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;IAmCnC,kBAAkB,CAChB,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,EAC3B,SAAS,EAAE,aAAa,GACvB,IAAI;IAoCP,oBAAoB,IAAI,IAAI;IAI5B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAE5B,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAE/C,eAAe,WACL,MAAM,kBAAkB,SAAS,KAAK,EAAE,yCAAxC,MAAM,kBAAkB,SAAS,KAAK,EAAE,cAGhD;IAEF,aAAa,eAEE,MAAM,OACZ,MAAM,QACL,CAAC,aACI,OAAO,cACN,OAAO,cACP,aAAa,CAAC,CAAC,SACpB,MAAM,aAAa,iBACX,OAAO,iDAPX,MAAM,OACZ,MAAM,QACL,CAAC,aACI,OAAO,cACN,OAAO,cACP,aAAa,CAAC,CAAC,SACpB,MAAM,aAAa,iBACX,OAAO,kBA+BxB;IAEF,eAAe,eAAuB,MAAM,oBAAoB,0GAA1B,MAAM,oBAAoB,2EAc7D;IAEH,eAAe,8KAWZ;IAEH,WAAW,WAEA,SAAS,CAAC,EAAE,kBACH,SAAS,KAAK,EAAE,cACpB,aAAa,CAAC,CAAC;;;;kCAFpB,SAAS,CAAC,EAAE,kBACH,SAAS,KAAK,EAAE,cACpB,aAAa,CAAC,CAAC;;;;OAM7B;IAEF,KAAK,IAAI,IAAI;IAIb,qBAAqB,IAAI,IAAI;IAS7B,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAY7C,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAYlC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOrC,qBAAqB,CACnB,SAAS,EAAE,MAAM,EACjB,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,GAClC,IAAI;IAWP,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI;IAkBnE,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI;IA+B7D,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI;IAa5D,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI;IAW7D,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI;IAmCjE,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,IAAI;IA2B3D,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,EAAE,wBAAwB,GAAG,IAAI;IAI3E,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,GAAG,IAAI;IAIpC,gBAAgB,IAAI,IAAI;IAIxB,mBAAmB,IAAI,IAAI;IAK3B,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,GAAG,IAAI;IA0D3C,YAAY,CAAC,EACX,wBAAwB,EACxB,YAAY,GACb,EAAE,iBAAiB,GAAG,IAAI;IAiB3B,eAAe,IAAI,IAAI;IAIvB,cAAc,IAAI,IAAI;IAOtB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAMvC;;;;;OAKG;IACH,YAAY,CACV,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,OAAO,EACpB,cAAc,EAAE,OAAO,EACvB,cAAc,UAAO,GACpB,IAAI;IAiCP,WAAW,IAAI,IAAI;IAKnB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAQjC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAO/B,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAQ/B,iBAAiB,CAAC,cAAc,EAAE,SAAS,KAAK,EAAE,GAAG,IAAI;IAIzD,kBAAkB,IAAI,IAAI;IAU1B,cAAc,CACZ,EACE,YAAY,EACZ,MAAM,GACP,GAAE,IAAI,CAAC,aAAa,EAAE,cAAc,GAAG,QAAQ,CAAc,GAC7D,OAAO;IASV,kBAAkB,CAAC,EACjB,KAAK,EAAE,SAAS,EAChB,KAAK,GACN,EAAE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC;KAC5B,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI;IAoB7B,MAAM,IAAI,GAAG,CAAC,OAAO;CAuCtB;AAED,eAAe,QAAQ,CAAC"}
|
package/dist/ItemList.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItemList.js","names":["React","PureComponent","memoize","FixedSizeList","List","AutoSizer","Log","RangeUtils","ItemListItem","ContextActionUtils","log","module","ItemList","renderItem","item","displayValue","value","constructor","props","index","selectedRanges","isSelected","max","CACHE_SIZE","itemIndex","key","isFocused","style","disableSelect","content","handleItemContextMenu","handleItemDoubleClick","handleItemMouseDown","handleItemFocus","handleItemBlur","handleItemMouseMove","handleItemMouseUp","onKeyDown","component","forwardRef","ref","displayName","items","bind","handleItemsRendered","handleWindowMouseUp","handleKeyDown","handleMouseLeave","handleScroll","handleResize","renderInnerElement","list","createRef","listContainer","isStickyBottom","state","focusIndex","mouseDownIndex","overscanStartIndex","height","isDragging","isStuckToBottom","scrollOffset","componentDidUpdate","prevProps","prevState","propSelectedRanges","itemCount","isListAtBottom","scrollToBottom","sendViewportUpdate","setSelectedRanges","onSelectionChange","onFocusChange","componentWillUnmount","window","removeEventListener","focus","current","restoreScrollPosition","scrollTo","getElement","focusSelector","elements","querySelectorAll","elementIndex","focusItem","setState","element","HTMLElement","scrollToItem","scrollIntoView","block","e","isModifierDown","isModifierKeyDown","toggleSelect","shiftKey","isDoubleClickSelect","onSelect","selectRange","target","indexOf","tagName","toLowerCase","button","length","selectItem","addEventListener","debug2","currentTarget","relatedTarget","contains","isDragSelect","isMultiSelect","getItemSelected","deselectAll","Math","min","isDeselectOnClick","isShiftDown","resetMouseState","oldFocus","newFocus","stopPropagation","preventDefault","lastRange","scrollUpdateWasRequested","isDeselectable","deselectItem","deselectRange","range","validateRange","onViewportChange","rowHeight","topRow","floor","bottomRow","ceil","offset","getCachedItem","render","overscanCount","dataTestId","width","getItemData","getOuterElement","getInnerElement","DEFAULT_ROW_HEIGHT","DEFAULT_OVERSCAN","undefined"],"sources":["../src/ItemList.tsx"],"sourcesContent":["/* eslint-disable react/no-unstable-nested-components */\nimport React, { PureComponent } from 'react';\nimport memoize from 'memoizee';\nimport {\n FixedSizeList as List,\n ListOnItemsRenderedProps,\n ListOnScrollProps,\n} from 'react-window';\nimport AutoSizer, { Size } from 'react-virtualized-auto-sizer';\nimport Log from '@deephaven/log';\nimport { RangeUtils, Range } from '@deephaven/utils';\nimport ItemListItem from './ItemListItem';\nimport { ContextActionUtils } from './context-actions';\nimport './ItemList.scss';\n\nconst log = Log.module('ItemList');\n\nexport interface DefaultListItem {\n value?: string;\n displayValue?: string;\n}\n\nexport type RenderItemProps<T> = {\n item: T;\n itemIndex: number;\n isFocused: boolean;\n isSelected: boolean;\n style: React.CSSProperties;\n};\n\nexport type RenderItemFn<T> = (props: RenderItemProps<T>) => React.ReactNode;\n\nexport type ItemDragEventHandler = (\n index: number,\n event: React.DragEvent<HTMLDivElement>\n) => void;\n\nexport type ItemListProps<T> = {\n // Total item count\n itemCount: number;\n rowHeight: number;\n // Offset of the top item in the items array\n offset: number;\n // Item object format expected by the default renderItem function\n // Can be anything as long as it's supported by the renderItem\n // Default renderItem will look for a `displayValue` property, fallback\n // to the `value` property, or stringify the object if neither are defined\n items: T[];\n // Whether clicking a selected item should deselect in the item list or not. Defaults to true\n isDeselectOnClick: boolean;\n // Whether selection requires a double click or not\n isDoubleClickSelect: boolean;\n // Whether to allow dragging to change the selection after clicking\n isDragSelect: boolean;\n // Whether to allow multiple selections in this item list\n isMultiSelect: boolean;\n // Set to true if you want the list to scroll when new items are added and it's already at the bottom\n isStickyBottom: boolean;\n // Fired when an item gets focused\n onFocusChange(index: number | null): void;\n\n // Fired when an item is clicked. With multiple selection, fired on double click.\n onSelect(index: number, event: React.SyntheticEvent): void;\n onSelectionChange(ranges: Range[]): void;\n onViewportChange(topRow: number, bottomRow: number): void;\n overscanCount: number;\n selectedRanges: Range[];\n disableSelect: boolean;\n renderItem: RenderItemFn<T>;\n focusSelector: string;\n 'data-testid'?: string;\n};\n\ntype ItemListState = {\n focusIndex: number | null;\n mouseDownIndex: number | null;\n selectedRanges: Range[];\n overscanStartIndex: number;\n height: number | null;\n isDragging: boolean;\n isStuckToBottom: boolean;\n scrollOffset: number | null;\n};\n\n/**\n * Show items in a long scrollable list.\n * Can be navigated via keyboard or mouse.\n */\nexport class ItemList<T> extends PureComponent<\n ItemListProps<T>,\n ItemListState\n> {\n static CACHE_SIZE = 1000;\n\n static DEFAULT_ROW_HEIGHT = 20;\n\n // By drawing an additional 10 items on each side, tab/keyboard navigation works better (as the next element exists)\n static DEFAULT_OVERSCAN = 10;\n\n static defaultProps = {\n offset: 0,\n items: [],\n rowHeight: ItemList.DEFAULT_ROW_HEIGHT,\n\n isDeselectOnClick: true,\n\n isDoubleClickSelect: false,\n\n isDragSelect: true,\n\n isMultiSelect: false,\n\n isStickyBottom: false,\n\n disableSelect: false,\n\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\n overscanCount: ItemList.DEFAULT_OVERSCAN,\n\n renderItem: ItemList.renderItem,\n selectedRanges: [],\n\n focusSelector: '.item-list-item',\n\n 'data-testid': undefined,\n };\n\n static renderItem<P extends DefaultListItem>({\n item,\n }: RenderItemProps<P>): JSX.Element {\n return (\n <div className=\"item-list-item-content\">\n {item != null && (item.displayValue ?? item.value ?? `${item}`)}\n </div>\n );\n }\n\n constructor(props: ItemListProps<T>) {\n super(props);\n\n this.handleItemBlur = this.handleItemBlur.bind(this);\n this.handleItemContextMenu = this.handleItemContextMenu.bind(this);\n this.handleItemFocus = this.handleItemFocus.bind(this);\n this.handleItemDoubleClick = this.handleItemDoubleClick.bind(this);\n this.handleItemMouseDown = this.handleItemMouseDown.bind(this);\n this.handleItemMouseMove = this.handleItemMouseMove.bind(this);\n this.handleItemMouseUp = this.handleItemMouseUp.bind(this);\n this.handleItemsRendered = this.handleItemsRendered.bind(this);\n this.handleWindowMouseUp = this.handleWindowMouseUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleScroll = this.handleScroll.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.renderInnerElement = this.renderInnerElement.bind(this);\n\n this.list = React.createRef();\n this.listContainer = React.createRef();\n\n const { isStickyBottom, selectedRanges } = props;\n\n this.state = {\n focusIndex: null,\n mouseDownIndex: null,\n selectedRanges,\n overscanStartIndex: 0,\n height: null,\n isDragging: false,\n isStuckToBottom: isStickyBottom,\n scrollOffset: null,\n };\n }\n\n componentDidUpdate(\n prevProps: ItemListProps<T>,\n prevState: ItemListState\n ): void {\n const { selectedRanges: propSelectedRanges, itemCount } = this.props;\n const {\n focusIndex,\n isStuckToBottom,\n scrollOffset,\n height,\n selectedRanges,\n } = this.state;\n if (isStuckToBottom && !this.isListAtBottom() && itemCount > 0) {\n this.scrollToBottom();\n }\n\n if (\n scrollOffset !== prevState.scrollOffset ||\n height !== prevState.height\n ) {\n this.sendViewportUpdate();\n }\n\n if (\n propSelectedRanges !== prevProps.selectedRanges &&\n propSelectedRanges !== selectedRanges\n ) {\n this.setSelectedRanges(propSelectedRanges);\n } else if (selectedRanges !== prevState.selectedRanges) {\n const { onSelectionChange } = this.props;\n onSelectionChange(selectedRanges);\n }\n\n if (focusIndex !== prevState.focusIndex) {\n const { onFocusChange } = this.props;\n onFocusChange(focusIndex);\n }\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('mouseup', this.handleWindowMouseUp);\n }\n\n list: React.RefObject<List>;\n\n listContainer: React.RefObject<HTMLDivElement>;\n\n getItemSelected = memoize(\n (index: number, selectedRanges: Range[]) =>\n RangeUtils.isSelected(selectedRanges, index),\n { max: ItemList.CACHE_SIZE }\n );\n\n getCachedItem = memoize(\n (\n itemIndex: number,\n key: number,\n item: T,\n isFocused: boolean,\n isSelected: boolean,\n renderItem: RenderItemFn<T>,\n style: React.CSSProperties,\n disableSelect: boolean\n ) => {\n const content = renderItem({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n });\n\n return (\n <ItemListItem\n onContextMenu={this.handleItemContextMenu}\n onDoubleClick={this.handleItemDoubleClick}\n onMouseDown={this.handleItemMouseDown}\n onFocus={this.handleItemFocus}\n onBlur={this.handleItemBlur}\n disableSelect={disableSelect}\n onMouseMove={this.handleItemMouseMove}\n onMouseUp={this.handleItemMouseUp}\n isFocused={isFocused}\n isSelected={isSelected}\n itemIndex={itemIndex}\n style={style}\n key={key}\n >\n {content}\n </ItemListItem>\n );\n },\n { max: ItemList.CACHE_SIZE }\n );\n\n getOuterElement = memoize((onKeyDown: React.KeyboardEventHandler) => {\n const component = React.forwardRef<HTMLDivElement>((props, ref) => (\n // We need to add the tabIndex to make sure it is focusable, otherwise we can't get key events\n <div\n ref={ref}\n tabIndex={-1}\n onKeyDown={onKeyDown}\n role=\"presentation\"\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n />\n ));\n component.displayName = 'ItemListOuterElement';\n return component;\n });\n\n getInnerElement = memoize(() => {\n const component = React.forwardRef<HTMLDivElement>((props, ref) => (\n <div\n className=\"item-list-inner-element\"\n ref={ref}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n />\n ));\n component.displayName = 'ItemListInnerElement';\n return component;\n });\n\n getItemData = memoize(\n (items: T[], selectedRanges: Range[], renderItem: RenderItemFn<T>) => ({\n items,\n selectedRanges,\n renderItem,\n })\n );\n\n focus(): void {\n this.listContainer.current?.focus();\n }\n\n restoreScrollPosition(): void {\n const { scrollOffset } = this.state;\n if (scrollOffset != null) {\n // manually restore the scroll containers offset\n // virtual list doesn't restore scrolloffset in a re-render if it's the same\n this.listContainer.current?.scrollTo(0, scrollOffset);\n }\n }\n\n getElement(itemIndex: number): Element | null {\n if (this.listContainer.current == null) {\n return null;\n }\n\n const { focusSelector } = this.props;\n const { overscanStartIndex } = this.state;\n const elements = this.listContainer.current.querySelectorAll(focusSelector);\n const elementIndex = itemIndex - overscanStartIndex;\n return elements[elementIndex];\n }\n\n focusItem(itemIndex: number): void {\n const { disableSelect } = this.props;\n if (disableSelect) return;\n\n this.setState({ focusIndex: itemIndex });\n\n const element = this.getElement(itemIndex);\n if (element instanceof HTMLElement) {\n element.focus();\n }\n }\n\n scrollToItem(itemIndex: number): void {\n const element = this.getElement(itemIndex);\n if (element != null) {\n element.scrollIntoView({ block: 'center' });\n }\n }\n\n handleItemContextMenu(\n itemIndex: number,\n e: React.MouseEvent<HTMLDivElement>\n ): void {\n // Update the selection, but don't consume the mouse event - it will trigger the context menu\n const { selectedRanges } = this.state;\n const isSelected = RangeUtils.isSelected(selectedRanges, itemIndex);\n\n // 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\n const isModifierDown =\n isSelected || ContextActionUtils.isModifierKeyDown(e);\n this.toggleSelect(itemIndex, e.shiftKey, isModifierDown, false);\n }\n\n handleItemDoubleClick(itemIndex: number, e: React.MouseEvent): void {\n const { isDoubleClickSelect, onSelect } = this.props;\n\n if (isDoubleClickSelect) {\n this.setState(\n ({ selectedRanges }) => ({\n selectedRanges: RangeUtils.selectRange(selectedRanges, [\n itemIndex,\n itemIndex,\n ]),\n }),\n () => {\n onSelect(itemIndex, e);\n }\n );\n }\n }\n\n handleItemMouseDown(index: number, e: React.MouseEvent): void {\n const { selectedRanges } = this.state;\n\n if (\n e.target instanceof HTMLElement &&\n ['button', 'select', 'input', 'textarea'].indexOf(\n e.target.tagName.toLowerCase()\n ) !== -1\n ) {\n // allow these elements to do their own behaviours\n return;\n }\n\n if (e.button === 2 && selectedRanges.length === 0) {\n // allow right click to act as a selection if selection is empty\n this.focusItem(index);\n this.selectItem(index);\n return;\n }\n\n if (e.button != null && e.button !== 0) {\n return;\n }\n\n this.setState({ mouseDownIndex: index });\n\n window.addEventListener('mouseup', this.handleWindowMouseUp);\n\n // Leave selection until mouse up, to allow for dragging behaviour\n }\n\n handleItemBlur(itemIndex: number, e: React.FocusEvent): void {\n log.debug2('item blur', itemIndex, e.currentTarget, e.relatedTarget);\n if (\n !e.relatedTarget ||\n (this.listContainer.current &&\n e.relatedTarget instanceof HTMLElement &&\n !this.listContainer.current.contains(e.relatedTarget))\n ) {\n // Next focused element is outside of the ItemList\n this.setState({ focusIndex: null });\n }\n }\n\n handleItemFocus(itemIndex: number, e: React.FocusEvent): void {\n log.debug2('item focus', itemIndex, e.target);\n this.setState(state => {\n const { focusIndex } = state;\n if (focusIndex !== itemIndex) {\n return { focusIndex: itemIndex };\n }\n return null;\n });\n }\n\n handleItemMouseMove(itemIndex: number, e: React.MouseEvent): void {\n const { isDragSelect, isMultiSelect, disableSelect } = this.props;\n const { mouseDownIndex, selectedRanges } = this.state;\n\n if (mouseDownIndex == null || disableSelect) return;\n\n this.setState({ isDragging: true });\n\n if (isDragSelect || mouseDownIndex === itemIndex) {\n this.focusItem(itemIndex);\n\n if (isMultiSelect) {\n if (\n !isDragSelect &&\n !this.getItemSelected(itemIndex, selectedRanges) &&\n !ContextActionUtils.isModifierKeyDown(e)\n ) {\n // If there's already a selection and they select outside of that range while dragging without a modifier key, start a new selection with just the new item\n this.deselectAll();\n }\n this.selectRange([\n Math.min(mouseDownIndex, itemIndex),\n Math.max(mouseDownIndex, itemIndex),\n ]);\n } else {\n this.toggleSelect(\n itemIndex,\n e.shiftKey,\n ContextActionUtils.isModifierKeyDown(e),\n false\n );\n }\n }\n }\n\n handleItemMouseUp(index: number, e: React.MouseEvent): void {\n const { isDeselectOnClick, isDoubleClickSelect, onSelect } = this.props;\n const { mouseDownIndex, isDragging } = this.state;\n\n if (\n e.target instanceof HTMLElement &&\n ['button', 'select', 'input', 'textarea'].indexOf(\n e.target.tagName.toLowerCase()\n ) !== -1\n ) {\n return;\n }\n\n if (mouseDownIndex === index && !isDragging) {\n const isShiftDown = e.shiftKey;\n const isModifierDown = ContextActionUtils.isModifierKeyDown(e);\n this.focusItem(index);\n this.toggleSelect(index, isShiftDown, isModifierDown, isDeselectOnClick);\n\n if (!isDoubleClickSelect && !isShiftDown && !isModifierDown) {\n onSelect(index, e);\n }\n }\n\n this.resetMouseState();\n }\n\n handleItemsRendered({ overscanStartIndex }: ListOnItemsRenderedProps): void {\n this.setState({ overscanStartIndex });\n }\n\n handleResize({ height }: Size): void {\n this.setState({ height });\n }\n\n handleMouseLeave(): void {\n this.setState({ mouseDownIndex: null });\n }\n\n handleWindowMouseUp(): void {\n this.resetMouseState();\n window.removeEventListener('mouseup', this.handleWindowMouseUp);\n }\n\n handleKeyDown(e: React.KeyboardEvent): void {\n const { isMultiSelect, itemCount, onSelect } = this.props;\n const { focusIndex: oldFocus } = this.state;\n let newFocus = oldFocus;\n\n if (e.key === 'Enter' || e.key === ' ') {\n if (!isMultiSelect && newFocus != null) {\n this.setState({ selectedRanges: [[newFocus, newFocus]] }, () => {\n if (newFocus != null) {\n onSelect(newFocus, e);\n }\n });\n }\n return;\n }\n\n if (e.key === 'ArrowUp') {\n if (newFocus != null && newFocus >= 0) {\n newFocus = Math.max(0, newFocus - 1);\n } else {\n newFocus = itemCount - 1;\n }\n } else if (e.key === 'ArrowDown') {\n if (newFocus != null && newFocus >= 0) {\n newFocus = Math.min(newFocus + 1, itemCount - 1);\n } else {\n newFocus = 0;\n }\n } else {\n return;\n }\n\n if (oldFocus !== newFocus) {\n e.stopPropagation();\n e.preventDefault();\n\n this.focusItem(newFocus);\n\n const { selectedRanges } = this.state;\n if (e.shiftKey && selectedRanges.length > 0) {\n const lastRange = selectedRanges[selectedRanges.length - 1];\n this.selectRange([\n Math.min(newFocus, lastRange[0]),\n Math.max(newFocus, lastRange[1]),\n ]);\n } else {\n this.deselectAll();\n if (newFocus !== null) {\n this.selectItem(newFocus);\n } else {\n this.listContainer.current?.focus();\n }\n }\n\n this.scrollIntoView(newFocus);\n }\n }\n\n handleScroll({\n scrollUpdateWasRequested,\n scrollOffset,\n }: ListOnScrollProps): void {\n this.setState(state => {\n if (scrollUpdateWasRequested) {\n // The scroll was caused by scrollTo() or scrollToItem()\n // Don't re-calc isStuckToBottom\n return { scrollOffset } as ItemListState;\n }\n\n const { isStickyBottom } = this.props;\n const { height } = state;\n\n const isStuckToBottom =\n isStickyBottom && this.isListAtBottom({ scrollOffset, height });\n return { isStuckToBottom, scrollOffset } as ItemListState;\n });\n }\n\n resetMouseState(): void {\n this.setState({ mouseDownIndex: null, isDragging: false });\n }\n\n scrollToBottom(): void {\n const { itemCount } = this.props;\n if (this.list.current) {\n this.list.current.scrollToItem(itemCount);\n }\n }\n\n scrollIntoView(itemIndex: number): void {\n if (this.list.current) {\n this.list.current.scrollToItem(itemIndex);\n }\n }\n\n /**\n * @param index The index to toggle selection for\n * @param isShiftDown True if the shift modifier key is down\n * @param isModifierDown True if the meta modifier key is down\n * @param isDeselectable True if item should be deselected if already selected\n */\n toggleSelect(\n index: number,\n isShiftDown: boolean,\n isModifierDown: boolean,\n isDeselectable = true\n ): void {\n const { isMultiSelect } = this.props;\n const { selectedRanges } = this.state;\n\n if (isMultiSelect && isShiftDown && selectedRanges.length > 0) {\n const lastRange = selectedRanges[selectedRanges.length - 1];\n this.selectRange([\n Math.min(lastRange[0], index),\n Math.max(index, lastRange[1]),\n ]);\n } else if (\n isMultiSelect &&\n selectedRanges.length === 1 &&\n selectedRanges[0][0] === index &&\n selectedRanges[0][1] === index\n ) {\n if (isDeselectable) {\n this.deselectItem(index);\n }\n } else if (isMultiSelect && isModifierDown) {\n if (this.getItemSelected(index, selectedRanges)) {\n if (isDeselectable) {\n this.deselectItem(index);\n }\n } else {\n this.selectItem(index);\n }\n } else {\n this.deselectAll();\n this.selectItem(index);\n }\n }\n\n deselectAll(): void {\n const { itemCount } = this.props;\n this.deselectRange([0, itemCount]);\n }\n\n deselectItem(index: number): void {\n this.deselectRange([index, index]);\n }\n\n deselectRange(range: Range): void {\n RangeUtils.validateRange(range);\n\n this.setState(({ selectedRanges }) => ({\n selectedRanges: RangeUtils.deselectRange(selectedRanges, range),\n }));\n }\n\n selectItem(index: number): void {\n const { disableSelect } = this.props;\n if (disableSelect) return;\n\n this.selectRange([index, index]);\n }\n\n selectRange(range: Range): void {\n RangeUtils.validateRange(range);\n\n this.setState(({ selectedRanges }) => ({\n selectedRanges: RangeUtils.selectRange(selectedRanges, range),\n }));\n }\n\n setSelectedRanges(selectedRanges: Range[]): void {\n this.setState({ selectedRanges });\n }\n\n sendViewportUpdate(): void {\n const { scrollOffset, height } = this.state;\n if (scrollOffset != null && height != null) {\n const { onViewportChange, rowHeight } = this.props;\n const topRow = Math.floor(scrollOffset / rowHeight);\n const bottomRow = topRow + Math.ceil(height / rowHeight);\n onViewportChange(topRow, bottomRow);\n }\n }\n\n isListAtBottom(\n {\n scrollOffset,\n height,\n }: Pick<ItemListState, 'scrollOffset' | 'height'> = this.state\n ): boolean {\n if (height == null || scrollOffset == null) {\n return false;\n }\n\n const { itemCount, rowHeight } = this.props;\n return scrollOffset + height >= itemCount * rowHeight;\n }\n\n renderInnerElement({\n index: itemIndex,\n style,\n }: {\n index: number;\n style: React.CSSProperties;\n }): React.ReactElement | null {\n const { items, offset, renderItem, disableSelect } = this.props;\n const { focusIndex, selectedRanges } = this.state;\n if (itemIndex < offset || itemIndex >= offset + items.length) {\n return null;\n }\n\n const item = items[itemIndex - offset];\n return this.getCachedItem(\n itemIndex,\n itemIndex,\n item,\n itemIndex === focusIndex && !disableSelect,\n this.getItemSelected(itemIndex, selectedRanges),\n renderItem,\n style,\n disableSelect\n );\n }\n\n render(): JSX.Element {\n const {\n items,\n itemCount,\n overscanCount,\n renderItem,\n rowHeight,\n 'data-testid': dataTestId,\n } = this.props;\n const { selectedRanges, isStuckToBottom } = this.state;\n return (\n <AutoSizer className=\"item-list-auto-sizer\" onResize={this.handleResize}>\n {({ width, height }) => (\n <List\n className=\"item-list-scroll-pane\"\n height={height}\n width={width}\n initialScrollOffset={isStuckToBottom ? itemCount * rowHeight : 0}\n itemCount={itemCount}\n itemSize={rowHeight}\n // This prop isn't actually used by us, it is passed to the render function by react-window\n // Used here to force a re-render of the List component.\n // Otherwise it doesn't know to call the render again when selection or renderItem changes\n itemData={this.getItemData(items, selectedRanges, renderItem)}\n onScroll={this.handleScroll}\n onItemsRendered={this.handleItemsRendered}\n ref={this.list}\n outerElementType={this.getOuterElement(this.handleKeyDown)}\n outerRef={this.listContainer}\n innerElementType={this.getInnerElement()}\n overscanCount={overscanCount}\n data-testid={dataTestId}\n >\n {this.renderInnerElement}\n </List>\n )}\n </AutoSizer>\n );\n }\n}\n\nexport default ItemList;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ItemList.js","names":["React","PureComponent","memoize","FixedSizeList","List","AutoSizer","Log","RangeUtils","ItemListItem","ContextActionUtils","log","module","ItemList","renderItem","item","displayValue","value","constructor","props","index","selectedRanges","isSelected","max","CACHE_SIZE","itemIndex","key","isFocused","style","disableSelect","content","handleItemContextMenu","handleItemDoubleClick","handleItemMouseDown","handleItemFocus","handleItemBlur","handleItemMouseMove","handleItemMouseUp","onKeyDown","component","forwardRef","ref","displayName","items","bind","handleItemsRendered","handleWindowMouseUp","handleKeyDown","handleMouseLeave","handleScroll","handleResize","renderInnerElement","list","createRef","listContainer","isStickyBottom","state","focusIndex","mouseDownIndex","overscanStartIndex","height","isDragging","isStuckToBottom","scrollOffset","componentDidUpdate","prevProps","prevState","propSelectedRanges","itemCount","isListAtBottom","scrollToBottom","sendViewportUpdate","setSelectedRanges","onSelectionChange","onFocusChange","componentWillUnmount","window","removeEventListener","focus","current","restoreScrollPosition","scrollTo","getElement","focusSelector","elements","querySelectorAll","elementIndex","focusItem","setState","element","HTMLElement","scrollToItem","scrollIntoView","block","e","isModifierDown","isModifierKeyDown","toggleSelect","shiftKey","isDoubleClickSelect","onSelect","selectRange","target","indexOf","tagName","toLowerCase","button","length","selectItem","addEventListener","debug2","currentTarget","relatedTarget","contains","isDragSelect","isMultiSelect","getItemSelected","deselectAll","Math","min","isDeselectOnClick","isShiftDown","resetMouseState","oldFocus","newFocus","stopPropagation","preventDefault","lastRange","scrollUpdateWasRequested","isDeselectable","deselectItem","deselectRange","range","validateRange","onViewportChange","rowHeight","topRow","floor","bottomRow","ceil","offset","getCachedItem","render","overscanCount","dataTestId","width","getItemData","getOuterElement","getInnerElement","DEFAULT_ROW_HEIGHT","DEFAULT_OVERSCAN","undefined"],"sources":["../src/ItemList.tsx"],"sourcesContent":["/* eslint-disable react/no-unstable-nested-components */\nimport React, { PureComponent } from 'react';\nimport memoize from 'memoizee';\nimport {\n FixedSizeList as List,\n ListOnItemsRenderedProps,\n ListOnScrollProps,\n} from 'react-window';\nimport AutoSizer, { Size } from 'react-virtualized-auto-sizer';\nimport Log from '@deephaven/log';\nimport { RangeUtils, Range } from '@deephaven/utils';\nimport ItemListItem from './ItemListItem';\nimport { ContextActionUtils } from './context-actions';\nimport './ItemList.scss';\n\nconst log = Log.module('ItemList');\n\nexport interface DefaultListItem {\n value?: string;\n displayValue?: string;\n}\n\nexport type RenderItemProps<T> = {\n item: T;\n itemIndex: number;\n isFocused: boolean;\n isSelected: boolean;\n style: React.CSSProperties;\n};\n\nexport type RenderItemFn<T> = (props: RenderItemProps<T>) => React.ReactNode;\n\nexport type ItemDragEventHandler = (\n index: number,\n event: React.DragEvent<HTMLDivElement>\n) => void;\n\nexport type ItemListProps<T> = {\n // Total item count\n itemCount: number;\n rowHeight: number;\n // Offset of the top item in the items array\n offset: number;\n // Item object format expected by the default renderItem function\n // Can be anything as long as it's supported by the renderItem\n // Default renderItem will look for a `displayValue` property, fallback\n // to the `value` property, or stringify the object if neither are defined\n items: readonly T[];\n // Whether clicking a selected item should deselect in the item list or not. Defaults to true\n isDeselectOnClick: boolean;\n // Whether selection requires a double click or not\n isDoubleClickSelect: boolean;\n // Whether to allow dragging to change the selection after clicking\n isDragSelect: boolean;\n // Whether to allow multiple selections in this item list\n isMultiSelect: boolean;\n // Set to true if you want the list to scroll when new items are added and it's already at the bottom\n isStickyBottom: boolean;\n // Fired when an item gets focused\n onFocusChange(index: number | null): void;\n\n // Fired when an item is clicked. With multiple selection, fired on double click.\n onSelect(index: number, event: React.SyntheticEvent): void;\n onSelectionChange(ranges: readonly Range[]): void;\n onViewportChange(topRow: number, bottomRow: number): void;\n overscanCount: number;\n selectedRanges: readonly Range[];\n disableSelect: boolean;\n renderItem: RenderItemFn<T>;\n focusSelector: string;\n 'data-testid'?: string;\n};\n\ntype ItemListState = {\n focusIndex: number | null;\n mouseDownIndex: number | null;\n selectedRanges: readonly Range[];\n overscanStartIndex: number;\n height: number | null;\n isDragging: boolean;\n isStuckToBottom: boolean;\n scrollOffset: number | null;\n};\n\n/**\n * Show items in a long scrollable list.\n * Can be navigated via keyboard or mouse.\n */\nexport class ItemList<T> extends PureComponent<\n ItemListProps<T>,\n ItemListState\n> {\n static CACHE_SIZE = 1000;\n\n static DEFAULT_ROW_HEIGHT = 20;\n\n // By drawing an additional 10 items on each side, tab/keyboard navigation works better (as the next element exists)\n static DEFAULT_OVERSCAN = 10;\n\n static defaultProps = {\n offset: 0,\n items: [],\n rowHeight: ItemList.DEFAULT_ROW_HEIGHT,\n\n isDeselectOnClick: true,\n\n isDoubleClickSelect: false,\n\n isDragSelect: true,\n\n isMultiSelect: false,\n\n isStickyBottom: false,\n\n disableSelect: false,\n\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\n overscanCount: ItemList.DEFAULT_OVERSCAN,\n\n renderItem: ItemList.renderItem,\n selectedRanges: [],\n\n focusSelector: '.item-list-item',\n\n 'data-testid': undefined,\n };\n\n static renderItem<P extends DefaultListItem>({\n item,\n }: RenderItemProps<P>): JSX.Element {\n return (\n <div className=\"item-list-item-content\">\n {item != null && (item.displayValue ?? item.value ?? `${item}`)}\n </div>\n );\n }\n\n constructor(props: ItemListProps<T>) {\n super(props);\n\n this.handleItemBlur = this.handleItemBlur.bind(this);\n this.handleItemContextMenu = this.handleItemContextMenu.bind(this);\n this.handleItemFocus = this.handleItemFocus.bind(this);\n this.handleItemDoubleClick = this.handleItemDoubleClick.bind(this);\n this.handleItemMouseDown = this.handleItemMouseDown.bind(this);\n this.handleItemMouseMove = this.handleItemMouseMove.bind(this);\n this.handleItemMouseUp = this.handleItemMouseUp.bind(this);\n this.handleItemsRendered = this.handleItemsRendered.bind(this);\n this.handleWindowMouseUp = this.handleWindowMouseUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleScroll = this.handleScroll.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.renderInnerElement = this.renderInnerElement.bind(this);\n\n this.list = React.createRef();\n this.listContainer = React.createRef();\n\n const { isStickyBottom, selectedRanges } = props;\n\n this.state = {\n focusIndex: null,\n mouseDownIndex: null,\n selectedRanges,\n overscanStartIndex: 0,\n height: null,\n isDragging: false,\n isStuckToBottom: isStickyBottom,\n scrollOffset: null,\n };\n }\n\n componentDidUpdate(\n prevProps: ItemListProps<T>,\n prevState: ItemListState\n ): void {\n const { selectedRanges: propSelectedRanges, itemCount } = this.props;\n const {\n focusIndex,\n isStuckToBottom,\n scrollOffset,\n height,\n selectedRanges,\n } = this.state;\n if (isStuckToBottom && !this.isListAtBottom() && itemCount > 0) {\n this.scrollToBottom();\n }\n\n if (\n scrollOffset !== prevState.scrollOffset ||\n height !== prevState.height\n ) {\n this.sendViewportUpdate();\n }\n\n if (\n propSelectedRanges !== prevProps.selectedRanges &&\n propSelectedRanges !== selectedRanges\n ) {\n this.setSelectedRanges(propSelectedRanges);\n } else if (selectedRanges !== prevState.selectedRanges) {\n const { onSelectionChange } = this.props;\n onSelectionChange(selectedRanges);\n }\n\n if (focusIndex !== prevState.focusIndex) {\n const { onFocusChange } = this.props;\n onFocusChange(focusIndex);\n }\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('mouseup', this.handleWindowMouseUp);\n }\n\n list: React.RefObject<List>;\n\n listContainer: React.RefObject<HTMLDivElement>;\n\n getItemSelected = memoize(\n (index: number, selectedRanges: readonly Range[]) =>\n RangeUtils.isSelected(selectedRanges, index),\n { max: ItemList.CACHE_SIZE }\n );\n\n getCachedItem = memoize(\n (\n itemIndex: number,\n key: number,\n item: T,\n isFocused: boolean,\n isSelected: boolean,\n renderItem: RenderItemFn<T>,\n style: React.CSSProperties,\n disableSelect: boolean\n ) => {\n const content = renderItem({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n });\n\n return (\n <ItemListItem\n onContextMenu={this.handleItemContextMenu}\n onDoubleClick={this.handleItemDoubleClick}\n onMouseDown={this.handleItemMouseDown}\n onFocus={this.handleItemFocus}\n onBlur={this.handleItemBlur}\n disableSelect={disableSelect}\n onMouseMove={this.handleItemMouseMove}\n onMouseUp={this.handleItemMouseUp}\n isFocused={isFocused}\n isSelected={isSelected}\n itemIndex={itemIndex}\n style={style}\n key={key}\n >\n {content}\n </ItemListItem>\n );\n },\n { max: ItemList.CACHE_SIZE }\n );\n\n getOuterElement = memoize((onKeyDown: React.KeyboardEventHandler) => {\n const component = React.forwardRef<HTMLDivElement>((props, ref) => (\n // We need to add the tabIndex to make sure it is focusable, otherwise we can't get key events\n <div\n ref={ref}\n tabIndex={-1}\n onKeyDown={onKeyDown}\n role=\"presentation\"\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n />\n ));\n component.displayName = 'ItemListOuterElement';\n return component;\n });\n\n getInnerElement = memoize(() => {\n const component = React.forwardRef<HTMLDivElement>((props, ref) => (\n <div\n className=\"item-list-inner-element\"\n ref={ref}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n />\n ));\n component.displayName = 'ItemListInnerElement';\n return component;\n });\n\n getItemData = memoize(\n (\n items: readonly T[],\n selectedRanges: readonly Range[],\n renderItem: RenderItemFn<T>\n ) => ({\n items,\n selectedRanges,\n renderItem,\n })\n );\n\n focus(): void {\n this.listContainer.current?.focus();\n }\n\n restoreScrollPosition(): void {\n const { scrollOffset } = this.state;\n if (scrollOffset != null) {\n // manually restore the scroll containers offset\n // virtual list doesn't restore scrolloffset in a re-render if it's the same\n this.listContainer.current?.scrollTo(0, scrollOffset);\n }\n }\n\n getElement(itemIndex: number): Element | null {\n if (this.listContainer.current == null) {\n return null;\n }\n\n const { focusSelector } = this.props;\n const { overscanStartIndex } = this.state;\n const elements = this.listContainer.current.querySelectorAll(focusSelector);\n const elementIndex = itemIndex - overscanStartIndex;\n return elements[elementIndex];\n }\n\n focusItem(itemIndex: number): void {\n const { disableSelect } = this.props;\n if (disableSelect) return;\n\n this.setState({ focusIndex: itemIndex });\n\n const element = this.getElement(itemIndex);\n if (element instanceof HTMLElement) {\n element.focus();\n }\n }\n\n scrollToItem(itemIndex: number): void {\n const element = this.getElement(itemIndex);\n if (element != null) {\n element.scrollIntoView({ block: 'center' });\n }\n }\n\n handleItemContextMenu(\n itemIndex: number,\n e: React.MouseEvent<HTMLDivElement>\n ): void {\n // Update the selection, but don't consume the mouse event - it will trigger the context menu\n const { selectedRanges } = this.state;\n const isSelected = RangeUtils.isSelected(selectedRanges, itemIndex);\n\n // 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\n const isModifierDown =\n isSelected || ContextActionUtils.isModifierKeyDown(e);\n this.toggleSelect(itemIndex, e.shiftKey, isModifierDown, false);\n }\n\n handleItemDoubleClick(itemIndex: number, e: React.MouseEvent): void {\n const { isDoubleClickSelect, onSelect } = this.props;\n\n if (isDoubleClickSelect) {\n this.setState(\n ({ selectedRanges }) => ({\n selectedRanges: RangeUtils.selectRange(selectedRanges, [\n itemIndex,\n itemIndex,\n ]),\n }),\n () => {\n onSelect(itemIndex, e);\n }\n );\n }\n }\n\n handleItemMouseDown(index: number, e: React.MouseEvent): void {\n const { selectedRanges } = this.state;\n\n if (\n e.target instanceof HTMLElement &&\n ['button', 'select', 'input', 'textarea'].indexOf(\n e.target.tagName.toLowerCase()\n ) !== -1\n ) {\n // allow these elements to do their own behaviours\n return;\n }\n\n if (e.button === 2 && selectedRanges.length === 0) {\n // allow right click to act as a selection if selection is empty\n this.focusItem(index);\n this.selectItem(index);\n return;\n }\n\n if (e.button != null && e.button !== 0) {\n return;\n }\n\n this.setState({ mouseDownIndex: index });\n\n window.addEventListener('mouseup', this.handleWindowMouseUp);\n\n // Leave selection until mouse up, to allow for dragging behaviour\n }\n\n handleItemBlur(itemIndex: number, e: React.FocusEvent): void {\n log.debug2('item blur', itemIndex, e.currentTarget, e.relatedTarget);\n if (\n !e.relatedTarget ||\n (this.listContainer.current &&\n e.relatedTarget instanceof HTMLElement &&\n !this.listContainer.current.contains(e.relatedTarget))\n ) {\n // Next focused element is outside of the ItemList\n this.setState({ focusIndex: null });\n }\n }\n\n handleItemFocus(itemIndex: number, e: React.FocusEvent): void {\n log.debug2('item focus', itemIndex, e.target);\n this.setState(state => {\n const { focusIndex } = state;\n if (focusIndex !== itemIndex) {\n return { focusIndex: itemIndex };\n }\n return null;\n });\n }\n\n handleItemMouseMove(itemIndex: number, e: React.MouseEvent): void {\n const { isDragSelect, isMultiSelect, disableSelect } = this.props;\n const { mouseDownIndex, selectedRanges } = this.state;\n\n if (mouseDownIndex == null || disableSelect) return;\n\n this.setState({ isDragging: true });\n\n if (isDragSelect || mouseDownIndex === itemIndex) {\n this.focusItem(itemIndex);\n\n if (isMultiSelect) {\n if (\n !isDragSelect &&\n !this.getItemSelected(itemIndex, selectedRanges) &&\n !ContextActionUtils.isModifierKeyDown(e)\n ) {\n // If there's already a selection and they select outside of that range while dragging without a modifier key, start a new selection with just the new item\n this.deselectAll();\n }\n this.selectRange([\n Math.min(mouseDownIndex, itemIndex),\n Math.max(mouseDownIndex, itemIndex),\n ]);\n } else {\n this.toggleSelect(\n itemIndex,\n e.shiftKey,\n ContextActionUtils.isModifierKeyDown(e),\n false\n );\n }\n }\n }\n\n handleItemMouseUp(index: number, e: React.MouseEvent): void {\n const { isDeselectOnClick, isDoubleClickSelect, onSelect } = this.props;\n const { mouseDownIndex, isDragging } = this.state;\n\n if (\n e.target instanceof HTMLElement &&\n ['button', 'select', 'input', 'textarea'].indexOf(\n e.target.tagName.toLowerCase()\n ) !== -1\n ) {\n return;\n }\n\n if (mouseDownIndex === index && !isDragging) {\n const isShiftDown = e.shiftKey;\n const isModifierDown = ContextActionUtils.isModifierKeyDown(e);\n this.focusItem(index);\n this.toggleSelect(index, isShiftDown, isModifierDown, isDeselectOnClick);\n\n if (!isDoubleClickSelect && !isShiftDown && !isModifierDown) {\n onSelect(index, e);\n }\n }\n\n this.resetMouseState();\n }\n\n handleItemsRendered({ overscanStartIndex }: ListOnItemsRenderedProps): void {\n this.setState({ overscanStartIndex });\n }\n\n handleResize({ height }: Size): void {\n this.setState({ height });\n }\n\n handleMouseLeave(): void {\n this.setState({ mouseDownIndex: null });\n }\n\n handleWindowMouseUp(): void {\n this.resetMouseState();\n window.removeEventListener('mouseup', this.handleWindowMouseUp);\n }\n\n handleKeyDown(e: React.KeyboardEvent): void {\n const { isMultiSelect, itemCount, onSelect } = this.props;\n const { focusIndex: oldFocus } = this.state;\n let newFocus = oldFocus;\n\n if (e.key === 'Enter' || e.key === ' ') {\n if (!isMultiSelect && newFocus != null) {\n this.setState({ selectedRanges: [[newFocus, newFocus]] }, () => {\n if (newFocus != null) {\n onSelect(newFocus, e);\n }\n });\n }\n return;\n }\n\n if (e.key === 'ArrowUp') {\n if (newFocus != null && newFocus >= 0) {\n newFocus = Math.max(0, newFocus - 1);\n } else {\n newFocus = itemCount - 1;\n }\n } else if (e.key === 'ArrowDown') {\n if (newFocus != null && newFocus >= 0) {\n newFocus = Math.min(newFocus + 1, itemCount - 1);\n } else {\n newFocus = 0;\n }\n } else {\n return;\n }\n\n if (oldFocus !== newFocus) {\n e.stopPropagation();\n e.preventDefault();\n\n this.focusItem(newFocus);\n\n const { selectedRanges } = this.state;\n if (e.shiftKey && selectedRanges.length > 0) {\n const lastRange = selectedRanges[selectedRanges.length - 1];\n this.selectRange([\n Math.min(newFocus, lastRange[0]),\n Math.max(newFocus, lastRange[1]),\n ]);\n } else {\n this.deselectAll();\n if (newFocus !== null) {\n this.selectItem(newFocus);\n } else {\n this.listContainer.current?.focus();\n }\n }\n\n this.scrollIntoView(newFocus);\n }\n }\n\n handleScroll({\n scrollUpdateWasRequested,\n scrollOffset,\n }: ListOnScrollProps): void {\n this.setState(state => {\n if (scrollUpdateWasRequested) {\n // The scroll was caused by scrollTo() or scrollToItem()\n // Don't re-calc isStuckToBottom\n return { scrollOffset } as ItemListState;\n }\n\n const { isStickyBottom } = this.props;\n const { height } = state;\n\n const isStuckToBottom =\n isStickyBottom && this.isListAtBottom({ scrollOffset, height });\n return { isStuckToBottom, scrollOffset } as ItemListState;\n });\n }\n\n resetMouseState(): void {\n this.setState({ mouseDownIndex: null, isDragging: false });\n }\n\n scrollToBottom(): void {\n const { itemCount } = this.props;\n if (this.list.current) {\n this.list.current.scrollToItem(itemCount);\n }\n }\n\n scrollIntoView(itemIndex: number): void {\n if (this.list.current) {\n this.list.current.scrollToItem(itemIndex);\n }\n }\n\n /**\n * @param index The index to toggle selection for\n * @param isShiftDown True if the shift modifier key is down\n * @param isModifierDown True if the meta modifier key is down\n * @param isDeselectable True if item should be deselected if already selected\n */\n toggleSelect(\n index: number,\n isShiftDown: boolean,\n isModifierDown: boolean,\n isDeselectable = true\n ): void {\n const { isMultiSelect } = this.props;\n const { selectedRanges } = this.state;\n\n if (isMultiSelect && isShiftDown && selectedRanges.length > 0) {\n const lastRange = selectedRanges[selectedRanges.length - 1];\n this.selectRange([\n Math.min(lastRange[0], index),\n Math.max(index, lastRange[1]),\n ]);\n } else if (\n isMultiSelect &&\n selectedRanges.length === 1 &&\n selectedRanges[0][0] === index &&\n selectedRanges[0][1] === index\n ) {\n if (isDeselectable) {\n this.deselectItem(index);\n }\n } else if (isMultiSelect && isModifierDown) {\n if (this.getItemSelected(index, selectedRanges)) {\n if (isDeselectable) {\n this.deselectItem(index);\n }\n } else {\n this.selectItem(index);\n }\n } else {\n this.deselectAll();\n this.selectItem(index);\n }\n }\n\n deselectAll(): void {\n const { itemCount } = this.props;\n this.deselectRange([0, itemCount]);\n }\n\n deselectItem(index: number): void {\n this.deselectRange([index, index]);\n }\n\n deselectRange(range: Range): void {\n RangeUtils.validateRange(range);\n\n this.setState(({ selectedRanges }) => ({\n selectedRanges: RangeUtils.deselectRange(selectedRanges, range),\n }));\n }\n\n selectItem(index: number): void {\n const { disableSelect } = this.props;\n if (disableSelect) return;\n\n this.selectRange([index, index]);\n }\n\n selectRange(range: Range): void {\n RangeUtils.validateRange(range);\n\n this.setState(({ selectedRanges }) => ({\n selectedRanges: RangeUtils.selectRange(selectedRanges, range),\n }));\n }\n\n setSelectedRanges(selectedRanges: readonly Range[]): void {\n this.setState({ selectedRanges });\n }\n\n sendViewportUpdate(): void {\n const { scrollOffset, height } = this.state;\n if (scrollOffset != null && height != null) {\n const { onViewportChange, rowHeight } = this.props;\n const topRow = Math.floor(scrollOffset / rowHeight);\n const bottomRow = topRow + Math.ceil(height / rowHeight);\n onViewportChange(topRow, bottomRow);\n }\n }\n\n isListAtBottom(\n {\n scrollOffset,\n height,\n }: Pick<ItemListState, 'scrollOffset' | 'height'> = this.state\n ): boolean {\n if (height == null || scrollOffset == null) {\n return false;\n }\n\n const { itemCount, rowHeight } = this.props;\n return scrollOffset + height >= itemCount * rowHeight;\n }\n\n renderInnerElement({\n index: itemIndex,\n style,\n }: {\n index: number;\n style: React.CSSProperties;\n }): React.ReactElement | null {\n const { items, offset, renderItem, disableSelect } = this.props;\n const { focusIndex, selectedRanges } = this.state;\n if (itemIndex < offset || itemIndex >= offset + items.length) {\n return null;\n }\n\n const item = items[itemIndex - offset];\n return this.getCachedItem(\n itemIndex,\n itemIndex,\n item,\n itemIndex === focusIndex && !disableSelect,\n this.getItemSelected(itemIndex, selectedRanges),\n renderItem,\n style,\n disableSelect\n );\n }\n\n render(): JSX.Element {\n const {\n items,\n itemCount,\n overscanCount,\n renderItem,\n rowHeight,\n 'data-testid': dataTestId,\n } = this.props;\n const { selectedRanges, isStuckToBottom } = this.state;\n return (\n <AutoSizer className=\"item-list-auto-sizer\" onResize={this.handleResize}>\n {({ width, height }) => (\n <List\n className=\"item-list-scroll-pane\"\n height={height}\n width={width}\n initialScrollOffset={isStuckToBottom ? itemCount * rowHeight : 0}\n itemCount={itemCount}\n itemSize={rowHeight}\n // This prop isn't actually used by us, it is passed to the render function by react-window\n // Used here to force a re-render of the List component.\n // Otherwise it doesn't know to call the render again when selection or renderItem changes\n itemData={this.getItemData(items, selectedRanges, renderItem)}\n onScroll={this.handleScroll}\n onItemsRendered={this.handleItemsRendered}\n ref={this.list}\n outerElementType={this.getOuterElement(this.handleKeyDown)}\n outerRef={this.listContainer}\n innerElementType={this.getInnerElement()}\n overscanCount={overscanCount}\n data-testid={dataTestId}\n >\n {this.renderInnerElement}\n </List>\n )}\n </AutoSizer>\n );\n }\n}\n\nexport default ItemList;\n"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { MenuItemDef } from './MenuItem';
|
|
|
3
3
|
import './Menu.scss';
|
|
4
4
|
export type MenuSelectCallback = (itemIndex: number) => void;
|
|
5
5
|
export type MenuProps = {
|
|
6
|
-
items: MenuItemDef[];
|
|
6
|
+
items: readonly MenuItemDef[];
|
|
7
7
|
onSelect?: MenuSelectCallback;
|
|
8
8
|
'data-testid'?: string;
|
|
9
9
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../src/navigation/Menu.tsx"],"names":[],"mappings":";AACA,OAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,aAAa,CAAC;AAErB,MAAM,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../src/navigation/Menu.tsx"],"names":[],"mappings":";AACA,OAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,aAAa,CAAC;AAErB,MAAM,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,wBAAgB,IAAI,CAAC,EACnB,KAAK,EACL,QAA0B,EAC1B,aAAa,EAAE,UAAU,GAC1B,EAAE,SAAS,GAAG,GAAG,CAAC,OAAO,CAiBzB;AAED,eAAe,IAAI,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.js","names":["React","MenuItem","Menu","items","onSelect","undefined","dataTestId","map","item","itemIndex","title"],"sources":["../../src/navigation/Menu.tsx"],"sourcesContent":["import React from 'react';\nimport MenuItem, { MenuItemDef } from './MenuItem';\nimport './Menu.scss';\n\nexport type MenuSelectCallback = (itemIndex: number) => void;\n\nexport type MenuProps = {\n items: MenuItemDef[];\n onSelect?: MenuSelectCallback;\n 'data-testid'?: string;\n};\n\nexport function Menu({\n items,\n onSelect = () => undefined,\n 'data-testid': dataTestId,\n}: MenuProps): JSX.Element {\n return (\n <div className=\"navigation-menu-view\" data-testid={dataTestId}>\n <ul className=\"navigation-menu-list\">\n {items.map((item, itemIndex) => (\n <li key={item.title}>\n <MenuItem\n item={item}\n onSelect={() => {\n onSelect(itemIndex);\n }}\n />\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\nexport default Menu;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAAC,OACnBC,QAAQ;AAAA;AAWf,OAAO,SAASC,IAAI,OAIO;EAAA,IAJN;IACnBC,KAAK;IACLC,QAAQ,EAARA,SAAQ,GAAG,MAAMC,SAAS;IAC1B,aAAa,EAAEC;EACN,CAAC;EACV,oBACE;IAAK,SAAS,EAAC,sBAAsB;IAAC,eAAaA;EAAW,gBAC5D;IAAI,SAAS,EAAC;EAAsB,GACjCH,KAAK,CAACI,GAAG,CAAC,CAACC,IAAI,EAAEC,SAAS,kBACzB;IAAI,GAAG,EAAED,IAAI,CAACE;EAAM,gBAClB,oBAAC,QAAQ;IACP,IAAI,EAAEF,IAAK;IACX,QAAQ,EAAE,MAAM;MACdJ,SAAQ,CAACK,SAAS,CAAC;IACrB;EAAE,EACF,CAEL,CAAC,CACC,CACD;AAEV;AAEA,eAAeP,IAAI"}
|
|
1
|
+
{"version":3,"file":"Menu.js","names":["React","MenuItem","Menu","items","onSelect","undefined","dataTestId","map","item","itemIndex","title"],"sources":["../../src/navigation/Menu.tsx"],"sourcesContent":["import React from 'react';\nimport MenuItem, { MenuItemDef } from './MenuItem';\nimport './Menu.scss';\n\nexport type MenuSelectCallback = (itemIndex: number) => void;\n\nexport type MenuProps = {\n items: readonly MenuItemDef[];\n onSelect?: MenuSelectCallback;\n 'data-testid'?: string;\n};\n\nexport function Menu({\n items,\n onSelect = () => undefined,\n 'data-testid': dataTestId,\n}: MenuProps): JSX.Element {\n return (\n <div className=\"navigation-menu-view\" data-testid={dataTestId}>\n <ul className=\"navigation-menu-list\">\n {items.map((item, itemIndex) => (\n <li key={item.title}>\n <MenuItem\n item={item}\n onSelect={() => {\n onSelect(itemIndex);\n }}\n />\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\nexport default Menu;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAAC,OACnBC,QAAQ;AAAA;AAWf,OAAO,SAASC,IAAI,OAIO;EAAA,IAJN;IACnBC,KAAK;IACLC,QAAQ,EAARA,SAAQ,GAAG,MAAMC,SAAS;IAC1B,aAAa,EAAEC;EACN,CAAC;EACV,oBACE;IAAK,SAAS,EAAC,sBAAsB;IAAC,eAAaA;EAAW,gBAC5D;IAAI,SAAS,EAAC;EAAsB,GACjCH,KAAK,CAACI,GAAG,CAAC,CAACC,IAAI,EAAEC,SAAS,kBACzB;IAAI,GAAG,EAAED,IAAI,CAACE;EAAM,gBAClB,oBAAC,QAAQ;IACP,IAAI,EAAEF,IAAK;IACX,QAAQ,EAAE,MAAM;MACdJ,SAAQ,CAACK,SAAS,CAAC;IACrB;EAAE,EACF,CAEL,CAAC,CACC,CACD;AAEV;AAEA,eAAeP,IAAI"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/components",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.29.0",
|
|
4
4
|
"description": "Deephaven React component library",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -23,10 +23,10 @@
|
|
|
23
23
|
"build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist ./scss/BaseStyleSheet.scss:./css/BaseStyleSheet.css"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@deephaven/icons": "^0.
|
|
27
|
-
"@deephaven/log": "^0.
|
|
28
|
-
"@deephaven/react-hooks": "^0.
|
|
29
|
-
"@deephaven/utils": "^0.
|
|
26
|
+
"@deephaven/icons": "^0.29.0",
|
|
27
|
+
"@deephaven/log": "^0.29.0",
|
|
28
|
+
"@deephaven/react-hooks": "^0.29.0",
|
|
29
|
+
"@deephaven/utils": "^0.29.0",
|
|
30
30
|
"@fortawesome/fontawesome-svg-core": "^6.2.1",
|
|
31
31
|
"@fortawesome/react-fontawesome": "^0.2.0",
|
|
32
32
|
"bootstrap": "4.6.2",
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
"react-dom": "^17.x"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@deephaven/mocks": "^0.
|
|
53
|
-
"@deephaven/tsconfig": "^0.
|
|
52
|
+
"@deephaven/mocks": "^0.29.0",
|
|
53
|
+
"@deephaven/tsconfig": "^0.29.0"
|
|
54
54
|
},
|
|
55
55
|
"files": [
|
|
56
56
|
"dist",
|
|
@@ -63,5 +63,5 @@
|
|
|
63
63
|
"publishConfig": {
|
|
64
64
|
"access": "public"
|
|
65
65
|
},
|
|
66
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "447421fd5f7a5626558399ec20c08ca1f7c0013e"
|
|
67
67
|
}
|