refactoring: migrating to react-query to manage service-side state.

This commit is contained in:
a.bouhuolia
2021-02-07 08:10:21 +02:00
parent e093be0663
commit adac2386bb
284 changed files with 8255 additions and 6610 deletions

View File

@@ -0,0 +1,132 @@
import { useMutation, useQuery, useQueryClient } from 'react-query';
import ApiService from 'services/ApiService';
const transformAccount = (response) => {
return response.data.account;
};
/**
* Retrieve accounts list.
*/
export function useAccounts(query, props) {
return useQuery(
['ACCOUNTS', query],
() =>
ApiService.get('accounts', { params: query }).then(
(response) => response.data.accounts,
),
{
initialData: [],
...props
},
);
}
/**
* Retrieve the given account details.
* @param {number} id -
*/
export function useAccount(id, props) {
return useQuery(
['ACCOUNT', id],
() => ApiService.get(`accounts/${id}`).then(transformAccount),
{
initialData: {},
...props,
},
);
}
/**
* Retrieve accounts types list.
*/
export function useAccountsTypes() {
return useQuery(['ACCOUNTS_TYPES'], () => ApiService.get('account_types'), {
initialData: [],
});
}
/**
* Creates account.
*/
export function useCreateAccount(props) {
const client = useQueryClient();
return useMutation((values) => ApiService.post('accounts', values), {
onSuccess: () => {
client.invalidateQueries('ACCOUNTS');
},
...props
});
}
/**
* Edits the given account.
*/
export function useEditAccount(props) {
const query = useQueryClient();
return useMutation(
(values, id) => ApiService.post(`accounts/${id}`, values),
{
onSuccess: () => {
query.invalidateQueries('ACCOUNTS');
},
...props
},
);
}
/**
* Edits the given account.
*/
export function useDeleteAccount(props) {
const query = useQueryClient();
return useMutation(
(id) =>
ApiService.delete(`accounts/${id}`).catch((error) => {
throw new Error(error.response.data);
}),
{
onSuccess: () => {
query.invalidateQueries('ACCOUNTS');
},
...props,
},
);
}
/**
* Actiavte the give account.
*/
export function useActivateAccount(props) {
const query = useQueryClient();
return useMutation(
(id) => ApiService.post(`accounts/${id}/activate`),
{
onSuccess: () => {
},
...props
}
);
}
/**
* Inactivate the given account.
*/
export function useInactivateAccount(props) {
const query = useQueryClient();
return useMutation(
(id) => ApiService.post(`accounts/${id}/inactivate`),
{
onSuccess: () => {
},
...props
},
);
}

View File

@@ -0,0 +1,115 @@
import { useQueryClient, useQuery, useMutation } from 'react-query';
import ApiService from 'services/ApiService';
// Bills transformer.
const billsTransformer = (response) => {
return {
bills: response.data.bills,
pagination: response.data.pagination,
filterMeta: response.data.filter_meta,
};
};
/**
* Creates a new sale invoice.
*/
export function useCreateBill(props) {
const queryClient = useQueryClient();
return useMutation((values) => ApiService.post('purchases/bills', values), {
onSuccess: () => {
queryClient.invalidateQueries('BILLS');
},
...props,
});
}
/**
* Edits the given sale invoice.
*/
export function useEditBill(props) {
const queryClient = useQueryClient();
return useMutation(
(id, values) => ApiService.post(`purchases/bills/${id}`, values),
{
onSuccess: () => {
queryClient.invalidateQueries('BILLS');
},
...props,
},
);
}
/**
* Deletes the given sale invoice.
*/
export function useDeleteBill(props) {
const queryClient = useQueryClient();
return useMutation((id) => ApiService.delete(`purchases/bills/${id}`), {
onSuccess: () => {
queryClient.invalidateQueries('BILLS');
},
...props,
});
}
/**
* Retrieve sale invoices list with pagination meta.
*/
export function useBills(query, props) {
return useQuery(
['BILLS', query],
() =>
ApiService.get('purchases/bills', { params: query }).then(
billsTransformer,
),
{
initialData: {
bills: [],
pagination: {
page: 1,
page_size: 12,
total: 0,
},
},
...props,
},
);
}
/**
* Retrieve bill details of the given bill id.
* @param {number} id - Bill id.
*/
export function useBill(id, props) {
return useQuery(
['BILL', id],
async () => {
const { data } = await ApiService.get(`/purchases/bills/${id}`);
return data.bill;
},
{
initialData: {},
...props,
},
);
}
/**
* Marks the given bill as open.
*/
export function useOpenBill(props) {
const queryClient = useQueryClient();
return useMutation(
(id) => ApiService.delete(`purchases/bills/${id}/open`),
{
onSuccess: () => {
queryClient.invalidateQueries('BILLS');
},
...props,
},
);
}

