diff --git a/src/assets/group.png b/src/assets/group.png index 8355952..3cc74c0 100644 Binary files a/src/assets/group.png and b/src/assets/group.png differ diff --git a/src/components/sidebar.jsx b/src/components/sidebar.jsx index 5079378..127ce41 100644 --- a/src/components/sidebar.jsx +++ b/src/components/sidebar.jsx @@ -6,10 +6,7 @@ import timeLine from "../assets/process.png"; import todo from "../assets/calendar.png"; import { Tooltip, SideSheet } from "@douyinfe/semi-ui"; import { UndoRedoContext } from "../pages/editor"; -// import { -// IllustrationNoContent, -// IllustrationNoContentDark, -// } from "@douyinfe/semi-illustrations"; +import Todo from "./todo"; export default function Sidebar() { const SidesheetType = { @@ -20,8 +17,8 @@ export default function Sidebar() { TIMELINE: 4, BOT: 5, }; - const [sidesheet, setSidesheet] = useState(SidesheetType.NONE); const { undoStack } = useContext(UndoRedoContext); + const [sidesheet, setSidesheet] = useState(SidesheetType.NONE); const getTitle = (type) => { switch (type) { @@ -39,11 +36,11 @@ export default function Sidebar() {
Chat
); - case SidesheetType.TEAM: + case SidesheetType.TODO: return (
- chat icon -
Your team
+ todo icon +
To-do list
); default: @@ -54,7 +51,9 @@ export default function Sidebar() { const getContent = (type) => { switch (type) { case SidesheetType.TIMELINE: - return getTimeline(); + return renderTimeline(); + case SidesheetType.TODO: + return ; default: break; } @@ -77,8 +76,11 @@ export default function Sidebar() { - @@ -97,20 +99,23 @@ export default function Sidebar() { setSidesheet(SidesheetType.NONE)} + onCancel={() => { + setSidesheet(SidesheetType.NONE); + }} width={340} title={getTitle(sidesheet)} style={{ paddingBottom: "16px" }} + bodyStyle={{ padding: "0px" }} > {getContent(sidesheet)} ); - function getTimeline() { + function renderTimeline() { if (undoStack.length > 0) { return ( -
+

{[...undoStack].reverse().map((e) => ( <> @@ -125,18 +130,9 @@ export default function Sidebar() { ); } else { return ( -
+
You havent added anything to your diagram yet.
- // } - // darkModeImage={ - // - // } - // title="No activity" - // description="You have not added anything to your diagram yet." - // /> ); } } diff --git a/src/components/todo.jsx b/src/components/todo.jsx new file mode 100644 index 0000000..4ed9b87 --- /dev/null +++ b/src/components/todo.jsx @@ -0,0 +1,254 @@ +import React, { useContext, useState } from "react"; +import { + Checkbox, + Input, + TextArea, + Row, + Col, + Dropdown, + Button, + Popover, + Tag, + List, + RadioGroup, + Radio, +} from "@douyinfe/semi-ui"; +import { + IconPlus, + IconMore, + IconDeleteStroked, + IconCaretdown, +} from "@douyinfe/semi-icons"; +import { TaskContext } from "../pages/editor"; +export default function Todo() { + const Priority = { + NONE: 0, + LOW: 1, + MEDIUM: 2, + HIGH: 3, + }; + const SortOrder = { + ORIGINAL: "My order", + PRIORITY: "Priority", + COMPLETED: "Completed", + ALPHABETICALLY: "Alphabetically", + }; + const [activeTask, setActiveTask] = useState(-1); + const [, setSortOrder] = useState(SortOrder.ORIGINAL); + const { tasks, setTasks, updateTask } = useContext(TaskContext); + + const priorityLabel = (p) => { + switch (p) { + case Priority.NONE: + return "None"; + case Priority.LOW: + return "Low"; + case Priority.MEDIUM: + return "Medium"; + case Priority.HIGH: + return "High"; + default: + return ""; + } + }; + + const priorityColor = (p) => { + switch (p) { + case Priority.NONE: + return "blue"; + case Priority.LOW: + return "green"; + case Priority.MEDIUM: + return "yellow"; + case Priority.HIGH: + return "red"; + default: + return ""; + } + }; + + const sort = (s) => { + switch (s) { + case SortOrder.ORIGINAL: + setTasks((prev) => prev.sort((a, b) => a.order - b.order)); + return; + case SortOrder.PRIORITY: + setTasks((prev) => prev.sort((a, b) => b.priority - a.priority)); + return; + case SortOrder.COMPLETED: + setTasks((prev) => + prev.sort((a, b) => { + if (a.complete && !b.complete) { + return 1; + } else if (!a.complete && b.complete) { + return -1; + } else { + return 0; + } + }) + ); + break; + case SortOrder.ALPHABETICALLY: + setTasks((prev) => prev.sort((a, b) => a.title.localeCompare(b.title))); + break; + default: + break; + } + }; + + return ( + <> +
+ + {Object.values(SortOrder).map((order) => ( + { + setSortOrder(order); + sort(order); + }} + > + {order} + + ))} + + } + trigger="click" + > + + + +
+ + {tasks.map((t, i) => ( + setActiveTask(i)} + > +
+ + + + updateTask(i, { complete: e.target.checked }) + } + > + + + updateTask(i, { title: v })} + value={t.title} + > + + + +
Set priority:
+ + updateTask(i, { priority: e.target.value }) + } + value={t.priority} + direction="vertical" + > + + + {priorityLabel(Priority.NONE)} + + + + + {priorityLabel(Priority.LOW)} + + + + + {priorityLabel(Priority.MEDIUM)} + + + + + {priorityLabel(Priority.HIGH)} + + + + +
+ } + trigger="click" + showArrow + className="w-[180px]" + > + + + + + {activeTask === i && ( + + + + + + + )} + + + + Priority:{" "} + + {priorityLabel(t.priority)} + + + +
+ + ))} + + + ); +} diff --git a/src/pages/editor.jsx b/src/pages/editor.jsx index 45defb6..4bd5bde 100644 --- a/src/pages/editor.jsx +++ b/src/pages/editor.jsx @@ -19,6 +19,7 @@ export const NoteContext = createContext(); export const SettingsContext = createContext(); export const UndoRedoContext = createContext(); export const SelectContext = createContext(); +export const TaskContext = createContext(); export default function Editor(props) { const [tables, setTables] = useState([]); @@ -47,6 +48,7 @@ export default function Editor(props) { pan: { x: 0, y: 0 }, showGrid: true, }); + const [tasks, setTasks] = useState([]); const [undoStack, setUndoStack] = useState([]); const [redoStack, setRedoStack] = useState([]); const [selectedElement, setSelectedElement] = useState({ @@ -386,6 +388,11 @@ export default function Editor(props) { ); }; + const updateTask = (id, values) => + setTasks((prev) => + prev.map((task, i) => (id === i ? { ...task, ...values } : task)) + ); + useEffect(() => { document.title = "Editor - drawDB"; }, []); @@ -420,28 +427,32 @@ export default function Editor(props) { -
- -
setResize(false)} - onMouseMove={dragHandler} - > - {layout.sidebar && ( - - )} - - {layout.services && } + +
+ +
setResize(false)} + onMouseMove={dragHandler} + > + {layout.sidebar && ( + + )} + + {layout.services && } +
-
+