Fireback accelerates backend and mobile app development, offering powerful code generation tools and standardized architecture. With seamless backend integration and streamlined workflows, Fireback expedites the creation of robust and scalable apps.
Fireback provides both concept, and built in support for accessibility to implement user keyboard shortcut keys for Desktop or Web apps. In this article we only cover how to build the support for keyboard, basically to make webapp or desktop app.
I believe every web app or desktop app, should work fully with keyboard. It means, user should be able to navigate throught the actions of the app using "Tab" key or vice versa using "Shift+Tab" key. Also, many dekstop or web apps, need to have enough sufficient keybord shortcuts to make user life easier. This becomes more bold in day to day software, using mouse slows down the expert user and if they are limited keyboard usage, product might be valued as low quality.
Considering that, while we are building an interface, we need to focus on:
Fireback provides kbshort
sub module, which stores, and ships the keyboard shortcuts for you. In first glance
supporting keyboard might seem fully UI job, but in an advanced system, which allows users to define their
own set of combination keys, you need to store these information in your backend.
You can use CLI/HTTP/GRPC for this action, we follow cli for ease of use here. You need to install fireback on your system, and initialize a project before.
Running this command it will show you list of keyboard shortcuts:
fireback kbshort t
Results might be similar to:
Count 0
+---+-------------+----------+----------+--------+----+------+--------------------+-----------------+--------+
| # | WorkspaceId | ParentId | UniqueId | UserId | Os | Host | DefaultCombination | UserCombination | Action |
+---+-------------+----------+----------+--------+----+------+--------------------+-----------------+--------+
+---+-------------+----------+----------+--------+----+------+--------------------+-----------------+--------+
Below you can see a set of combination key information that you can define. dc
stands for DefaultCombination
and uc
stands for UserCombination
.
These two objects are identical, use first one for your app default shortcuts, and second for user defined series.
OS means the operating system, win32
, darwin
, etc,
Host means where the combination would be working, such as desktop
or browser
It's important to define key sets for all of these environments, and test them. For example, if you are building mac desktop app, you can use CMD+1 for menu options, but the same app in browser must use Option+1 to prevent key collision with browser default hotkeys.
You can see the available options using fireback kbshort create --help
, a list similar below will appear
OPTIONS:
--os value os
--host value host
--dc-altKey altKey
--dc-key value key
--dc-metaKey metaKey
--dc-shiftKey shiftKey
--dc-ctrlKey ctrlKey
--uc-altKey altKey
--uc-key value key
--uc-metaKey metaKey
--uc-shiftKey shiftKey
--uc-ctrlKey ctrlKey
--action value action
For example, you can create CMD+CTRL+F to do the action called "Format the page", and the key "FORMAT_PAGE"
Use Action Key as the unique identifier of the action within your apps, Action is what user sees, and could be translated to different languages
fireback kbshort create --dc-metaKey=true --dc-ctrlKey=true --dc-key "KeyF" true --action "Format the page" --actionKey FORMAT_PAGE --host browser --os win32
It would create a result as such:
{
"uniqueId": "935e0f6e",
"os": "win32",
"host": "browser",
"defaultCombination": {
"parentId": "935e0f6e",
"uniqueId": "47477db0",
"key": "KeyF",
"metaKey": true,
"ctrlKey": true
},
"userCombination": {
"parentId": "935e0f6e",
"uniqueId": "7bc772cd"
},
"action": "Format the page",
"actionKey": "FORMAT_PAGE"
}
Keyboardshortcuts are fully compatible with the ABAC system of fireback, and could be defined, queried, deleted based on the user and workspace. HTTP/GRPC are available completely.
You can use these information your desired UI, using any Framework. I am working on the reactjs version, which would read these information here and listen to the changes. Officialy yet we are not providing JavaScript or QT libraries, if you have created such elements please contact us.