diff --git a/packages/webapp/src/components/Datatable/DataTable.tsx b/packages/webapp/src/components/Datatable/DataTable.tsx index 77ce28704..e7cbbb06b 100644 --- a/packages/webapp/src/components/Datatable/DataTable.tsx +++ b/packages/webapp/src/components/Datatable/DataTable.tsx @@ -56,7 +56,7 @@ export function DataTable(props) { expandable = false, noInitialFetch = false, - pagesCount: controlledPageCount, + rowsCount, // Pagination props. initialPageIndex = 0, @@ -121,7 +121,7 @@ export function DataTable(props) { hiddenColumns: initialHiddenColumns, }, manualPagination, - pageCount: controlledPageCount, + pageCount: rowsCount && pageSize > 0 ? Math.ceil(rowsCount / pageSize) : 0, getSubRows: (row) => row.children, manualSortBy, expandSubRows, diff --git a/packages/webapp/src/components/Datatable/TablePagination.tsx b/packages/webapp/src/components/Datatable/TablePagination.tsx index 56dea12d3..9ea31777a 100644 --- a/packages/webapp/src/components/Datatable/TablePagination.tsx +++ b/packages/webapp/src/components/Datatable/TablePagination.tsx @@ -15,7 +15,7 @@ export default function TablePagination() { pageCount, state: { pageIndex, pageSize }, }, - props: { pagination, loading, onPaginationChange, hidePaginationNoPages }, + props: { pagination, loading, onPaginationChange, hidePaginationNoPages, rowsCount }, } = useContext(TableContext); const triggerOnPaginationChange = useCallback( @@ -59,7 +59,7 @@ export default function TablePagination() { showPagination && ( ) => { @@ -50,12 +49,6 @@ const commonInvalidateQueries = (queryClient: ReturnType) }); }; -export type BillsListResult = { - bills: unknown[]; - pagination: ReturnType; - filterMeta: Record; -}; - export function useCreateBill( props?: UseMutationOptions ) { @@ -161,36 +154,14 @@ export function useValidateBulkDeleteBills( }); } -/** API may return bills/data, pagination, and filter_meta (snake_case). */ -type BillsListResponseShape = { - bills?: unknown[]; - data?: unknown[]; - pagination?: unknown; - filter_meta?: Record; -}; - -function isRecord(obj: unknown): obj is Record { - return typeof obj === 'object' && obj !== null && !Array.isArray(obj); -} - -function transformBillsList(res: BillsListResponse & BillsListResponseShape): BillsListResult { - const bills = res.bills ?? res.data ?? []; - const pagination = res.pagination ?? {}; - const filterMeta = res.filter_meta; - return { - bills: Array.isArray(bills) ? bills : [], - pagination: transformPagination(pagination), - filterMeta: isRecord(filterMeta) ? filterMeta : {}, - }; -} export function useBills( query?: GetBillsQuery, - props?: Omit, 'queryKey' | 'queryFn'> + props?: Omit, 'queryKey' | 'queryFn'> ) { const fetcher = useApiFetcher(); return useQuery({ queryKey: [t.BILLS, query], - queryFn: () => fetchBills(fetcher, query).then(transformBillsList), + queryFn: () => fetchBills(fetcher, query), ...props, }); } diff --git a/packages/webapp/src/hooks/query/credit-note.tsx b/packages/webapp/src/hooks/query/credit-note.tsx index 7bcbd850a..89585ca78 100644 --- a/packages/webapp/src/hooks/query/credit-note.tsx +++ b/packages/webapp/src/hooks/query/credit-note.tsx @@ -36,7 +36,7 @@ import { } from '@bigcapital/sdk-ts'; import { useApiFetcher } from '../useRequest'; import { useRequestPdf } from '../useRequestPdf'; -import { transformPagination, transformToCamelCase } from '@/utils'; +import { transformToCamelCase } from '@/utils'; import t from './types'; const commonInvalidateQueries = (queryClient: ReturnType) => { @@ -172,27 +172,12 @@ export function useValidateBulkDeleteCreditNotes( }); } -export type CreditNotesListResult = { - creditNotes: unknown[]; - pagination: ReturnType; - filterMeta: Record; -}; - -function transformCreditNotesList(res: CreditNotesListResponse): CreditNotesListResult { - const data = res as { credit_notes?: unknown[]; pagination?: unknown; filter_meta?: Record }; - return { - creditNotes: data?.credit_notes ?? [], - pagination: transformPagination(data?.pagination ?? {}), - filterMeta: data?.filter_meta ?? {}, - }; -} - /** * Retrieve credit notes list with pagination meta. */ export function useCreditNotes( query?: Record, - props?: Omit, 'queryKey' | 'queryFn'> + props?: Omit, 'queryKey' | 'queryFn'> ) { const fetcher = useApiFetcher(); return useQuery({ @@ -201,7 +186,7 @@ export function useCreditNotes( (fetchCreditNotes as (f: ReturnType, q?: Record) => Promise)( fetcher, query - ).then(transformCreditNotesList), + ), ...props, }); } diff --git a/packages/webapp/src/hooks/query/currencies.tsx b/packages/webapp/src/hooks/query/currencies.tsx index 4f20b5092..4f05f95c5 100644 --- a/packages/webapp/src/hooks/query/currencies.tsx +++ b/packages/webapp/src/hooks/query/currencies.tsx @@ -19,9 +19,6 @@ import { import { useApiFetcher } from '../useRequest'; import t from './types'; -/** - * Create a new currency. - */ export function useCreateCurrency( props?: UseMutationOptions ) { @@ -38,9 +35,6 @@ export function useCreateCurrency( }); } -/** - * Edits the given currency by ID. - */ export function useEditCurrency( props?: UseMutationOptions ) { @@ -57,9 +51,6 @@ export function useEditCurrency( }); } -/** - * Deletes the given currency. - */ export function useDeleteCurrency( props?: UseMutationOptions ) { @@ -76,9 +67,6 @@ export function useDeleteCurrency( }); } -/** - * Retrieve the currencies list. - */ export function useCurrencies( props?: Omit, 'queryKey' | 'queryFn'> ) { diff --git a/packages/webapp/src/hooks/query/customers.tsx b/packages/webapp/src/hooks/query/customers.tsx index d3c2c9889..d1aa1caab 100644 --- a/packages/webapp/src/hooks/query/customers.tsx +++ b/packages/webapp/src/hooks/query/customers.tsx @@ -23,15 +23,9 @@ import { editCustomerOpeningBalance, } from '@bigcapital/sdk-ts'; import { useApiFetcher } from '../useRequest'; -import { transformPagination, transformToCamelCase } from '@/utils'; +import { transformToCamelCase } from '@/utils'; import t from './types'; -const defaultPagination = { - pageSize: 20, - page: 0, - pagesCount: 0, -}; - const commonInvalidateQueries = (queryClient: ReturnType) => { queryClient.invalidateQueries({ queryKey: [t.CUSTOMERS] }); queryClient.invalidateQueries({ queryKey: [t.ACCOUNTS] }); @@ -44,24 +38,9 @@ const commonInvalidateQueries = (queryClient: ReturnType) queryClient.invalidateQueries({ queryKey: [t.ORGANIZATION_MUTATE_BASE_CURRENCY_ABILITIES] }); }; -export type CustomersSelectorResult = { - customers: unknown[]; - pagination: typeof defaultPagination; - filterMeta: Record; -}; - -function transformCustomersList(res: CustomersListResponse): CustomersSelectorResult { - const data = res as { customers?: unknown[]; pagination?: unknown; filter_meta?: Record }; - return { - customers: data?.customers ?? [], - pagination: transformPagination(data?.pagination ?? {}) as typeof defaultPagination, - filterMeta: data?.filter_meta ?? {}, - }; -} - export function useCustomers( query?: Record, - props?: Omit, 'queryKey' | 'queryFn'> + props?: Omit, 'queryKey' | 'queryFn'> ) { const fetcher = useApiFetcher(); return useQuery({ @@ -70,7 +49,7 @@ export function useCustomers( (fetchCustomers as (f: ReturnType, q?: Record) => Promise)( fetcher, query - ).then(transformCustomersList), + ), ...props, }); } diff --git a/packages/webapp/src/hooks/query/estimates.tsx b/packages/webapp/src/hooks/query/estimates.tsx index 6c67ab2e3..08f91ed2d 100644 --- a/packages/webapp/src/hooks/query/estimates.tsx +++ b/packages/webapp/src/hooks/query/estimates.tsx @@ -38,7 +38,7 @@ export type ValidateBulkDeleteEstimatesResponse = { nonDeletableIds: number[]; }; import useApiRequest, { useApiFetcher } from '../useRequest'; -import { transformPagination, transformToCamelCase } from '@/utils'; +import { transformToCamelCase } from '@/utils'; import t from './types'; import { useRequestPdf } from '../useRequestPdf'; @@ -47,15 +47,6 @@ const commonInvalidateQueries = (queryClient: ReturnType) queryClient.invalidateQueries({ queryKey: [t.ITEM_ASSOCIATED_WITH_ESTIMATES] }); }; -export type EstimatesListResult = { - estimates: unknown[]; - pagination: ReturnType; - filterMeta: Record; -}; - -/** - * Creates a new sale estimate. - */ export function useCreateEstimate( props?: UseMutationOptions ) { @@ -73,9 +64,6 @@ export function useCreateEstimate( }); } -/** - * Edits the given sale estimate. - */ export function useEditEstimate( props?: UseMutationOptions ) { @@ -93,18 +81,6 @@ export function useEditEstimate( }); } -function transformEstimates(data: SaleEstimatesListResponse): EstimatesListResult { - const raw = data as { sales_estimates?: unknown[]; pagination?: unknown; filter_meta?: Record }; - return { - estimates: raw.sales_estimates ?? (raw as { data?: unknown[] }).data ?? [], - pagination: transformPagination(raw.pagination ?? {}), - filterMeta: raw.filter_meta ?? {}, - }; -} - -/** - * Retrieve sale estimate details. - */ export function useEstimate( id: number | null | undefined, props?: Omit, 'queryKey' | 'queryFn'> @@ -118,28 +94,19 @@ export function useEstimate( }); } -/** - * Retrieve sale estimates list with pagination meta. - */ export function useEstimates( query?: Record, - props?: Omit< - UseQueryOptions, - 'queryKey' | 'queryFn' | 'select' - > + props?: Omit, 'queryKey' | 'queryFn'> ) { const fetcher = useApiFetcher(); - return useQuery({ + return useQuery({ queryKey: [t.SALE_ESTIMATES, query], - queryFn: () => fetchSaleEstimates(fetcher), - select: transformEstimates, + queryFn: () => fetchSaleEstimates(fetcher, query), ...props, }); } -/** - * Deletes the given sale estimate. - */ + export function useDeleteEstimate( props?: UseMutationOptions ) { @@ -156,9 +123,6 @@ export function useDeleteEstimate( }); } -/** - * Deletes multiple sale estimates in bulk. - */ export function useBulkDeleteEstimates( props?: UseMutationOptions ) { @@ -187,9 +151,6 @@ export function useValidateBulkDeleteEstimates( }); } -/** - * Mark the given estimate as delivered. - */ export function useDeliverEstimate( props?: UseMutationOptions ) { @@ -206,9 +167,6 @@ export function useDeliverEstimate( }); } -/** - * Mark the given estimate as approved. - */ export function useApproveEstimate( props?: UseMutationOptions ) { @@ -225,9 +183,6 @@ export function useApproveEstimate( }); } -/** - * Mark the given estimate as rejected. - */ export function useRejectEstimate( props?: UseMutationOptions ) { @@ -244,9 +199,6 @@ export function useRejectEstimate( }); } -/** - * Retrieve the estimate pdf document data. - */ export function usePdfEstimate(estimateId: number) { return useRequestPdf({ url: `sale-estimates/${estimateId}`, @@ -263,9 +215,6 @@ export function useRefreshEstimates() { }; } -/** - * Notify estimate by SMS. - */ export function useCreateNotifyEstimateBySMS( props?: UseMutationOptions]> ) { @@ -283,9 +232,6 @@ export function useCreateNotifyEstimateBySMS( }); } -/** - * Retrieve estimate SMS detail. - */ export function useEstimateSMSDetail( estimateId: number | null | undefined, props?: Record, @@ -350,9 +296,6 @@ export interface SaleEstimateMailStateResponse { toOptions: Array; } -/** - * Retrieves the sale estimate mail state. - */ export function useSaleEstimateMailState( estimateId: number, props?: UseQueryOptions diff --git a/packages/webapp/src/hooks/query/expenses.tsx b/packages/webapp/src/hooks/query/expenses.tsx index b7110bea4..24d20711b 100644 --- a/packages/webapp/src/hooks/query/expenses.tsx +++ b/packages/webapp/src/hooks/query/expenses.tsx @@ -17,15 +17,8 @@ import { validateBulkDeleteExpenses, } from '@bigcapital/sdk-ts'; import { useApiFetcher } from '../useRequest'; -import { transformPagination } from '@/utils'; import t from './types'; -const defaultPagination = { - pageSize: 20, - page: 0, - pagesCount: 0, -}; - // Common invalidate queries. const commonInvalidateQueries = (queryClient: ReturnType) => { // Invalidate expenses. @@ -50,15 +43,6 @@ const commonInvalidateQueries = (queryClient: ReturnType) queryClient.invalidateQueries({ queryKey: [t.ORGANIZATION_MUTATE_BASE_CURRENCY_ABILITIES] }); }; -function transformExpensesList(response: ExpensesListResponse) { - const data = response as { expenses?: unknown[]; pagination?: unknown; filter_meta?: Record }; - return { - expenses: data?.expenses ?? [], - pagination: transformPagination(data?.pagination ?? {}) as typeof defaultPagination, - filterMeta: data?.filter_meta ?? {}, - }; -} - /** * Retrieve the expenses list. */ @@ -69,7 +53,7 @@ export function useExpenses( const fetcher = useApiFetcher(); return useQuery({ queryKey: [t.EXPENSES, query], - queryFn: () => fetchExpenses(fetcher, query).then(transformExpensesList), + queryFn: () => fetchExpenses(fetcher, query), ...props, }); } diff --git a/packages/webapp/src/hooks/query/inventory-adjustments.tsx b/packages/webapp/src/hooks/query/inventory-adjustments.tsx index 727d6f5b2..82c9b9b15 100644 --- a/packages/webapp/src/hooks/query/inventory-adjustments.tsx +++ b/packages/webapp/src/hooks/query/inventory-adjustments.tsx @@ -1,6 +1,5 @@ // @ts-nocheck import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { transformPagination } from '@/utils'; import { useApiFetcher } from '../useRequest'; import { createQuickInventoryAdjustment, @@ -63,13 +62,6 @@ export function useDeleteInventoryAdjustment(props) { }); } -const inventoryAdjustmentsTransformer = (response) => { - return { - inventoryAdjustments: response.data, - pagination: transformPagination(response.pagination), - }; -}; - /** * Retrieve inventory adjustment list with pagination meta. * Uses useRequestQuery because list endpoint query params may not be in OpenAPI. @@ -79,7 +71,6 @@ export function useInventoryAdjustments(query, props) { return useQuery({ queryKey: ['inventory-adjustments', query], queryFn: () => fetchInventoryAdjustments(fetcher, query), - select: inventoryAdjustmentsTransformer, ...props, }); } diff --git a/packages/webapp/src/hooks/query/invoices.tsx b/packages/webapp/src/hooks/query/invoices.tsx index 8fc8a4876..f39bf91a9 100644 --- a/packages/webapp/src/hooks/query/invoices.tsx +++ b/packages/webapp/src/hooks/query/invoices.tsx @@ -36,7 +36,7 @@ import { } from '@bigcapital/sdk-ts'; import { useApiFetcher } from '../useRequest'; import { useRequestQuery } from '../useQueryRequest'; -import { transformPagination, transformToCamelCase } from '@/utils'; +import { transformToCamelCase } from '@/utils'; import useApiRequest from '../useRequest'; import { useRequestPdf } from '../useRequestPdf'; import t from './types'; @@ -165,46 +165,18 @@ export function useValidateBulkDeleteInvoices( }); } -function transformInvoicesList(res: SaleInvoicesListResponse) { - const data = res as { - data?: unknown[]; - sales_invoices?: unknown[]; - salesInvoices?: unknown[]; - pagination?: unknown; - filter_meta?: Record; - filterMeta?: Record; - }; - const invoices = - data?.data ?? - data?.sales_invoices ?? - data?.salesInvoices ?? - []; - return { - invoices, - pagination: transformPagination(data?.pagination ?? {}), - filterMeta: data?.filter_meta ?? data?.filterMeta ?? {}, - }; -} - /** * Retrieve sale invoices list with pagination meta. */ export function useInvoices( query?: GetSaleInvoicesQuery, - props?: UseQueryOptions< - { - invoices: unknown[]; - pagination: ReturnType; - filterMeta: Record; - }, - Error - > + props?: UseQueryOptions ) { const fetcher = useApiFetcher(); return useQuery({ queryKey: [t.SALE_INVOICES, query], - queryFn: () => fetchSaleInvoices(fetcher, query).then(transformInvoicesList), + queryFn: () => fetchSaleInvoices(fetcher, query), ...props, }); } diff --git a/packages/webapp/src/hooks/query/items.tsx b/packages/webapp/src/hooks/query/items.tsx index 989a1bb15..7700e37c5 100644 --- a/packages/webapp/src/hooks/query/items.tsx +++ b/packages/webapp/src/hooks/query/items.tsx @@ -35,26 +35,14 @@ import type { GetInventoryItemsCostResponse, } from '@bigcapital/sdk-ts'; import { useApiFetcher } from '../useRequest'; -import { transformPagination, transformResponse, transformToCamelCase } from '@/utils'; +import { transformToCamelCase } from '@/utils'; import t from './types'; -const DEFAULT_PAGINATION = { - pageSize: 20, - page: 0, - pagesCount: 0, -}; - const commonInvalidateQueries = (queryClient: ReturnType) => { queryClient.invalidateQueries({ queryKey: [t.ITEMS] }); queryClient.invalidateQueries({ queryKey: [t.ITEMS_CATEGORIES] }); }; -export type ItemsListResult = { - items: unknown[]; - pagination: typeof DEFAULT_PAGINATION; - filterMeta: Record; -}; - export function useCreateItem( props?: UseMutationOptions ) { @@ -166,24 +154,9 @@ export function useInactivateItem( }); } -function transformItemsList(res: ItemsListResponse): ItemsListResult { - const data = res as { - items?: unknown[]; - pagination?: unknown; - filter_meta?: Record; - }; - return { - items: data?.items ?? [], - pagination: transformPagination( - transformResponse(data?.pagination ?? {}) - ) as typeof DEFAULT_PAGINATION, - filterMeta: transformResponse(data?.filter_meta ?? {}) as Record, - }; -} - export function useItems( query?: Record, - props?: Omit, 'queryKey' | 'queryFn'> + props?: Omit, 'queryKey' | 'queryFn'> ) { const fetcher = useApiFetcher(); return useQuery({ @@ -192,7 +165,7 @@ export function useItems( (fetchItems as (f: ReturnType, q?: Record) => Promise)( fetcher, query - ).then(transformItemsList), + ), ...props, }); } diff --git a/packages/webapp/src/hooks/query/landed-cost.tsx b/packages/webapp/src/hooks/query/landed-cost.tsx index 38ae62927..b76fdfd12 100644 --- a/packages/webapp/src/hooks/query/landed-cost.tsx +++ b/packages/webapp/src/hooks/query/landed-cost.tsx @@ -17,9 +17,6 @@ const commonInvalidateQueries = (queryClient) => { queryClient.invalidateQueries({ queryKey: [t.LANDED_COST_TRANSACTION] }); }; -/** - * Creates a new landed cost. - */ export function useCreateLandedCost(props) { const queryClient = useQueryClient(); const fetcher = useApiFetcher(); @@ -33,9 +30,6 @@ export function useCreateLandedCost(props) { }); } -/** - * Deletes the given landed cost. - */ export function useDeleteLandedCost(props) { const queryClient = useQueryClient(); const fetcher = useApiFetcher(); @@ -49,9 +43,6 @@ export function useDeleteLandedCost(props) { }); } -/** - * Retrieve the landed cost transactions. - */ export function useLandedCostTransaction(query, props) { const fetcher = useApiFetcher(); return useQuery({ @@ -62,9 +53,6 @@ export function useLandedCostTransaction(query, props) { }); } -/** - * Retrieve the bill located landed cost transactions. - */ export function useBillLocatedLandedCost(id, props) { const fetcher = useApiFetcher(); diff --git a/packages/webapp/src/hooks/query/manual-journals.tsx b/packages/webapp/src/hooks/query/manual-journals.tsx index 8f3a63bee..63adacc02 100644 --- a/packages/webapp/src/hooks/query/manual-journals.tsx +++ b/packages/webapp/src/hooks/query/manual-journals.tsx @@ -25,15 +25,9 @@ import { validateBulkDeleteManualJournals, } from '@bigcapital/sdk-ts'; import { useApiFetcher } from '../useRequest'; -import { transformPagination, transformToCamelCase } from '@/utils'; +import { transformToCamelCase } from '@/utils'; import t from './types'; -export type JournalsListResult = { - manualJournals: ManualJournal[]; - pagination: ReturnType; - filterMeta: Record; -}; - const commonInvalidateQueries = (queryClient: ReturnType) => { // Invalidate manual journals. queryClient.invalidateQueries({ queryKey: [t.MANUAL_JOURNALS] }); @@ -166,30 +160,16 @@ export function usePublishJournal( }); } -function transformJournalsList(data: ManualJournalsListResponse): JournalsListResult { - const raw = data as { - manual_journals?: ManualJournal[]; - manualJournals?: ManualJournal[]; - pagination?: Parameters[0]; - filter_meta?: Record; - filterMeta?: Record; - }; - return { - manualJournals: (raw?.manual_journals ?? raw?.manualJournals ?? []) as ManualJournal[], - pagination: transformPagination(raw?.pagination ?? {}), - filterMeta: raw?.filter_meta ?? raw?.filterMeta ?? {}, - }; -} export function useJournals( query?: ManualJournalsListQuery | null, - props?: Omit, 'queryKey' | 'queryFn'> + props?: Omit, 'queryKey' | 'queryFn'> ) { const fetcher = useApiFetcher(); return useQuery({ queryKey: [t.MANUAL_JOURNALS, query], queryFn: async () => - transformJournalsList(await fetchManualJournals(fetcher, query ?? {})), + fetchManualJournals(fetcher, query ?? {}), ...props, }); } diff --git a/packages/webapp/src/hooks/query/payment-mades.tsx b/packages/webapp/src/hooks/query/payment-mades.tsx index e92d853e1..bc37f43cf 100644 --- a/packages/webapp/src/hooks/query/payment-mades.tsx +++ b/packages/webapp/src/hooks/query/payment-mades.tsx @@ -21,7 +21,6 @@ import { fetchBillPaymentNewPageEntries, } from '@bigcapital/sdk-ts'; import { useApiFetcher } from '../useRequest'; -import { transformPagination } from '@/utils'; import t from './types'; const commonInvalidateQueries = (client: ReturnType) => { @@ -40,37 +39,14 @@ const commonInvalidateQueries = (client: ReturnType) => { client.invalidateQueries({ queryKey: [t.BILLS_PAYMENT_TRANSACTIONS] }); }; -export type PaymentMadesListResult = { - paymentMades: unknown[]; - pagination: ReturnType; - filterMeta: Record; -}; - -function transformPaymentMades(data: BillPaymentsListResponse): PaymentMadesListResult { - const raw = data as { - bill_payments?: unknown[]; - pagination?: unknown; - filter_meta?: Record; - }; - return { - paymentMades: raw.bill_payments ?? (data as { data?: unknown[] })?.data ?? [], - pagination: transformPagination(raw.pagination ?? {}), - filterMeta: raw.filter_meta ?? {}, - }; -} - export function usePaymentMades( query?: Record, - props?: Omit< - UseQueryOptions, - 'queryKey' | 'queryFn' | 'select' - > + props?: Omit, 'queryKey' | 'queryFn'> ) { const fetcher = useApiFetcher(); - return useQuery({ + return useQuery({ queryKey: [t.PAYMENT_MADES, query], - queryFn: () => fetchBillPayments(fetcher), - select: transformPaymentMades, + queryFn: () => fetchBillPayments(fetcher, query), ...props, }); } diff --git a/packages/webapp/src/hooks/query/payment-receives.tsx b/packages/webapp/src/hooks/query/payment-receives.tsx index 03a3ff47b..db29a9def 100644 --- a/packages/webapp/src/hooks/query/payment-receives.tsx +++ b/packages/webapp/src/hooks/query/payment-receives.tsx @@ -36,7 +36,7 @@ export type ValidateBulkDeletePaymentsReceivedResponse = { }; import useApiRequest, { useApiFetcher } from '../useRequest'; import { useRequestQuery } from '../useQueryRequest'; -import { transformPagination, saveInvoke, transformToCamelCase } from '@/utils'; +import { saveInvoke, transformToCamelCase } from '@/utils'; import { useRequestPdf } from '../useRequestPdf'; import t from './types'; @@ -60,37 +60,14 @@ const commonInvalidateQueries = (client: ReturnType) => { client.invalidateQueries({ queryKey: [t.SALE_INVOICE_PAYMENT_TRANSACTIONS] }); }; -export type PaymentReceivesListResult = { - paymentReceives: unknown[]; - pagination: ReturnType; - filterMeta: Record; -}; - -function transformPaymentReceives(data: PaymentsReceivedListResponse): PaymentReceivesListResult { - const raw = data as { - payment_receives?: unknown[]; - pagination?: unknown; - filter_meta?: Record; - }; - return { - paymentReceives: raw.payment_receives ?? (data as { data?: unknown[] })?.data ?? [], - pagination: transformPagination(raw.pagination ?? {}), - filterMeta: raw.filter_meta ?? {}, - }; -} - export function usePaymentReceives( query?: Record, - props?: Omit< - UseQueryOptions, - 'queryKey' | 'queryFn' | 'select' - > + props?: Omit, 'queryKey' | 'queryFn'> ) { const fetcher = useApiFetcher(); - return useQuery({ + return useQuery({ queryKey: [t.PAYMENT_RECEIVES, query], - queryFn: () => fetchPaymentsReceived(fetcher), - select: transformPaymentReceives, + queryFn: () => fetchPaymentsReceived(fetcher, query), ...props, }); } diff --git a/packages/webapp/src/hooks/query/receipts.tsx b/packages/webapp/src/hooks/query/receipts.tsx index 2cd5b823d..f911f2cf5 100644 --- a/packages/webapp/src/hooks/query/receipts.tsx +++ b/packages/webapp/src/hooks/query/receipts.tsx @@ -28,7 +28,7 @@ import { fetchSaleReceiptState, } from '@bigcapital/sdk-ts'; import useApiRequest, { useApiFetcher } from '../useRequest'; -import { transformPagination, transformToCamelCase } from '@/utils'; +import { transformToCamelCase } from '@/utils'; import { useRequestPdf } from '../useRequestPdf'; import { useRequestQuery } from '../useQueryRequest'; import t from './types'; @@ -151,38 +151,18 @@ export function useCloseReceipt(props?: UseMutationOptions) }); } -function transformReceiptsList(res: SaleReceiptsListResponse) { - const data = res as { - data?: unknown[]; - pagination?: unknown; - filter_meta?: Record; - }; - return { - receipts: data?.data ?? [], - pagination: transformPagination(data?.pagination ?? {}), - filterMeta: data?.filter_meta ?? {}, - }; -} - /** * Retrieve sale receipts list with pagination meta. */ export function useReceipts( query?: Record, - props?: UseQueryOptions< - { - receipts: unknown[]; - pagination: ReturnType; - filterMeta: Record; - }, - Error - > + props?: UseQueryOptions ) { const fetcher = useApiFetcher(); return useQuery({ queryKey: [t.SALE_RECEIPTS, query], - queryFn: () => fetchSaleReceipts(fetcher, query).then(transformReceiptsList), + queryFn: () => fetchSaleReceipts(fetcher, query), ...props, }); } diff --git a/packages/webapp/src/hooks/query/vendor-credit.tsx b/packages/webapp/src/hooks/query/vendor-credit.tsx index a600a4ca6..38e53b6b4 100644 --- a/packages/webapp/src/hooks/query/vendor-credit.tsx +++ b/packages/webapp/src/hooks/query/vendor-credit.tsx @@ -5,7 +5,6 @@ import { UseMutationOptions, UseQueryOptions, } from '@tanstack/react-query'; -import { defaultTo } from 'lodash'; import type { CreateVendorCreditBody, EditVendorCreditBody, @@ -34,7 +33,7 @@ import { deleteAppliedBillToVendorCredit, } from '@bigcapital/sdk-ts'; import { useApiFetcher } from '../useRequest'; -import { transformPagination, transformToCamelCase } from '@/utils'; +import { transformToCamelCase } from '@/utils'; import t from './types'; const commonInvalidateQueries = (queryClient: ReturnType) => { @@ -59,32 +58,6 @@ const commonInvalidateQueries = (queryClient: ReturnType) queryClient.invalidateQueries({ queryKey: [t.ORGANIZATION_MUTATE_BASE_CURRENCY_ABILITIES] }); }; -export type VendorCreditsListResult = { - vendorCredits: unknown[]; - pagination: ReturnType; - filterMeta: Record; -}; - -const DEFAULT_VENDOR_CREDITS_PLACEHOLDER: VendorCreditsListResult = { - vendorCredits: [], - pagination: transformPagination({}), - filterMeta: {}, -}; - -function transformVendorCreditsResponse(response: Record): VendorCreditsListResult { - const raw = response as { - vendor_credits?: unknown[]; - vendorCredits?: unknown[]; - pagination?: unknown; - filter_meta?: Record; - filterMeta?: Record; - }; - return { - vendorCredits: raw.vendor_credits ?? raw.vendorCredits ?? [], - pagination: transformPagination(raw.pagination ?? {}), - filterMeta: raw.filter_meta ?? raw.filterMeta ?? {}, - }; -} /** * Create a new vendor credit. @@ -179,23 +152,15 @@ export function useValidateBulkDeleteVendorCredits( */ export function useVendorCredits( query?: GetVendorCreditsQuery, - props?: Omit, 'queryKey' | 'queryFn'> + props?: Omit, 'queryKey' | 'queryFn'> ) { const fetcher = useApiFetcher(); - const result = useQuery({ + return useQuery({ queryKey: [t.VENDOR_CREDITS, query], - queryFn: () => - fetchVendorCredits(fetcher, query).then((data: Record) => - transformVendorCreditsResponse(data) - ), + queryFn: () => fetchVendorCredits(fetcher, query), ...props, }); - - return { - ...result, - data: defaultTo(result.data, DEFAULT_VENDOR_CREDITS_PLACEHOLDER), - }; } /** diff --git a/packages/webapp/src/hooks/query/vendors.tsx b/packages/webapp/src/hooks/query/vendors.tsx index 6be216a3d..40488fc5a 100644 --- a/packages/webapp/src/hooks/query/vendors.tsx +++ b/packages/webapp/src/hooks/query/vendors.tsx @@ -24,7 +24,7 @@ import { editVendorOpeningBalance, } from '@bigcapital/sdk-ts'; import { useApiFetcher } from '../useRequest'; -import { transformPagination, transformToCamelCase } from '@/utils'; +import { transformToCamelCase } from '@/utils'; import t from './types'; const commonInvalidateQueries = (queryClient: ReturnType) => { @@ -35,24 +35,9 @@ const commonInvalidateQueries = (queryClient: ReturnType) queryClient.invalidateQueries({ queryKey: [t.ORGANIZATION_MUTATE_BASE_CURRENCY_ABILITIES] }); }; -export type VendorsListResult = { - vendors: unknown[]; - pagination: ReturnType; - filterMeta: Record; -}; - -function transformVendorsList(res: VendorsListResponse): VendorsListResult { - const data = res as { vendors?: unknown[]; pagination?: unknown; filter_meta?: Record }; - return { - vendors: data?.vendors ?? [], - pagination: transformPagination(data?.pagination ?? {}), - filterMeta: data?.filter_meta ?? {}, - }; -} - export function useVendors( query?: Record, - props?: Omit, 'queryKey' | 'queryFn'> + props?: Omit, 'queryKey' | 'queryFn'> ) { const fetcher = useApiFetcher(); return useQuery({ @@ -61,7 +46,7 @@ export function useVendors( (fetchVendors as (f: ReturnType, q?: Record) => Promise)( fetcher, query - ).then(transformVendorsList), + ), ...props, }); } diff --git a/packages/webapp/src/hooks/query/views.tsx b/packages/webapp/src/hooks/query/views.tsx index 8e7d918b4..1411c4727 100644 --- a/packages/webapp/src/hooks/query/views.tsx +++ b/packages/webapp/src/hooks/query/views.tsx @@ -3,9 +3,6 @@ import type { ResourceViewResponse, ResourceMetaResponse } from '@bigcapital/sdk import { fetchResourceView, fetchResourceMeta } from '@bigcapital/sdk-ts'; import { useApiFetcher } from '../useRequest'; -/** - * Retrieve the resource views using sdk-ts. - */ export function useResourceViews( resourceSlug: string | null | undefined, props?: Omit, 'queryKey' | 'queryFn'> @@ -15,14 +12,10 @@ export function useResourceViews( queryKey: ['RESOURCE_VIEW', resourceSlug], queryFn: () => fetchResourceView(fetcher, resourceSlug!), enabled: !!resourceSlug, - select: (data) => (Array.isArray(data) ? data : (data as { data?: unknown })?.data ?? data), ...props, }); } -/** - * Retrieve the resource meta using sdk-ts. - */ export function useResourceMeta( resourceSlug: string | null | undefined, props?: Omit, 'queryKey' | 'queryFn'> @@ -32,7 +25,6 @@ export function useResourceMeta( queryKey: ['RESOURCE_META', resourceSlug], queryFn: () => fetchResourceMeta(fetcher, resourceSlug!), enabled: !!resourceSlug, - select: (data) => (data as { resource_meta?: unknown })?.resource_meta ?? data ?? { fields: {} }, ...props, }); } diff --git a/packages/webapp/src/hooks/query/warehouses-transfers.tsx b/packages/webapp/src/hooks/query/warehouses-transfers.tsx index 04cfef792..1b70b649d 100644 --- a/packages/webapp/src/hooks/query/warehouses-transfers.tsx +++ b/packages/webapp/src/hooks/query/warehouses-transfers.tsx @@ -21,23 +21,11 @@ import { transferredWarehouseTransfer, } from '@bigcapital/sdk-ts'; import { useApiFetcher } from '../useRequest'; -import { transformPagination } from '@/utils'; import t from './types'; /** Query params for listing warehouse transfers (pagination, filter, etc.). */ type GetWarehouseTransfersQuery = Record; -/** API list response may include filter even if schema does not. */ -type WarehouseTransfersListResponseWithFilter = WarehouseTransfersListResponse & { - filter?: Record; -}; - -type WarehousesTransferListResult = { - warehousesTransfers: WarehouseTransfersListResponse['data']; - pagination: ReturnType; - filterMeta: Record; -}; - const commonInvalidateQueries = (queryClient: ReturnType) => { queryClient.invalidateQueries({ queryKey: [t.WAREHOUSE_TRANSFERS] }); queryClient.invalidateQueries({ queryKey: [t.ITEM_WAREHOUSES_LOCATION] }); @@ -45,16 +33,6 @@ const commonInvalidateQueries = (queryClient: ReturnType) queryClient.invalidateQueries({ queryKey: [t.ITEM] }); }; -function transformWarehousesTransfer( - res: WarehouseTransfersListResponseWithFilter -): WarehousesTransferListResult { - return { - warehousesTransfers: res.data ?? [], - pagination: transformPagination(res.pagination ?? {}), - filterMeta: (res as WarehouseTransfersListResponseWithFilter).filter ?? {}, - }; -} - /** * Create a new warehouse transfer. */ @@ -114,7 +92,7 @@ export function useDeleteWarehouseTransfer( export function useWarehousesTransfers( query?: GetWarehouseTransfersQuery | null, props?: Omit< - UseQueryOptions, + UseQueryOptions, 'queryKey' | 'queryFn' > ) { @@ -126,8 +104,8 @@ export function useWarehousesTransfers( fetchWarehouseTransfers as ( fetcher: unknown, query?: GetWarehouseTransfersQuery - ) => Promise - )(fetcher, query ?? undefined).then(transformWarehousesTransfer), + ) => Promise + )(fetcher, query ?? undefined), ...props, }); } diff --git a/packages/webapp/src/utils/index.tsx b/packages/webapp/src/utils/index.tsx index e579da0e8..21207778e 100644 --- a/packages/webapp/src/utils/index.tsx +++ b/packages/webapp/src/utils/index.tsx @@ -570,15 +570,6 @@ export const isTableEmptyStatus = ({ data, pagination, filterMeta }) => { ].every((cond) => cond === true); }; -/** - * Transformes the pagination meta to table props. - */ -export function getPagesCountFromPaginationMeta(pagination) { - const { pageSize, total } = pagination; - - return Math.ceil(total / pageSize); -} - function transformFilterRoles(filterRoles) { return JSON.stringify(filterRoles); } @@ -619,18 +610,6 @@ export function globalTableStateToTable(globalState) { }; } -/** - * Transformes the pagination meta repsonse. - */ -export function transformPagination(pagination) { - const transformed = transformResponse(pagination); - - return { - ...transformed, - pagesCount: getPagesCountFromPaginationMeta(transformed), - }; -} - export function removeRowsByIndex(rows, rowIndex) { const removeIndex = parseInt(rowIndex, 10); const newRows = rows.filter((row, index) => index !== removeIndex);