View File

@@ -0,0 +1,41 @@
import { useMutation, useQuery } from 'react-query';
import ApiService from 'services/ApiService';
/**
* Create a new currency.
*/
export function useCreateCurrency() {
return useMutation((values) => ApiService.post('currencies', values));
}
/**
* Edits the given currency code.
*/
export function useEditCurrency() {
return useMutation((currencyCode, values) =>
ApiService.post(`currencies/${currencyCode}`, values),
);
}
/**
* Deletes the given currency.
*/
export function useDeleteCurrency() {
return useMutation((currencyCode) =>
ApiService.delete(`currencies/${currencyCode}`),
);
}
/**
* Retrieve the currencies list.
*/
export function useCurrencies(props) {
return useQuery(
['CURRENCIES'],
() => ApiService.get('currencies').then(res => res.data.currencies),
{
initialData: [],
...props,
},
);
}

View File

@@ -0,0 +1,72 @@
import { useMutation, useQuery } from 'react-query';
import ApiService from 'services/ApiService';
const transformCustomers = (response) => {
return response.data;
}
const transformCustomer = (response) => {
return response.data;
}
/**
*
* @param {*} query
* @param {*} props
*/
export function useCustomers(query, props) {
return useQuery(
['CUSTOMERS', query],
() => ApiService
.get(`customers`, { params: query })
.then(transformCustomers),
{
initialData: {
customers: [],
pagination: {},
},
...props
}
)
}
/**
*
* @param {*} props
*/
export function useEditCustomer(props) {
return useMutation(
(values, id) => ApiService.post(`customers/${id}`, values),
props
);
}
/**
*
* @param {*} props
*/
export function useDeleteCustomer(props) {
return useMutation(
(id) => ApiService.delete(`customers/${id}`),
props
);
}
export function useCreateCustomer(props) {
return useMutation(
(values) => ApiService.post('customers', values),
props
);
}
export function useCustomer(id, props) {
return useQuery(
['CUSTOMER', id],
() => ApiService
.get(`customers/${id}`)
.then(transformCustomer),
props
)
};

View File

@@ -0,0 +1,129 @@
import { useQueryClient, useQuery, useMutation } from 'react-query';
import ApiService from 'services/ApiService';
const invoicesTransformer = (response) => {
return {
estimates: response.data.sale_invoices,
pagination: response.data.pagination,
};
};
/**
* Creates a new sale estimate.
*/
export function useCreateEstimate(props) {
const queryClient = useQueryClient();
return useMutation((values) => ApiService.post('sales/estimates', values), {
onSuccess: () => {
queryClient.invalidateQueries('SALE_ESTIMATES');
},
...props,
});
}
/**
* Edits the given sale estimate.
*/
export function useEditEstimate(props) {
const queryClient = useQueryClient();
return useMutation(
(id, values) => ApiService.post(`sales/estimates/${id}`, values),
{
onSuccess: () => {
queryClient.invalidateQueries('SALE_ESTIMATES');
},
...props,
},
);
}
/**
* Deletes the given sale invoice.
*/
export function useDeleteEstimate(props) {
const queryClient = useQueryClient();
return useMutation((id) => ApiService.delete(`sales/estimates/${id}`), {
onSuccess: () => {
queryClient.invalidateQueries('SALE_ESTIMATES');
},
...props,
});
}
/**
* Retrieve sale invoices list with pagination meta.
*/
export function useEstimates(query, props) {
return useQuery(
['SALE_INVOICES', query],
() =>
ApiService.get('sales/estimates', { params: query }).then(
invoicesTransformer,
),
{
initialData: {
saleEstimates: [],
pagination: {
page: 1,
page_size: 12,
total: 0,
},
},
...props,
},
);
}
/**
* Mark the given estimate as delivered.
*/
export function useDeliverEstimate(props) {
const queryClient = useQueryClient();
return useMutation(
(id) => ApiService.delete(`sales/estimates/${id}/deliver`),
{
onSuccess: () => {
queryClient.invalidateQueries('SALE_ESTIMATES');
},
...props,
},
);
}
/**
* Mark the given estimate as approved.
*/
export function useApproveEstimate(props) {
const queryClient = useQueryClient();
return useMutation(
(id) => ApiService.delete(`sales/estimates/${id}/deliver`),
{
onSuccess: () => {
queryClient.invalidateQueries('SALE_ESTIMATES');
},
...props,
},
);
}
/**
* Mark the given estimate as rejected.
*/
export function useRejectEstimate(props) {
const queryClient = useQueryClient();
return useMutation(
(id) => ApiService.delete(`sales/estimates/${id}/reject`),
{
onSuccess: () => {
queryClient.invalidateQueries('SALE_ESTIMATES');
},
...props,
},
);
}

