import { useState } from 'react'
import { Button, Group, Modal, Textarea } from '@pikku/mantine/core'
import { useDisclosure } from '@mantine/hooks'
import { notifications } from '@mantine/notifications'
import { m } from '@/i18n/messages'
import { useQueryClient } from '@tanstack/react-query'
import { usePikkuMutation } from '@perauset/functions-sdk/pikku/api.gen'
interface TaskActionsProps {
taskId: string
status: string
}
export function TaskActions({ taskId, status }: TaskActionsProps) {
const queryClient = useQueryClient()
const [blockOpened, { open: openBlock, close: closeBlock }] = useDisclosure()
const [blockReason, setBlockReason] = useState('')
const [completeOpened, { open: openComplete, close: closeComplete }] =
useDisclosure()
const [completeNotes, setCompleteNotes] = useState('')
// Tasks appear under several listing queries (listTasks, listMyTasks, …);
// invalidate any task-related query after a mutation.
const invalidateTasks = () => {
queryClient.invalidateQueries({
predicate: (q) =>
typeof q.queryKey[0] === 'string' &&
(q.queryKey[0] as string).toLowerCase().includes('task'),
})
}
const onError = (err: Error) => {
notifications.show({
title: m.common_error(),
message: err.message ?? 'Something went wrong',
color: 'red',
})
}
const claimMutation = usePikkuMutation('claimTask', {
onSuccess: () => {
notifications.show({
title: m.common_success(),
message: m.tasks_claimed(),
color: 'teal',
})
invalidateTasks()
},
onError,
})
const startMutation = usePikkuMutation('startTask', {
onSuccess: () => {
notifications.show({
title: m.common_success(),
message: m.tasks_started(),
color: 'teal',
})
invalidateTasks()
},
onError,
})
const completeMutation = usePikkuMutation('completeTask', {
onSuccess: () => {
notifications.show({
title: m.common_success(),
message: m.tasks_completed(),
color: 'teal',
})
closeComplete()
setCompleteNotes('')
invalidateTasks()
},
onError,
})
const blockMutation = usePikkuMutation('markTaskBlocked', {
onSuccess: () => {
notifications.show({
title: m.common_success(),
message: m.tasks_blocked(),
color: 'teal',
})
closeBlock()
setBlockReason('')
invalidateTasks()
},
onError,
})
return (
<>
{status === 'open' && (
)}
{status === 'assigned' && (
)}
{status === 'in_progress' && (
)}
{(status === 'open' ||
status === 'assigned' ||
status === 'in_progress') && (
)}
>
)
}