useHotkey()
import useHotkey from "@intility/bifrost-react/hooks/useHotkey";Basic usage
Listen to platform-independent hotkeys.
key(string) - the key to listen to, a single lowercase character (like"k"or"s")callback(function) - will be called when user presses⌘ + keyon macOS, orCtrl + keyon win/linux- returns an object with
hotkeyText(string) which will be"⌘ + key"or"Ctrl + key"depending on platform
// listen to Ctrl/⌘ + K keypress
const { hotkeyText } = useHotkey("k", (e) => {
// focus search input, for example
inputRef.current?.focus();
});
// hotkeyText will be "Ctrl + K" or "⌘ + K"
// arrow keys work too (assumes a moveUp function exists)
const { hotkeyText } = useHotkey("ArrowUp", moveUp);
// hotkeyText will be "Ctrl + ↑" or "⌘ + ↑"
Options
For more control, pass a config object as the third parameter.
ctrlOrCmd(defaulttrue) listens toCtrlon Windows/Linux or⌘(Command) on MacOSshift(defaultfalse) listens toShift(⇧) on all platformsalt(defaultfalse) listens toAlt(⌥) on all platformspreventDefault(defaulttrue) makes sure the keypress doesn't also trigger default behavior for browser, like typing in an input or another matching browser hotkey
// include Shift key
const { hotkeyText } = useHotkey("s", saveAll, {
shift: true,
});
// hotkeyText will be "Ctrl + Shift + S" or "⌘ + ⇧ + S"
// just Escape key (no modifiers)
const { hotkeyText } = useHotkey("Escape", closePopup, { ctrlOrCmd: false });
// hotkeyText will be "Esc"
// Listen to "e" keypress (no modifiers) but allow focused input to also receive the keypress
const { hotkeyText } = useHotkey("e", callbackFn, {
ctrlOrCmd: false,
preventDefault: false,
});
// hotkeyText will be "E"
Sandbox
Move focus to the sandbox iframe (click inside) before testing hotkeys.