diff --git a/src/KBBoard/BoardAPI.js b/src/KBBoard/BoardAPI.js index a40c181..3f3c307 100644 --- a/src/KBBoard/BoardAPI.js +++ b/src/KBBoard/BoardAPI.js @@ -30,4 +30,16 @@ export const deleteTaskAPI = async (taskId) => { return axios.delete('/api/boards/categories/tasks/delete', { data: { id: taskId } }); +}; + +export const assignMemberAPI = async (updateData) => { + return axios.put('/api/boards/categories/tasks/assign', updateData); +}; + +export const unassignMemberAPI = async (updateData) => { + return axios.put('/api/boards/categories/tasks/unassign', updateData); +}; + +export const addMemberAPI = async (updateData) => { + return axios.post('/api/boards/members/add', updateData); }; \ No newline at end of file diff --git a/src/KBBoard/BoardLogic.js b/src/KBBoard/BoardLogic.js index b974a3a..0b857b2 100644 --- a/src/KBBoard/BoardLogic.js +++ b/src/KBBoard/BoardLogic.js @@ -7,7 +7,10 @@ import { updateTaskAPI, updateCategoryAPI, deleteCategoryAPI, - deleteTaskAPI + deleteTaskAPI, + assignMemberAPI, + unassignMemberAPI, + addMemberAPI } from './BoardAPI'; export const useBoardLogic = (id, setError, setInfo, setCategories, setLoading) => { @@ -88,6 +91,7 @@ export const useBoardLogic = (id, setError, setInfo, setCategories, setLoading) update_method: 'category', value: Number(taskCategory) }); + await loadBoardData(); modalEditTask({}, null)(); } catch (err) { @@ -147,6 +151,45 @@ export const useBoardLogic = (id, setError, setInfo, setCategories, setLoading) } }, [loadBoardData, setLoading, setError]); + const assignMember = useCallback(async (editedTaskId, memberId, act, modalAssignMember) => { + setLoading(true); + try { + if (act) { + await assignMemberAPI({ + id: editedTaskId, + member_id: memberId + }); + } else if (!act) { + await unassignMemberAPI({ + id: editedTaskId, + member_id: memberId + }); + } + await loadBoardData(); + modalAssignMember(); + } catch { + setError('Ошибка'); + } finally{ + setLoading(false); + } + }, [loadBoardData, setLoading, setError]); + + const addMember = useCallback(async (username, boardId, modalAddMember) => { + setLoading(true); + try { + await addMemberAPI({ + username: username, + board_id: boardId + }); + await loadBoardData(); + modalAddMember(); + } catch { + setError('Ошибка'); + } finally{ + setLoading(false); + } + }, [loadBoardData, setLoading, setError]); + return { loadBoardData, createTask, @@ -154,6 +197,8 @@ export const useBoardLogic = (id, setError, setInfo, setCategories, setLoading) editTask, editCategory, deleteCategory, - deleteTask + deleteTask, + assignMember, + addMember }; }; \ No newline at end of file diff --git a/src/KBBoard/KBBoard.js b/src/KBBoard/KBBoard.js index 944357f..5783b9c 100644 --- a/src/KBBoard/KBBoard.js +++ b/src/KBBoard/KBBoard.js @@ -17,6 +17,9 @@ const KBBoard = () => { const [edCateg, setEdCateg] = useState(false); const [delTask, setDelTask] = useState(false); const [delCateg, setDelCateg] = useState(false); + const [asgnMember, setAsgnMember] = useState(false); + const [assignAction, setAssignAction] = useState(false); + const [addMemb, setAddMemb] = useState(false); const [categoryTitle, setCategoryTitle] = useState(''); const [taskTitle, setTaskTitle] = useState(''); @@ -27,6 +30,10 @@ const KBBoard = () => { const [editedCateg, setEditedCateg] = useState({}); const [taskPosition, setTaskPosition] = useState(null); const [categoryPosition, setCategoryPosition] = useState(null); + const [assignedMember, setAssignedMember] = useState(0); + const [addedUsername, setAddedUsername] = useState(''); + + const { loadBoardData, @@ -35,7 +42,9 @@ const KBBoard = () => { editTask, editCategory, deleteCategory, - deleteTask + deleteTask, + assignMember, + addMember } = useBoardLogic(id, setError, setInfo, setCategories, setLoading); useEffect(() => { @@ -60,6 +69,7 @@ const KBBoard = () => { setTaskDescription(task.description); setTaskPosition(task.position); setTaskCategory(task.category_id); + //setAssignedMember(task.assigned_users.id) } const modalEditCateg = (categ) => () => { setEdCateg(!edCateg); @@ -73,7 +83,15 @@ const KBBoard = () => { const modalDelCateg = () => { setDelCateg(!delCateg); } + const modalAssignMember = (action) => () => { + setAsgnMember(!asgnMember); + setAssignAction(action) + } + const modalAddMember = () => { + setAddMemb(!addMemb); + } + const handleCreateCategory = async (e) => { e.preventDefault(); await createCategory(categoryTitle, modalCrCateg); @@ -98,6 +116,16 @@ const KBBoard = () => { e.preventDefault(); await deleteCategory(editedCateg.id, modalDelCateg, modalEditCateg); }; + const handleAssignMember = async (e) => { + e.preventDefault(); + await assignMember(editedTask.id, assignedMember, assignAction, modalAssignMember); + }; + const handleAddMember = async (e) => { + e.preventDefault(); + await addMember(addedUsername, id, modalAddMember); + }; + + return (
@@ -122,7 +150,9 @@ const KBBoard = () => {
-

SetingPanel:В разработке

+
{categories.map((category) => ( @@ -142,7 +172,13 @@ const KBBoard = () => { category.tasks.map((task) => ( )) ) : ( @@ -173,6 +209,7 @@ const KBBoard = () => {

Новая категория

+ {

Новая задача

+ setTaskTitle(e.target.value)} required /> + {

Изменение категории

+ {

Изменение задачи

+ setTaskTitle(e.target.value)} required /> + { ))}
+
+ + + +
)} -
+ + {addMemb && ( +
+
+

Удаление категории

+ + + setAddedUsername(e.target.value)} + /> + + + +
+
+ )} + + + + {asgnMember && ( +
+ {assignAction ? ( +
+

Назначение пользователя

+
+
+
+ + +
+
+ +
+ +
+ ) : ( +
+

Снятие пользователя

+
+
+
+ + +
+
+ +
+ +
+ )} +
+ )} + ); } diff --git a/src/css/Board.css b/src/css/Board.css index a7c7da2..33769f2 100644 --- a/src/css/Board.css +++ b/src/css/Board.css @@ -31,9 +31,17 @@ margin: 20px 0px 0px 0px; } +.modal-content h3 { + text-align: center; +} - - +.members-avatar { + height: 32px; + width: 32px; + margin-left: 8px; + border-radius: 1000px; + margin-right: -24px; +} @@ -208,7 +216,9 @@ margin-right: 0px; } - +label { + text-align: left; +}