diff --git a/src/common/keyboardShortcutsOptions.js b/src/common/keyboardShortcutsOptions.js
index 9a904e09b..cd026dedf 100644
--- a/src/common/keyboardShortcutsOptions.js
+++ b/src/common/keyboardShortcutsOptions.js
@@ -1,110 +1,228 @@
-import React from 'react';
import intl from 'react-intl-universal';
+import {
+ AbilitySubject,
+ AccountAction,
+ BillAction,
+ CashflowAction,
+ CustomerAction,
+ ExpenseAction,
+ ItemAction,
+ ManualJournalAction,
+ ReportsAction,
+ SaleEstimateAction,
+ SaleInvoiceAction,
+ SaleReceiptAction,
+ VendorAction,
+} from './abilityOption';
export default [
{
shortcut_key: 'Shift + I',
description: intl.get('jump_to_the_invoices'),
+ permission: {
+ ability: SaleInvoiceAction.View,
+ subject: AbilitySubject.Invoice,
+ },
},
{
shortcut_key: 'Shift + E',
description: intl.get('jump_to_the_estimates'),
+ permission: {
+ ability: SaleEstimateAction.View,
+ subject: AbilitySubject.Estimate,
+ },
},
{
shortcut_key: 'Shift + R',
description: intl.get('jump_to_the_receipts'),
+ permission: {
+ ability: SaleReceiptAction.View,
+ subject: AbilitySubject.Receipt,
+ },
},
{
shortcut_key: 'Shift + X',
description: intl.get('jump_to_the_expenses'),
+ permission: {
+ ability: ExpenseAction.View,
+ subject: AbilitySubject.Expense,
+ },
},
{
shortcut_key: 'Shift + C',
description: intl.get('jump_to_the_customers'),
+ permission: {
+ ability: CustomerAction.View,
+ subject: AbilitySubject.Customer,
+ },
},
{
shortcut_key: 'Shift + V',
description: intl.get('jump_to_the_vendors'),
+ permission: {
+ ability: VendorAction.View,
+ subject: AbilitySubject.Vendor,
+ },
},
{
shortcut_key: 'Shift + A',
description: intl.get('jump_to_the_chart_of_accounts'),
+ permission: {
+ ability: AccountAction.View,
+ subject: AbilitySubject.Account,
+ },
},
{
shortcut_key: 'Shift + B',
description: intl.get('jump_to_the_bills'),
+ permission: {
+ ability: BillAction.View,
+ subject: AbilitySubject.Bill,
+ },
},
{
shortcut_key: 'Shift + M',
description: intl.get('jump_to_the_manual_journals'),
+ permission: {
+ ability: ManualJournalAction.View,
+ subject: AbilitySubject.ManualJournal,
+ },
},
{
shortcut_key: 'Shift + W',
description: intl.get('jump_to_the_items'),
+ permission: {
+ ability: ItemAction.View,
+ subject: AbilitySubject.Item,
+ },
},
{
shortcut_key: 'Shift + D',
description: intl.get('jump_to_the_add_money_in'),
+ permission: {
+ ability: CashflowAction.Create,
+ subject: AbilitySubject.Cashflow,
+ },
},
{
shortcut_key: 'Shift + Q',
description: intl.get('jump_to_the_add_money_out'),
+ permission: {
+ ability: CashflowAction.Create,
+ subject: AbilitySubject.Cashflow,
+ },
},
{
shortcut_key: 'Shift + 1',
description: intl.get('jump_to_the_balance_sheet'),
+ permission: {
+ ability: ReportsAction.READ_BALANCE_SHEET,
+ subject: AbilitySubject.Report,
+ },
},
{
shortcut_key: 'Shift + 2',
description: intl.get('jump_to_the_profit_loss_sheet'),
+ permission: {
+ ability: ReportsAction.READ_PROFIT_LOSS,
+ subject: AbilitySubject.Report,
+ },
},
{
shortcut_key: 'Shift + 3',
description: intl.get('jump_to_the_journal_sheet'),
+ permission: {
+ ability: ReportsAction.READ_JOURNAL,
+ subject: AbilitySubject.Report,
+ },
},
{
shortcut_key: 'Shift + 4',
description: intl.get('jump_to_the_general_ledger_sheet'),
+ permission: {
+ ability: ReportsAction.READ_GENERAL_LEDGET,
+ subject: AbilitySubject.Report,
+ },
},
{
shortcut_key: 'Shift + 5',
description: intl.get('jump_to_the_trial_balance_sheet'),
+ permission: {
+ ability: ReportsAction.READ_TRIAL_BALANCE_SHEET,
+ subject: AbilitySubject.Report,
+ },
},
{
shortcut_key: 'Ctrl + Shift + I ',
description: intl.get('create_a_new_invoice'),
+ permission: {
+ ability: SaleInvoiceAction.Create,
+ subject: AbilitySubject.Invoice,
+ },
},
{
shortcut_key: 'Ctrl + Shift + E ',
description: intl.get('create_a_new_estimate'),
+ permission: {
+ ability: SaleEstimateAction.Create,
+ subject: AbilitySubject.Estimate,
+ },
},
{
shortcut_key: 'Ctrl + Shift + R ',
description: intl.get('create_a_new_receipt'),
+ permission: {
+ ability: SaleReceiptAction.Create,
+ subject: AbilitySubject.Receipt,
+ },
},
{
shortcut_key: 'Ctrl + Shift + X ',
description: intl.get('create_a_new_expense'),
+ permission: {
+ ability: ExpenseAction.Create,
+ subject: AbilitySubject.Expense,
+ },
},
{
shortcut_key: 'Ctrl + Shift + C ',
description: intl.get('create_a_new_customer'),
+ permission: {
+ ability: CustomerAction.Create,
+ subject: AbilitySubject.Customer,
+ },
},
{
shortcut_key: 'Ctrl + Shift + V ',
description: intl.get('create_a_new_vendor'),
+ permission: {
+ ability: VendorAction.Create,
+ subject: AbilitySubject.Vendor,
+ },
},
{
shortcut_key: 'Ctrl + Shift + B ',
description: intl.get('create_a_new_bill'),
+ permission: {
+ ability: BillAction.Create,
+ subject: AbilitySubject.Bill,
+ },
},
{
shortcut_key: 'Ctrl + Shift + M ',
description: intl.get('create_a_new_journal'),
+ permission: {
+ ability: ManualJournalAction.Create,
+ subject: AbilitySubject.ManualJournal,
+ },
},
{
shortcut_key: 'Ctrl + Shift + W ',
description: intl.get('create_a_new_item'),
+ permission: {
+ ability: ItemAction.Create,
+ subject: AbilitySubject.Item,
+ },
},
{
shortcut_key: 'Ctrl + / ',
diff --git a/src/containers/KeyboardShortcuts/ShortcutsTable.js b/src/containers/KeyboardShortcuts/ShortcutsTable.js
index da5974556..2d70b6d85 100644
--- a/src/containers/KeyboardShortcuts/ShortcutsTable.js
+++ b/src/containers/KeyboardShortcuts/ShortcutsTable.js
@@ -1,14 +1,13 @@
import React, { useMemo } from 'react';
import { DataTable } from 'components';
-import { FormattedMessage as T } from 'components';
import intl from 'react-intl-universal';
-import keyboardShortcuts from 'common/keyboardShortcutsOptions';
+import { useKeywordShortcuts } from '../../hooks/dashboard';
/**
* keyboard shortcuts table.
*/
-function ShortcutsTable() {
-
+export default function ShortcutsTable() {
+ const keywordShortcuts = useKeywordShortcuts();
const columns = useMemo(
() => [
@@ -30,8 +29,5 @@ function ShortcutsTable() {
],
[],
);
-
- return ;
+ return ;
}
-
-export default ShortcutsTable;
diff --git a/src/hooks/dashboard/index.js b/src/hooks/dashboard/index.js
new file mode 100644
index 000000000..376a5d4cc
--- /dev/null
+++ b/src/hooks/dashboard/index.js
@@ -0,0 +1 @@
+export * from './useKeywordShortcuts';
\ No newline at end of file
diff --git a/src/hooks/dashboard/useKeywordShortcuts.js b/src/hooks/dashboard/useKeywordShortcuts.js
new file mode 100644
index 000000000..22c851f7d
--- /dev/null
+++ b/src/hooks/dashboard/useKeywordShortcuts.js
@@ -0,0 +1,15 @@
+import React from 'react';
+import keyboardShortcuts from 'common/keyboardShortcutsOptions';
+import { useAbilitiesFilter } from '../utils/useAbilityContext';
+
+/**
+ * Retrieve the filtered keyword shortcuts.
+ */
+export const useKeywordShortcuts = () => {
+ const abilitiesFilter = useAbilitiesFilter();
+
+ return React.useMemo(
+ () => abilitiesFilter(keyboardShortcuts),
+ [abilitiesFilter],
+ );
+};
diff --git a/src/hooks/utils/useAbilityContext.js b/src/hooks/utils/useAbilityContext.js
index 9d530e0ec..e3529372b 100644
--- a/src/hooks/utils/useAbilityContext.js
+++ b/src/hooks/utils/useAbilityContext.js
@@ -12,11 +12,12 @@ export const useAbilitiesFilter = () => {
return React.useCallback(
(items) => {
- return items.filter((item) =>
- ability.can(item.permission.ability, item.permission.subject),
+ return items.filter(
+ (item) =>
+ !item.permission ||
+ ability.can(item.permission.ability, item.permission.subject),
);
},
[ability],
);
};
-
\ No newline at end of file