View File

@@ -0,0 +1,42 @@
import { useQuery, useMutation } from 'react-query';
import ApiService from 'services/ApiService';
export function useExpenses(props) {
return useQuery(
['EXPENSES'],
() => ApiService.get(`expenses`).then((response) => response.data),
{
initialData: {
expenses: [],
pagination: {},
},
...props
},
);
}
export function useExpense(id, props) {
return useQuery(
['EXPENSES', id],
() => ApiService.get(`expenses`).then((response) => response.data.expense),
{
initialData: {},
...props
},
);
}
export function useDeleteExpense(props) {
return useMutation((id) => ApiService.delete(`expenses/${id}`), props);
}
export function useEditExpense(props) {
return useMutation((id, values) => ApiService.post(`expenses/${id}`, values), props);
}
export function useCreateExpense(props) {
return useMutation((values) => ApiService.post('expenses', values), props);
}

View File

@@ -0,0 +1,147 @@
import { useQuery } from 'react-query';
import ApiService from 'services/ApiService';
import {
trialBalanceSheetReducer,
balanceSheetRowsReducer,
profitLossSheetReducer,
generalLedgerTableRowsReducer,
journalTableRowsReducer,
} from 'containers/FinancialStatements/reducers';
const transformBalanceSheet = (response) => {
return {
tableRows: balanceSheetRowsReducer(response.data.data),
...response.data,
};
};
const transformTrialBalance = (response) => {
return {
tableRows: trialBalanceSheetReducer(response.data.data),
...response.data,
};
};
const transformProfitLoss = (response) => {
return {
tableRows: profitLossSheetReducer(response.data.data),
...response.data,
};
};
const transformGeneralLedger = (response) => {
return {
tableRows: generalLedgerTableRowsReducer(response.data.data),
...response.data,
};
};
const transformJournal = (response) => {
return {
tableRows: journalTableRowsReducer(response.data.data),
...response.data,
};
};
export function useBalanceSheet(query, props) {
return useQuery(
['FINANCIAL-REPORT', 'BALANCE-SHEET', query],
() =>
ApiService.get('/financial_statements/balance_sheet', {
params: query,
}).then(transformBalanceSheet),
{
initialData: {
data: [],
columns: [],
query: {},
tableRows: [],
},
...props,
},
);
}
export function useTrialBalanceSheet(query, props) {
return useQuery(
['FINANCIAL-REPORT', 'TRIAL-BALANCE-SHEET', query],
() =>
ApiService.get('/financial_statements/trial_balance_sheet', {
params: query,
}).then(transformTrialBalance),
{
initialData: {
tableRows: [],
data: [],
query: {},
},
...props,
},
);
}
export function useProfitLossSheet(query, props) {
return useQuery(
['FINANCIAL-REPORT', 'PROFIT-LOSS-SHEET', query],
() =>
ApiService.get('/financial_statements/profit_loss_sheet', {
params: query,
}).then(transformProfitLoss),
{
initialData: {
data: {},
tableRows: [],
columns: [],
query: {},
},
...props,
},
);
}
export function useGeneralLedgerSheet(query, props) {
return useQuery(
['FINANCIAL-REPORT', 'GENERAL-LEDGER', query],
() =>
ApiService.get('/financial_statements/general_ledger', {
params: query,
}).then(transformGeneralLedger),
{
initialData: {
tableRows: [],
data: {},
query: {}
},
...props
},
);
}
export function useJournalSheet(query, props) {
return useQuery(
['FINANCIAL-REPORT', 'JOURNAL', query],
() =>
ApiService.get('/financial_statements/journal', { params: query }).then(
transformJournal,
),
{
initialData: {
data: {},
tableRows: [],
query: {},
},
...props
},
);
}
export function useARAgingSummaryReport(query, props) {
return useQuery(
['FINANCIAL-REPORT', 'AR-AGING-SUMMARY', query],
() =>
ApiService.get('/financial_statements/receivable_aging_summary', {
params: query,
}),
props,
);
}

