refactor(SaleByItem)

This commit is contained in:
a.bouhuolia
2022-02-12 16:41:07 +02:00
parent a9a877f4fc
commit 72a7c4890e
7 changed files with 71 additions and 42 deletions

View File

@@ -7,6 +7,7 @@ import { usePurchaseByItemsContext } from './PurchasesByItemsProvider';
import FinancialLoadingBar from '../FinancialLoadingBar'; import FinancialLoadingBar from '../FinancialLoadingBar';
import { getColumnWidth } from 'utils'; import { getColumnWidth } from 'utils';
import { Align } from 'common';
/** /**
* Retrieve purchases by items table columns. * Retrieve purchases by items table columns.
@@ -35,6 +36,7 @@ export const usePurchasesByItemsTableColumns = () => {
minWidth: 150, minWidth: 150,
}), }),
textOverview: true, textOverview: true,
align: Align.Right,
}, },
{ {
Header: intl.get('purchase_amount'), Header: intl.get('purchase_amount'),
@@ -45,6 +47,7 @@ export const usePurchasesByItemsTableColumns = () => {
minWidth: 150, minWidth: 150,
}), }),
textOverview: true, textOverview: true,
align: Align.Right,
}, },
{ {
Header: intl.get('average_price'), Header: intl.get('average_price'),
@@ -55,6 +58,7 @@ export const usePurchasesByItemsTableColumns = () => {
minWidth: 180, minWidth: 180,
}), }),
textOverview: true, textOverview: true,
align: Align.Right,
}, },
], ],
[tableRows], [tableRows],

View File

@@ -1,6 +1,6 @@
import React, { createContext, useContext } from 'react'; import React, { createContext, useContext } from 'react';
import FinancialReportPage from '../FinancialReportPage'; import FinancialReportPage from '../FinancialReportPage';
import { useSalesByItems, useItems } from 'hooks/query'; import { useSalesByItems } from 'hooks/query';
import { transformFilterFormToQuery } from '../common'; import { transformFilterFormToQuery } from '../common';
const SalesByItemsContext = createContext(); const SalesByItemsContext = createContext();

View File

@@ -1,35 +1,29 @@
import React, { useEffect, useState, useCallback } from 'react'; import React, { useEffect, useState, useCallback } from 'react';
import moment from 'moment'; import moment from 'moment';
import 'style/pages/FinancialStatements/SalesAndPurchasesSheet.scss';
import { SalesByItemProvider } from './SalesByItemProvider'; import { SalesByItemProvider } from './SalesByItemProvider';
import SalesByItemsActionsBar from './SalesByItemsActionsBar'; import SalesByItemsActionsBar from './SalesByItemsActionsBar';
import SalesByItemsHeader from './SalesByItemsHeader'; import SalesByItemsHeader from './SalesByItemsHeader';
import SalesByItemsTable from './SalesByItemsTable'; import { SalesByItemsBody } from './SalesByItemsBody';
import DashboardPageContent from 'components/Dashboard/DashboardPageContent'; import DashboardPageContent from 'components/Dashboard/DashboardPageContent';
import { SalesByItemsLoadingBar } from './components'; import { SalesByItemsLoadingBar } from './components';
import { FinancialStatement } from 'components';
import withSalesByItemsActions from './withSalesByItemsActions'; import withSalesByItemsActions from './withSalesByItemsActions';
import withCurrentOrganization from '../../../containers/Organization/withCurrentOrganization';
import { getDefaultSalesByItemsQuery } from './utils';
import { compose } from 'utils'; import { compose } from 'utils';
/** /**
* Sales by items. * Sales by items.
*/ */
function SalesByItems({ function SalesByItems({
// #withPreferences
organizationName,
// #withSellsByItemsActions // #withSellsByItemsActions
toggleSalesByItemsFilterDrawer, toggleSalesByItemsFilterDrawer,
}) { }) {
const [filter, setFilter] = useState({ const [filter, setFilter] = useState({
fromDate: moment().startOf('year').format('YYYY-MM-DD'), ...getDefaultSalesByItemsQuery(),
toDate: moment().endOf('year').format('YYYY-MM-DD'),
filterByOption: 'with-transactions',
}); });
// Handle filter form submit. // Handle filter form submit.
@@ -69,23 +63,16 @@ function SalesByItems({
<SalesByItemsLoadingBar /> <SalesByItemsLoadingBar />
<DashboardPageContent> <DashboardPageContent>
<div class="financial-statement financial-statement--sales-by-items"> <FinancialStatement>
<SalesByItemsHeader <SalesByItemsHeader
pageFilter={filter} pageFilter={filter}
onSubmitFilter={handleFilterSubmit} onSubmitFilter={handleFilterSubmit}
/> />
<div class="financial-statement__body"> <SalesByItemsBody />
<SalesByItemsTable companyName={organizationName} /> </FinancialStatement>
</div>
</div>
</DashboardPageContent> </DashboardPageContent>
</SalesByItemProvider> </SalesByItemProvider>
); );
} }
export default compose( export default compose(withSalesByItemsActions)(SalesByItems);
withSalesByItemsActions,
withCurrentOrganization(({ organization }) => ({
organizationName: organization.name,
})),
)(SalesByItems);

