🚀 Initial commit: Versão atual do TrackSteel APP
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
|
||||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import { supabase } from '@/integrations/supabase/client';
|
||||
import { toast } from 'sonner';
|
||||
import { useAuth } from '@/hooks/useAuth';
|
||||
|
||||
export const useTaskActions = () => {
|
||||
const queryClient = useQueryClient();
|
||||
const { user } = useAuth();
|
||||
|
||||
const { mutate: updateTaskStatus, isPending: isUpdatingStatus } = useMutation({
|
||||
mutationFn: async ({ id, status }: { id: string; status: string }) => {
|
||||
const updates: any = {
|
||||
status,
|
||||
updated_at: new Date().toISOString()
|
||||
};
|
||||
|
||||
if (status === 'concluido') {
|
||||
updates.is_completed = true;
|
||||
updates.completed_at = new Date().toISOString();
|
||||
updates.completed_by = user?.id;
|
||||
} else if (status === 'em_andamento') {
|
||||
updates.is_completed = false;
|
||||
updates.completed_at = null;
|
||||
updates.completed_by = null;
|
||||
}
|
||||
|
||||
const { data, error } = await supabase
|
||||
.from('tasks')
|
||||
.update(updates)
|
||||
.eq('id', id)
|
||||
.select()
|
||||
.single();
|
||||
|
||||
if (error) throw error;
|
||||
return data;
|
||||
},
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['tasks'] });
|
||||
toast.success('Status da tarefa atualizado com sucesso!');
|
||||
},
|
||||
onError: (error) => {
|
||||
console.error('Error updating task status:', error);
|
||||
toast.error('Erro ao atualizar status da tarefa');
|
||||
},
|
||||
});
|
||||
|
||||
const { mutate: deleteTask, isPending: isDeleting } = useMutation({
|
||||
mutationFn: async (id: string) => {
|
||||
const { error } = await supabase
|
||||
.from('tasks')
|
||||
.delete()
|
||||
.eq('id', id);
|
||||
|
||||
if (error) throw error;
|
||||
},
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['tasks'] });
|
||||
toast.success('Tarefa deletada com sucesso!');
|
||||
},
|
||||
onError: (error) => {
|
||||
console.error('Error deleting task:', error);
|
||||
toast.error('Erro ao deletar tarefa');
|
||||
},
|
||||
});
|
||||
|
||||
const canEdit = (task: any) => {
|
||||
return user?.id === task.created_by;
|
||||
};
|
||||
|
||||
const canDelete = (task: any) => {
|
||||
return user?.id === task.created_by;
|
||||
};
|
||||
|
||||
const canMarkComplete = (task: any) => {
|
||||
return task.assigned_to?.includes(user?.id) || user?.id === task.created_by;
|
||||
};
|
||||
|
||||
const canAccept = (task: any) => {
|
||||
return task.assigned_to?.includes(user?.id) && task.status === 'a_fazer';
|
||||
};
|
||||
|
||||
return {
|
||||
updateTaskStatus,
|
||||
deleteTask,
|
||||
canEdit,
|
||||
canDelete,
|
||||
canMarkComplete,
|
||||
canAccept,
|
||||
isUpdatingStatus,
|
||||
isDeleting,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user