Files
Kanban-Front/src/KBBoard/BoardLogic.js

237 lines
8.4 KiB
JavaScript

import { useCallback } from 'react';
import { useNavigate } from 'react-router-dom';
import {
meAPI,
loadBoardDataAPI, updateBoardsAPI, deleteBoardsAPI,
createTaskAPI, updateTaskAPI, deleteTaskAPI,
createCategoryAPI, updateCategoryAPI, deleteCategoryAPI,
addMemberAPI, assignMemberAPI, unassignMemberAPI, deleteMemberAPI, quitMemberAPI
} from './BoardAPI';
export const useBoardLogic = (id, setError, setInfo, setCategories, setLoading, setItems) => {
const navigate = useNavigate();
const loadBoardData = useCallback(async () => {
setLoading(true);
try {
setError('');
const response = await loadBoardDataAPI(id);
setInfo(response.data);
setItems(response.data.members)
setCategories(response.data.categories || []);
} catch (err) {
if (err.response?.data?.message === 'Token Error' ||
err.response?.data?.message === 'Invalid Token') {
setError('Вы не авторизованы');
setTimeout(() => navigate('/login'), 1000);
} else if (err.response?.data?.detail === "Доска не найдена.") {
setError("Доска не существует");
setTimeout(() => navigate('/kanban-boards-list'), 1000);
} else {
setError('Ошибка загрузки доски');
}
} finally {
setLoading(false);
}
}, [id, setError, setInfo, setCategories, setLoading, setItems, navigate]);
const checkOwner = useCallback(async (ownerId, setIsOwner) => {
setLoading(true);
const result = await meAPI(ownerId);
const res = (result?.data?.id === ownerId);
setLoading(false);
setIsOwner(res);
}, [setLoading]);
const createCategory = useCallback(async (categoryTitle, modalCrCateg) => {
setLoading(true);
try {
await createCategoryAPI(id, categoryTitle);
await loadBoardData();
} catch (err) {
setError(err.response?.data?.message || 'Ошибка создания категории');
} finally {
modalCrCateg();
setLoading(false);
}
}, [id, loadBoardData, setLoading, setError]);
const createTask = useCallback(async (taskCategori, taskTitle, taskDescription, modalCrTask) => {
setLoading(true);
try {
await createTaskAPI(taskCategori, taskTitle, taskDescription);
await loadBoardData();
modalCrTask(null)();
} catch (err) {
console.error('Ошибка создания задачи:', err);
setError('Ошибка создания задачи');
} finally {
setLoading(false);
}
}, [loadBoardData, setLoading, setError]);
const editBoard = useCallback(async (editedBoardId, boardTitle, boardDescription, modalEditBoard) => {
setLoading(true);
try {
await updateBoardsAPI( editedBoardId, 'title', boardTitle );
await updateBoardsAPI( editedBoardId, 'description', boardDescription );
await modalEditBoard();
await loadBoardData();
} catch (err) {
setError(err.response?.data?.message || 'Ошибка редактирования доски');
} finally {
modalEditBoard();
setLoading(false);
}
}, [loadBoardData, setLoading, setError]);
const editCategory = useCallback(async (editedCategId, categoryTitle, modalEditCateg) => {
setLoading(true);
try {
await updateCategoryAPI( editedCategId, 'title', categoryTitle );
await loadBoardData();
} catch (err) {
console.error('Ошибка редактирования категории:', err);
setError(err.response?.data?.message || 'Ошибка редактирования категории');
} finally {
modalEditCateg({})();
setLoading(false);
}
}, [loadBoardData, setLoading, setError]);
const editTask = useCallback(async (editedTaskId, taskTitle, taskDescription, taskCategory, modalEditTask) => {
setLoading(true);
try {
await updateTaskAPI( editedTaskId, 'title', taskTitle );
await updateTaskAPI( editedTaskId, 'description', taskDescription );
await updateTaskAPI( editedTaskId, 'category', Number(taskCategory) );
await loadBoardData();
modalEditTask({}, null)();
} catch (err) {
console.error('Ошибка редактирования задачи:', err);
setError('Ошибка редактирования задачи');
} finally {
setLoading(false);
}
}, [loadBoardData, setLoading, setError]);
const deleteBoards = useCallback(async (boardId, modalDelBoard) => {
setLoading(true);
try {
await deleteBoardsAPI(boardId);
modalDelBoard();
navigate('/kanban-boards-list');
} catch (err) {
setError('Ошибка удаления доски: '+ (err.response?.data?.message || err.response?.data?.detail));
} finally {
setLoading(false);
}
}, [setLoading, setError, navigate]);
const deleteCategory = useCallback(async (categoryId, modalDelCateg, modalEditCateg) => {
setLoading(true);
try {
await deleteCategoryAPI(categoryId);
await loadBoardData();
modalDelCateg();
modalEditCateg({})();
} catch (err) {
console.error('Ошибка удаления категории:', err);
setError('Ошибка удаления категории');
} finally {
setLoading(false);
}
}, [loadBoardData, setLoading, setError]);
const deleteTask = useCallback(async (taskId, modalDelTask, modalEditTask) => {
setLoading(true);
try {
await deleteTaskAPI(taskId);
await loadBoardData();
modalDelTask();
modalEditTask({}, null)();
} catch (err) {
setError('Ошибка удаления задачи');
} finally {
setLoading(false);
}
}, [loadBoardData, setLoading, setError]);
const addMember = useCallback(async (username, boardId, modalAddMember) => {
setLoading(true);
try {
await addMemberAPI( boardId, username );
await loadBoardData();
modalAddMember();
} catch {
setError('Ошибка');
} finally {
setLoading(false);
}
}, [loadBoardData, setLoading, setError]);
const assignMember = useCallback(async (editedTaskId, memberId, act, modalAssignMember) => {
setLoading(true);
try {
if (act) {
await assignMemberAPI( editedTaskId, memberId );
} else if (!act) {
await unassignMemberAPI( editedTaskId, memberId );
}
await loadBoardData();
modalAssignMember(false)();
} catch {
setError('Ошибка');
} finally{
setLoading(false);
}
}, [loadBoardData, setLoading, setError]);
const quitMember = useCallback(async (boardId, modalQuitMember ) => {
setLoading(true);
try {
setLoading(true);
await quitMemberAPI( boardId );
await loadBoardData();
modalQuitMember();
navigate('/kanban-boards-list');
} catch {
setError('Ошибка');
} finally{
setLoading(false);
}
}, [loadBoardData, setLoading, setError, navigate]);
const deleteMember = useCallback(async (boardId, memberId, modalDelitMember ) => {
setLoading(true);
try {
setLoading(true);
await deleteMemberAPI( boardId, memberId );
await loadBoardData();
modalDelitMember();
} catch {
setError('Ошибка');
} finally {
setLoading(false);
}
}, [loadBoardData, setLoading, setError]);
return {
loadBoardData, checkOwner, editBoard, deleteBoards,
createTask, editTask, deleteTask,
createCategory, editCategory, deleteCategory,
addMember, assignMember, quitMember, deleteMember
};
};