Skip to main content
Version: 2.xx.xx

useDeleteMany

useDeleteMany is a modified version of react-query's useMutation for multiple delete mutations.

It uses deleteMany method as mutation function from the dataProvider which is passed to <Refine>.

Features​

Usage​

Let's say that we have a resource named categories.

https://api.fake-rest.refine.dev/categories
{
[
{
id: 1,
title: "E-business",
},
{
id: 2,
title: "Virtual Invoice Avon",
},
{
id: 3,
title: "Specialist Avon Steel",
},
];
}
import { useDeleteMany } from "@pankod/refine";

const { mutate } = useDeleteMany();

mutate({
resource: "categories",
ids: ["2", "3"],
});
tip

mutate can also accept lifecycle methods like onSuccess and onError.
Refer to react-query docs for further information. β†’


After mutation runs categories will be updated as below:

https://api.fake-rest.refine.dev/categories
{
[
{
id: 1,
title: "E-business",
},
];
}

note

Queries that use /categories endpoint will be automatically invalidated to show the updated data. For example, data returned from useList will be automatically updated.

tip

useDeleteMany returns react-query's useMutation result which includes a lot properties, one of which being mutate.

info

Values passed to mutate must have these types.

{
ids: string[];
resource: string;
mutationMode?: MutationMode;
undoableTimeout?: number;
onCancel?: (cancelMutation: () => void) => void;
}

Mutation mode​

Mutation mode determines the mode which the mutation runs with.

import { useDeleteMany } from "@pankod/refine";

const { mutate } = useDeleteMany();

mutate({
resource: "categories",
ids: ["2", "3"],
mutationMode: "optimistic",
});

Refer to the mutation mode docs for further information. β†’

Creating a custom method for cancelling mutations​

You can pass a custom cancel callback to useUpdate. This callback is triggered instead of the default one when undo button is clicked when mutationMode = "undoable".

caution

Default behaviour on undo action includes notifications. If a custom callback is passed this notification will not appear.

danger

Passed callback will receive a function that actually cancels the mutation. Don't forget to run this function to cancel the mutation on the undoable mode.

import { useDeleteMany } from "@pankod/refine";

const customOnCancel = (cancelMutation: () => void) => {
cancelMutation();
// rest of custom cancel logic...
};

const { mutate } = useDeleteMany();

mutate({
resource: "categories",
ids: ["1", "2"],
mutationMode: "undoable",
undoableTimeout: 7500,
onCancel: customOnCancel,
});

After 7.5 seconds the mutation will be executed. The mutation can be cancelled within that 7.5 seconds. If cancelled customOnCancel will be executed


API​

Properties​

PropertyDescriptionTypeDefault
resource
Required
Resource name for API data interactionsstring
ids
Required
ids for mutation functionstring[]
mutationModeDetermines when mutations are executed "pessimistic | "optimistic | "undoable""pessimistic"*
undoableTimeoutDuration to wait before executing the mutation when mutationMode = "undoable"number5000ms*
onCancelCallback that runs when undo button is clicked on mutationMode = "undoable"(cancelMutation: () => void) => void
successNotificationSuccessful Mutation notificationSuccessErrorNotification"Successfully deleted resource"
errorNotificationUnsuccessful Mutation notificationSuccessErrorNotification"Error when updating resource (status code: statusCode)"
metaDataMetadata query for dataProviderMetaDataQuery{}

*: These props have default values in RefineContext and can also be set on <Refine> component. useDeleteMany will use what is passed to <Refine> as default but a local value will override it.


Type Parameters​

PropertyDesriptionTypeDefault
TDataResult data of the mutation. Extends BaseRecordBaseRecordBaseRecord
TErrorCustom error object that extends HttpErrorHttpErrorHttpError

Return value​

DescriptionType
Result of the react-query's useMutationUseMutationResult<
{ data: TData },
TError,
{ resource: string; ids: string[]; },
DeleteContext>
*