View File

@@ -0,0 +1,19 @@
export * from './accounts';
export * from './views';
export * from './items';
export * from './itemsCategories';
export * from './inventoryAdjustments';
export * from './expenses';
export * from './financialReports';
export * from './customers';
export * from './vendors';
export * from './manualJournals';
export * from './currencies';
export * from './invoices';
export * from './bills';
export * from './estimates';
export * from './receipts';
export * from './paymentReceives';
export * from './paymentMades';
export * from './settings';

View File

@@ -0,0 +1,65 @@
import { useMutation, useQuery, useQueryClient } from 'react-query';
import ApiService from 'services/ApiService';
/**
* Creates the inventory adjustment to the given item.
*/
export function useCreateInventoryAdjustment(props) {
const queryClient = useQueryClient();
return useMutation(
(values) => ApiService.post('inventory_adjustments/quick', values),
{
onSuccess: () => {
queryClient.invalidateQueries('INVENTORY_ADJUSTMENTS');
},
...props,
},
);
}
/**
* Deletes the inventory adjustment transaction.
*/
export function useDeleteInventoryAdjustment(props) {
const queryClient = useQueryClient();
return useMutation(
(id) => ApiService.delete(`inventory_adjustments/${id}`),
{
onSuccess: () => {
queryClient.invalidateQueries('INVENTORY_ADJUSTMENTS');
},
...props
},
);
}
const inventoryAdjustmentsTransformer = (response) => {
return {
transactions: response.data.inventoy_adjustments,
pagination: response.data.pagination,
};
}
/**
* Retrieve inventory adjustment list with pagination meta.
*/
export function useInventoryAdjustments(query, props) {
return useQuery(
['INVENTORY_ADJUSTMENTS', query],
() => ApiService.get('inventory_adjustments', { params: query })
.then(inventoryAdjustmentsTransformer),
{
initialData: {
transactions: [],
pagination: {
page: 1,
page_size: 12,
total: 0
},
},
...props,
},
);
}

View File

