mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-19 06:10:31 +00:00
feat: item payment transactions.
This commit is contained in:
8
src/common/itemPaymentTranactionsOption.js
Normal file
8
src/common/itemPaymentTranactionsOption.js
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import intl from 'react-intl-universal';
|
||||||
|
|
||||||
|
export default [
|
||||||
|
{ name: 'invoices', label: intl.get('invoices') },
|
||||||
|
{ name: 'estimates', label: intl.get('estimates') },
|
||||||
|
{ name: 'receipts', label: intl.get('receipts') },
|
||||||
|
{ name: 'bills', label: intl.get('bills') },
|
||||||
|
];
|
||||||
@@ -1,10 +1,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
|
import ItemDetailTab from './ItemDetailTab';
|
||||||
import ItemDetailActionsBar from './ItemDetailActionsBar';
|
import ItemDetailActionsBar from './ItemDetailActionsBar';
|
||||||
import ItemDetailHeader from './ItemDetailHeader';
|
|
||||||
import { ItemPaymentTransactions } from './ItemPaymentTransactions';
|
|
||||||
|
|
||||||
import { Card } from 'components';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Item detail.
|
* Item detail.
|
||||||
@@ -13,10 +10,7 @@ export default function ItemDetail() {
|
|||||||
return (
|
return (
|
||||||
<div className="item-drawer">
|
<div className="item-drawer">
|
||||||
<ItemDetailActionsBar />
|
<ItemDetailActionsBar />
|
||||||
<ItemPaymentTransactions />
|
<ItemDetailTab />
|
||||||
<Card>
|
|
||||||
<ItemDetailHeader />
|
|
||||||
</Card>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,9 @@ const ItemDetailDrawerContext = React.createContext();
|
|||||||
* Item detail provider
|
* Item detail provider
|
||||||
*/
|
*/
|
||||||
function ItemDetailDrawerProvider({ itemId, ...props }) {
|
function ItemDetailDrawerProvider({ itemId, ...props }) {
|
||||||
|
// transaction type payload.
|
||||||
|
const [value, setValue] = React.useState('invoices');
|
||||||
|
|
||||||
// Fetches the given item detail.
|
// Fetches the given item detail.
|
||||||
const { isLoading: isItemLoading, data: item } = useItem(itemId, {
|
const { isLoading: isItemLoading, data: item } = useItem(itemId, {
|
||||||
enabled: !!itemId,
|
enabled: !!itemId,
|
||||||
@@ -18,6 +21,8 @@ function ItemDetailDrawerProvider({ itemId, ...props }) {
|
|||||||
item,
|
item,
|
||||||
itemId,
|
itemId,
|
||||||
isItemLoading,
|
isItemLoading,
|
||||||
|
value,
|
||||||
|
setValue,
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import intl from 'react-intl-universal';
|
|||||||
import { defaultTo } from 'lodash';
|
import { defaultTo } from 'lodash';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
|
|
||||||
import { If, DetailsMenu, DetailItem } from 'components';
|
import { If, DetailsMenu, DetailItem, Card } from 'components';
|
||||||
import { useItemDetailDrawerContext } from './ItemDetailDrawerProvider';
|
import { useItemDetailDrawerContext } from './ItemDetailDrawerProvider';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13,6 +13,7 @@ export default function ItemDetailHeader() {
|
|||||||
const { item } = useItemDetailDrawerContext();
|
const { item } = useItemDetailDrawerContext();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<Card>
|
||||||
<div class="item-drawer__content">
|
<div class="item-drawer__content">
|
||||||
<DetailsMenu direction={'vertical'}>
|
<DetailsMenu direction={'vertical'}>
|
||||||
<DetailItem
|
<DetailItem
|
||||||
@@ -78,5 +79,6 @@ export default function ItemDetailHeader() {
|
|||||||
/>
|
/>
|
||||||
</DetailsMenu>
|
</DetailsMenu>
|
||||||
</div>
|
</div>
|
||||||
|
</Card>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
23
src/containers/Drawers/ItemDetailDrawer/ItemDetailTab.js
Normal file
23
src/containers/Drawers/ItemDetailDrawer/ItemDetailTab.js
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Tab } from '@blueprintjs/core';
|
||||||
|
import { DrawerMainTabs, FormattedMessage as T } from 'components';
|
||||||
|
import { ItemPaymentTransactions } from './ItemPaymentTransactions';
|
||||||
|
import ItemDetailHeader from './ItemDetailHeader';
|
||||||
|
|
||||||
|
|
||||||
|
export default function ItemDetailTab() {
|
||||||
|
return (
|
||||||
|
<DrawerMainTabs renderActiveTabPanelOnly={true}>
|
||||||
|
<Tab
|
||||||
|
id={'overview'}
|
||||||
|
title={<T id={'overview'} />}
|
||||||
|
panel={<ItemDetailHeader />}
|
||||||
|
/>
|
||||||
|
<Tab
|
||||||
|
id={'transactions'}
|
||||||
|
title={<T id={'transactions'} />}
|
||||||
|
panel={<ItemPaymentTransactions />}
|
||||||
|
/>
|
||||||
|
</DrawerMainTabs>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { DataTable, Card } from '../../../../components';
|
import { DataTable } from '../../../../components';
|
||||||
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
||||||
import { useItemAssociatedBillTransactions } from 'hooks/query';
|
import { useItemAssociatedBillTransactions } from 'hooks/query';
|
||||||
import { useBillTransactionsColumns } from './components';
|
import { useBillTransactionsColumns } from './components';
|
||||||
@@ -22,8 +22,6 @@ export default function BillPaymentTransactions() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="item-drawer__table">
|
|
||||||
<Card>
|
|
||||||
<DataTable
|
<DataTable
|
||||||
columns={columns}
|
columns={columns}
|
||||||
data={paymentTransactions}
|
data={paymentTransactions}
|
||||||
@@ -31,7 +29,5 @@ export default function BillPaymentTransactions() {
|
|||||||
headerLoading={isBillTransactionsLoading}
|
headerLoading={isBillTransactionsLoading}
|
||||||
progressBarLoading={isBillTransactionFetching}
|
progressBarLoading={isBillTransactionFetching}
|
||||||
/>
|
/>
|
||||||
</Card>
|
|
||||||
</div>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { DataTable, Card } from '../../../../components';
|
import { DataTable } from '../../../../components';
|
||||||
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
||||||
import { useItemAssociatedEstimateTransactions } from 'hooks/query';
|
import { useItemAssociatedEstimateTransactions } from 'hooks/query';
|
||||||
import { useEstimateTransactionsColumns } from './components';
|
import { useEstimateTransactionsColumns } from './components';
|
||||||
@@ -22,8 +22,6 @@ export default function EstimatePaymentTransactions() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="item-drawer__table">
|
|
||||||
<Card>
|
|
||||||
<DataTable
|
<DataTable
|
||||||
columns={columns}
|
columns={columns}
|
||||||
data={paymentTransactions}
|
data={paymentTransactions}
|
||||||
@@ -31,7 +29,5 @@ export default function EstimatePaymentTransactions() {
|
|||||||
headerLoading={isEstimateTransactionsLoading}
|
headerLoading={isEstimateTransactionsLoading}
|
||||||
progressBarLoading={isEstimateTransactionFetching}
|
progressBarLoading={isEstimateTransactionFetching}
|
||||||
/>
|
/>
|
||||||
</Card>
|
|
||||||
</div>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { DataTable, Card } from '../../../../components';
|
import { DataTable } from '../../../../components';
|
||||||
import { useItemAssociatedInvoiceTransactions } from 'hooks/query';
|
import { useItemAssociatedInvoiceTransactions } from 'hooks/query';
|
||||||
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
||||||
import { useInvoicePaymentTransactionsColumns } from './components';
|
import { useInvoicePaymentTransactionsColumns } from './components';
|
||||||
@@ -22,8 +22,6 @@ export default function InvoicePaymentTransactionsTable() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="item-drawer__table">
|
|
||||||
<Card>
|
|
||||||
<DataTable
|
<DataTable
|
||||||
columns={columns}
|
columns={columns}
|
||||||
data={paymentTransactions}
|
data={paymentTransactions}
|
||||||
@@ -31,7 +29,5 @@ export default function InvoicePaymentTransactionsTable() {
|
|||||||
headerLoading={isInvoiceTransactionsLoading}
|
headerLoading={isInvoiceTransactionsLoading}
|
||||||
progressBarLoading={isInvoiceTransactionFetching}
|
progressBarLoading={isInvoiceTransactionFetching}
|
||||||
/>
|
/>
|
||||||
</Card>
|
|
||||||
</div>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import InvoicePaymentTransactionsTable from './InvoicePaymentTransactionsDataTable';
|
||||||
|
import EstimatePaymentTransactionsTable from './EstimatePaymentTransactionsDataTable';
|
||||||
|
import ReceiptPaymentTransactionsTable from './ReceiptPaymentTransactionsDataTable';
|
||||||
|
import BillPaymentTransactionsTable from './BillPaymentTransactionsDataTable';
|
||||||
|
|
||||||
|
export default function ItemPaymentTransactionsContent({ tansactionType }) {
|
||||||
|
const handleType = () => {
|
||||||
|
switch (tansactionType) {
|
||||||
|
case 'invoices':
|
||||||
|
return <InvoicePaymentTransactionsTable />;
|
||||||
|
case 'estimates':
|
||||||
|
return <EstimatePaymentTransactionsTable />;
|
||||||
|
case 'receipts':
|
||||||
|
return <ReceiptPaymentTransactionsTable />;
|
||||||
|
case 'bills':
|
||||||
|
return <BillPaymentTransactionsTable />;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return handleType();
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { DataTable, Card } from '../../../../components';
|
import { DataTable } from '../../../../components';
|
||||||
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
||||||
import { useItemAssociatedReceiptTransactions } from 'hooks/query';
|
import { useItemAssociatedReceiptTransactions } from 'hooks/query';
|
||||||
import { useReceiptTransactionsColumns } from './components';
|
import { useReceiptTransactionsColumns } from './components';
|
||||||
@@ -22,8 +22,6 @@ export default function ReceiptPaymentTransactions() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="item-drawer__table">
|
|
||||||
<Card>
|
|
||||||
<DataTable
|
<DataTable
|
||||||
columns={columns}
|
columns={columns}
|
||||||
data={paymentTransactions}
|
data={paymentTransactions}
|
||||||
@@ -31,7 +29,5 @@ export default function ReceiptPaymentTransactions() {
|
|||||||
headerLoading={isReceiptTransactionsLoading}
|
headerLoading={isReceiptTransactionsLoading}
|
||||||
progressBarLoading={isReceiptTransactionFetching}
|
progressBarLoading={isReceiptTransactionFetching}
|
||||||
/>
|
/>
|
||||||
</Card>
|
|
||||||
</div>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,34 +1,30 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Tab } from '@blueprintjs/core';
|
import styled from 'styled-components';
|
||||||
import { DrawerMainTabs, FormattedMessage as T } from 'components';
|
import { Card, FormattedMessage as T } from 'components';
|
||||||
import InvoicePaymentTransactionsTable from './InvoicePaymentTransactionsDataTable';
|
import { ItemManuTransaction } from './utils';
|
||||||
import EstimatePaymentTransactionsTable from './EstimatePaymentTransactionsDataTable';
|
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
||||||
import ReceiptPaymentTransactionsTable from './ReceiptPaymentTransactionsDataTable';
|
import ItemPaymentTransactionContent from './ItemPaymentTransactionContent';
|
||||||
import BillPaymentTransactionsTable from './BillPaymentTransactionsDataTable';
|
|
||||||
|
|
||||||
export const ItemPaymentTransactions = () => {
|
export const ItemPaymentTransactions = () => {
|
||||||
|
const { value } = useItemDetailDrawerContext();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<DrawerMainTabs renderActiveTabPanelOnly={true}>
|
<Card>
|
||||||
<Tab
|
<ItemManuTransactions>
|
||||||
id={'invoice'}
|
<T id={'item.drawer_transactions_by'} />
|
||||||
title={<T id={'invoice'} />}
|
<ItemManuTransaction />
|
||||||
panel={<InvoicePaymentTransactionsTable />}
|
</ItemManuTransactions>
|
||||||
/>
|
<ItemPaymentTransactionContent tansactionType={value} />
|
||||||
<Tab
|
</Card>
|
||||||
id={'estiamte'}
|
|
||||||
title={<T id={'estimate_'} />}
|
|
||||||
panel={<EstimatePaymentTransactionsTable />}
|
|
||||||
/>
|
|
||||||
<Tab
|
|
||||||
id={'receipt'}
|
|
||||||
title={<T id={'receipt_'} />}
|
|
||||||
panel={<ReceiptPaymentTransactionsTable />}
|
|
||||||
/>
|
|
||||||
<Tab
|
|
||||||
id={'bill'}
|
|
||||||
title={'Bill'}
|
|
||||||
panel={<BillPaymentTransactionsTable />}
|
|
||||||
/>
|
|
||||||
</DrawerMainTabs>
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const ItemManuTransactions = styled.div`
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
color: #727983;
|
||||||
|
.bp3-button {
|
||||||
|
padding-left: 6px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import {
|
||||||
|
Button,
|
||||||
|
MenuItem,
|
||||||
|
Menu,
|
||||||
|
Popover,
|
||||||
|
PopoverInteractionKind,
|
||||||
|
Position,
|
||||||
|
} from '@blueprintjs/core';
|
||||||
|
import { FormattedMessage as T } from 'components';
|
||||||
|
import { useItemDetailDrawerContext } from '../ItemDetailDrawerProvider';
|
||||||
|
import transactions from '../../../../common/itemPaymentTranactionsOption';
|
||||||
|
|
||||||
|
export const ItemManuTransaction = () => {
|
||||||
|
const { value, setValue } = useItemDetailDrawerContext();
|
||||||
|
|
||||||
|
// const handleClickItem = (item) => {
|
||||||
|
// onChange && onChange(item);
|
||||||
|
// };
|
||||||
|
|
||||||
|
const content = transactions.map(({ name, label }) => (
|
||||||
|
<MenuItem onClick={() => setValue(name)} text={label} />
|
||||||
|
));
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Popover
|
||||||
|
minimal={true}
|
||||||
|
interactionKind={PopoverInteractionKind.CLICK}
|
||||||
|
position={Position.BOTTOM_LEFT}
|
||||||
|
modifiers={{
|
||||||
|
offset: { offset: '0, 4' },
|
||||||
|
}}
|
||||||
|
content={<Menu>{content}</Menu>}
|
||||||
|
>
|
||||||
|
<Button minimal={true} text={<T id={value} />} rightIcon={'caret-down'} />
|
||||||
|
</Popover>
|
||||||
|
);
|
||||||
|
};
|
||||||
@@ -38,12 +38,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&__table {
|
|
||||||
.card {
|
|
||||||
padding: 12px 15px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.table {
|
.table {
|
||||||
|
margin-top: 8px;
|
||||||
.tbody,
|
.tbody,
|
||||||
.thead {
|
.thead {
|
||||||
.tr .th {
|
.tr .th {
|
||||||
@@ -62,5 +59,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user