From 4ba750fe114cfaac04f1466894d80158cad32240 Mon Sep 17 00:00:00 2001
From: elforjani13 <39470382+elforjani13@users.noreply.github.com>
Date: Wed, 13 Oct 2021 19:51:52 +0200
Subject: [PATCH] faet: Account Transcations.
---
.../AccountTransactionsActionsBar.js | 97 +++++++++++++++++++
.../AccountTransactionsDataTable.js | 70 +++++++++++++
.../AccountTransactionsList.js | 28 ++++++
.../AccountTransactionsProvider.js | 43 ++++++++
.../AccountTransactions/components.js | 62 ++++++++++++
.../CashFlow/AccountTransactions/utils.js | 49 ++++++++++
.../CashFlow/AccountTransactions/List.scss | 6 ++
7 files changed, 355 insertions(+)
create mode 100644 src/containers/CashFlow/AccountTransactions/AccountTransactionsActionsBar.js
create mode 100644 src/containers/CashFlow/AccountTransactions/AccountTransactionsDataTable.js
create mode 100644 src/containers/CashFlow/AccountTransactions/AccountTransactionsList.js
create mode 100644 src/containers/CashFlow/AccountTransactions/AccountTransactionsProvider.js
create mode 100644 src/containers/CashFlow/AccountTransactions/components.js
create mode 100644 src/containers/CashFlow/AccountTransactions/utils.js
create mode 100644 src/style/pages/CashFlow/AccountTransactions/List.scss
diff --git a/src/containers/CashFlow/AccountTransactions/AccountTransactionsActionsBar.js b/src/containers/CashFlow/AccountTransactions/AccountTransactionsActionsBar.js
new file mode 100644
index 000000000..2aa0206ca
--- /dev/null
+++ b/src/containers/CashFlow/AccountTransactions/AccountTransactionsActionsBar.js
@@ -0,0 +1,97 @@
+import React from 'react';
+import { Button, NavbarGroup, Classes, NavbarDivider } from '@blueprintjs/core';
+import {
+ Icon,
+ DashboardRowsHeightButton,
+ FormattedMessage as T,
+} from 'components';
+
+import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar';
+import { CashFlowMenuItems } from './utils';
+import { useAccountTransactionsContext } from './AccountTransactionsProvider';
+
+import withDialogActions from 'containers/Dialog/withDialogActions';
+import withSettings from '../../Settings/withSettings';
+import withSettingsActions from '../../Settings/withSettingsActions';
+import { addMoneyIn, addMoneyOut } from '../../../common/cashflowOptions';
+
+import { compose } from 'utils';
+
+function AccountTransactionsActionsBar({
+ // #withDialogActions
+ openDialog,
+
+ // #withSettings
+ cashflowTansactionsTableSize,
+ // #withSettingsActions
+ addSetting,
+}) {
+ // Handle table row size change.
+ const handleTableRowSizeChange = (size) => {
+ addSetting('cashflowTransactions', 'tableSize', size);
+ };
+ const { accountId } = useAccountTransactionsContext();
+
+ //Handle money in form
+ const handleMoneyInFormTransaction = (value) => {
+ openDialog('money-in', {
+ account_type: value.type,
+ account_id: accountId.id,
+ });
+ };
+
+ //Handle money out form
+ const handlMoneyOutFormTransaction = (value) => {
+ openDialog('money-out', {
+ account_type: value.type,
+ account_id: accountId.id,
+ });
+ };
+ return (
+
+
+ }
+ />
+ }
+ />
+
+
+ }
+ text={}
+ />
+ }
+ text={}
+ />
+ }
+ text={}
+ />
+
+
+
+
+
+ );
+}
+
+export default compose(
+ withDialogActions,
+ withSettingsActions,
+ withSettings(({ cashflowTransactionsSettings }) => ({
+ cashflowTansactionsTableSize: cashflowTransactionsSettings?.tableSize,
+ })),
+)(AccountTransactionsActionsBar);
diff --git a/src/containers/CashFlow/AccountTransactions/AccountTransactionsDataTable.js b/src/containers/CashFlow/AccountTransactions/AccountTransactionsDataTable.js
new file mode 100644
index 000000000..bf0d2b781
--- /dev/null
+++ b/src/containers/CashFlow/AccountTransactions/AccountTransactionsDataTable.js
@@ -0,0 +1,70 @@
+import React from 'react';
+
+import { DataTable, TableFastCell } from 'components';
+import { TABLES } from 'common/tables';
+
+import TableVirtualizedListRows from 'components/Datatable/TableVirtualizedRows';
+import TableSkeletonRows from 'components/Datatable/TableSkeletonRows';
+import TableSkeletonHeader from 'components/Datatable/TableHeaderSkeleton';
+
+import withSettings from '../../Settings/withSettings';
+
+import { useMemorizedColumnsWidths } from '../../../hooks';
+import { useAccountTransactionsColumns } from './components';
+import { useAccountTransactionsContext } from './AccountTransactionsProvider';
+import { compose } from 'utils';
+
+/**
+ * Account transactions data table.
+ */
+function AccountTransactionsDataTable({
+ // #withSettings
+ cashflowTansactionsTableSize,
+}) {
+ // Retrieve table columns.
+ const columns = useAccountTransactionsColumns();
+
+ // Retrieve list context.
+ const {
+ cashflowTransactions,
+ isCashFlowTransactionsFetching,
+ isCashFlowTransactionsLoading,
+ } = useAccountTransactionsContext();
+
+ // Local storage memorizing columns widths.
+ const [initialColumnsWidths, , handleColumnResizing] =
+ useMemorizedColumnsWidths(TABLES.CASHFLOW_Transactions);
+
+ return (
+
+ );
+}
+
+export default compose(
+ withSettings(({ cashflowTransactionsSettings }) => ({
+ cashflowTansactionsTableSize: cashflowTransactionsSettings?.tableSize,
+ })),
+)(AccountTransactionsDataTable);
diff --git a/src/containers/CashFlow/AccountTransactions/AccountTransactionsList.js b/src/containers/CashFlow/AccountTransactions/AccountTransactionsList.js
new file mode 100644
index 000000000..b48986458
--- /dev/null
+++ b/src/containers/CashFlow/AccountTransactions/AccountTransactionsList.js
@@ -0,0 +1,28 @@
+import React from 'react';
+
+import 'style/pages/CashFlow/AccountTransactions/List.scss';
+
+import { DashboardPageContent, DashboardContentTable } from 'components';
+
+import { AccountTransactionsProvider } from './AccountTransactionsProvider';
+
+import AccountTransactionsActionsBar from './AccountTransactionsActionsBar';
+import AccountTransactionsDataTable from './AccountTransactionsDataTable';
+
+/**
+ * Account transactions list.
+ */
+function AccountTransactionsList() {
+ return (
+
+
+
+
+
+
+
+
+ );
+}
+
+export default AccountTransactionsList;
diff --git a/src/containers/CashFlow/AccountTransactions/AccountTransactionsProvider.js b/src/containers/CashFlow/AccountTransactions/AccountTransactionsProvider.js
new file mode 100644
index 000000000..de67a1a60
--- /dev/null
+++ b/src/containers/CashFlow/AccountTransactions/AccountTransactionsProvider.js
@@ -0,0 +1,43 @@
+import React from 'react';
+import { useParams } from 'react-router-dom';
+import DashboardInsider from 'components/Dashboard/DashboardInsider';
+
+import { useCashflowTransactions } from 'hooks/query';
+
+const AccountTransactionsContext = React.createContext();
+
+/**
+ * Account transctions provider.
+ */
+function AccountTransactionsProvider({ query, ...props }) {
+ const accountId = useParams();
+
+ // Fetch cashflow account transactions list
+ const {
+ data: cashflowTransactions,
+ isFetching: isCashFlowTransactionsFetching,
+ isLoading: isCashFlowTransactionsLoading,
+ } = useCashflowTransactions(accountId, {
+ enabled: !!accountId,
+ });
+
+
+ // Provider payload.
+ const provider = {
+ accountId,
+ cashflowTransactions,
+ isCashFlowTransactionsFetching,
+ isCashFlowTransactionsLoading,
+ };
+
+ return (
+
+
+
+ );
+}
+
+const useAccountTransactionsContext = () =>
+ React.useContext(AccountTransactionsContext);
+
+export { AccountTransactionsProvider, useAccountTransactionsContext };
diff --git a/src/containers/CashFlow/AccountTransactions/components.js b/src/containers/CashFlow/AccountTransactions/components.js
new file mode 100644
index 000000000..649d52fa7
--- /dev/null
+++ b/src/containers/CashFlow/AccountTransactions/components.js
@@ -0,0 +1,62 @@
+import React from 'react';
+import intl from 'react-intl-universal';
+
+import { FormatDateCell } from 'components';
+
+/**
+ * Retrieve account transctions table columns.
+ */
+export function useAccountTransactionsColumns() {
+ return React.useMemo(
+ () => [
+ {
+ id: 'date',
+ Header: intl.get('date'),
+ accessor: 'date',
+ Cell: FormatDateCell,
+ width: 110,
+ className: 'date',
+ },
+ {
+ id: 'type',
+ Header: intl.get('type'),
+ accessor: 'type',
+ className: 'type',
+ width: 140,
+ textOverview: true,
+ },
+ {
+ id: 'status',
+ Header: intl.get('status'),
+ // accessor:
+ width: 160,
+ className: 'status',
+ },
+ {
+ id: 'deposit',
+ Header: intl.get('cash_flow.label.deposit'),
+ accessor: 'formattedDeposit',
+ width: 110,
+ className: 'deposit',
+ align: 'right',
+ },
+ {
+ id: 'withdrawal',
+ Header: intl.get('cash_flow.label.withdrawal'),
+ accessor: 'formattedWithdrawal',
+ className: 'withdrawal',
+ width: 150,
+ align: 'right',
+ },
+ {
+ id: 'running_balance',
+ Header: intl.get('cash_flow.label.running_balance'),
+ accessor: 'running_balance',
+ className: 'running_balance',
+ width: 150,
+ align: 'right',
+ },
+ ],
+ [],
+ );
+}
diff --git a/src/containers/CashFlow/AccountTransactions/utils.js b/src/containers/CashFlow/AccountTransactions/utils.js
new file mode 100644
index 000000000..be3338440
--- /dev/null
+++ b/src/containers/CashFlow/AccountTransactions/utils.js
@@ -0,0 +1,49 @@
+import React from 'react';
+import classNames from 'classnames';
+
+import {
+ Button,
+ PopoverInteractionKind,
+ MenuItem,
+ Classes,
+ Position,
+} from '@blueprintjs/core';
+
+import { Select } from '@blueprintjs/select';
+import { Icon } from 'components';
+
+export const CashFlowMenuItems = ({ text, items, onItemSelect }) => {
+ // Menu items renderer.
+ const itemsRenderer = (item, { handleClick, modifiers, query }) => (
+
+ );
+
+ const handleCashFlowMenuSelect = (type) => {
+ onItemSelect && onItemSelect(type);
+ };
+
+ return (
+
+ );
+};
diff --git a/src/style/pages/CashFlow/AccountTransactions/List.scss b/src/style/pages/CashFlow/AccountTransactions/List.scss
new file mode 100644
index 000000000..e4c342097
--- /dev/null
+++ b/src/style/pages/CashFlow/AccountTransactions/List.scss
@@ -0,0 +1,6 @@
+.dashboard__insider--account-transactions {
+ .bigcapital-datatable {
+ .tbody {
+ }
+ }
+}