diff --git a/hashira-web/src/App.tsx b/hashira-web/src/App.tsx index 84025349..027fa77f 100644 --- a/hashira-web/src/App.tsx +++ b/hashira-web/src/App.tsx @@ -38,6 +38,46 @@ const App: React.VFC = () => { setIsUploading(false); }; + const onMoveTask = async (taskId: string, direction: "left" | "right") => { + if (!user) { + return; + } + const tasksToMove: firebase.TasksObject = {}; + const task = tasksAndPriorities["Tasks"][taskId]; + const currentIndex = firebase.Place.indexOf(task.Place); + const nextIndex = ((): number => { + if (direction === "left") { + if (currentIndex === 0) { + return firebase.Place.length - 1; + } + return currentIndex - 1; + } + + if (currentIndex === firebase.Place.length - 1) { + return 0; + } + return currentIndex + 1; + })(); + + tasksToMove[taskId] = { + ID: task.ID, + IsDeleted: false, + Name: task.Name, + Place: firebase.Place[nextIndex], + }; + + setIsUploading(true); + + await firebase.updateTasks(tasksToMove); + + // refresh tasks and priorities + const tp = await firebase.fetchTaskAndPriorities(user.uid); + setTasksAndPriorities(tp); + setCheckedTasks({}); + + setIsUploading(false); + }; + React.useEffect(() => { firebase.onAuthStateChanged((user: firebase.User | null) => { if (!user) { @@ -141,6 +181,7 @@ const App: React.VFC = () => { setCheckedTasks={setCheckedTasks} setTasksAndPriorities={setTasksAndPriorities} mode={mode} + onMoveTask={onMoveTask} /> { setCheckedTasks={setCheckedTasks} setTasksAndPriorities={setTasksAndPriorities} mode={mode} + onMoveTask={onMoveTask} /> { setCheckedTasks={setCheckedTasks} setTasksAndPriorities={setTasksAndPriorities} mode={mode} + onMoveTask={onMoveTask} /> { setCheckedTasks={setCheckedTasks} setTasksAndPriorities={setTasksAndPriorities} mode={mode} + onMoveTask={onMoveTask} /> ) : undefined} diff --git a/hashira-web/src/TaskList.tsx b/hashira-web/src/TaskList.tsx index c1f3136c..5d542fb4 100644 --- a/hashira-web/src/TaskList.tsx +++ b/hashira-web/src/TaskList.tsx @@ -59,6 +59,7 @@ export const TaskList: React.VFC<{ setCheckedTasks: (a: { [key: string]: boolean }) => void; setTasksAndPriorities: (tp: any | undefined) => void; mode: "move" | "select"; + onMoveTask: (taskId: string, direction: "left" | "right") => void; }> = ({ user, place, @@ -67,6 +68,7 @@ export const TaskList: React.VFC<{ setCheckedTasks, setTasksAndPriorities, mode, + onMoveTask, }) => { const [updatedTasks, setUpdatedTasks] = React.useState<{ [key: string]: string; @@ -145,8 +147,20 @@ export const TaskList: React.VFC<{ /> ) : ( -
👈
-
👉
+
onMoveTask(e.currentTarget.id, "left")} + > + 👈 +
+
onMoveTask(e.currentTarget.id, "right")} + > + 👉 +
)}