@deephaven/components 1.12.0 → 1.12.1
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.
|
@@ -2,7 +2,7 @@ import type { NavTabItem } from './NavTabList';
|
|
|
2
2
|
import './DashboardList.scss';
|
|
3
3
|
export interface DashboardListProps {
|
|
4
4
|
onSelect: (tab: NavTabItem) => void;
|
|
5
|
-
tabs?: NavTabItem[];
|
|
5
|
+
tabs?: readonly NavTabItem[];
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
8
|
* Display a search field and a list of dashboard tabs
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardList.d.ts","sourceRoot":"","sources":["../../src/navigation/DashboardList.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,sBAAsB,CAAC;AAG9B,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACpC,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"DashboardList.d.ts","sourceRoot":"","sources":["../../src/navigation/DashboardList.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,sBAAsB,CAAC;AAG9B,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACpC,IAAI,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAoIpE;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardList.js","names":["React","useCallback","useEffect","useMemo","useRef","useState","FontAwesomeIcon","EMPTY_ARRAY","Button","SearchInput","GLOBAL_SHORTCUTS","jsx","_jsx","jsxs","_jsxs","DashboardList","props","onSelect","tabs","searchText","setSearchText","focusedIndex","setFocusedIndex","searchField","listRef","itemRefs","_searchField$current","current","focus","_itemRefs$current$foc","scrollIntoView","behavior","block","handleSearchChange","e","target","value","handleTabSelect","tab","handleMouseDown","event","preventDefault","filteredTabs","filter","title","toLowerCase","includes","sort","a","b","_a$title$localeCompar","localeCompare","handleSearchKeyDown","key","length","prev","selectedIndex","tabElements","map","index","_tab$key","ref","el","onMouseDown","children","kind","concat","onClick","className","style","transition","icon","isValidElement","errorElement","placeholder","endPlaceholder","OPEN_DASHBOARD_LIST","getDisplayText","onChange","onKeyDown"],"sources":["../../src/navigation/DashboardList.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { type IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { EMPTY_ARRAY } from '@deephaven/utils';\nimport { Button } from '../Button';\nimport SearchInput from '../SearchInput';\nimport type { NavTabItem } from './NavTabList';\nimport './DashboardList.scss';\nimport { GLOBAL_SHORTCUTS } from '../shortcuts';\n\nexport interface DashboardListProps {\n onSelect: (tab: NavTabItem) => void;\n tabs?: NavTabItem[];\n}\n\n/**\n * Display a search field and a list of dashboard tabs\n * @param props The tabs and handlers to use for this list\n * @returns A JSX element for the list of dashboard tabs, along with search\n */\nexport function DashboardList(props: DashboardListProps): JSX.Element {\n const { onSelect, tabs = EMPTY_ARRAY } = props;\n const [searchText, setSearchText] = useState('');\n const [focusedIndex, setFocusedIndex] = useState(0);\n const searchField = useRef<SearchInput>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const itemRefs = useRef<(HTMLLIElement | null)[]>([]);\n\n useEffect(() => {\n searchField.current?.focus();\n }, []);\n\n useEffect(() => {\n setFocusedIndex(0);\n }, [searchText]);\n\n useEffect(() => {\n if (focusedIndex >= 0 && itemRefs.current[focusedIndex]) {\n itemRefs.current[focusedIndex]?.scrollIntoView({\n behavior: 'auto',\n block: 'nearest',\n });\n }\n }, [focusedIndex]);\n\n const handleSearchChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\n setSearchText(e.target.value);\n }, []);\n\n const handleTabSelect = useCallback(\n (tab: NavTabItem) => {\n onSelect(tab);\n },\n [onSelect]\n );\n\n const handleMouseDown = useCallback((event: React.MouseEvent) => {\n // Prevent mousedown from taking focus away from the search input\n event.preventDefault();\n }, []);\n\n const filteredTabs = useMemo(\n () =>\n tabs.filter(tab =>\n tab.title.toLowerCase().includes(searchText.toLowerCase())\n ),\n [searchText, tabs]\n ).sort((a, b) => a.title.localeCompare(b.title) ?? 0);\n\n const handleSearchKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === 'ArrowDown' && filteredTabs.length > 0) {\n event.preventDefault();\n setFocusedIndex(prev =>\n prev === -1 ? 0 : (prev + 1) % filteredTabs.length\n );\n } else if (event.key === 'ArrowUp' && filteredTabs.length > 0) {\n event.preventDefault();\n setFocusedIndex(prev => {\n if (prev === -1) return filteredTabs.length - 1;\n return (prev - 1 + filteredTabs.length) % filteredTabs.length;\n });\n } else if (event.key === 'Enter' && filteredTabs.length > 0) {\n event.preventDefault();\n const selectedIndex = focusedIndex >= 0 ? focusedIndex : 0;\n handleTabSelect(filteredTabs[selectedIndex]);\n } else if (event.key === 'Tab') {\n event.preventDefault();\n }\n },\n [filteredTabs, focusedIndex, handleTabSelect]\n );\n\n const tabElements = useMemo(\n () =>\n filteredTabs.map((tab, index) => (\n <li\n key={tab.key}\n ref={(el: HTMLLIElement | null) => {\n itemRefs.current[index] = el;\n }}\n onMouseDown={handleMouseDown}\n >\n <Button\n kind=\"ghost\"\n data-testid={`dashboard-list-item-${tab.key ?? ''}-button`}\n onClick={() => handleTabSelect(tab)}\n className={focusedIndex === index ? 'focused' : ''}\n style={{ transition: 'none' }}\n >\n {tab.icon ? (\n <span className=\"dashboard-list-item-icon\">\n {React.isValidElement(tab.icon) ? (\n tab.icon\n ) : (\n <FontAwesomeIcon icon={tab.icon as IconDefinition} />\n )}\n </span>\n ) : null}\n {tab.title}\n </Button>\n </li>\n )),\n [filteredTabs, handleTabSelect, focusedIndex, handleMouseDown]\n );\n\n const errorElement = useMemo(\n () =>\n tabElements.length === 0 ? <span>No open dashboard found.</span> : null,\n [tabElements]\n );\n\n return (\n <div className=\"dashboard-list-container d-flex flex-column\">\n <div className=\"dashboard-list-header\">\n <SearchInput\n value={searchText}\n placeholder=\"Find open dashboard\"\n endPlaceholder={GLOBAL_SHORTCUTS.OPEN_DASHBOARD_LIST.getDisplayText()}\n onChange={handleSearchChange}\n onKeyDown={handleSearchKeyDown}\n ref={searchField}\n />\n </div>\n <ul className=\"dashboard-list flex-grow-1\" ref={listRef}>\n {errorElement && (\n <li className=\"dashboard-list-message\">{errorElement}</li>\n )}\n {!errorElement && tabElements}\n </ul>\n </div>\n );\n}\n\nexport default DashboardList;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"DashboardList.js","names":["React","useCallback","useEffect","useMemo","useRef","useState","FontAwesomeIcon","EMPTY_ARRAY","Button","SearchInput","GLOBAL_SHORTCUTS","jsx","_jsx","jsxs","_jsxs","DashboardList","props","onSelect","tabs","searchText","setSearchText","focusedIndex","setFocusedIndex","searchField","listRef","itemRefs","_searchField$current","current","focus","_itemRefs$current$foc","scrollIntoView","behavior","block","handleSearchChange","e","target","value","handleTabSelect","tab","handleMouseDown","event","preventDefault","filteredTabs","filter","title","toLowerCase","includes","sort","a","b","_a$title$localeCompar","localeCompare","handleSearchKeyDown","key","length","prev","selectedIndex","tabElements","map","index","_tab$key","ref","el","onMouseDown","children","kind","concat","onClick","className","style","transition","icon","isValidElement","errorElement","placeholder","endPlaceholder","OPEN_DASHBOARD_LIST","getDisplayText","onChange","onKeyDown"],"sources":["../../src/navigation/DashboardList.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { type IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { EMPTY_ARRAY } from '@deephaven/utils';\nimport { Button } from '../Button';\nimport SearchInput from '../SearchInput';\nimport type { NavTabItem } from './NavTabList';\nimport './DashboardList.scss';\nimport { GLOBAL_SHORTCUTS } from '../shortcuts';\n\nexport interface DashboardListProps {\n onSelect: (tab: NavTabItem) => void;\n tabs?: readonly NavTabItem[];\n}\n\n/**\n * Display a search field and a list of dashboard tabs\n * @param props The tabs and handlers to use for this list\n * @returns A JSX element for the list of dashboard tabs, along with search\n */\nexport function DashboardList(props: DashboardListProps): JSX.Element {\n const { onSelect, tabs = EMPTY_ARRAY } = props;\n const [searchText, setSearchText] = useState('');\n const [focusedIndex, setFocusedIndex] = useState(0);\n const searchField = useRef<SearchInput>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const itemRefs = useRef<(HTMLLIElement | null)[]>([]);\n\n useEffect(() => {\n searchField.current?.focus();\n }, []);\n\n useEffect(() => {\n setFocusedIndex(0);\n }, [searchText]);\n\n useEffect(() => {\n if (focusedIndex >= 0 && itemRefs.current[focusedIndex]) {\n itemRefs.current[focusedIndex]?.scrollIntoView({\n behavior: 'auto',\n block: 'nearest',\n });\n }\n }, [focusedIndex]);\n\n const handleSearchChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\n setSearchText(e.target.value);\n }, []);\n\n const handleTabSelect = useCallback(\n (tab: NavTabItem) => {\n onSelect(tab);\n },\n [onSelect]\n );\n\n const handleMouseDown = useCallback((event: React.MouseEvent) => {\n // Prevent mousedown from taking focus away from the search input\n event.preventDefault();\n }, []);\n\n const filteredTabs = useMemo(\n () =>\n tabs.filter(tab =>\n tab.title.toLowerCase().includes(searchText.toLowerCase())\n ),\n [searchText, tabs]\n ).sort((a, b) => a.title.localeCompare(b.title) ?? 0);\n\n const handleSearchKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === 'ArrowDown' && filteredTabs.length > 0) {\n event.preventDefault();\n setFocusedIndex(prev =>\n prev === -1 ? 0 : (prev + 1) % filteredTabs.length\n );\n } else if (event.key === 'ArrowUp' && filteredTabs.length > 0) {\n event.preventDefault();\n setFocusedIndex(prev => {\n if (prev === -1) return filteredTabs.length - 1;\n return (prev - 1 + filteredTabs.length) % filteredTabs.length;\n });\n } else if (event.key === 'Enter' && filteredTabs.length > 0) {\n event.preventDefault();\n const selectedIndex = focusedIndex >= 0 ? focusedIndex : 0;\n handleTabSelect(filteredTabs[selectedIndex]);\n } else if (event.key === 'Tab') {\n event.preventDefault();\n }\n },\n [filteredTabs, focusedIndex, handleTabSelect]\n );\n\n const tabElements = useMemo(\n () =>\n filteredTabs.map((tab, index) => (\n <li\n key={tab.key}\n ref={(el: HTMLLIElement | null) => {\n itemRefs.current[index] = el;\n }}\n onMouseDown={handleMouseDown}\n >\n <Button\n kind=\"ghost\"\n data-testid={`dashboard-list-item-${tab.key ?? ''}-button`}\n onClick={() => handleTabSelect(tab)}\n className={focusedIndex === index ? 'focused' : ''}\n style={{ transition: 'none' }}\n >\n {tab.icon ? (\n <span className=\"dashboard-list-item-icon\">\n {React.isValidElement(tab.icon) ? (\n tab.icon\n ) : (\n <FontAwesomeIcon icon={tab.icon as IconDefinition} />\n )}\n </span>\n ) : null}\n {tab.title}\n </Button>\n </li>\n )),\n [filteredTabs, handleTabSelect, focusedIndex, handleMouseDown]\n );\n\n const errorElement = useMemo(\n () =>\n tabElements.length === 0 ? <span>No open dashboard found.</span> : null,\n [tabElements]\n );\n\n return (\n <div className=\"dashboard-list-container d-flex flex-column\">\n <div className=\"dashboard-list-header\">\n <SearchInput\n value={searchText}\n placeholder=\"Find open dashboard\"\n endPlaceholder={GLOBAL_SHORTCUTS.OPEN_DASHBOARD_LIST.getDisplayText()}\n onChange={handleSearchChange}\n onKeyDown={handleSearchKeyDown}\n ref={searchField}\n />\n </div>\n <ul className=\"dashboard-list flex-grow-1\" ref={listRef}>\n {errorElement && (\n <li className=\"dashboard-list-message\">{errorElement}</li>\n )}\n {!errorElement && tabElements}\n </ul>\n </div>\n );\n}\n\nexport default DashboardList;\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/components",
|
|
3
|
-
"version": "1.12.
|
|
3
|
+
"version": "1.12.1",
|
|
4
4
|
"description": "Deephaven React component library",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -78,5 +78,5 @@
|
|
|
78
78
|
"publishConfig": {
|
|
79
79
|
"access": "public"
|
|
80
80
|
},
|
|
81
|
-
"gitHead": "
|
|
81
|
+
"gitHead": "596cbf468ab8d8222872bf620493f12dc75e7d0a"
|
|
82
82
|
}
|