import { Method, type ResponseError, useMutationQuery, useSnackbar } from '@centreon/ui'; import { useQueryClient } from '@tanstack/react-query'; import type { ReactElement } from 'react'; import type { ItemToDelete } from '../models'; import { isAFunction } from '../utils'; interface UseDeleteItem { isMutating: boolean; deleteItem: (item: ItemToDelete) => Promise; } interface UseDeleteItemProps { deleteEndpoint: (item: ItemToDelete) => string; listingQueryKey: string; successMessage: | ((item: ItemToDelete) => string | ReactElement) | string | ReactElement; } export const useDeleteItem = ({ deleteEndpoint, listingQueryKey, successMessage }: UseDeleteItemProps): UseDeleteItem => { const queryClient = useQueryClient(); const { showSuccessMessage } = useSnackbar(); const { mutateAsync, isMutating } = useMutationQuery({ getEndpoint: (_meta) => deleteEndpoint(_meta), method: Method.DELETE, onSuccess: (_data, { _meta }) => { queryClient.invalidateQueries({ queryKey: [listingQueryKey] }); showSuccessMessage( (isAFunction(successMessage) ? (successMessage as (item: ItemToDelete) => string | ReactElement)( _meta as ItemToDelete ) : successMessage) as string ); } }); const deleteItem = (item: ItemToDelete): Promise => mutateAsync({ _meta: item }); return { deleteItem, isMutating }; };