@@ -0,0 +1,115 @@
import { useQueryClient, useQuery, useMutation } from 'react-query';
import ApiService from 'services/ApiService';
// Invoices transformer.
const invoicesTransformer = (response) => {
return {
invoices: response.data.sales_invoices,
pagination: response.data.pagination,
filterMeta: response.data.filter_meta,
};
};
const invoiceTransformer = (response) => {
return {
invoice: response.data.invoice,
}
}
/**
* Creates a new sale invoice.
*/
export function useCreateInvoice(props) {
const queryClient = useQueryClient();
return useMutation((values) => ApiService.post('sales/invoices', values), {
onSuccess: () => {
queryClient.invalidateQueries('SALE_INVOICES');
},
...props,
});
}
/**
* Edits the given sale invoice.
*/
export function useEditInvoice(props) {
const queryClient = useQueryClient();
return useMutation(
(id, values) => ApiService.post(`sales/invoices/${id}`, values),
{
onSuccess: () => {
queryClient.invalidateQueries('SALE_INVOICES');
},
...props,
},
);
}
/**
* Deletes the given sale invoice.
*/
export function useDeleteInvoice(props) {
const queryClient = useQueryClient();
return useMutation((id) => ApiService.delete(`sales/invoices/${id}`), {
onSuccess: () => {
queryClient.invalidateQueries('SALE_INVOICES');
},
...props,
});
}
/**
* Retrieve sale invoices list with pagination meta.
*/
export function useInvoices(query, props) {
return useQuery(
['SALE_INVOICES', query],
() =>
ApiService.get('sales/invoices', { params: query }).then(
invoicesTransformer,
),
{
initialData: {
saleInvoices: [],
pagination: {
page: 1,
page_size: 12,
total: 0,
},
},
...props,
},
);
}
/**
* Marks the sale invoice as delivered.
*/
export function useDeliverInvoice(props) {
const queryClient = useQueryClient();
return useMutation(
(id) => ApiService.delete(`sales/invoices/${id}/deliver`),
{
onSuccess: () => {
queryClient.invalidateQueries('SALE_INVOICES');
},
...props,
},
);
}
/**
* Retrieve the sale invoice details.
*/
export function useInvoice(id, props) {
return useQuery(['SALE_INVOICE', id], () =>
ApiService.get(`sales/invoices/${id}`).then(invoiceTransformer),
{
initialData: {},
...props
}
);
}

View File

@@ -0,0 +1,116 @@
import { useMutation, useQuery, useQueryClient } from 'react-query';
import ApiService from 'services/ApiService';
import { transformResponse } from 'utils';
const defaultPagination = {
pageSize: 12,
page: 0,
pagesCount: 0,
};
/**
* Creates a new item.
*/
export function useCreateItem(props) {
return useMutation((values) => ApiService.post('items', values), props);
}
/**
* Edits the given item.
*/
export function useEditItem(props) {
const queryClient = useQueryClient();
return useMutation(([id, values]) => ApiService.post(`items/${id}`, values), {
onSuccess: () => {
queryClient.invalidateQueries('ITEMS');
queryClient.invalidateQueries('ITEM');
},
...props,
});
}
/**
* Deletes the given item.
*/
export function useDeleteItem(props) {
const queryClient = useQueryClient();
return useMutation((id) => ApiService.delete(`items/${id}`), {
onSuccess: () => {
queryClient.invalidateQueries('ITEMS');
queryClient.invalidateQueries('ITEM');
},
...props,
});
}
// Transformes items response.
const transformItemsResponse = (response) => {
return {
items: response.data.items,
pagination: transformResponse(response.data.pagination),
filterMeta: transformResponse(response.data.filter_meta),
};
};
/**
* Retrieves items list.
*/
export function useItems(query, props) {
return useQuery(
['ITEMS', query],
() =>
ApiService.get(`items`, { params: query }).then(transformItemsResponse),
{
initialData: {
items: [],
pagination: defaultPagination,
filterMeta: {},
},
...props,
},
);
}
/**
* Retrieve details of the given item.
* @param {number} id - Item id.
*/
export function useItem(id, props) {
return useQuery(
['ITEM', id],
() => ApiService.get(`items/${id}`).then((response) => response.data.item),
props,
);
}
/**
* Activate the given item.
*/
export function useActivateItem(props) {
const queryClient = useQueryClient();
return useMutation((id) => ApiService.post(`items/${id}/activate`), {
onSuccess: () => {
queryClient.invalidateQueries('ITEMS');
queryClient.invalidateQueries('ITEM');
},
...props,
});
}
/**
* Inactivate the given item.
*/
export function useInactivateItem(props) {
const queryClient = useQueryClient();
return useMutation((id) => ApiService.post(`items/${id}/inactivate`), {
onSuccess: () => {
queryClient.invalidateQueries('ITEMS');
queryClient.invalidateQueries('ITEM');
},
...props,
});
}

View File

