mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-19 06:10:31 +00:00
fix(webap): sales by items query state from query string
This commit is contained in:
@@ -39,7 +39,6 @@ function APAgingSummary({
|
|||||||
},
|
},
|
||||||
[setLocationQuery],
|
[setLocationQuery],
|
||||||
);
|
);
|
||||||
|
|
||||||
// Handle number format submit.
|
// Handle number format submit.
|
||||||
const handleNumberFormatSubmit = (numberFormat) => {
|
const handleNumberFormatSubmit = (numberFormat) => {
|
||||||
setLocationQuery({ ...filter, numberFormat });
|
setLocationQuery({ ...filter, numberFormat });
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ function APAgingSummaryHeader({
|
|||||||
const handleDrawerClose = () => {
|
const handleDrawerClose = () => {
|
||||||
toggleFilterDrawerDisplay(false);
|
toggleFilterDrawerDisplay(false);
|
||||||
};
|
};
|
||||||
// Detarmines the feature whether is enabled.
|
// Detarmines whether the feature is enabled.
|
||||||
const { featureCan } = useFeatureCan();
|
const { featureCan } = useFeatureCan();
|
||||||
const isBranchesFeatureCan = featureCan(Features.Branches);
|
const isBranchesFeatureCan = featureCan(Features.Branches);
|
||||||
|
|
||||||
|
|||||||
@@ -4,13 +4,14 @@ import * as Yup from 'yup';
|
|||||||
import { transformToCamelCase, flatObject, transformToForm } from '@/utils';
|
import { transformToCamelCase, flatObject, transformToForm } from '@/utils';
|
||||||
import { useAppQueryString } from '@/hooks';
|
import { useAppQueryString } from '@/hooks';
|
||||||
import { useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
|
import { castArray } from 'lodash';
|
||||||
|
|
||||||
export const transformFilterFormToQuery = (form) => {
|
export const transformFilterFormToQuery = (form) => {
|
||||||
return flatObject(transformToCamelCase(form));
|
return flatObject(transformToCamelCase(form));
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* The default query of AP aging summary.
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export const getDefaultAPAgingSummaryQuery = () => {
|
export const getDefaultAPAgingSummaryQuery = () => {
|
||||||
@@ -45,7 +46,7 @@ export const getAPAgingSummaryQuerySchema = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Parses the AP aging summary query state.
|
||||||
* @param locationQuery
|
* @param locationQuery
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
@@ -58,12 +59,13 @@ const parseAPAgingSummaryQuery = (locationQuery) => {
|
|||||||
};
|
};
|
||||||
return {
|
return {
|
||||||
...transformed,
|
...transformed,
|
||||||
|
vendorsIds: castArray(transformed.vendorsIds),
|
||||||
|
branchesIds: castArray(transformed.branchesIds),
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* AP aging summary query state.
|
||||||
* @returns
|
|
||||||
*/
|
*/
|
||||||
export const useAPAgingSummaryQuery = () => {
|
export const useAPAgingSummaryQuery = () => {
|
||||||
// Retrieves location query.
|
// Retrieves location query.
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ function ReceivableAgingSummarySheet({
|
|||||||
asDate: moment(filter.asDate).format('YYYY-MM-DD'),
|
asDate: moment(filter.asDate).format('YYYY-MM-DD'),
|
||||||
};
|
};
|
||||||
setLocationQuery(_filter);
|
setLocationQuery(_filter);
|
||||||
}, []);
|
}, [setLocationQuery]);
|
||||||
|
|
||||||
// Handle number format submit.
|
// Handle number format submit.
|
||||||
const handleNumberFormatSubmit = (numberFormat) => {
|
const handleNumberFormatSubmit = (numberFormat) => {
|
||||||
|
|||||||
@@ -45,27 +45,22 @@ export const getARAgingSummaryQuerySchema = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Parses the AR aging summary state.
|
||||||
* @param locationQuery
|
|
||||||
* @returns
|
|
||||||
*/
|
*/
|
||||||
const parseARAgingSummaryQuery = (locationQuery) => {
|
const parseARAgingSummaryQuery = (locationQuery) => {
|
||||||
const defaultQuery = getDefaultARAgingSummaryQuery();
|
const defaultQuery = getDefaultARAgingSummaryQuery();
|
||||||
|
|
||||||
const transformed = {
|
const transformed = {
|
||||||
...defaultQuery,
|
...defaultQuery,
|
||||||
...transformToForm(locationQuery, defaultQuery),
|
...transformToForm(locationQuery, defaultQuery),
|
||||||
};
|
};
|
||||||
return {
|
return {
|
||||||
...transformed,
|
...transformed,
|
||||||
|
|
||||||
//
|
|
||||||
branchesIds: castArray(transformed.branchesIds),
|
branchesIds: castArray(transformed.branchesIds),
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* AR aging summary query state.
|
||||||
*/
|
*/
|
||||||
export const useARAgingSummaryQuery = () => {
|
export const useARAgingSummaryQuery = () => {
|
||||||
const [locationQuery, setLocationQuery] = useAppQueryString();
|
const [locationQuery, setLocationQuery] = useAppQueryString();
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ const parseInventoryValuationQuery = (locationQuery) => {
|
|||||||
|
|
||||||
// Ensures the branches/warehouses ids is always array.
|
// Ensures the branches/warehouses ids is always array.
|
||||||
itemsIds: castArray(transformed.itemsIds),
|
itemsIds: castArray(transformed.itemsIds),
|
||||||
|
|
||||||
branchesIds: castArray(transformed.branchesIds),
|
branchesIds: castArray(transformed.branchesIds),
|
||||||
warehousesIds: castArray(transformed.warehousesIds),
|
warehousesIds: castArray(transformed.warehousesIds),
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ export const getDefaultPurchasesByItemsQuery = () => ({
|
|||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Retrieves the purchases by items query validation schema.
|
||||||
* @returns
|
* @returns {Yup}
|
||||||
*/
|
*/
|
||||||
export const getPurchasesByItemsQuerySchema = () => {
|
export const getPurchasesByItemsQuerySchema = () => {
|
||||||
return Yup.object().shape({
|
return Yup.object().shape({
|
||||||
@@ -32,9 +32,7 @@ export const getPurchasesByItemsQuerySchema = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Parses the purchases by items query.
|
||||||
* @param locationQuery
|
|
||||||
* @returns
|
|
||||||
*/
|
*/
|
||||||
const parsePurchasesByItemsQuery = (locationQuery) => {
|
const parsePurchasesByItemsQuery = (locationQuery) => {
|
||||||
const defaultQuery = getDefaultPurchasesByItemsQuery();
|
const defaultQuery = getDefaultPurchasesByItemsQuery();
|
||||||
@@ -45,15 +43,12 @@ const parsePurchasesByItemsQuery = (locationQuery) => {
|
|||||||
};
|
};
|
||||||
return {
|
return {
|
||||||
...transformed,
|
...transformed,
|
||||||
|
|
||||||
//
|
|
||||||
itemsIds: castArray(transformed.itemsIds),
|
itemsIds: castArray(transformed.itemsIds),
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Purchases by items query state.
|
||||||
* @returns
|
|
||||||
*/
|
*/
|
||||||
export const usePurchasesByItemsQuery = () => {
|
export const usePurchasesByItemsQuery = () => {
|
||||||
// Retrieves location query.
|
// Retrieves location query.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// @ts-nocheck
|
// @ts-nocheck
|
||||||
import React, { useEffect, useState, useCallback } from 'react';
|
import React, { useEffect, useCallback } from 'react';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
|
||||||
import { SalesByItemsBody } from './SalesByItemsBody';
|
import { SalesByItemsBody } from './SalesByItemsBody';
|
||||||
@@ -11,7 +11,7 @@ import SalesByItemsHeader from './SalesByItemsHeader';
|
|||||||
|
|
||||||
import withSalesByItemsActions from './withSalesByItemsActions';
|
import withSalesByItemsActions from './withSalesByItemsActions';
|
||||||
|
|
||||||
import { getDefaultSalesByItemsQuery } from './utils';
|
import { useSalesByItemsQuery } from './utils';
|
||||||
import { compose } from '@/utils';
|
import { compose } from '@/utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -21,9 +21,7 @@ function SalesByItems({
|
|||||||
// #withSellsByItemsActions
|
// #withSellsByItemsActions
|
||||||
toggleSalesByItemsFilterDrawer,
|
toggleSalesByItemsFilterDrawer,
|
||||||
}) {
|
}) {
|
||||||
const [filter, setFilter] = useState({
|
const { query, setLocationQuery } = useSalesByItemsQuery();
|
||||||
...getDefaultSalesByItemsQuery(),
|
|
||||||
});
|
|
||||||
|
|
||||||
// Handle filter form submit.
|
// Handle filter form submit.
|
||||||
const handleFilterSubmit = useCallback(
|
const handleFilterSubmit = useCallback(
|
||||||
@@ -33,30 +31,28 @@ function SalesByItems({
|
|||||||
fromDate: moment(filter.fromDate).format('YYYY-MM-DD'),
|
fromDate: moment(filter.fromDate).format('YYYY-MM-DD'),
|
||||||
toDate: moment(filter.toDate).format('YYYY-MM-DD'),
|
toDate: moment(filter.toDate).format('YYYY-MM-DD'),
|
||||||
};
|
};
|
||||||
setFilter(parsedFilter);
|
setLocationQuery(parsedFilter);
|
||||||
},
|
},
|
||||||
[setFilter],
|
[setLocationQuery],
|
||||||
);
|
);
|
||||||
|
|
||||||
// Handle number format form submit.
|
// Handle number format form submit.
|
||||||
const handleNumberFormatSubmit = (numberFormat) => {
|
const handleNumberFormatSubmit = (numberFormat) => {
|
||||||
setFilter({
|
setLocationQuery({
|
||||||
...filter,
|
...filter,
|
||||||
numberFormat,
|
numberFormat,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
// Hide the filter drawer once the page unmount.
|
// Hide the filter drawer once the page unmount.
|
||||||
useEffect(
|
useEffect(
|
||||||
() => () => {
|
() => () => toggleSalesByItemsFilterDrawer(false),
|
||||||
toggleSalesByItemsFilterDrawer(false);
|
|
||||||
},
|
|
||||||
[toggleSalesByItemsFilterDrawer],
|
[toggleSalesByItemsFilterDrawer],
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<SalesByItemProvider query={filter}>
|
<SalesByItemProvider query={query}>
|
||||||
<SalesByItemsActionsBar
|
<SalesByItemsActionsBar
|
||||||
numberFormat={filter.numberFormat}
|
numberFormat={query.numberFormat}
|
||||||
onNumberFormatSubmit={handleNumberFormatSubmit}
|
onNumberFormatSubmit={handleNumberFormatSubmit}
|
||||||
/>
|
/>
|
||||||
<SalesByItemsLoadingBar />
|
<SalesByItemsLoadingBar />
|
||||||
@@ -64,7 +60,7 @@ function SalesByItems({
|
|||||||
<DashboardPageContent>
|
<DashboardPageContent>
|
||||||
<FinancialStatement>
|
<FinancialStatement>
|
||||||
<SalesByItemsHeader
|
<SalesByItemsHeader
|
||||||
pageFilter={filter}
|
pageFilter={query}
|
||||||
onSubmitFilter={handleFilterSubmit}
|
onSubmitFilter={handleFilterSubmit}
|
||||||
/>
|
/>
|
||||||
<SalesByItemsBody />
|
<SalesByItemsBody />
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
// @ts-nocheck
|
// @ts-nocheck
|
||||||
|
import React from 'react';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import * as Yup from 'yup';
|
import * as Yup from 'yup';
|
||||||
import intl from 'react-intl-universal';
|
import intl from 'react-intl-universal';
|
||||||
|
import { castArray } from 'lodash';
|
||||||
|
import { useAppQueryString } from '@/hooks';
|
||||||
|
import { transformToForm } from '@/utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the validation schema.
|
* Retrieves the validation schema.
|
||||||
@@ -26,3 +30,34 @@ export const getDefaultSalesByItemsQuery = () => ({
|
|||||||
filterByOption: 'with-transactions',
|
filterByOption: 'with-transactions',
|
||||||
itemsIds: [],
|
itemsIds: [],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parses sales by items query of browser location.
|
||||||
|
*/
|
||||||
|
const parseSalesByItemsQuery = (locationQuery) => {
|
||||||
|
const defaultQuery = getDefaultSalesByItemsQuery();
|
||||||
|
|
||||||
|
const transformed = {
|
||||||
|
...defaultQuery,
|
||||||
|
...transformToForm(locationQuery, defaultQuery),
|
||||||
|
};
|
||||||
|
return {
|
||||||
|
...transformed,
|
||||||
|
itemsIds: castArray(transformed.itemsIds),
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sales by items query state.
|
||||||
|
*/
|
||||||
|
export const useSalesByItemsQuery = () => {
|
||||||
|
// Retrieves location query.
|
||||||
|
const [locationQuery, setLocationQuery] = useAppQueryString();
|
||||||
|
|
||||||
|
// Merges the default filter query with location URL query.
|
||||||
|
const query = React.useMemo(
|
||||||
|
() => parseSalesByItemsQuery(locationQuery),
|
||||||
|
[locationQuery],
|
||||||
|
);
|
||||||
|
return { query, locationQuery, setLocationQuery };
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user