GithubHelp home page GithubHelp logo

renadr / use-keyboard-shortcut Goto Github PK

View Code? Open in Web Editor NEW

This project forked from arthurtyukayev/use-keyboard-shortcut

0.0 0.0 0.0 861 KB

A custom hook that allows adding keyboard shortcuts to React applications

Home Page: https://use-keyboard-shortcut.tyukayev.com/

License: MIT License

JavaScript 100.00%

use-keyboard-shortcut's Introduction

useKeyboardShortcut

npm version testing

Documentation | Live Example

A custom React hook that allows adding keyboard shortcuts to a React application.

import React from 'react'
import useKeyboardShortcut from 'use-keyboard-shortcut'

const App = () => {
  const { flushHeldKeys } = useKeyboardShortcut(
    ["Shift", "H"],
    shortcutKeys => console.log("Shift + H has been pressed."),
    { 
      overrideSystem: false,
      ignoreInputFields: false, 
      repeatOnHold: false 
    }
  );

  return (
    <div>Hello World</div>
  )
}

Documentation

const { flushHeldKeys } = useKeyboardShortcut(shortcutArray, callback, options)
Hook Return Type Description
flushHeldKeys Function Function to flush the array of held keys used for keydown tracking. This can help fixing "stuck" keys.
Hook Parameter Type Description
shortcutArray Array Array of KeyboardEvent.key strings. A full list of strings can be seen here
callback Function Function that is called once the keys have been pressed.
options Object Object containing some configuration options. See options section

Options

A list of possible options to put in the options object passed as the third parameters to the hook.

Option Default Description
overrideSystem false Overrides the default browser behavior for that specific keyboard shortcut. See caveats section
ignoreInputFields true Allows enabling and disabling the keyboard shortcuts when pressed inside of input fields.
repeatOnHold true Determines whether the callback function should fire on repeat when keyboard shortcut is held down.

Caveats

Flaky System Override Shortcuts There are some issues when it comes to overriding default keys such as Meta, Control, and Alt with more than two keys, i.e Meta + S + F, these combinations don't work as well as they should due to limitations set by the browsers. They have flaky performance. Using more than two keys in a keyboard shortcut works for keys that don't also handle browser actions such as Shift + S + F. However for keyboard shortcuts such as Meta + S + V will have flaky performance and some of the events maybe bubble up to the browser and open the browser's save dialog.

Some browsers just simply ignore Event.preventDefault() when it comes to specific browser actions. For example, on Chrome the shortcut Meta + S can be prevented sometimes from opening the Save Dialog, however the shortcut Meta + T cannot be prevented from opening a new tab. Results may vary depending on the browser.

Callback behavior or browser behavior that causes a system dialog to appear might perform poorly. During testing, the keyup listener doesn't fire in some browsers if the callback or overriden shortcut resulted in a dialog appearing. For example, creating a shortcut such as Meta + A that opens an alert(), may sometimes cause the keyup listener to not fire and cause keys to be "stuck".

Bugs / Problems

Please create an issue.

use-keyboard-shortcut's People

Contributors

arthurtyukayev avatar dependabot[bot] avatar preet-sidhu avatar slobo avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.