From 0f04c31ffb4d4415a97babcecebe4ea7bce4e1a3 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 15 Aug 2025 20:41:03 +1000 Subject: [PATCH] [UI] Search shortcut (#10181) * Add search shortcut - Use '/' to open search drawer * Add user setting for spotlight * Hide spotlight if disabled * Updated playwright tests --- docs/docs/settings/user.md | 1 + src/backend/InvenTree/common/setting/user.py | 6 +++++ src/frontend/src/components/nav/Header.tsx | 24 +++++++++++++++-- src/frontend/src/components/nav/Layout.tsx | 26 +++++++++++-------- .../src/pages/Index/Settings/UserSettings.tsx | 1 + src/frontend/tests/pui_general.spec.ts | 9 +++++-- 6 files changed, 52 insertions(+), 15 deletions(-) diff --git a/docs/docs/settings/user.md b/docs/docs/settings/user.md index 5028508ead..39871b25d3 100644 --- a/docs/docs/settings/user.md +++ b/docs/docs/settings/user.md @@ -21,6 +21,7 @@ The *Display Settings* screen shows general display configuration options: {{ usersetting("ICONS_IN_NAVBAR") }} {{ usersetting("STICKY_HEADER") }} {{ usersetting("STICKY_TABLE_HEADER") }} +{{ usersetting("SHOW_SPOTLIGHT") }} {{ usersetting("DATE_DISPLAY_FORMAT") }} {{ usersetting("FORMS_CLOSE_USING_ESCAPE") }} {{ usersetting("DISPLAY_STOCKTAKE_TAB") }} diff --git a/src/backend/InvenTree/common/setting/user.py b/src/backend/InvenTree/common/setting/user.py index 73cdf769fe..793f9bae1b 100644 --- a/src/backend/InvenTree/common/setting/user.py +++ b/src/backend/InvenTree/common/setting/user.py @@ -191,6 +191,12 @@ USER_SETTINGS: dict[str, InvenTreeSettingsKeyType] = { 'default': False, 'validator': bool, }, + 'SHOW_SPOTLIGHT': { + 'name': _('Show Spotlight'), + 'description': _('Enable spotlight navigation functionality'), + 'default': True, + 'validator': bool, + }, 'ICONS_IN_NAVBAR': { 'name': _('Navigation Icons'), 'description': _('Display icons in the navigation bar'), diff --git a/src/frontend/src/components/nav/Header.tsx b/src/frontend/src/components/nav/Header.tsx index 4b5a3ed9c6..edbee51df6 100644 --- a/src/frontend/src/components/nav/Header.tsx +++ b/src/frontend/src/components/nav/Header.tsx @@ -8,7 +8,11 @@ import { Tooltip, UnstyledButton } from '@mantine/core'; -import { useDisclosure, useDocumentVisibility } from '@mantine/hooks'; +import { + useDisclosure, + useDocumentVisibility, + useHotkeys +} from '@mantine/hooks'; import { IconBell, IconSearch } from '@tabler/icons-react'; import { useQuery } from '@tanstack/react-query'; import { type ReactNode, useEffect, useMemo, useState } from 'react'; @@ -49,11 +53,27 @@ export function Header() { const [server] = useServerApiState(useShallow((state) => [state.server])); const [navDrawerOpened, { open: openNavDrawer, close: closeNavDrawer }] = useDisclosure(navigationOpen); + const [ searchDrawerOpened, { open: openSearchDrawer, close: closeSearchDrawer } ] = useDisclosure(false); + useHotkeys([ + [ + '/', + () => { + openSearchDrawer(); + } + ], + [ + 'mod+/', + () => { + openSearchDrawer(); + } + ] + ]); + const [ notificationDrawerOpened, { open: openNotificationDrawer, close: closeNotificationDrawer } @@ -154,7 +174,7 @@ export function Header() { - + {userSettings.isSet('SHOW_SPOTLIGHT') && } {globalSettings.isSet('BARCODE_ENABLE') && }