Abstract tasks to a context
This commit is contained in:
parent
40ef1b057e
commit
34f8d9491b
@ -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) => {
|
||||||
|
18
src/context/TasksContext.jsx
Normal file
18
src/context/TasksContext.jsx
Normal 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
6
src/hooks/useTasks.js
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
import { useContext } from "react";
|
||||||
|
import { TasksContext } from "../context/TasksContext";
|
||||||
|
|
||||||
|
export default function useTasks() {
|
||||||
|
return useContext(TasksContext);
|
||||||
|
}
|
@ -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)}
|
||||||
|
Loading…
Reference in New Issue
Block a user