@@ -0,0 +1,94 @@
import { useQuery, useMutation, useQueryClient } from 'react-query';
import ApiService from 'services/ApiService';
/**
* Creates a new item category.
*/
export function useCreateItemCategory(props) {
const queryClient = useQueryClient();
return useMutation(
(values) => ApiService.post('item_categories', values),
{
onSuccess: () => {
queryClient.invalidateQueries('ITEMS_CATEGORIES');
},
...props
}
);
}
/**
* Edits the item category.
*/
export function useEditItemCategory(props) {
const queryClient = useQueryClient();
return useMutation(
([id, values]) => ApiService.post(`item_categories/${id}`, values),
{
onSuccess: () => {
queryClient.invalidateQueries('ITEMS_CATEGORIES');
},
...props
}
);
}
/**
* Deletes the given item category.
*/
export function useDeleteItemCategory(props) {
const queryClient = useQueryClient();
return useMutation(
(id) => ApiService.delete(`item_categories/${id}`),
{
onSuccess: () => {
queryClient.invalidateQueries('ITEMS_CATEGORIES');
},
...props
});
}
// Transforms items categories.
const transformItemsCategories = (response) => {
return {
itemsCategories: response.data.item_categories,
pagination: response.data.pagination,
};
};
/**
* Retrieve the items categories.
*/
export function useItemsCategories(query, props) {
return useQuery(
['ITEMS_CATEGORIES', query],
() => ApiService.get(`item_categories`, { params: query })
.then(transformItemsCategories),
{
initialData: {
itemsCategories: [],
pagination: {}
},
...props,
},
);
}
/**
* Retrieve the item category details.
* @param {number} id - Item category.
*/
export function useItemCategory(id, props) {
return useQuery(
['ITEMS_CATEGORY', id],
() => ApiService.get(`item_categories/${id}`)
.then(res => res.data.category),
{
initialData: {},
...props,
},
);
}

View File

@@ -0,0 +1,87 @@
import { useMutation, useQuery } from 'react-query';
import ApiService from 'services/ApiService';
// Transform joiurn
const transformJournals = (response) => {
return {
manualJournals: response.data.manual_journals,
pagination: response.data.pagination,
};
};
/**
* Creates a new manual journal.
*/
export function useCreateJournal(props) {
return useMutation(
(values) => ApiService.post('manual-journals', values),
props,
);
}
/**
* Edits the given manual journal.
*/
export function useEditJournal(props) {
return useMutation(
(values, id) => ApiService.post(`manual-journals/${id}`, values),
props,
);
}
/**
* Deletes the given manual jouranl.
*/
export function useDeleteJournal(props) {
return useMutation(
(values, id) => ApiService.delete(`manual-journals/${id}`),
props,
);
}
/**
* Publishes the given manual journal.
*/
export function usePublishJournal(props) {
return useMutation(
(id) => ApiService.post(`manual-journals/${id}/publish`),
props,
);
}
/**
* Retrieve the manual journals with pagination meta.
*/
export function useJournals(query, props) {
return useQuery(
['JOURNALS', query],
() =>
ApiService.get('manual-journals', { params: query }).then(
transformJournals,
),
{
initialData: {
manualJournals: [],
pagination: {},
},
...props,
},
);
}
/**
* Retrieve the manual journal details.
*/
export function useJournal(id, props) {
return useQuery(
['JOURNAL', id],
async () => {
const { data } = await ApiService.get(`manual-journals/${id}`);
return data.manual_journal;
},
{
...props,
},
);
}

View File

@@ -0,0 +1,91 @@
import { useMutation, useQuery, useQueryClient } from 'react-query';
import ApiService from 'services/ApiService';
const transformPaymentMades = (response) => {
return {};
};
/**
* Retrieve payment mades list.
*/
export function usePaymentMades(query, props) {
return useQuery(
['PAYMENT_MADES', query],
() =>
ApiService.get('sales/payment_mades', { params: query }).then(
transformPaymentMades,
),
{
initialData: [],
...props,
},
);
}
/**
* Creates payment made.
*/
export function useCreatePaymentMade(props) {
const client = useQueryClient();
return useMutation(
(values) => ApiService.post('sales/payment_mades', values),
{
onSuccess: () => {
client.invalidateQueries('PAYMENT_MADES');
},
...props,
},
);
}
/**
* Edits payment made.
*/
export function useEditPaymentMade(props) {
const client = useQueryClient();
return useMutation(
(id, values) => ApiService.post(`sales/payment_mades/${id}`, values),
{
onSuccess: () => {
client.invalidateQueries('PAYMENT_MADES');
},
...props,
},
);
}
/**
* Deletes payment made.
*/
export function useDeletePaymentMade(props) {
const client = useQueryClient();
return useMutation(
(id, values) => ApiService.delete(`sales/payment_mades/${id}`, values),
{
onSuccess: () => {
client.invalidateQueries('PAYMENT_MADES');
},
...props,
},
);
}
/**
* Retrieve specific payment made.
*/
export function usePaymentMade(id, props) {
return useQuery(
['PAYMENT_MADE', id],
() =>
ApiService.get(`sales/payment_mades/${id}`).then(
transformPaymentMades,
),
{
initialData: [],
...props,
},
);
}

