From 34f8d9491b303a6a91ab0ee8a89e40e528c8c95e Mon Sep 17 00:00:00 2001 From: 1ilit Date: Wed, 13 Mar 2024 21:09:29 +0200 Subject: [PATCH] Abstract tasks to a context --- src/components/Todo.jsx | 6 ++-- src/context/TasksContext.jsx | 18 ++++++++++++ src/hooks/useTasks.js | 6 ++++ src/pages/Editor.jsx | 55 +++++++++++++++++------------------- 4 files changed, 54 insertions(+), 31 deletions(-) create mode 100644 src/context/TasksContext.jsx create mode 100644 src/hooks/useTasks.js diff --git a/src/components/Todo.jsx b/src/components/Todo.jsx index cf37f40..bfa7573 100644 --- a/src/components/Todo.jsx +++ b/src/components/Todo.jsx @@ -19,8 +19,10 @@ import { IconDeleteStroked, IconCaretdown, } from "@douyinfe/semi-icons"; -import { StateContext, TaskContext } from "../pages/Editor"; +import { StateContext } from "../pages/Editor"; import { State } from "../data/data"; +import useTasks from "../hooks/useTasks"; + export default function Todo() { const Priority = { NONE: 0, @@ -36,7 +38,7 @@ export default function Todo() { }; const [activeTask, setActiveTask] = useState(-1); const [, setSortOrder] = useState(SortOrder.ORIGINAL); - const { tasks, setTasks, updateTask } = useContext(TaskContext); + const { tasks, setTasks, updateTask } = useTasks(); const { setState } = useContext(StateContext); const priorityLabel = (p) => { diff --git a/src/context/TasksContext.jsx b/src/context/TasksContext.jsx new file mode 100644 index 0000000..89858f3 --- /dev/null +++ b/src/context/TasksContext.jsx @@ -0,0 +1,18 @@ +import { createContext, useState } from "react"; + +export const TasksContext = createContext(null); + +export default function TasksContextProvider({ children }) { + const [tasks, setTasks] = useState([]); + + const updateTask = (id, values) => + setTasks((prev) => + prev.map((task, i) => (id === i ? { ...task, ...values } : task)) + ); + + return ( + + {children} + + ); +} diff --git a/src/hooks/useTasks.js b/src/hooks/useTasks.js new file mode 100644 index 0000000..f64cc29 --- /dev/null +++ b/src/hooks/useTasks.js @@ -0,0 +1,6 @@ +import { useContext } from "react"; +import { TasksContext } from "../context/TasksContext"; + +export default function useTasks() { + return useContext(TasksContext); +} diff --git a/src/pages/Editor.jsx b/src/pages/Editor.jsx index 467e2aa..69161f6 100644 --- a/src/pages/Editor.jsx +++ b/src/pages/Editor.jsx @@ -21,9 +21,10 @@ import useNotes from "../hooks/useNotes"; import NotesContextProvider from "../context/NotesContext"; import useTypes from "../hooks/useTypes"; import TypesContextProvider from "../context/TypesContext"; +import useTasks from "../hooks/useTasks"; +import TasksContextProvider from "../context/TasksContext"; export const StateContext = createContext(); -export const TaskContext = createContext(); export default function Editor() { return ( @@ -31,15 +32,17 @@ export default function Editor() { - - - - - - - - - + + + + + + + + + + + @@ -55,7 +58,7 @@ function WorkSpace() { const { types, setTypes } = useTypes(); const [resize, setResize] = useState(false); const [width, setWidth] = useState(340); - const [tasks, setTasks] = useState([]); + const { tasks, setTasks } = useTasks(); const { layout } = useLayout(); const { areas, setAreas } = useAreas(); const { settings, setSettings } = useSettings(); @@ -70,11 +73,6 @@ function WorkSpace() { if (w > 340) setWidth(w); }; - const updateTask = (id, values) => - setTasks((prev) => - prev.map((task, i) => (id === i ? { ...task, ...values } : task)) - ); - useEffect(() => { if ( tables?.length === 0 && @@ -209,7 +207,7 @@ function WorkSpace() { setNotes(d.notes); setAreas(d.areas); setTypes(d.types); - setTasks(d.todos); + setTasks(d.todos ?? []); setTransform({ pan: d.pan, zoom: d.zoom }); window.name = `d ${d.id}`; } else { @@ -233,7 +231,7 @@ function WorkSpace() { setRelationships(diagram.references); setAreas(diagram.areas); setNotes(diagram.notes); - setTasks(diagram.todos); + setTasks(diagram.todos ?? []); setTransform({ pan: diagram.pan, zoom: diagram.zoom, @@ -261,7 +259,7 @@ function WorkSpace() { setTypes(diagram.types); setRelationships(diagram.relationships); setAreas(diagram.subjectAreas); - setTasks(diagram.tasks); + setTasks(diagram.todos ?? []); setNotes(diagram.notes); setTransform({ zoom: 1, @@ -310,21 +308,20 @@ function WorkSpace() { setAreas, setNotes, setTypes, + setTasks, ]); return (
- - - +
setResize(false)}