diff --git a/src/component/1d/BrushTracker1D.tsx b/src/component/1d/BrushTracker1D.tsx index 69a84ddd1..a65410d7b 100644 --- a/src/component/1d/BrushTracker1D.tsx +++ b/src/component/1d/BrushTracker1D.tsx @@ -211,6 +211,9 @@ export function BrushTracker1D({ children }: Required) { payload: brushData, }); break; + case options.databaseRangesSelection.id: + propagateEvent(); + break; case options.exclusionZones.id: dispatch({ type: 'ADD_EXCLUSION_ZONE', @@ -266,7 +269,7 @@ export function BrushTracker1D({ children }: Required) { } } - const tools = new Set(['zoom', 'databaseRangesSelection']); + const tools = new Set(['zoom']); const enableDefaultBrush = !tools.has(selectedTool) || (tools.has(selectedTool) && !brushData.shiftKey); diff --git a/src/component/panels/databasePanel/DatabasePanel.tsx b/src/component/panels/databasePanel/DatabasePanel.tsx index 42185f738..b27a12616 100644 --- a/src/component/panels/databasePanel/DatabasePanel.tsx +++ b/src/component/panels/databasePanel/DatabasePanel.tsx @@ -20,9 +20,11 @@ import { initiateDatabase, prepareData, } from '../../../data/data1d/database.js'; +import type { BrushTrackerData } from '../../EventsTrackers/BrushTracker.tsx'; import { useChartData } from '../../context/ChartContext.js'; import { useCore } from '../../context/CoreContext.js'; import { useDispatch } from '../../context/DispatchContext.js'; +import { useMapKeyModifiers } from '../../context/KeyModifierContext.tsx'; import { usePreferences } from '../../context/PreferencesContext.js'; import { useToaster } from '../../context/ToasterContext.js'; import { EmptyText } from '../../elements/EmptyText.js'; @@ -192,22 +194,29 @@ function DatabasePanelInner({ void runner(); }, [idCode, keywords, search, toaster]); + const { getModifiersKey, primaryKeyIdentifier } = useMapKeyModifiers(); useEffect(() => { - function handle(event: { range: [number, number] }) { - if (selectedTool === options.databaseRangesSelection.id) { - setKeywords((prevState) => { - const oldKeywords = prevState.searchKeywords - ? prevState.searchKeywords.split(' ') - : []; - const [from, to] = event.range; - const searchKeywords = [ - ...oldKeywords, - `delta:${format(from)}..${format(to)}`, - ].join(' '); - return { ...prevState, searchKeywords }; - }); + function handle(event: BrushTrackerData & { range: [number, number] }) { + const keyModifiers = getModifiersKey(event); + if ( + selectedTool !== options.databaseRangesSelection.id || + keyModifiers !== primaryKeyIdentifier + ) { + return; } + + setKeywords((prevState) => { + const oldKeywords = prevState.searchKeywords + ? prevState.searchKeywords.split(' ') + : []; + const [from, to] = event.range; + const searchKeywords = [ + ...oldKeywords, + `delta:${format(from)}..${format(to)}`, + ].join(' '); + return { ...prevState, searchKeywords }; + }); } Events.on('brushEnd', handle); @@ -215,7 +224,7 @@ function DatabasePanelInner({ return () => { Events.off('brushEnd', handle); }; - }, [format, selectedTool]); + }, [format, getModifiersKey, primaryKeyIdentifier, selectedTool]); useEffect(() => { if (!databaseInstance.current) return;