View File

@@ -0,0 +1,91 @@
import { useMutation, useQuery, useQueryClient } from 'react-query';
import ApiService from 'services/ApiService';
const transformPaymentReceives = (response) => {
return {};
};
/**
* Retrieve accounts list.
*/
export function usePaymentReceives(query, props) {
return useQuery(
['PAYMENT_RECEIVES', query],
() =>
ApiService.get('sales/payment_receives', { params: query }).then(
transformPaymentReceives,
),
{
initialData: [],
...props,
},
);
}
/**
* Creates payment receive.
*/
export function useCreatePaymentReceive(props) {
const client = useQueryClient();
return useMutation(
(values) => ApiService.post('sales/payment_receives', values),
{
onSuccess: () => {
client.invalidateQueries('PAYMENT_RECEIVES');
},
...props,
},
);
}
/**
* Edits payment receive.
*/
export function useEditPaymentReceive(props) {
const client = useQueryClient();
return useMutation(
(id, values) => ApiService.post(`sales/payment_receives/${id}`, values),
{
onSuccess: () => {
client.invalidateQueries('PAYMENT_RECEIVES');
},
...props,
},
);
}
/**
* Deletes payment receive.
*/
export function useDeletePaymentReceive(props) {
const client = useQueryClient();
return useMutation(
(id, values) => ApiService.delete(`sales/payment_receives/${id}`, values),
{
onSuccess: () => {
client.invalidateQueries('PAYMENT_RECEIVES');
},
...props,
},
);
}
/**
* Retrieve specific payment receive.
*/
export function usePaymentReceive(id, props) {
return useQuery(
['PAYMENT_RECEIVE', id],
() =>
ApiService.get(`sales/payment_receives/${id}`).then(
transformPaymentReceives,
),
{
initialData: [],
...props,
},
);
}

View File

@@ -0,0 +1,114 @@
import { useQueryClient, useQuery, useMutation } from 'react-query';
import ApiService from 'services/ApiService';
// Receipts transformer.
const invoicesTransformer = (response) => {
return {
invoices: response.data.sales_invoices,
pagination: response.data.pagination,
filterMeta: response.data.filter_meta,
};
};
const receiptTransformer = (response) => {
return response.data;
}
/**
* Creates a new sale invoice.
*/
export function useCreateReceipt(props) {
const queryClient = useQueryClient();
return useMutation((values) => ApiService.post('sales/receipts', values), {
onSuccess: () => {
queryClient.invalidateQueries('SALE_RECEIPTS');
},
...props,
});
}
/**
* Edits the given sale invoice.
*/
export function useEditReceipt(props) {
const queryClient = useQueryClient();
return useMutation(
(id, values) => ApiService.post(`sales/receipts/${id}`, values),
{
onSuccess: () => {
queryClient.invalidateQueries('SALE_RECEIPTS');
},
...props,
},
);
}
/**
* Deletes the given sale invoice.
*/
export function useDeleteReceipt(props) {
const queryClient = useQueryClient();
return useMutation((id) => ApiService.delete(`sales/receipts/${id}`), {
onSuccess: () => {
queryClient.invalidateQueries('SALE_RECEIPTS');
},
...props,
});
}
/**
* Deletes the given sale invoice.
*/
export function useCloseReceipt(props) {
const queryClient = useQueryClient();
return useMutation((id) => ApiService.post(`sales/receipts/${id}/close`), {
onSuccess: () => {
queryClient.invalidateQueries('SALE_RECEIPTS');
},
...props,
});
}
/**
* Retrieve sale invoices list with pagination meta.
*/
export function useReceipts(query, props) {
return useQuery(
['SALE_RECEIPTS', query],
() =>
ApiService
.get('sales/receipts', { params: query })
.then(invoicesTransformer),
{
initialData: {
saleReceipts: [],
pagination: {
page: 1,
page_size: 12,
total: 0,
},
},
...props,
},
);
}
/**
* Retrieve sale invoices list with pagination meta.
*/
export function useReceipt(id, props) {
return useQuery(
['SALE_RECEIPT', id],
() =>
ApiService
.get(`sales/receipts/${id}`)
.then(receiptTransformer),
{
initialData: {},
...props,
},
);
}

