import { 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 { LayoutContext, TaskContext } from "../pages/Editor"; import { State } from "../data/data"; 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 { setState } = useContext(LayoutContext); 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) => { setActiveTask(-1); 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.length > 0 ? ( {tasks.map((t, i) => ( setActiveTask(i)} >
{ updateTask(i, { complete: e.target.checked }); setState(State.SAVING); }} > updateTask(i, { title: v })} value={t.title} onBlur={() => setState(State.SAVING)} >
Set priority:
{ updateTask(i, { priority: e.target.value }); setState(State.SAVING); }} 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)}
))}
) : (
You have no tasks yet. Add your to-dos and keep track of your progress.
)} ); }