From 42d6ac6422ff4fe08d733bb89911accc9d90942c Mon Sep 17 00:00:00 2001 From: Tom Butcher Date: Fri, 21 Aug 2026 21:11:15 +0100 Subject: [PATCH] Add Dashboard Object Tools Context and Chevron Icons - Introduced DashboardObjectToolsContext and DashboardObjectToolsProvider for managing object tools state within the dashboard. - Added ChevronLeftIcon and ChevronRightIcon components for navigation buttons, enhancing user interface consistency. - Updated ObjectTableNavigationButtons to utilize new chevron icons and improved layout for better user experience. - Refactored KeyboardShortcut and Tooltip components for cleaner code and improved functionality. --- assets/icons/chevronlefticon.svg | 8 ++ src/App.jsx | 3 + src/components/Dashboard/Layout.jsx | 5 +- .../Dashboard/common/KeyboardShortcut.jsx | 9 +-- .../common/ObjectTableNavigationButtons.jsx | 33 +++++--- src/components/Dashboard/common/Tooltip.jsx | 47 +++++------ .../context/DashboardObjectToolsContext.jsx | 78 +++++++++++++++++++ src/components/Icons/ChevronLeftIcon.jsx | 6 ++ 8 files changed, 146 insertions(+), 43 deletions(-) create mode 100644 assets/icons/chevronlefticon.svg create mode 100644 src/components/Dashboard/context/DashboardObjectToolsContext.jsx create mode 100644 src/components/Icons/ChevronLeftIcon.jsx diff --git a/assets/icons/chevronlefticon.svg b/assets/icons/chevronlefticon.svg new file mode 100644 index 00000000..d81c9ddd --- /dev/null +++ b/assets/icons/chevronlefticon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/App.jsx b/src/App.jsx index fc55d159..8dc98e86 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -19,6 +19,7 @@ import { } from './components/Dashboard/context/SpotlightContext.jsx' import { ActionsModalProvider } from './components/Dashboard/context/ActionsModalContext.jsx' import { ActionsProvider } from './components/Dashboard/context/ActionsContext.jsx' +import { DashboardObjectToolsProvider } from './components/Dashboard/context/DashboardObjectToolsContext.jsx' import MissingPlaceholder from './components/Dashboard/common/MissingPlaceholder.jsx' import { @@ -93,6 +94,7 @@ const AppContent = () => { + { } /> + diff --git a/src/components/Dashboard/Layout.jsx b/src/components/Dashboard/Layout.jsx index d4cac784..adf0353d 100644 --- a/src/components/Dashboard/Layout.jsx +++ b/src/components/Dashboard/Layout.jsx @@ -13,6 +13,7 @@ import DeveloperSidebar from './Developer/DeveloperSidebar' import DashboardSidebarSplitter from './common/DashboardSidebarSplitter' import { useThemeContext } from './context/ThemeContext' import { MessageProvider } from './context/MessageContext' +import { useDashboardObjectToolsContext } from './context/DashboardObjectToolsContext' const { Content } = Layout @@ -26,6 +27,7 @@ const DashboardLayout = ({ children }) => { const isDeveloper = location.pathname.startsWith('/dashboard/developer') const { isDarkMode } = useThemeContext() + const { currentObjectTools } = useDashboardObjectToolsContext() const sidebar = isProduction ? ( @@ -57,8 +59,9 @@ const DashboardLayout = ({ children }) => { > - + + {currentObjectTools} {children} diff --git a/src/components/Dashboard/common/KeyboardShortcut.jsx b/src/components/Dashboard/common/KeyboardShortcut.jsx index c371541e..abd8fd41 100644 --- a/src/components/Dashboard/common/KeyboardShortcut.jsx +++ b/src/components/Dashboard/common/KeyboardShortcut.jsx @@ -1,4 +1,4 @@ -import { useEffect, useRef, cloneElement, useMemo } from 'react' +import { useEffect, useRef, useMemo } from 'react' import PropTypes from 'prop-types' import loglevel from 'loglevel' import config from '../../../config' @@ -50,7 +50,6 @@ const KeyboardShortcut = ({ onTrigger, log = false }) => { - const childRef = useRef() const pressedKeysRef = useRef(new Set()) const shortcutKeys = useMemo(() => parseShortcut(shortcut), [shortcut]) @@ -94,8 +93,6 @@ const KeyboardShortcut = ({ } }, [shortcutKeys, onTrigger, log]) - const element = cloneElement(children, { ref: childRef }) - if (hint) { var osSpecificHint = hint.replaceAll('ALT', '⌥') @@ -104,11 +101,11 @@ const KeyboardShortcut = ({ hideBorder title={{osSpecificHint}} > - {element} + {children} ) } - return element + return children } KeyboardShortcut.propTypes = { diff --git a/src/components/Dashboard/common/ObjectTableNavigationButtons.jsx b/src/components/Dashboard/common/ObjectTableNavigationButtons.jsx index 4109c641..a8798e00 100644 --- a/src/components/Dashboard/common/ObjectTableNavigationButtons.jsx +++ b/src/components/Dashboard/common/ObjectTableNavigationButtons.jsx @@ -1,8 +1,7 @@ import { useContext, useEffect, useState, useCallback, useRef } from 'react' import { Button, Divider, Flex, Space } from 'antd' import { useSearchParams } from 'react-router-dom' -import ArrowLeftIcon from '../../Icons/ArrowLeftIcon.jsx' -import ArrowRightIcon from '../../Icons/ArrowRightIcon.jsx' + import PropTypes from 'prop-types' import { ApiServerContext } from '../context/ApiServerContext' import { AuthContext } from '../context/AuthContext' @@ -11,6 +10,8 @@ import { useTableStatePersistence } from '../context/TableStateContext' import KeyboardShortcut from './KeyboardShortcut.jsx' +import ChevronLeftIcon from '../../Icons/ChevronLeftIcon.jsx' +import ChevronRightIcon from '../../Icons/ChevronRightIcon.jsx' const ObjectTableNavigationButtons = ({ disabled, @@ -25,10 +26,10 @@ const ObjectTableNavigationButtons = ({ const [loading, setLoading] = useState(false) const { getPersistedFilter, getPersistedSorter } = useTableStatePersistence({ - scope: objectType, - useFilterInSession: true, - useSortInSession: true - }) + scope: objectType, + useFilterInSession: true, + useSortInSession: true + }) const getObjectNeighborsRef = useRef(getObjectNeighbors) getObjectNeighborsRef.current = getObjectNeighbors @@ -114,15 +115,21 @@ const ObjectTableNavigationButtons = ({ {showEndingDivider && ( )} - +