| import { useStore } from '@nanostores/react'; | |
| import { toast } from 'features/toast/toast'; | |
| import { isNil } from 'lodash-es'; | |
| import { useCallback, useMemo } from 'react'; | |
| import { useTranslation } from 'react-i18next'; | |
| import { useCancelQueueItemMutation, useGetQueueStatusQuery } from 'services/api/endpoints/queue'; | |
| import { $isConnected } from 'services/events/stores'; | |
| export const useCancelCurrentQueueItem = () => { | |
| const isConnected = useStore($isConnected); | |
| const { data: queueStatus } = useGetQueueStatusQuery(); | |
| const [trigger, { isLoading }] = useCancelQueueItemMutation(); | |
| const { t } = useTranslation(); | |
| const currentQueueItemId = useMemo(() => queueStatus?.queue.item_id, [queueStatus?.queue.item_id]); | |
| const cancelQueueItem = useCallback(async () => { | |
| if (!currentQueueItemId) { | |
| return; | |
| } | |
| try { | |
| await trigger(currentQueueItemId).unwrap(); | |
| toast({ | |
| id: 'QUEUE_CANCEL_SUCCEEDED', | |
| title: t('queue.cancelSucceeded'), | |
| status: 'success', | |
| }); | |
| } catch { | |
| toast({ | |
| id: 'QUEUE_CANCEL_FAILED', | |
| title: t('queue.cancelFailed'), | |
| status: 'error', | |
| }); | |
| } | |
| }, [currentQueueItemId, t, trigger]); | |
| const isDisabled = useMemo(() => !isConnected || isNil(currentQueueItemId), [isConnected, currentQueueItemId]); | |
| return { | |
| cancelQueueItem, | |
| isLoading, | |
| currentQueueItemId, | |
| isDisabled, | |
| }; | |
| }; | |