View File

@@ -0,0 +1,37 @@
import React from 'react';
import * as R from 'ramda';
import { FinancialReportBody } from '../FinancialReportPage';
import { FinancialSheetSkeleton } from '../../../components/FinancialSheet';
import SalesByItemsTable from './SalesByItemsTable';
import { useSalesByItemsContext } from './SalesByItemProvider';
import withCurrentOrganization from 'containers/Organization/withCurrentOrganization';
/**
*
* @returns {JSX.Element}
*/
function SalesByItemsBodyJSX({
// #withCurrentOrganization
organizationName,
}) {
const { isLoading } = useSalesByItemsContext();
return (
<FinancialReportBody>
{isLoading ? (
<FinancialSheetSkeleton />
) : (
<SalesByItemsTable companyName={organizationName} />
)}
</FinancialReportBody>
);
}
export const SalesByItemsBody = R.compose(
withCurrentOrganization(({ organization }) => ({
organizationName: organization.name,
})),
)(SalesByItemsBodyJSX);

View File

@@ -6,6 +6,9 @@ import { DataTable, FinancialSheet } from 'components';
import { useSalesByItemsContext } from './SalesByItemProvider'; import { useSalesByItemsContext } from './SalesByItemProvider';
import { useSalesByItemsTableColumns } from './components'; import { useSalesByItemsTableColumns } from './components';
import { tableRowTypesToClassnames } from 'utils';
import { TableStyle } from 'common';
/** /**
* Sales by items data table. * Sales by items data table.
*/ */
@@ -19,20 +22,6 @@ export default function SalesByItemsTable({ companyName }) {
// Sales by items table columns. // Sales by items table columns.
const columns = useSalesByItemsTableColumns(); const columns = useSalesByItemsTableColumns();
const rowClassNames = (row) => {
const { original } = row;
const rowTypes = Array.isArray(original.rowType)
? original.rowType
: [original.rowType];
return {
...rowTypes.reduce((acc, rowType) => {
acc[`row_type--${rowType}`] = rowType;
return acc;
}, {}),
};
};
return ( return (
<FinancialSheet <FinancialSheet
companyName={companyName} companyName={companyName}
@@ -43,17 +32,17 @@ export default function SalesByItemsTable({ companyName }) {
loading={isLoading} loading={isLoading}
> >
<DataTable <DataTable
className="bigcapital-datatable--financial-report"
columns={columns} columns={columns}
data={tableRows} data={tableRows}
expandable={true} expandable={true}
expandToggleColumn={1} expandToggleColumn={1}
expandColumnSpace={1} expandColumnSpace={1}
sticky={true} sticky={true}
rowClassNames={rowClassNames} rowClassNames={tableRowTypesToClassnames}
noResults={intl.get( noResults={intl.get(
'there_were_no_sales_during_the_selected_date_range', 'there_were_no_sales_during_the_selected_date_range',
)} )}
styleName={TableStyle.Constrant}
/> />
</FinancialSheet> </FinancialSheet>
); );

View File

@@ -1,18 +1,18 @@
import React, { useMemo } from 'react'; import React, { useMemo } from 'react';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import { Button } from '@blueprintjs/core';
import { getColumnWidth } from 'utils'; import { getColumnWidth } from 'utils';
import { If, Icon } from 'components'; import { If } from 'components';
import { CellTextSpan } from 'components/Datatable/Cells'; import { CellTextSpan } from 'components/Datatable/Cells';
import { useSalesByItemsContext } from './SalesByItemProvider'; import { useSalesByItemsContext } from './SalesByItemProvider';
import FinancialLoadingBar from '../FinancialLoadingBar'; import FinancialLoadingBar from '../FinancialLoadingBar';
import { Align } from 'common';
/** /**
* Retrieve sales by items table columns. * Retrieve sales by items table columns.
*/ */
export const useSalesByItemsTableColumns = () => { export const useSalesByItemsTableColumns = () => {
//sales by items context. //sales by items context.
const { const {
salesByItems: { tableRows }, salesByItems: { tableRows },
@@ -36,6 +36,7 @@ export const useSalesByItemsTableColumns = () => {
minWidth: 150, minWidth: 150,
}), }),
textOverview: true, textOverview: true,
align: Align.Right,
}, },
{ {
Header: intl.get('sold_amount'), Header: intl.get('sold_amount'),
@@ -46,6 +47,7 @@ export const useSalesByItemsTableColumns = () => {
minWidth: 150, minWidth: 150,
}), }),
textOverview: true, textOverview: true,
align: Align.Right,
}, },
{ {
Header: intl.get('average_price'), Header: intl.get('average_price'),
@@ -56,6 +58,7 @@ export const useSalesByItemsTableColumns = () => {
minWidth: 150, minWidth: 150,
}), }),
textOverview: true, textOverview: true,
align: Align.Right,
}, },
], ],
[tableRows], [tableRows],

View File

@@ -0,0 +1,9 @@
import moment from 'moment';
export const getDefaultSalesByItemsQuery = () => {
return {
fromDate: moment().startOf('year').format('YYYY-MM-DD'),
toDate: moment().endOf('year').format('YYYY-MM-DD'),
filterByOption: 'with-transactions',
};
};