diff --git a/app/javascript/dashboard/components/ChatList.vue b/app/javascript/dashboard/components/ChatList.vue index 0aba2739f..6d65ba2dd 100644 --- a/app/javascript/dashboard/components/ChatList.vue +++ b/app/javascript/dashboard/components/ChatList.vue @@ -19,7 +19,7 @@ {{ $t('CHAT_LIST.LIST.404') }}

-
+
= 1) { + allConversations[activeConversationIndex - 1].click(); + } + } + if (hasPressedAltAndKKey(e)) { + if (activeConversationIndex === -1) { + allConversations[lastConversationIndex].click(); + } else if (activeConversationIndex < lastConversationIndex) { + allConversations[activeConversationIndex + 1].click(); + } + } + }, resetAndFetchData() { this.$store.dispatch('conversationPage/reset'); this.$store.dispatch('emptyAllConversations'); diff --git a/app/javascript/dashboard/components/buttons/ResolveAction.vue b/app/javascript/dashboard/components/buttons/ResolveAction.vue index cf984c531..e7219cdf0 100644 --- a/app/javascript/dashboard/components/buttons/ResolveAction.vue +++ b/app/javascript/dashboard/components/buttons/ResolveAction.vue @@ -35,6 +35,7 @@ 1) { + allConversations[0].click(); + document.querySelector('.conversations-list').scrollTop = 0; + } + } + } + }, showOpenButton() { return this.isResolved || this.isSnoozed; }, diff --git a/app/javascript/dashboard/components/layout/SidebarItem.vue b/app/javascript/dashboard/components/layout/SidebarItem.vue index bd4a00487..1799a829a 100644 --- a/app/javascript/dashboard/components/layout/SidebarItem.vue +++ b/app/javascript/dashboard/components/layout/SidebarItem.vue @@ -59,10 +59,17 @@ import { mapGetters } from 'vuex'; import router from '../../routes'; +import { + hasPressedAltAndCKey, + hasPressedAltAndVKey, + hasPressedAltAndRKey, + hasPressedAltAndSKey, +} from 'shared/helpers/KeyboardHelpers'; import adminMixin from '../../mixins/isAdmin'; +import eventListenerMixins from 'shared/mixins/eventListenerMixins'; import { getInboxClassByType } from 'dashboard/helper/inbox'; export default { - mixins: [adminMixin], + mixins: [adminMixin, eventListenerMixins], props: { menuItem: { type: Object, @@ -117,6 +124,20 @@ export default { } } }, + handleKeyEvents(e) { + if (hasPressedAltAndCKey(e)) { + router.push({ name: 'home' }); + } + if (hasPressedAltAndVKey(e)) { + router.push({ name: 'contacts_dashboard' }); + } + if (hasPressedAltAndRKey(e)) { + router.push({ name: 'settings_account_reports' }); + } + if (hasPressedAltAndSKey(e)) { + router.push({ name: 'settings_home' }); + } + }, showItem(item) { return this.isAdmin && item.newLink !== undefined; }, diff --git a/app/javascript/dashboard/components/widgets/ChatTypeTabs.vue b/app/javascript/dashboard/components/widgets/ChatTypeTabs.vue index e57f63fbf..0a15ee8b0 100644 --- a/app/javascript/dashboard/components/widgets/ChatTypeTabs.vue +++ b/app/javascript/dashboard/components/widgets/ChatTypeTabs.vue @@ -10,8 +10,11 @@ diff --git a/app/javascript/shared/components/ui/dropdown/DropdownItem.vue b/app/javascript/shared/components/ui/dropdown/DropdownItem.vue index ac7367f48..44e1fdfe8 100644 --- a/app/javascript/shared/components/ui/dropdown/DropdownItem.vue +++ b/app/javascript/shared/components/ui/dropdown/DropdownItem.vue @@ -42,6 +42,10 @@ export default { &:hover { background: var(--color-background); } + + &:focus { + background: var(--color-background); + } } } } diff --git a/app/javascript/shared/components/ui/dropdown/DropdownMenu.vue b/app/javascript/shared/components/ui/dropdown/DropdownMenu.vue index 12a485151..89684184f 100644 --- a/app/javascript/shared/components/ui/dropdown/DropdownMenu.vue +++ b/app/javascript/shared/components/ui/dropdown/DropdownMenu.vue @@ -1,5 +1,6 @@ diff --git a/app/javascript/shared/helpers/KeyboardHelpers.js b/app/javascript/shared/helpers/KeyboardHelpers.js index 38bf62321..6671eaff6 100644 --- a/app/javascript/shared/helpers/KeyboardHelpers.js +++ b/app/javascript/shared/helpers/KeyboardHelpers.js @@ -9,3 +9,75 @@ export const isEscape = e => { export const hasPressedShift = e => { return e.shiftKey; }; + +export const hasPressedAltAndCKey = e => { + return e.altKey && e.keyCode === 67; +}; + +export const hasPressedAltAndVKey = e => { + return e.altKey && e.keyCode === 86; +}; + +export const hasPressedAltAndRKey = e => { + return e.altKey && e.keyCode === 82; +}; + +export const hasPressedAltAndSKey = e => { + return e.altKey && e.keyCode === 83; +}; + +export const hasPressedAltAndBKey = e => { + return e.altKey && e.keyCode === 66; +}; + +export const hasPressedAltAndNKey = e => { + return e.altKey && e.keyCode === 78; +}; + +export const hasPressedAltAndWKey = e => { + return e.altKey && e.keyCode === 87; +}; + +export const hasPressedAltAndAKey = e => { + return e.altKey && e.keyCode === 65; +}; + +export const hasPressedAltAndPKey = e => { + return e.altKey && e.keyCode === 80; +}; + +export const hasPressedAltAndLKey = e => { + return e.altKey && e.keyCode === 76; +}; + +export const hasPressedAltAndEKey = e => { + return e.altKey && e.keyCode === 69; +}; + +export const hasPressedCommandPlusAltAndEKey = e => { + return e.metaKey && e.altKey && e.keyCode === 69; +}; + +export const hasPressedAltAndOKey = e => { + return e.altKey && e.keyCode === 79; +}; + +export const hasPressedAltAndJKey = e => { + return e.altKey && e.keyCode === 74; +}; + +export const hasPressedAltAndKKey = e => { + return e.altKey && e.keyCode === 75; +}; + +export const hasPressedAltAndMKey = e => { + return e.altKey && e.keyCode === 77; +}; + +export const hasPressedArrowUpKey = e => { + return e.keyCode === 38; +}; + +export const hasPressedArrowDownKey = e => { + return e.keyCode === 40; +}; diff --git a/app/javascript/shared/mixins/eventListenerMixins.js b/app/javascript/shared/mixins/eventListenerMixins.js new file mode 100644 index 000000000..aad6952b3 --- /dev/null +++ b/app/javascript/shared/mixins/eventListenerMixins.js @@ -0,0 +1,8 @@ +export default { + mounted() { + document.addEventListener('keydown', this.handleKeyEvents); + }, + destroyed() { + document.removeEventListener('keydown', this.handleKeyEvents); + }, +};