mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-16 12:50:38 +00:00
wip
This commit is contained in:
43
packages/webapp/src/hooks/dialogs/useBulkDeleteDialog.ts
Normal file
43
packages/webapp/src/hooks/dialogs/useBulkDeleteDialog.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
// @ts-nocheck
|
||||
import { useCallback } from 'react';
|
||||
import { DialogsName } from '@/constants/dialogs';
|
||||
import { useDialogActions } from '@/hooks/state';
|
||||
|
||||
export const useBulkDeleteDialog = (
|
||||
dialogName: DialogsName,
|
||||
validateBulkDeleteMutation,
|
||||
) => {
|
||||
const { openDialog, closeDialog } = useDialogActions();
|
||||
const { mutateAsync: validateBulkDelete, isLoading } =
|
||||
validateBulkDeleteMutation;
|
||||
|
||||
const openBulkDeleteDialog = useCallback(
|
||||
async (ids: number[]) => {
|
||||
if (!ids?.length) {
|
||||
return;
|
||||
}
|
||||
const { deletableCount = 0, nonDeletableCount = 0 } =
|
||||
await validateBulkDelete(ids);
|
||||
|
||||
const totalSelected = deletableCount + nonDeletableCount || ids.length;
|
||||
|
||||
openDialog(dialogName, {
|
||||
ids,
|
||||
deletableCount,
|
||||
undeletableCount: nonDeletableCount,
|
||||
totalSelected,
|
||||
});
|
||||
},
|
||||
[dialogName, openDialog, validateBulkDelete],
|
||||
);
|
||||
|
||||
const closeBulkDeleteDialog = useCallback(() => {
|
||||
closeDialog(dialogName);
|
||||
}, [closeDialog, dialogName]);
|
||||
|
||||
return {
|
||||
openBulkDeleteDialog,
|
||||
closeBulkDeleteDialog,
|
||||
isValidatingBulkDelete: isLoading,
|
||||
};
|
||||
};
|
||||
@@ -158,7 +158,22 @@ export function useBulkDeleteAccounts(props) {
|
||||
const apiRequest = useApiRequest();
|
||||
|
||||
return useMutation(
|
||||
(ids: number[]) => apiRequest.post('accounts/bulk-delete', { ids }),
|
||||
({
|
||||
ids,
|
||||
skipUndeletable = false,
|
||||
}: {
|
||||
ids: number[];
|
||||
skipUndeletable?: boolean;
|
||||
}) =>
|
||||
apiRequest.post(
|
||||
'accounts/bulk-delete',
|
||||
{ ids },
|
||||
{
|
||||
params: skipUndeletable
|
||||
? { skip_undeletable: true }
|
||||
: undefined,
|
||||
},
|
||||
),
|
||||
{
|
||||
onSuccess: () => {
|
||||
// Common invalidate queries.
|
||||
|
||||
@@ -140,6 +140,20 @@ export function useBulkDeleteBills(props) {
|
||||
);
|
||||
}
|
||||
|
||||
export function useValidateBulkDeleteBills(props) {
|
||||
const apiRequest = useApiRequest();
|
||||
|
||||
return useMutation(
|
||||
(ids: number[]) =>
|
||||
apiRequest
|
||||
.post('bills/validate-bulk-delete', { ids })
|
||||
.then((res) => transformToCamelCase(res.data)),
|
||||
{
|
||||
...props,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
const transformBillsResponse = (response) => ({
|
||||
bills: response.data.bills,
|
||||
pagination: transformPagination(response.data.pagination),
|
||||
|
||||
@@ -119,7 +119,22 @@ export function useBulkDeleteCreditNotes(props) {
|
||||
const apiRequest = useApiRequest();
|
||||
|
||||
return useMutation(
|
||||
(ids: number[]) => apiRequest.post('credit-notes/bulk-delete', { ids }),
|
||||
({
|
||||
ids,
|
||||
skipUndeletable = false,
|
||||
}: {
|
||||
ids: number[];
|
||||
skipUndeletable?: boolean;
|
||||
}) =>
|
||||
apiRequest.post(
|
||||
'credit-notes/bulk-delete',
|
||||
{ ids },
|
||||
{
|
||||
params: skipUndeletable
|
||||
? { skip_undeletable: true }
|
||||
: undefined,
|
||||
},
|
||||
),
|
||||
{
|
||||
onSuccess: () => {
|
||||
// Common invalidate queries.
|
||||
@@ -130,6 +145,20 @@ export function useBulkDeleteCreditNotes(props) {
|
||||
);
|
||||
}
|
||||
|
||||
export function useValidateBulkDeleteCreditNotes(props) {
|
||||
const apiRequest = useApiRequest();
|
||||
|
||||
return useMutation(
|
||||
(ids: number[]) =>
|
||||
apiRequest
|
||||
.post('credit-notes/validate-bulk-delete', { ids })
|
||||
.then((res) => transformToCamelCase(res.data)),
|
||||
{
|
||||
...props,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
const transformCreditNotes = (res) => ({
|
||||
creditNotes: res.data.credit_notes,
|
||||
pagination: transformPagination(res.data.pagination),
|
||||
|
||||
@@ -132,7 +132,22 @@ export function useBulkDeleteEstimates(props) {
|
||||
const apiRequest = useApiRequest();
|
||||
|
||||
return useMutation(
|
||||
(ids: number[]) => apiRequest.post('sale-estimates/bulk-delete', { ids }),
|
||||
({
|
||||
ids,
|
||||
skipUndeletable = false,
|
||||
}: {
|
||||
ids: number[];
|
||||
skipUndeletable?: boolean;
|
||||
}) =>
|
||||
apiRequest.post(
|
||||
'sale-estimates/bulk-delete',
|
||||
{ ids },
|
||||
{
|
||||
params: skipUndeletable
|
||||
? { skip_undeletable: true }
|
||||
: undefined,
|
||||
},
|
||||
),
|
||||
{
|
||||
onSuccess: () => {
|
||||
// Common invalidate queries.
|
||||
@@ -143,6 +158,20 @@ export function useBulkDeleteEstimates(props) {
|
||||
);
|
||||
}
|
||||
|
||||
export function useValidateBulkDeleteEstimates(props) {
|
||||
const apiRequest = useApiRequest();
|
||||
|
||||
return useMutation(
|
||||
(ids: number[]) =>
|
||||
apiRequest
|
||||
.post('sale-estimates/validate-bulk-delete', { ids })
|
||||
.then((res) => transformToCamelCase(res.data)),
|
||||
{
|
||||
...props,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark the given estimate as delivered.
|
||||
*/
|
||||
|
||||
@@ -110,7 +110,22 @@ export function useBulkDeleteExpenses(props) {
|
||||
const apiRequest = useApiRequest();
|
||||
|
||||
return useMutation(
|
||||
(ids: number[]) => apiRequest.post('expenses/bulk-delete', { ids }),
|
||||
({
|
||||
ids,
|
||||
skipUndeletable = false,
|
||||
}: {
|
||||
ids: number[];
|
||||
skipUndeletable?: boolean;
|
||||
}) =>
|
||||
apiRequest.post(
|
||||
'expenses/bulk-delete',
|
||||
{ ids },
|
||||
{
|
||||
params: skipUndeletable
|
||||
? { skip_undeletable: true }
|
||||
: undefined,
|
||||
},
|
||||
),
|
||||
{
|
||||
onSuccess: () => {
|
||||
// Common invalidate queries.
|
||||
@@ -121,6 +136,20 @@ export function useBulkDeleteExpenses(props) {
|
||||
);
|
||||
}
|
||||
|
||||
export function useValidateBulkDeleteExpenses(props) {
|
||||
const apiRequest = useApiRequest();
|
||||
|
||||
return useMutation(
|
||||
(ids: number[]) =>
|
||||
apiRequest
|
||||
.post('expenses/validate-bulk-delete', { ids })
|
||||
.then((res) => transformToCamelCase(res.data)),
|
||||
{
|
||||
...props,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Edits the given expense.
|
||||
*/
|
||||
|
||||
@@ -133,7 +133,22 @@ export function useBulkDeleteInvoices(props) {
|
||||
const apiRequest = useApiRequest();
|
||||
|
||||
return useMutation(
|
||||
(ids: number[]) => apiRequest.post('sale-invoices/bulk-delete', { ids }),
|
||||
({
|
||||
ids,
|
||||
skipUndeletable = false,
|
||||
}: {
|
||||
ids: number[];
|
||||
skipUndeletable?: boolean;
|
||||
}) =>
|
||||
apiRequest.post(
|
||||
'sale-invoices/bulk-delete',
|
||||
{ ids },
|
||||
{
|
||||
params: skipUndeletable
|
||||
? { skip_undeletable: true }
|
||||
: undefined,
|
||||
},
|
||||
),
|
||||
{
|
||||
onSuccess: () => {
|
||||
// Common invalidate queries.
|
||||
@@ -144,6 +159,35 @@ export function useBulkDeleteInvoices(props) {
|
||||
);
|
||||
}
|
||||
|
||||
export interface ValidateBulkDeleteInvoicesResponse {
|
||||
deletableCount: number;
|
||||
nonDeletableCount: number;
|
||||
deletableIds: number[];
|
||||
nonDeletableIds: number[];
|
||||
}
|
||||
|
||||
export function useValidateBulkDeleteInvoices(
|
||||
props?: UseMutationOptions<
|
||||
ValidateBulkDeleteInvoicesResponse,
|
||||
Error,
|
||||
number[]
|
||||
>,
|
||||
) {
|
||||
const apiRequest = useApiRequest();
|
||||
|
||||
return useMutation<
|
||||
ValidateBulkDeleteInvoicesResponse,
|
||||
Error,
|
||||
number[]
|
||||
>(
|
||||
(ids) =>
|
||||
apiRequest
|
||||
.post('sale-invoices/validate-bulk-delete', { ids })
|
||||
.then((res) => transformToCamelCase(res.data)),
|
||||
props,
|
||||
);
|
||||
}
|
||||
|
||||
const transformInvoices = (res) => ({
|
||||
invoices: res.data.sales_invoices,
|
||||
pagination: transformPagination(res.data.pagination),
|
||||
|
||||
@@ -96,7 +96,22 @@ export function useBulkDeleteManualJournals(props) {
|
||||
const apiRequest = useApiRequest();
|
||||
|
||||
return useMutation(
|
||||
(ids: number[]) => apiRequest.post('manual-journals/bulk-delete', { ids }),
|
||||
({
|
||||
ids,
|
||||
skipUndeletable = false,
|
||||
}: {
|
||||
ids: number[];
|
||||
skipUndeletable?: boolean;
|
||||
}) =>
|
||||
apiRequest.post(
|
||||
'manual-journals/bulk-delete',
|
||||
{ ids },
|
||||
{
|
||||
params: skipUndeletable
|
||||
? { skip_undeletable: true }
|
||||
: undefined,
|
||||
},
|
||||
),
|
||||
{
|
||||
onSuccess: () => {
|
||||
// Common invalidate queries.
|
||||
@@ -107,6 +122,20 @@ export function useBulkDeleteManualJournals(props) {
|
||||
);
|
||||
}
|
||||
|
||||
export function useValidateBulkDeleteManualJournals(props) {
|
||||
const apiRequest = useApiRequest();
|
||||
|
||||
return useMutation(
|
||||
(ids: number[]) =>
|
||||
apiRequest
|
||||
.post('manual-journals/validate-bulk-delete', { ids })
|
||||
.then((res) => transformToCamelCase(res.data)),
|
||||
{
|
||||
...props,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Publishes the given manual journal.
|
||||
*/
|
||||
|
||||
@@ -158,7 +158,22 @@ export function useBulkDeletePaymentReceives(props) {
|
||||
const apiRequest = useApiRequest();
|
||||
|
||||
return useMutation(
|
||||
(ids: number[]) => apiRequest.post('payments-received/bulk-delete', { ids }),
|
||||
({
|
||||
ids,
|
||||
skipUndeletable = false,
|
||||
}: {
|
||||
ids: number[];
|
||||
skipUndeletable?: boolean;
|
||||
}) =>
|
||||
apiRequest.post(
|
||||
'payments-received/bulk-delete',
|
||||
{ ids },
|
||||
{
|
||||
params: skipUndeletable
|
||||
? { skip_undeletable: true }
|
||||
: undefined,
|
||||
},
|
||||
),
|
||||
{
|
||||
onSuccess: () => {
|
||||
// Common invalidate queries.
|
||||
@@ -169,6 +184,20 @@ export function useBulkDeletePaymentReceives(props) {
|
||||
);
|
||||
}
|
||||
|
||||
export function useValidateBulkDeletePaymentReceives(props) {
|
||||
const apiRequest = useApiRequest();
|
||||
|
||||
return useMutation(
|
||||
(ids: number[]) =>
|
||||
apiRequest
|
||||
.post('payments-received/validate-bulk-delete', { ids })
|
||||
.then((res) => transformToCamelCase(res.data)),
|
||||
{
|
||||
...props,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve specific payment receive.
|
||||
* @param {number} id - Payment receive.
|
||||
|
||||
@@ -112,7 +112,22 @@ export function useBulkDeleteReceipts(props) {
|
||||
const apiRequest = useApiRequest();
|
||||
|
||||
return useMutation(
|
||||
(ids: number[]) => apiRequest.post('sale-receipts/bulk-delete', { ids }),
|
||||
({
|
||||
ids,
|
||||
skipUndeletable = false,
|
||||
}: {
|
||||
ids: number[];
|
||||
skipUndeletable?: boolean;
|
||||
}) =>
|
||||
apiRequest.post(
|
||||
'sale-receipts/bulk-delete',
|
||||
{ ids },
|
||||
{
|
||||
params: skipUndeletable
|
||||
? { skip_undeletable: true }
|
||||
: undefined,
|
||||
},
|
||||
),
|
||||
{
|
||||
onSuccess: () => {
|
||||
// Common invalidate queries.
|
||||
@@ -123,6 +138,20 @@ export function useBulkDeleteReceipts(props) {
|
||||
);
|
||||
}
|
||||
|
||||
export function useValidateBulkDeleteReceipts(props) {
|
||||
const apiRequest = useApiRequest();
|
||||
|
||||
return useMutation(
|
||||
(ids: number[]) =>
|
||||
apiRequest
|
||||
.post('sale-receipts/validate-bulk-delete', { ids })
|
||||
.then((res) => transformToCamelCase(res.data)),
|
||||
{
|
||||
...props,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes the given sale invoice.
|
||||
*/
|
||||
|
||||
@@ -121,7 +121,22 @@ export function useBulkDeleteVendorCredits(props) {
|
||||
const apiRequest = useApiRequest();
|
||||
|
||||
return useMutation(
|
||||
(ids: number[]) => apiRequest.post('vendor-credits/bulk-delete', { ids }),
|
||||
({
|
||||
ids,
|
||||
skipUndeletable = false,
|
||||
}: {
|
||||
ids: number[];
|
||||
skipUndeletable?: boolean;
|
||||
}) =>
|
||||
apiRequest.post(
|
||||
'vendor-credits/bulk-delete',
|
||||
{ ids },
|
||||
{
|
||||
params: skipUndeletable
|
||||
? { skip_undeletable: true }
|
||||
: undefined,
|
||||
},
|
||||
),
|
||||
{
|
||||
onSuccess: () => {
|
||||
// Common invalidate queries.
|
||||
@@ -132,6 +147,20 @@ export function useBulkDeleteVendorCredits(props) {
|
||||
);
|
||||
}
|
||||
|
||||
export function useValidateBulkDeleteVendorCredits(props) {
|
||||
const apiRequest = useApiRequest();
|
||||
|
||||
return useMutation(
|
||||
(ids: number[]) =>
|
||||
apiRequest
|
||||
.post('vendor-credits/validate-bulk-delete', { ids })
|
||||
.then((res) => transformToCamelCase(res.data)),
|
||||
{
|
||||
...props,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
const transformVendorCreditsResponse = (response) => ({
|
||||
vendorCredits: response.data.vendor_credits,
|
||||
pagination: transformPagination(response.data.pagination),
|
||||
|
||||
@@ -77,9 +77,13 @@ export const useSidebarSubmenu = () => {
|
||||
* Dialogs actions.
|
||||
*/
|
||||
export const useDialogActions = () => {
|
||||
const dispatch = useDispatch();
|
||||
|
||||
return {
|
||||
openDialog: useDispatchAction(openDialog),
|
||||
closeDialog: useDispatchAction(closeDialog),
|
||||
openDialog: (name: string, payload?: {}) =>
|
||||
dispatch(openDialog(name, payload)),
|
||||
closeDialog: (name: string, payload?: {}) =>
|
||||
dispatch(closeDialog(name, payload)),
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user