View File

@@ -0,0 +1,45 @@
import { useQuery, useMutation, useQueryClient } from 'react-query';
import { useDispatch } from 'react-redux';
import ApiService from 'services/ApiService';
import t from 'store/types';
/**
* Retrieve settings.
*/
export function useSettings(query, props) {
const dispatch = useDispatch();
const settings = useQuery(
['SETTINGS', query],
async () => {
const {
data: { settings },
} = await ApiService.get('settings', { params: query });
return settings;
},
{
initialData: [],
...props,
},
);
dispatch({
type: t.SETTING_SET,
options: settings.data,
});
return settings;
}
/**
* Saves the settings.
*/
export function useSaveSettings(props) {
const queryClient = useQueryClient();
return useMutation((settings) => ApiService.post('settings', settings), {
onSuccess: () => {
queryClient.invalidateQueries('SETTINGS');
},
...props,
});
}

View File

@@ -0,0 +1,81 @@
import { useMutation, useQuery } from 'react-query';
import ApiService from 'services/ApiService';
const transformVendors = (response) => {
return {
vendors: response.data.vendors,
pagination: response.data.pagination,
};
};
const transformVendor = (response) => {
return response.data.vendor;
};
/**
* Retrieve vendors list.
*/
export function useVendors(query, props) {
return useQuery(
['VENDORS', query],
() => ApiService
.get(`vendors`, { params: query })
.then(transformVendors),
{
initialData: {
vendors: [],
pagination: {},
},
...props
}
)
}
/**
*
* @param {*} props
*/
export function useEditVendor(props) {
return useMutation(
(values, id) => ApiService.post(`vendors/${id}`, values),
props
);
}
/**
*
* @param {*} props
*/
export function useDeleteVendor(props) {
return useMutation(
(id) => ApiService.delete(`vendors/${id}`),
props
);
}
/**
* Creates a new vendor.
*/
export function useCreateVendor(props) {
return useMutation(
(values) => ApiService.post('vendors', values),
props
);
}
/**
*
* @param {*} id
* @param {*} props
*/
export function useVendor(id, props) {
return useQuery(
['VENDOR', id],
() => ApiService
.get(`vendors/${id}`)
.then(transformVendor),
props
)
};

View File

@@ -0,0 +1,51 @@
import { useQuery } from 'react-query';
import ApiService from "services/ApiService";
// export function useSaveView(values) {
// return ApiService.post('views', form);
// }
// export function useEditView(values, id) {
// return ApiService.post(`views/${id}`, values);
// }
// export function useDeleteView(id) {
// return ApiService.delete(`views/${id}`);
// }
// export function useView(id) {
// return useQuery(['VIEW', id], () => ApiService.get(`views/${id}`)
// }
export function useResourceViews(resourceSlug) {
return useQuery(
['RESOURCE_VIEW', resourceSlug],
() => ApiService.get(`views/resource/${resourceSlug}`)
.then((response) => response.data.views),
{
initialData: [],
}
);
}
export function useResourceColumns(resourceSlug) {
return useQuery(
['RESOURCE_COLUMNS', resourceSlug],
() => ApiService.get(`resources/${resourceSlug}/columns`),
{
initialData: [],
},
);
}
export function useResourceFields(resourceSlug) {
return useQuery(
['RESOURCE_FIELDS', resourceSlug],
() => ApiService.get(`resources/${resourceSlug}/fields`)
.then((res) => res.data.resource_fields),
{
initialData: [],
},
);
}