This commit is contained in:
Ahmed Bouhuolia
2025-11-20 17:41:16 +02:00
parent d90b6ffbe7
commit 56e00d254b
71 changed files with 1167 additions and 185 deletions

View File

@@ -16,6 +16,7 @@ export const useBulkDeleteDialog = (
if (!ids?.length) {
return;
}
const { deletableCount = 0, nonDeletableCount = 0 } =
await validateBulkDelete(ids);

View File

@@ -167,7 +167,7 @@ export function useBulkDeleteAccounts(props) {
}) =>
apiRequest.post('accounts/bulk-delete', {
ids,
skipUndeletable,
skip_undeletable: skipUndeletable,
}),
{
onSuccess: () => {

View File

@@ -128,7 +128,7 @@ export function useBulkDeleteCreditNotes(props) {
}) =>
apiRequest.post('credit-notes/bulk-delete', {
ids,
skipUndeletable,
skip_undeletable: skipUndeletable,
}),
{
onSuccess: () => {

View File

@@ -1,7 +1,7 @@
// @ts-nocheck
import { useMutation, useQueryClient } from 'react-query';
import { useRequestQuery } from '../useQueryRequest';
import { transformPagination } from '@/utils';
import { transformPagination, transformToCamelCase } from '@/utils';
import useApiRequest from '../useRequest';
import t from './types';
@@ -100,6 +100,49 @@ export function useDeleteCustomer(props) {
});
}
/**
* Deletes multiple customers in bulk.
*/
export function useBulkDeleteCustomers(props) {
const queryClient = useQueryClient();
const apiRequest = useApiRequest();
return useMutation(
({
ids,
skipUndeletable = false,
}: {
ids: number[];
skipUndeletable?: boolean;
}) =>
apiRequest.post('customers/bulk-delete', {
ids,
skip_undeletable: skipUndeletable,
}).then((res) => transformToCamelCase(res.data)),
{
onSuccess: () => {
commonInvalidateQueries(queryClient);
},
...props,
},
);
}
/**
* Validates which customers can be deleted in bulk.
*/
export function useValidateBulkDeleteCustomers(props) {
const apiRequest = useApiRequest();
return useMutation(
(ids: number[]) =>
apiRequest.post('customers/validate-bulk-delete', { ids }).then((res) => transformToCamelCase(res.data)),
{
...props,
},
);
}
/**
* Creates a new customer.
*/

View File

@@ -141,7 +141,7 @@ export function useBulkDeleteEstimates(props) {
}) =>
apiRequest.post('sale-estimates/bulk-delete', {
ids,
skipUndeletable,
skip_undeletable: skipUndeletable,
}),
{
onSuccess: () => {

View File

@@ -119,7 +119,7 @@ export function useBulkDeleteExpenses(props) {
}) =>
apiRequest.post('expenses/bulk-delete', {
ids,
skipUndeletable,
skip_undeletable: skipUndeletable,
}),
{
onSuccess: () => {

View File

@@ -142,7 +142,7 @@ export function useBulkDeleteInvoices(props) {
}) =>
apiRequest.post('sale-invoices/bulk-delete', {
ids,
skipUndeletable,
skip_undeletable: skipUndeletable,
}),
{
onSuccess: () => {

View File

@@ -1,6 +1,6 @@
// @ts-nocheck
import { useMutation, useQueryClient } from 'react-query';
import { transformPagination, transformResponse } from '@/utils';
import { transformPagination, transformResponse, transformToCamelCase } from '@/utils';
import { useRequestQuery } from '../useQueryRequest';
import useApiRequest from '../useRequest';
import t from './types';
@@ -81,7 +81,17 @@ export function useBulkDeleteItems(props) {
const apiRequest = useApiRequest();
return useMutation(
(ids: number[]) => apiRequest.post('items/bulk-delete', { ids }),
({
ids,
skipUndeletable = false,
}: {
ids: number[];
skipUndeletable?: boolean;
}) =>
apiRequest.post('items/bulk-delete', {
ids,
skip_undeletable: skipUndeletable,
}),
{
onSuccess: () => {
// Common invalidate queries.
@@ -92,6 +102,21 @@ export function useBulkDeleteItems(props) {
);
}
/**
* Validates which items can be deleted in bulk.
*/
export function useValidateBulkDeleteItems(props) {
const apiRequest = useApiRequest();
return useMutation(
(ids: number[]) =>
apiRequest.post('items/validate-bulk-delete', { ids }).then((res) => transformToCamelCase(res.data)),
{
...props,
},
);
}
/**
* Activate the given item.
*/

View File

@@ -105,7 +105,7 @@ export function useBulkDeleteManualJournals(props) {
}) =>
apiRequest.post('manual-journals/bulk-delete', {
ids,
skipUndeletable,
skip_undeletable: skipUndeletable,
}),
{
onSuccess: () => {

View File

@@ -167,7 +167,7 @@ export function useBulkDeletePaymentReceives(props) {
}) =>
apiRequest.post('payments-received/bulk-delete', {
ids,
skipUndeletable,
skip_undeletable: skipUndeletable,
}),
{
onSuccess: () => {

View File

@@ -121,7 +121,7 @@ export function useBulkDeleteReceipts(props) {
}) =>
apiRequest.post('sale-receipts/bulk-delete', {
ids,
skipUndeletable,
skip_undeletable: skipUndeletable,
}),
{
onSuccess: () => {

View File

@@ -130,7 +130,7 @@ export function useBulkDeleteVendorCredits(props) {
}) =>
apiRequest.post('vendor-credits/bulk-delete', {
ids,
skipUndeletable,
skip_undeletable: skipUndeletable,
}),
{
onSuccess: () => {

View File

@@ -1,7 +1,7 @@
// @ts-nocheck
import { useMutation, useQueryClient } from 'react-query';
import t from './types';
import { transformPagination } from '@/utils';
import { transformPagination, transformToCamelCase } from '@/utils';
import useApiRequest from '../useRequest';
import { useRequestQuery } from '../useQueryRequest';
@@ -88,6 +88,49 @@ export function useDeleteVendor(props) {
});
}
/**
* Deletes multiple vendors in bulk.
*/
export function useBulkDeleteVendors(props) {
const queryClient = useQueryClient();
const apiRequest = useApiRequest();
return useMutation(
({
ids,
skipUndeletable = false,
}: {
ids: number[];
skipUndeletable?: boolean;
}) =>
apiRequest.post('vendors/bulk-delete', {
ids,
skip_undeletable: skipUndeletable,
}),
{
onSuccess: () => {
commonInvalidateQueries(queryClient);
},
...props,
},
);
}
/**
* Validates which vendors can be deleted in bulk.
*/
export function useValidateBulkDeleteVendors(props) {
const apiRequest = useApiRequest();
return useMutation(
(ids: number[]) =>
apiRequest.post('vendors/validate-bulk-delete', { ids }).then((res) => transformToCamelCase(res.data)),
{
...props,
},
);
}
/**
* Creates a new vendor.
*/