diff --git a/client/src/components/DataTable.js b/client/src/components/DataTable.js
index 7c26f36dd..e0eeadb6a 100644
--- a/client/src/components/DataTable.js
+++ b/client/src/components/DataTable.js
@@ -8,7 +8,7 @@ import {
useSortBy,
useFlexLayout,
} from 'react-table';
-import { Checkbox, Spinner } from '@blueprintjs/core';
+import { Checkbox, Spinner, ContextMenu, Menu, MenuItem } from '@blueprintjs/core';
import classnames from 'classnames';
import { FixedSizeList } from 'react-window';
import { useSticky } from 'react-table-sticky';
@@ -51,6 +51,7 @@ export default function DataTable({
pagesCount: controlledPageCount,
initialPageIndex,
initialPageSize,
+ rowContextMenu
}) {
const {
getTableProps,
@@ -192,6 +193,20 @@ export default function DataTable({
[expandable, expandToggleColumn],
);
+ const handleRowContextMenu = (cell, row) => (e) => {
+ if (typeof rowContextMenu === 'function') {
+ e.preventDefault();
+ const tr = e.currentTarget.closest('.tr');
+ tr.classList.add('is-context-menu-active');
+
+ const DropdownEl = rowContextMenu(cell, row);
+
+ ContextMenu.show(DropdownEl, { left: e.clientX, top: e.clientY }, () => {
+ tr.classList.remove('is-context-menu-active');
+ });
+ }
+ };
+
// Renders table row.
const RenderRow = useCallback(
({ style = {}, row }) => {
diff --git a/client/src/containers/Accounting/ManualJournalsDataTable.js b/client/src/containers/Accounting/ManualJournalsDataTable.js
index ef41f1a16..1ed5c8ce4 100644
--- a/client/src/containers/Accounting/ManualJournalsDataTable.js
+++ b/client/src/containers/Accounting/ManualJournalsDataTable.js
@@ -102,28 +102,32 @@ function ManualJournalsDataTable({
const actionMenuList = useCallback(
(journal) => (
),
- [handleEditJournal, handleDeleteJournal, handlePublishJournal],
+ [handleEditJournal, handleDeleteJournal, handlePublishJournal, formatMessage],
);
+ const onRowContextMenu = useCallback((cell) => {
+ return actionMenuList(cell.row.original);
+ }, [actionMenuList]);
+
const columns = useMemo(
() => [
{
@@ -245,6 +249,8 @@ function ManualJournalsDataTable({
onSelectedRowsChange={handleSelectedRowsChange}
pagination={true}
+ rowContextMenu={onRowContextMenu}
+
pagesCount={manualJournalsPagination.pagesCount}
initialPageSize={manualJournalsTableQuery.page_size}
initialPageIndex={manualJournalsTableQuery.page - 1}
diff --git a/client/src/containers/Accounts/AccountsDataTable.js b/client/src/containers/Accounts/AccountsDataTable.js
index f84eefe36..01444ac85 100644
--- a/client/src/containers/Accounts/AccountsDataTable.js
+++ b/client/src/containers/Accounts/AccountsDataTable.js
@@ -1,4 +1,4 @@
-import React, {useCallback, useState, useMemo } from 'react';
+import React, { useCallback, useState, useMemo } from 'react';
import {
Button,
Popover,
@@ -8,6 +8,7 @@ import {
Position,
Classes,
Tooltip,
+ Intent,
} from '@blueprintjs/core';
import { FormattedMessage as T, useIntl } from 'react-intl';
@@ -26,12 +27,11 @@ import withDialogActions from 'containers/Dialog/withDialogActions';
import { If } from 'components';
-
function AccountsDataTable({
- // #withDashboardActions
+ // #withDashboardActions
accounts,
accountsLoading,
-
+
// #withDialog.
openDialog,
@@ -52,136 +52,179 @@ function AccountsDataTable({
}
}, [accountsLoading, setInitialMount]);
- const handleEditAccount = useCallback((account) => () => {
- openDialog('account-form', { action: 'edit', id: account.id });
- }, [openDialog]);
+ const handleEditAccount = useCallback(
+ (account) => () => {
+ openDialog('account-form', { action: 'edit', id: account.id });
+ },
+ [openDialog],
+ );
- const handleNewParentAccount = useCallback((account) => {
- openDialog('account-form', { action: 'new_child', id: account.id });
- }, [openDialog]);
+ const handleNewParentAccount = useCallback(
+ (account) => {
+ openDialog('account-form', { action: 'new_child', id: account.id });
+ },
+ [openDialog],
+ );
- const actionMenuList = useCallback((account) => (
-
- ), [handleEditAccount, onDeleteAccount, onInactiveAccount,handleNewParentAccount]);
+ text={formatMessage({ id: 'new_child_account' })}
+ onClick={() => handleNewParentAccount(account)}
+ />
+
+
+
+
+
+