Abstract tasks to a context

This commit is contained in:
1ilit 2024-03-13 21:09:29 +02:00
parent 40ef1b057e
commit 34f8d9491b
4 changed files with 54 additions and 31 deletions

View File

@ -19,8 +19,10 @@ import {
IconDeleteStroked, IconDeleteStroked,
IconCaretdown, IconCaretdown,
} from "@douyinfe/semi-icons"; } from "@douyinfe/semi-icons";
import { StateContext, TaskContext } from "../pages/Editor"; import { StateContext } from "../pages/Editor";
import { State } from "../data/data"; import { State } from "../data/data";
import useTasks from "../hooks/useTasks";
export default function Todo() { export default function Todo() {
const Priority = { const Priority = {
NONE: 0, NONE: 0,
@ -36,7 +38,7 @@ export default function Todo() {
}; };
const [activeTask, setActiveTask] = useState(-1); const [activeTask, setActiveTask] = useState(-1);
const [, setSortOrder] = useState(SortOrder.ORIGINAL); const [, setSortOrder] = useState(SortOrder.ORIGINAL);
const { tasks, setTasks, updateTask } = useContext(TaskContext); const { tasks, setTasks, updateTask } = useTasks();
const { setState } = useContext(StateContext); const { setState } = useContext(StateContext);
const priorityLabel = (p) => { const priorityLabel = (p) => {

View File

@ -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 (
<TasksContext.Provider value={{ tasks, setTasks, updateTask }}>
{children}
</TasksContext.Provider>
);
}

6
src/hooks/useTasks.js Normal file
View File

@ -0,0 +1,6 @@
import { useContext } from "react";
import { TasksContext } from "../context/TasksContext";
export default function useTasks() {
return useContext(TasksContext);
}

View File

@ -21,9 +21,10 @@ import useNotes from "../hooks/useNotes";
import NotesContextProvider from "../context/NotesContext"; import NotesContextProvider from "../context/NotesContext";
import useTypes from "../hooks/useTypes"; import useTypes from "../hooks/useTypes";
import TypesContextProvider from "../context/TypesContext"; import TypesContextProvider from "../context/TypesContext";
import useTasks from "../hooks/useTasks";
import TasksContextProvider from "../context/TasksContext";
export const StateContext = createContext(); export const StateContext = createContext();
export const TaskContext = createContext();
export default function Editor() { export default function Editor() {
return ( return (
@ -31,15 +32,17 @@ export default function Editor() {
<TransformContextProvider> <TransformContextProvider>
<UndoRedoContextProvider> <UndoRedoContextProvider>
<SelectContextProvider> <SelectContextProvider>
<AreasContextProvider> <TasksContextProvider>
<NotesContextProvider> <AreasContextProvider>
<TypesContextProvider> <NotesContextProvider>
<TablesContextProvider> <TypesContextProvider>
<WorkSpace /> <TablesContextProvider>
</TablesContextProvider> <WorkSpace />
</TypesContextProvider> </TablesContextProvider>
</NotesContextProvider> </TypesContextProvider>
</AreasContextProvider> </NotesContextProvider>
</AreasContextProvider>
</TasksContextProvider>
</SelectContextProvider> </SelectContextProvider>
</UndoRedoContextProvider> </UndoRedoContextProvider>
</TransformContextProvider> </TransformContextProvider>
@ -55,7 +58,7 @@ function WorkSpace() {
const { types, setTypes } = useTypes(); const { types, setTypes } = useTypes();
const [resize, setResize] = useState(false); const [resize, setResize] = useState(false);
const [width, setWidth] = useState(340); const [width, setWidth] = useState(340);
const [tasks, setTasks] = useState([]); const { tasks, setTasks } = useTasks();
const { layout } = useLayout(); const { layout } = useLayout();
const { areas, setAreas } = useAreas(); const { areas, setAreas } = useAreas();
const { settings, setSettings } = useSettings(); const { settings, setSettings } = useSettings();
@ -70,11 +73,6 @@ function WorkSpace() {
if (w > 340) setWidth(w); if (w > 340) setWidth(w);
}; };
const updateTask = (id, values) =>
setTasks((prev) =>
prev.map((task, i) => (id === i ? { ...task, ...values } : task))
);
useEffect(() => { useEffect(() => {
if ( if (
tables?.length === 0 && tables?.length === 0 &&
@ -209,7 +207,7 @@ function WorkSpace() {
setNotes(d.notes); setNotes(d.notes);
setAreas(d.areas); setAreas(d.areas);
setTypes(d.types); setTypes(d.types);
setTasks(d.todos); setTasks(d.todos ?? []);
setTransform({ pan: d.pan, zoom: d.zoom }); setTransform({ pan: d.pan, zoom: d.zoom });
window.name = `d ${d.id}`; window.name = `d ${d.id}`;
} else { } else {
@ -233,7 +231,7 @@ function WorkSpace() {
setRelationships(diagram.references); setRelationships(diagram.references);
setAreas(diagram.areas); setAreas(diagram.areas);
setNotes(diagram.notes); setNotes(diagram.notes);
setTasks(diagram.todos); setTasks(diagram.todos ?? []);
setTransform({ setTransform({
pan: diagram.pan, pan: diagram.pan,
zoom: diagram.zoom, zoom: diagram.zoom,
@ -261,7 +259,7 @@ function WorkSpace() {
setTypes(diagram.types); setTypes(diagram.types);
setRelationships(diagram.relationships); setRelationships(diagram.relationships);
setAreas(diagram.subjectAreas); setAreas(diagram.subjectAreas);
setTasks(diagram.tasks); setTasks(diagram.todos ?? []);
setNotes(diagram.notes); setNotes(diagram.notes);
setTransform({ setTransform({
zoom: 1, zoom: 1,
@ -310,21 +308,20 @@ function WorkSpace() {
setAreas, setAreas,
setNotes, setNotes,
setTypes, setTypes,
setTasks,
]); ]);
return ( return (
<StateContext.Provider value={{ state, setState }}> <StateContext.Provider value={{ state, setState }}>
<div className="h-[100vh] flex flex-col overflow-hidden theme"> <div className="h-[100vh] flex flex-col overflow-hidden theme">
<TaskContext.Provider value={{ tasks, setTasks, updateTask }}> <ControlPanel
<ControlPanel diagramId={id}
diagramId={id} setDiagramId={setId}
setDiagramId={setId} title={title}
title={title} setTitle={setTitle}
setTitle={setTitle} lastSaved={lastSaved}
lastSaved={lastSaved} setLastSaved={setLastSaved}
setLastSaved={setLastSaved} />
/>
</TaskContext.Provider>
<div <div
className="flex h-full overflow-y-auto" className="flex h-full overflow-y-auto"
onMouseUp={() => setResize(false)} onMouseUp={() => setResize(false)}