feat(ManualJournals): Auto-increment.

fix(BillPayment): Validate the opened payment bills.
fix(redux): presist redux state.
fix(useRequestQuery): hook.
This commit is contained in:
a.bouhuolia
2021-03-18 14:23:37 +02:00
parent 4e8bdee97a
commit 9ff8e3159d
79 changed files with 1326 additions and 889 deletions

View File

@@ -1,5 +1,5 @@
import { useMutation, useQueryClient } from 'react-query';
import { useQueryTenant } from '../useQueryTenant';
import { useQueryTenant, useRequestQuery } from '../useQueryRequest';
import useApiRequest from '../useRequest';
import t from './types';
@@ -14,27 +14,20 @@ const commonInvalidateQueries = (query) => {
// Invalidate financial reports.
query.invalidateQueries(t.FINANCIAL_REPORT);
}
};
/**
* Retrieve accounts list.
*/
export function useAccounts(query, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.ACCOUNTS, query],
() => apiRequest.get('accounts', { params: query }),
{ method: 'get', url: 'accounts', params: query },
{
select: (response) => {
return response.data.accounts;
},
initialDataUpdatedAt: 0,
initialData: {
data: {
accounts: []
},
},
defaultData: [],
...props,
},
);
@@ -45,17 +38,13 @@ export function useAccounts(query, props) {
* @param {number} id - Account id.
*/
export function useAccount(id, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.ACCOUNT, id],
() => apiRequest.get(`accounts/${id}`).then(transformAccount),
{ method: 'get', url: `accounts/${id}` },
{
initialDataUpdatedAt: 0,
initialData: {
data: { account: {} }
},
...props
select: transformAccount,
defaultData: {},
...props,
},
);
}
@@ -64,19 +53,12 @@ export function useAccount(id, props) {
* Retrieve accounts types list.
*/
export function useAccountsTypes(props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.ACCOUNTS_TYPES],
() => apiRequest.get('account_types'),
{ method: 'get', url: 'account_types' },
{
select: (res) => res.data.account_types,
initialData: {
data: {
account_types: [],
},
},
initialDataUpdatedAt: 0,
defaultData: [],
...props,
},
);

View File

@@ -1,6 +1,5 @@
import { useQueryClient, useMutation } from 'react-query';
import { useQueryTenant } from '../useQueryTenant';
import { defaultTo } from 'lodash';
import { useRequestQuery } from '../useQueryRequest';
import { transformPagination } from 'utils';
import useApiRequest from '../useRequest';
import t from './types';
@@ -63,20 +62,17 @@ export function useEditBill(props) {
/**
* Marks the given bill as open.
*/
export function useOpenBill(props) {
export function useOpenBill(props) {
const queryClient = useQueryClient();
const apiRequest = useApiRequest();
return useMutation(
(id) => apiRequest.post(`purchases/bills/${id}/open`),
{
onSuccess: (res, id) => {
// Common invalidate queries.
commonInvalidateQueries(queryClient);
},
...props,
return useMutation((id) => apiRequest.post(`purchases/bills/${id}/open`), {
onSuccess: (res, id) => {
// Common invalidate queries.
commonInvalidateQueries(queryClient);
},
);
...props,
});
}
/**
@@ -95,38 +91,37 @@ export function useDeleteBill(props) {
});
}
const transformBillsResponse = (response) => ({
bills: response.data.bills,
pagination: transformPagination(response.data.pagination),
filterMeta: response.data.filter_meta,
});
/**
* Retrieve sale invoices list with pagination meta.
*/
export function useBills(query, props) {
const apiRequest = useApiRequest();
const states = useQueryTenant(
return useRequestQuery(
[t.BILLS, query],
() =>
apiRequest.get('purchases/bills', { params: query }),
{
select: (response) => ({
bills: response.data.bills,
pagination: transformPagination(response.data.pagination),
filterMeta: response.data.filter_meta,
}),
method: 'get',
url: 'purchases/bills',
params: query,
},
{
select: transformBillsResponse,
defaultData: {
bills: [],
pagination: {
page: 1,
page_size: 12,
total: 0,
},
filterMeta: {},
},
...props,
},
);
return {
...states,
data: defaultTo(states.data, {
bills: [],
pagination: {
page: 1,
page_size: 12,
total: 0,
},
filterMeta: {},
})
}
}
/**
@@ -134,44 +129,33 @@ export function useBills(query, props) {
* @param {number} id - Bill id.
*/
export function useBill(id, props) {
const apiRequest = useApiRequest();
const states = useQueryTenant(
return useRequestQuery(
[t.BILL, id],
() => apiRequest.get(`/purchases/bills/${id}`),
{ method: 'get', url: `/purchases/bills/${id}`, },
{
select: (res) => res.data.bill,
defaultData: {},
...props,
}
},
);
return {
...states,
data: defaultTo(states.data, {}),
}
}
/**
* Retrieve the due bills of the given vendor id.
* @param {number} vendorId -
*/
export function useDueBills(vendorId, props) {
const apiRequest = useApiRequest();
const states = useQueryTenant(
export function useDueBills(vendorId, props) {
return useRequestQuery(
[t.BILLS, t.BILLS_DUE, vendorId],
() =>
apiRequest.get(`purchases/bills/due`, {
params: { vendor_id: vendorId },
}),
{
method: 'get',
url: 'purchases/bills/due',
params: { vendor_id: vendorId },
},
{
select: (res) => res.data.bills,
defaultData: [],
...props,
},
);
return {
...states,
data: defaultTo(states.data, []),
};
}

View File

@@ -1,5 +1,5 @@
import useApiRequest from '../useRequest';
import { useQueryTenant } from '../useQueryTenant';
import { useQueryTenant } from '../useQueryRequest';
/**
* Retrieve the contact duplicate.

View File

@@ -1,5 +1,5 @@
import { useMutation, useQueryClient } from 'react-query';
import { useQueryTenant } from '../useQueryTenant';
import { useRequestQuery } from '../useQueryRequest';
import useApiRequest from '../useRequest';
import t from './types';
@@ -62,14 +62,12 @@ export function useDeleteCurrency(props) {
* Retrieve the currencies list.
*/
export function useCurrencies(props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.CURRENCIES],
() => apiRequest.get('currencies').then((res) => res.data.currencies),
{ method: 'get', url: 'currencies' },
{
initialDataUpdatedAt: 0,
initialData: [],
select: (res) => res.data.currencies,
defaultData: [],
...props
},
);

View File

@@ -1,5 +1,5 @@
import { useMutation, useQueryClient } from 'react-query';
import { useQueryTenant } from '../useQueryTenant';
import { useRequestQuery } from '../useQueryRequest';
import { transformPagination } from 'utils';
import useApiRequest from '../useRequest';
import t from './types';
@@ -22,28 +22,26 @@ const commonInvalidateQueries = (queryClient) => {
queryClient.invalidateQueries(t.FINANCIAL_REPORT);
};
// Customers response selector.
const customersSelector = (response) => ({
customers: response.data.customers,
pagination: transformPagination(response.data.pagination),
filterMeta: response.data.filter_meta,
});
/**
* Retrieve customers list with pagination meta.
*/
export function useCustomers(query, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.CUSTOMERS, query],
() => apiRequest.get(`customers`, { params: query }),
{ method: 'get', url: `customers`, params: query },
{
select: (response) => ({
customers: response.data.customers,
pagination: transformPagination(response.data.pagination),
filterMeta: response.data.filter_meta,
}),
initialDataUpdatedAt: 0,
initialData: {
data: {
customers: [],
pagination: defaultPagination,
filter_meta: {},
}
select: customersSelector,
defaultData: {
customers: [],
pagination: defaultPagination,
filterMeta: {},
},
...props,
},
@@ -117,19 +115,12 @@ export function useCreateCustomer(props) {
* Retrieve the customer details.
*/
export function useCustomer(id, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.CUSTOMER, id],
() => apiRequest.get(`customers/${id}`),
{ method: 'get', url: `customers/${id}` },
{
select: (res) => res.data.customer,
initialDataUpdatedAt: 0,
initialData: {
data: {
customer: {}
}
},
defaultData: {},
...props
},
);

View File

@@ -1,5 +1,5 @@
import { useQueryClient, useMutation } from 'react-query';
import { useQueryTenant } from '../useQueryTenant';
import { useRequestQuery } from '../useQueryRequest';
import useApiRequest from '../useRequest';
import { transformPagination } from 'utils';
import t from './types';
@@ -55,48 +55,40 @@ export function useEditEstimate(props) {
* Retrieve sale estimate details.
*/
export function useEstimate(id, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.SALE_ESTIMATE, id],
() => apiRequest.get(`sales/estimates/${id}`),
{ method: 'get', url: `sales/estimates/${id}` },
{
select: (res) => res.data.estimate,
initialDataUpdatedAt: 0,
initialData: {
data: { estimate: {} },
},
defaultData: {},
...props,
},
);
}
const transformEstimates = (res) => ({
estimates: res.data.sales_estimates,
pagination: transformPagination(res.data.pagination),
filterMeta: res.data.filter_meta,
});
/**
* Retrieve sale invoices list with pagination meta.
*/
export function useEstimates(query, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.SALE_ESTIMATES, query],
() => apiRequest.get('sales/estimates', { params: query }),
{ method: 'get', url: 'sales/estimates', params: query },
{
select: (res) => ({
estimates: res.data.sales_estimates,
pagination: transformPagination(res.data.pagination),
filterMeta: res.data.filter_meta,
}),
initialDataUpdatedAt: 0,
initialData: {
data:{
sales_estimates: [],
pagination: {
page: 1,
pageSize: 12,
total: 0,
},
filter_meta: {},
}
select: transformEstimates,
defaultData: {
estimates: [],
pagination: {
page: 1,
pageSize: 12,
total: 0,
},
filterMeta: {},
},
...props,
},

View File

@@ -1,6 +1,6 @@
import { useMutation, useQueryClient } from 'react-query';
import { defaultTo } from 'lodash';
import { useQueryTenant } from '../useQueryTenant';
import { useQueryTenant } from '../useQueryRequest';
import { transformPagination } from 'utils';
import useApiRequest from '../useRequest';

View File

@@ -1,6 +1,6 @@
import { useMutation, useQueryClient } from 'react-query';
import useApiRequest from '../useRequest';
import { useQueryTenant } from '../useQueryTenant';
import { useRequestQuery } from '../useQueryRequest';
import { transformPagination } from 'utils';
import t from './types';
@@ -23,28 +23,29 @@ const commonInvalidateQueries = (queryClient) => {
queryClient.invalidateQueries(t.FINANCIAL_REPORT);
};
const transformExpenses = (response) => ({
expenses: response.data.expenses,
pagination: transformPagination(response.data.pagination),
filterMeta: response.data.filter_meta,
});
/**
* Retrieve the expenses list.
*/
export function useExpenses(query, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.EXPENSES, query],
() => apiRequest.get(`expenses`, { params: { ...query } }),
{
select: (response) => ({
expenses: response.data.expenses,
pagination: transformPagination(response.data.pagination),
filterMeta: response.data.filter_meta,
}),
initialDataUpdatedAt: 0,
initialData: {
data: {
expenses: [],
pagination: defaultPagination,
filter_meta: {},
},
method: 'get',
url: `expenses`,
params: { ...query }
},
{
select: transformExpenses,
defaultData: {
expenses: [],
pagination: defaultPagination,
filterMeta: {},
},
...props,
},
@@ -56,19 +57,15 @@ export function useExpenses(query, props) {
* @param {number} id - Expense id.
*/
export function useExpense(id, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.EXPENSE, id],
() => apiRequest.get(`expenses/${id}`),
{
method: 'get',
url: `expenses/${id}`
},
{
select: (res) => res.data.expense,
initialDataUpdatedAt: 0,
initialData: {
data: {
expense: {},
}
},
defaultData: {},
...props,
},
);

View File

@@ -1,5 +1,4 @@
import { defaultTo } from 'lodash';
import { useQueryTenant } from '../useQueryTenant';
import { useRequestQuery } from '../useQueryRequest';
import {
trialBalanceSheetReducer,
balanceSheetRowsReducer,
@@ -7,176 +6,150 @@ import {
generalLedgerTableRowsReducer,
journalTableRowsReducer,
ARAgingSummaryTableRowsMapper,
APAgingSummaryTableRowsMapper
APAgingSummaryTableRowsMapper,
} from 'containers/FinancialStatements/reducers';
import useApiRequest from '../useRequest';
import t from './types';
/**
* Retrieve balance sheet.
*/
export function useBalanceSheet(query, props) {
const apiRequest = useApiRequest();
const states = useQueryTenant(
return useRequestQuery(
[t.FINANCIAL_REPORT, t.BALANCE_SHEET, query],
() =>
apiRequest.get('/financial_statements/balance_sheet', {
params: query,
}),
{
method: 'get',
url: '/financial_statements/balance_sheet',
params: query,
},
{
select: (res) => ({
tableRows: balanceSheetRowsReducer(res.data.data),
...res.data,
}),
defaultData: {
data: [],
columns: [],
query: {},
tableRows: [],
},
...props,
},
);
return {
...states,
data: defaultTo(states.data, {
data: [],
columns: [],
query: {},
tableRows: [],
}),
};
}
/**
* Retrieve trial balance sheet.
*/
export function useTrialBalanceSheet(query, props) {
const apiRequest = useApiRequest();
const states = useQueryTenant(
return useRequestQuery(
[t.FINANCIAL_REPORT, t.TRIAL_BALANCE_SHEET, query],
() =>
apiRequest.get('/financial_statements/trial_balance_sheet', {
params: query,
}),
{
method: 'get',
url: '/financial_statements/trial_balance_sheet',
params: query,
},
{
select: (res) => ({
tableRows: trialBalanceSheetReducer(res.data.data),
...res.data,
}),
defaultData: {
tableRows: [],
data: [],
query: {},
},
...props,
},
);
return {
...states,
data: defaultTo(states.data, {
tableRows: [],
data: [],
query: {},
}),
};
}
/**
* Retrieve profit/loss (P&L) sheet.
*/
export function useProfitLossSheet(query, props) {
const apiRequest = useApiRequest();
const states = useQueryTenant(
return useRequestQuery(
[t.FINANCIAL_REPORT, t.PROFIT_LOSS_SHEET, query],
() =>
apiRequest.get('/financial_statements/profit_loss_sheet', {
params: query,
}),
{
method: 'get',
url: '/financial_statements/profit_loss_sheet',
params: query,
},
{
select: (res) => ({
tableRows: profitLossSheetReducer(res.data.data),
...res.data,
}),
defaultData: {
data: {},
tableRows: [],
columns: [],
query: {},
},
...props,
},
);
return {
...states,
data: defaultTo(states.data, {
data: {},
tableRows: [],
columns: [],
query: {},
}),
};
}
/**
* Retrieve general ledger (GL) sheet.
*/
export function useGeneralLedgerSheet(query, props) {
const apiRequest = useApiRequest();
const states = useQueryTenant(
return useRequestQuery(
[t.FINANCIAL_REPORT, t.GENERAL_LEDGER, query],
() =>
apiRequest.get('/financial_statements/general_ledger', {
{
method: 'get',
url: '/financial_statements/general_ledger',
params: query,
}),
},
{
select: (res) => ({
tableRows: generalLedgerTableRowsReducer(res.data.data),
...res.data,
}),
defaultData: {
tableRows: [],
data: {},
query: {},
},
...props,
},
);
return {
...states,
data: defaultTo(states.data, {
tableRows: [],
data: {},
query: {},
}),
};
}
/**
* Retrieve journal sheet.
*/
export function useJournalSheet(query, props) {
const apiRequest = useApiRequest();
const states = useQueryTenant(
return useRequestQuery(
[t.FINANCIAL_REPORT, t.JOURNAL, query],
() => apiRequest.get('/financial_statements/journal', { params: query }),
{ method: 'get', url: '/financial_statements/journal', params: query },
{
select: (res) => ({
tableRows: journalTableRowsReducer(res.data.data),
...res.data,
}),
defaultData: {
data: {},
tableRows: [],
query: {},
},
...props,
},
);
return {
...states,
data: defaultTo(states.data, {
data: {},
tableRows: [],
query: {},
}),
};
}
/**
* Retrieve A/R aging summary report.
*/
export function useARAgingSummaryReport(query, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.FINANCIAL_REPORT, t.AR_AGING_SUMMARY, query],
() =>
apiRequest.get('/financial_statements/receivable_aging_summary', {
params: query,
}),
{
method: 'get',
url: '/financial_statements/receivable_aging_summary',
params: query,
},
{
select: (res) => ({
columns: res.data.columns,
@@ -188,17 +161,14 @@ export function useARAgingSummaryReport(query, props) {
columns: res.data.columns,
}),
}),
initialData: {
defaultData: {
data: {
data: {
customers: [],
total: {},
},
columns: [],
tableRows: [],
customers: [],
total: {},
},
columns: [],
tableRows: [],
},
initialDataUpdatedAt: 0,
...props,
},
);
@@ -208,14 +178,13 @@ export function useARAgingSummaryReport(query, props) {
* Retrieve A/P aging summary report.
*/
export function useAPAgingSummaryReport(query, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.FINANCIAL_REPORT, t.AP_AGING_SUMMARY, query],
() =>
apiRequest.get('/financial_statements/payable_aging_summary', {
params: query,
}),
{
method: 'get',
url: '/financial_statements/payable_aging_summary',
params: query,
},
{
select: (res) => ({
columns: res.data.columns,
@@ -227,17 +196,14 @@ export function useAPAgingSummaryReport(query, props) {
columns: res.data.columns,
}),
}),
initialData: {
defaultData: {
data: {
data: {
vendors: [],
total: {},
},
columns: [],
tableRows: [],
vendors: [],
total: {},
},
columns: [],
tableRows: [],
},
initialDataUpdatedAt: 0,
...props,
},
);

View File

@@ -1,10 +1,9 @@
import { useMutation, useQueryClient } from 'react-query';
import { useQueryTenant } from '../useQueryTenant';
import { useRequestQuery } from '../useQueryRequest';
import { transformPagination } from 'utils';
import useApiRequest from '../useRequest';
import t from './types';
const commonInvalidateQueries = (queryClient) => {
// Invalidate inventory adjustments.
queryClient.invalidateQueries(t.INVENTORY_ADJUSTMENTS);
@@ -47,16 +46,13 @@ export function useDeleteInventoryAdjustment(props) {
const queryClient = useQueryClient();
const apiRequest = useApiRequest();
return useMutation(
(id) => apiRequest.delete(`inventory_adjustments/${id}`),
{
onSuccess: (res, id) => {
// Common invalidate queries.
commonInvalidateQueries(queryClient);
},
...props
return useMutation((id) => apiRequest.delete(`inventory_adjustments/${id}`), {
onSuccess: (res, id) => {
// Common invalidate queries.
commonInvalidateQueries(queryClient);
},
);
...props,
});
}
const inventoryAdjustmentsTransformer = (response) => {
@@ -64,32 +60,27 @@ const inventoryAdjustmentsTransformer = (response) => {
transactions: response.data.inventoy_adjustments,
pagination: transformPagination(response.data.pagination),
};
}
};
/**
* Retrieve inventory adjustment list with pagination meta.
*/
export function useInventoryAdjustments(query, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
['INVENTORY_ADJUSTMENTS', query],
() => apiRequest.get('inventory_adjustments', { params: query })
.then(inventoryAdjustmentsTransformer),
{ url: 'inventory_adjustments', params: query },
{
initialDataUpdatedAt: 0,
initialData: {
data: {
transactions: [],
pagination: {
page: 1,
pageSize: 12,
total: 0,
pagesCount: 0,
},
}
select: inventoryAdjustmentsTransformer,
defaultData: {
transactions: [],
pagination: {
page: 1,
pageSize: 12,
total: 0,
pagesCount: 0,
},
},
...props
...props,
},
);
}
}

View File

@@ -1,5 +1,5 @@
import { useMutation } from 'react-query';
import { useQueryTenant } from '../useQueryTenant';
import { useRequestQuery } from '../useQueryRequest';
import useApiRequest from '../useRequest';
/**
@@ -19,11 +19,9 @@ export const useAuthInviteAccept = (props) => {
* @param {string} token - Token.
*/
export const useInviteMetaByToken = (token, props) => {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
['INVITE_META', token],
() => apiRequest.get(`invite/invited/${token}`),
{ method: 'get', url: `invite/invited/${token}` },
{
select: (res) => res.data,
...props

View File

@@ -1,5 +1,5 @@
import { useQueryClient, useMutation } from 'react-query';
import { useQueryTenant } from '../useQueryTenant';
import { useRequestQuery } from '../useQueryRequest';
import { transformPagination } from 'utils';
import useApiRequest from '../useRequest';
import t from './types';
@@ -90,32 +90,29 @@ export function useDeleteInvoice(props) {
});
}
const transformInvoices = (res) => ({
invoices: res.data.sales_invoices,
pagination: transformPagination(res.data.pagination),
filterMeta: res.data.filter_meta,
});
/**
* Retrieve sale invoices list with pagination meta.
*/
export function useInvoices(query, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.SALE_INVOICES, query],
() => apiRequest.get('sales/invoices', { params: query }),
{ method: 'get', url: 'sales/invoices', params: query },
{
select: (res) => ({
invoices: res.data.sales_invoices,
pagination: transformPagination(res.data.pagination),
filterMeta: res.data.filter_meta,
}),
initialDataUpdatedAt: 0,
initialData: {
data: {
sales_invoices: [],
pagination: {
page: 1,
pageSize: 12,
total: 0,
},
filter_meta: {},
select: transformInvoices,
defaultData: {
invoices: [],
pagination: {
page: 1,
pageSize: 12,
total: 0,
},
filterMeta: {},
},
...props,
},
@@ -149,19 +146,12 @@ export function useDeliverInvoice(props) {
* @param {number} invoiceId - Invoice id.
*/
export function useInvoice(invoiceId, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.SALE_INVOICE, invoiceId],
() => apiRequest.get(`sales/invoices/${invoiceId}`),
{ method: 'get', url: `sales/invoices/${invoiceId}` },
{
select: (res) => res.data.sale_invoice,
initialDataUpdatedAt: 0,
initialData: {
data: {
sale_invoice: {}
},
},
defaultData: {},
...props,
},
);
@@ -172,22 +162,16 @@ export function useInvoice(invoiceId, props) {
* @param {number} customerId - Customer id.
*/
export function useDueInvoices(customerId, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.SALE_INVOICES, t.SALE_INVOICES_DUE, customerId],
() =>
apiRequest.get(`sales/invoices/payable`, {
params: { customer_id: customerId },
}),
{
method: 'get',
url: `sales/invoices/payable`,
params: { customer_id: customerId },
},
{
select: (res) => res.data.sales_invoices,
initialDataUpdatedAt: 0,
initialData: {
data: {
sales_invoices: [],
},
},
defaultData: [],
...props,
},
);

View File

@@ -1,6 +1,6 @@
import { useMutation, useQueryClient } from 'react-query';
import { transformPagination, transformResponse } from 'utils';
import { useQueryTenant } from '../useQueryTenant';
import { useRequestQuery } from '../useQueryRequest';
import useApiRequest from '../useRequest';
import t from './types';
@@ -114,9 +114,7 @@ export function useInactivateItem(props) {
const transformItemsResponse = (response) => {
return {
items: response.data.items,
pagination: transformPagination(
transformResponse(response.data.pagination)
),
pagination: transformPagination(transformResponse(response.data.pagination)),
filterMeta: transformResponse(response.data.filter_meta),
};
};
@@ -125,19 +123,21 @@ const transformItemsResponse = (response) => {
* Retrieves items list.
*/
export function useItems(query, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.ITEMS, query],
() => apiRequest.get(`items`, { params: query }).then(transformItemsResponse),
{
initialDataUpdatedAt: 0,
initialData: {
method: 'get',
url: 'items',
params: { ...query },
},
{
select: transformItemsResponse,
defaultData: {
items: [],
pagination: DEFAULT_PAGINATION,
filterMeta: {},
},
...props,
...props
}
);
}
@@ -147,14 +147,15 @@ export function useItems(query, props) {
* @param {number} id - Item id.
*/
export function useItem(id, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.ITEM, id],
() => apiRequest.get(`items/${id}`).then((response) => response.data.item),
{
initialDataUpdatedAt: 0,
initialData: {},
method: 'get',
url: `items/${id}`,
},
{
select: (response) => response.data.item,
defaultData: {},
...props
},
);

View File

@@ -1,5 +1,5 @@
import { useMutation, useQueryClient } from 'react-query';
import { useQueryTenant } from '../useQueryTenant';
import { useRequestQuery } from '../useQueryRequest';
import useApiRequest from '../useRequest';
import t from './types';
@@ -68,26 +68,24 @@ export function useDeleteItemCategory(props) {
});
}
const transformCategories = (res) => ({
itemsCategories: res.data.item_categories,
pagination: res.data.pagination,
});
/**
* Retrieve the items categories.
*/
export function useItemsCategories(query, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.ITEMS_CATEGORIES, query],
() => apiRequest.get(`item_categories`, { params: query }),
{ method: 'get', url: `item_categories`, params: query },
{
select: (response) => ({
itemsCategories: response.data.item_categories,
pagination: response.data.pagination,
}),
initialDataUpdatedAt: 0,
initialData: {
data: {
item_categories: [],
pagination: {}
},
select: transformCategories,
defaultData: {
itemsCategories: [],
pagination: {}
},
...props,
},
@@ -99,15 +97,12 @@ export function useItemsCategories(query, props) {
* @param {number} id - Item category.
*/
export function useItemCategory(id, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.ITEM_CATEGORY, id],
() =>
apiRequest.get(`item_categories/${id}`).then((res) => res.data.category),
{ method: 'get', url: `item_categories/${id}` },
{
initialDataUpdatedAt: 0,
initialData: {},
select: (res) => res.data.category,
defaultData: {},
...props,
},
);

View File

@@ -1,6 +1,5 @@
import { defaultTo } from 'lodash';
import { useMutation, useQueryClient } from 'react-query';
import { useQueryTenant } from '../useQueryTenant';
import { useRequestQuery } from '../useQueryRequest';
import { transformPagination } from 'utils';
import useApiRequest from '../useRequest';
import t from './types';
@@ -108,46 +107,41 @@ export function usePublishJournal(props) {
);
}
const transformJournals = (response) => ({
manualJournals: response.data.manual_journals,
pagination: transformPagination(response.data.pagination),
filterMeta: response.data.filter_meta
});
/**
* Retrieve the manual journals with pagination meta.
*/
export function useJournals(query, props) {
const apiRequest = useApiRequest();
const states = useQueryTenant(
return useRequestQuery(
[t.MANUAL_JOURNALS, query],
() => apiRequest.get('manual-journals', { params: query }),
{ method: 'get', url: 'manual-journals', params: query },
{
select: (response) => ({
manualJournals: response.data.manual_journals,
pagination: transformPagination(response.data.pagination),
filterMeta: response.data.filter_meta
}),
select: transformJournals,
defaultData: {
manualJournals: [],
pagination: {},
filterMeta: {},
},
...props,
},
);
return {
...states,
data: defaultTo(states.data, {
manualJournals: [],
pagination: {},
filterMeta: {},
}),
};
}
/**
* Retrieve the manual journal details.
*/
export function useJournal(id, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.MANUAL_JOURNAL, id],
() => apiRequest.get(`manual-journals/${id}`),
{ method: 'get', url: `manual-journals/${id}` },
{
select: (res) => res.data.manual_journal,
defaultData: {},
...props,
},
);

View File

@@ -1,7 +1,7 @@
import { useMutation } from 'react-query';
import t from './types';
import useApiRequest from '../useRequest';
import { useQueryTenant } from '../useQueryTenant';
import { useRequestQuery } from '../useQueryRequest';
import { useEffect } from 'react';
import { useSetOrganizations, useSetSubscriptions } from '../state';
import { omit } from 'lodash';
@@ -10,11 +10,9 @@ import { omit } from 'lodash';
* Retrieve organizations of the authenticated user.
*/
export function useOrganizations(props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.ORGANIZATIONS],
() => apiRequest.get(`organization/all`),
{ method: 'get', url: `organization/all` },
{
select: (res) => res.data.organizations,
initialDataUpdatedAt: 0,
@@ -32,21 +30,15 @@ export function useOrganizations(props) {
* Retrieve the current organization metadata.
*/
export function useCurrentOrganization(props) {
const apiRequest = useApiRequest();
const setOrganizations = useSetOrganizations();
const setSubscriptions = useSetSubscriptions();
const query = useQueryTenant(
const query = useRequestQuery(
[t.ORGANIZATION_CURRENT],
() => apiRequest.get(`organization/current`),
{ method: 'get', url: `organization/current` },
{
select: (res) => res.data.organization,
initialDataUpdatedAt: 0,
initialData: {
data: {
organization: {},
},
},
defaultData: {},
...props,
},
);

View File

@@ -1,6 +1,5 @@
import { defaultTo } from 'lodash';
import { useMutation, useQueryClient } from 'react-query';
import { useQueryTenant } from '../useQueryTenant';
import { useRequestQuery } from '../useQueryRequest';
import { transformPagination } from 'utils';
import useApiRequest from '../useRequest';
import t from './types';
@@ -34,29 +33,23 @@ const commonInvalidateQueries = (client) => {
* Retrieve payment mades list.
*/
export function usePaymentMades(query, props) {
const apiRequest = useApiRequest();
const states = useQueryTenant(
return useRequestQuery(
[t.PAYMENT_MADES, query],
() => apiRequest.get('purchases/bill_payments', { params: query }),
{ url: 'purchases/bill_payments', params: query },
{
select: (res) => ({
paymentMades: res.data.bill_payments,
pagination: transformPagination(res.data.pagination),
filterMeta: res.data.filter_meta,
}),
defaultData: {
paymentMades: [],
pagination: {},
filterMeta: {},
},
...props,
},
);
return {
...states,
data: defaultTo(states.data, {
paymentMades: [],
pagination: {},
filterMeta: {},
}),
};
}
/**
@@ -126,24 +119,24 @@ export function useDeletePaymentMade(props) {
* Retrieve specific payment made.
*/
export function usePaymentMadeEditPage(id, props) {
const apiRequest = useApiRequest();
const states = useQueryTenant(
return useRequestQuery(
[t.PAYMENT_MADE_EDIT_PAGE, id],
() => apiRequest.get(`purchases/bill_payments/${id}/edit-page`),
{
method: 'get',
url: `purchases/bill_payments/${id}/edit-page`,
},
{
select: (res) => ({
paymentMade: res.data.bill_payment,
entries: res.data.entries,
}),
defaultData: {
paymentMade: {},
entries: [],
},
...props,
},
);
return {
...states,
data: defaultTo(states.data, {}),
};
}
/**
@@ -151,22 +144,16 @@ export function usePaymentMadeEditPage(id, props) {
* @param {number} vendorId -
*/
export function usePaymentMadeNewPageEntries(vendorId, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.PAYMENT_MADE_NEW_ENTRIES, vendorId],
() =>
apiRequest.get(`purchases/bill_payments/new-page/entries`, {
params: { vendor_id: vendorId },
}),
{
method: 'get',
url: `purchases/bill_payments/new-page/entries`,
params: { vendor_id: vendorId },
},
{
select: (res) => res.data.entries,
initialDataUpdatedAt: 0,
initialData: {
data: {
entries: [],
},
},
defaultData: [],
...props,
},
);

View File

@@ -1,6 +1,5 @@
import { useMutation, useQueryClient } from 'react-query';
import { useQueryTenant } from '../useQueryTenant';
import { defaultTo } from 'lodash';
import { useRequestQuery } from '../useQueryRequest';
import useApiRequest from '../useRequest';
import { transformPagination, saveInvoke } from 'utils';
import t from './types';
@@ -27,37 +26,30 @@ const commonInvalidateQueries = (client) => {
client.invalidateQueries(t.CUSTOMER);
};
// Transform payment receives.
const transformPaymentReceives = (res) => ({
paymentReceives: res.data.payment_receives,
pagination: transformPagination(res.data.pagination),
filterMeta: res.data.filter_meta,
});
/**
* Retrieve accounts list.
*/
export function usePaymentReceives(query, props) {
const apiRequest = useApiRequest();
const states = useQueryTenant(
return useRequestQuery(
[t.PAYMENT_RECEIVES, query],
() => apiRequest.get('sales/payment_receives', { params: query }),
{ method: 'get', url: 'sales/payment_receives', params: query },
{
select: (res) => ({
paymentReceives: res.data.payment_receives,
pagination: transformPagination(res.data.pagination),
filterMeta: res.data.filter_meta,
}),
select: transformPaymentReceives,
defaultData: {
paymentReceives: [],
pagination: { page: 1, pageSize: 12, total: 0 },
filterMeta: {},
},
...props,
},
);
return {
...states,
data: defaultTo(states.data, {
paymentReceives: [],
pagination: {
page: 1,
pageSize: 12,
total: 0,
},
filterMeta: {},
}),
};
}
/**
@@ -136,23 +128,15 @@ export function useDeletePaymentReceive(props) {
* @param {number} id - Payment receive.
*/
export function usePaymentReceive(id, props) {
const apiRequest = useApiRequest();
const states = useQueryTenant(
return useRequestQuery(
[t.PAYMENT_RECEIVE, id],
() => apiRequest.get(`sales/payment_receives/${id}`),
{ method: 'get', url: `sales/payment_receives/${id}` },
{
select: (res) => ({
paymentReceive: res.data.payment_receive,
}),
select: (res) => res.data.payment_receive,
defaultData: {},
...props,
},
);
return {
...states,
data: defaultTo(states.data, {}),
};
}
/**
@@ -160,25 +144,19 @@ export function usePaymentReceive(id, props) {
* @param {number} id - Payment receive id.
*/
export function usePaymentReceiveEditPage(id, props) {
const apiRequest = useApiRequest();
const states = useQueryTenant(
return useRequestQuery(
[t.PAYMENT_RECEIVE_EDIT_PAGE, id],
() => apiRequest.get(`sales/payment_receives/${id}/edit-page`),
{ method: 'get', url: `sales/payment_receives/${id}/edit-page` },
{
select: (res) => ({
paymentReceive: res.data.payment_receive,
entries: res.data.entries,
}),
defaultData: {
paymentReceive: {},
entries: [],
},
...props,
},
);
return {
...states,
data: defaultTo(states.data, {
paymentReceive: {},
entries: [],
}),
};
}

View File

@@ -1,6 +1,5 @@
import { useQueryClient, useMutation } from 'react-query';
import { useQueryTenant } from '../useQueryTenant';
import { defaultTo } from 'lodash';
import { useRequestQuery } from '../useQueryRequest';
import useApiRequest from '../useRequest';
import { transformPagination } from 'utils';
import t from './types';
@@ -99,56 +98,46 @@ export function useCloseReceipt(props) {
});
}
const transformReceipts = (res) => ({
receipts: res.data.sale_receipts,
pagination: transformPagination(res.data.pagination),
filterMeta: res.data.filter_meta,
});
/**
* Retrieve sale invoices list with pagination meta.
*/
export function useReceipts(query, props) {
const apiRequest = useApiRequest();
const states = useQueryTenant(
return useRequestQuery(
['SALE_RECEIPTS', query],
() => apiRequest.get('sales/receipts', { params: query }),
{ method: 'get', url: 'sales/receipts', params: query },
{
select: (response) => ({
receipts: response.data.sale_receipts,
pagination: transformPagination(response.data.pagination),
filterMeta: response.data.filter_meta,
}),
select: transformReceipts,
defaultData: {
receipts: [],
pagination: {
page: 1,
page_size: 12,
total: 0,
},
filterMeta: {},
},
...props,
},
);
return {
...states,
data: defaultTo(states.data, {
receipts: [],
pagination: {
page: 1,
page_size: 12,
total: 0,
},
filterMeta: {},
}),
};
}
/**
* Retrieve sale invoices list with pagination meta.
*/
export function useReceipt(id, props) {
const apiRequest = useApiRequest();
const states = useQueryTenant(
return useRequestQuery(
['SALE_RECEIPT', id],
() => apiRequest.get(`sales/receipts/${id}`),
{ method: 'get', url: `sales/receipts/${id}` },
{
select: (res) => res.data.sale_receipt,
defaultData: {},
...props,
},
);
return {
...states,
data: defaultTo(states.data, {}),
}
}

View File

@@ -1,6 +1,6 @@
import { useEffect } from 'react';
import { useMutation, useQueryClient } from 'react-query';
import { useQueryTenant } from '../useQueryTenant';
import { useRequestQuery } from '../useQueryRequest';
import useApiRequest from '../useRequest';
import { useSetSettings } from 'hooks/state';
import t from './types';
@@ -21,20 +21,14 @@ export function useSaveSettings(props) {
}
function useSettingsQuery(key, query, props) {
const apiRequest = useApiRequest();
const setSettings = useSetSettings();
const state = useQueryTenant(
const state = useRequestQuery(
key,
() => apiRequest.get('settings', { params: query }),
{ method: 'get', url: 'settings', params: query },
{
select: (res) => res.data.settings,
initialDataUpdatedAt: 0,
initialData: {
data: {
settings: [],
},
},
defaultData: [],
...props,
},
);

View File

@@ -1,6 +1,6 @@
import { useMutation, useQueryClient } from 'react-query';
import { defaultTo } from 'lodash';
import { useQueryTenant } from '../useQueryTenant';
import { useQueryTenant } from '../useQueryRequest';
import useApiRequest from '../useRequest';
import t from './types';

View File

@@ -2,7 +2,7 @@ import { useMutation, useQueryClient } from 'react-query';
import t from './types';
import { transformPagination } from 'utils';
import useApiRequest from '../useRequest';
import { useQueryTenant } from '../useQueryTenant';
import { useRequestQuery } from '../useQueryRequest';
// Common invalidate queries.
const commonInvalidateQueries = (queryClient) => {
@@ -17,28 +17,26 @@ const commonInvalidateQueries = (queryClient) => {
queryClient.invalidateQueries(t.FINANCIAL_REPORT);
};
// Transformes vendors response.
const transformVendorsResponse = (res) => ({
vendors: res.data.vendors,
pagination: transformPagination(res.data.pagination),
filterMeta: res.data.filter_meta,
});
/**
* Retrieve vendors list.
*/
export function useVendors(query, props) {
const apiRequest = useApiRequest();
return useQueryTenant(
return useRequestQuery(
[t.VENDORS, query],
() => apiRequest.get(`vendors`, { params: query }),
{ method: 'get', url: `vendors`, params: query },
{
select: (res) => ({
vendors: res.data.vendors,
pagination: transformPagination(res.data.pagination),
filterMeta: res.data.filter_meta,
}),
initialDataUpdatedAt: 0,
initialData: {
data: {
vendors: [],
pagination: {},
filter_meta: {},
},
select: transformVendorsResponse,
defaultData: {
vendors: [],
pagination: {},
filterMeta: {},
},
...props,
},
@@ -106,14 +104,13 @@ export function useCreateVendor(props) {
* Retrieve vendor details.
*/
export function useVendor(id, props) {
const apiRequest = useApiRequest();
return useQueryTenant([t.VENDOR, id], () => apiRequest.get(`vendors/${id}`), {
select: (res) => res.data.vendor,
initialDataUpdatedAt: 0,
initialData: {
data: { vendor: {} },
return useRequestQuery(
[t.VENDOR, id],
{ method: 'get', url: `vendors/${id}` },
{
select: (res) => res.data.vendor,
defaultData: {},
...props,
},
...props,
});
);
}

View File

@@ -1,46 +1,46 @@
import { defaultTo } from 'lodash';
import useApiRequest from '../useRequest';
import { useQueryTenant } from '../useQueryTenant';
import { useRequestQuery } from '../useQueryRequest';
/**
* Retrieve the resource views.
* @param {string} resourceSlug - Resource slug.
*/
export function useResourceViews(resourceSlug) {
const apiRequest = useApiRequest();
const states = useQueryTenant(
return useRequestQuery(
['RESOURCE_VIEW', resourceSlug],
() => apiRequest.get(`views/resource/${resourceSlug}`)
.then((response) => response.data.views),
);
return {
...states,
data: defaultTo(states.data, []),
}
}
export function useResourceColumns(resourceSlug) {
const apiRequest = useApiRequest();
return useQueryTenant(
['RESOURCE_COLUMNS', resourceSlug],
() => apiRequest.get(`resources/${resourceSlug}/columns`),
{ method: 'get', url: `views/resource/${resourceSlug}` },
{
initialData: [],
select: (response) => response.data.views,
defaultData: [],
},
);
}
export function useResourceFields(resourceSlug, props) {
const apiRequest = useApiRequest();
/**
* Retrieve the resource columns.
* @param {string} resourceSlug - Resource slug.
*/
export function useResourceColumns(resourceSlug) {
return useRequestQuery(
['RESOURCE_COLUMNS', resourceSlug],
{ method: 'get', url: `resources/${resourceSlug}/columns` },
{
defaultData: [],
},
);
}
const states = useQueryTenant(
/**
* Retrieve the resource fields.
* @param {string} resourceSlug - Resource slug.
*/
export function useResourceFields(resourceSlug, props) {
return useRequestQuery(
['RESOURCE_FIELDS', resourceSlug],
() => apiRequest.get(`resources/${resourceSlug}/fields`)
.then((res) => res.data.resource_fields),
{ method: 'get', url: `resources/${resourceSlug}/fields` },
{
select: (res) => res.data.resource_fields,
defaultData: [],
},
props
);
return {
...states,
data: defaultTo(states.data, []),
}
}