diff --git a/README-zh.md b/README-zh.md index 57b9113..f11e2af 100644 --- a/README-zh.md +++ b/README-zh.md @@ -17,6 +17,7 @@ QueryDash的目标是开发一款类似Notion Database的Obsidian插件,但不 - **过滤**:根据条件筛选数据。 - **合计**:支持数据汇总统计。 - **分页**:优化大数据量下的浏览体验。 + - **任务**:支持任务管理,包括任务编辑。 **使用教程** diff --git a/README.md b/README.md index 1c8e6af..8c41522 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ In the future, it will gradually expand with more practical features to help use - **Filter**: Screen data based on conditions. - **Aggregation**: Supports data summary statistics. - **Pagination**: Optimizes browsing experience for large datasets. + - **Task**: Supports task management, including task editing. **Tutorial** @@ -31,6 +32,9 @@ file.mtime as "mtime" ,file.tags as "tags" from #clippings ![demo.gif](docs/demo.gif) +**task** +![task.png](docs/task.png) + **timeline** **simple mode** diff --git a/docs/demo.gif b/docs/demo.gif index 123597f..2d5e0e9 100644 Binary files a/docs/demo.gif and b/docs/demo.gif differ diff --git a/docs/task.png b/docs/task.png new file mode 100644 index 0000000..e07e930 Binary files /dev/null and b/docs/task.png differ diff --git a/manifest.json b/manifest.json index 4aec6e9..9492a31 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "querydash", "name": "QueryDash", - "version": "1.0.6", + "version": "1.0.7", "minAppVersion": "1.8.0", "description": "Refer to Dataview and add search, sorting, and pagination functions, just like Notion.", "author": "lwx", diff --git a/src/pages/kanbanview/KanbanView.tsx b/src/pages/kanbanview/KanbanView.tsx index e93cbdb..7538846 100644 --- a/src/pages/kanbanview/KanbanView.tsx +++ b/src/pages/kanbanview/KanbanView.tsx @@ -10,61 +10,36 @@ import EditableTable from "../../components/EditableTable"; const {Text, Link} = Typography; const KanbanView: React.FC = ({app, source}) => { - const [columns, setColumns] = useState([]); + const [columns, setColumns] = useState([]); + const [allData, setAllData] = useState([]); + const [todoData, setTodoData] = useState([]); + const [doneData, setDoneData] = useState([]); + const [refresh, setRefresh] = useState(false); + const [tab, setTab] = useState('all'); const dv = getAPI(app); - const ellipsisLink = (display: string, path: string) => ( - { - const file = app.vault.getAbstractFileByPath(path); - if (file && file instanceof TFile) { - const leaf = app.workspace.getLeaf(); - leaf.openFile(file); - } - }} - > - - → - - - - ); - const parseTaskData = (value: any) => { const tasks = value.values || []; - const groupedTasks: Record = { - todo: [], - done: [], - }; - - tasks.forEach((task: any) => { - const status = task.status === "x" ? "done" : "todo"; - groupedTasks[status].push({ - ...task, - type: "link", - }); - }); - - return Object.keys(groupedTasks).map((status) => ({ - title: status.toUpperCase(), - items: groupedTasks[status], - })); + return tasks; }; - const executeTaskQuery = (dvApi: any, source: any) => { + const executeTaskQuery = (dvApi: any, source: any, key: any) => { dvApi.query(source).then((result: any) => { console.log("queryResult", result); + console.log("key", key); if (result.successful) { const data = parseTaskData(result.value); - console.log("Data:", data); // 输出 data - setColumns([...data]); + let filteredDataList = [...data] + if (key == "todo") { + filteredDataList = data.filter((item: any) => item.status === " "); + setTodoData(filteredDataList) + } else if (key == "done") { + filteredDataList = data.filter((item: any) => item.status === "x"); + setDoneData(filteredDataList) + } else { + setAllData(filteredDataList) + } } }); }; @@ -72,6 +47,7 @@ const KanbanView: React.FC = ({app, source}) => { const onChange: (checked: boolean, updateText: string, item: STask) => void = async (checked, updateText, item) => { console.log("completed", checked); console.log("item", item); + console.log("updateText", updateText); const completed = checked; const status = completed ? "x" : " "; console.log("status", status); @@ -85,7 +61,7 @@ const KanbanView: React.FC = ({app, source}) => { /** Rewrite a task with the given completion status and new text. */ async function rewriteTask(vault: Vault, task: STask, desiredStatus: string, desiredText?: string) { if (desiredStatus == task.status && (desiredText == undefined || desiredText == task.text)) return; - desiredStatus = desiredStatus == "" ? " " : desiredStatus; + desiredStatus = desiredStatus == " " ? " " : desiredStatus; let rawFiletext = await vault.adapter.read(task.path); @@ -136,7 +112,9 @@ const KanbanView: React.FC = ({app, source}) => { useEffect(() => { - executeTaskQuery(dv, source) + executeTaskQuery(dv, source, "all"); + executeTaskQuery(dv, source, "todo"); + executeTaskQuery(dv, source, "done"); }, [app, source, refresh]); useEffect(() => { @@ -172,40 +150,62 @@ const KanbanView: React.FC = ({app, source}) => { }; }, [app]); + const cardDetails = (dataList: any) => { + return ( + dataList.map((item: any) => ( + <> + + + + onChange(e.target.checked, item.text, item)} + checked={item.checked} + /> + + + { + console.log("保存的新文本:", newText); + onChange(item.checked, newText, item); + }} + /> + + + + + )) + ) + } + return ( <> - {/**/} - - - {columns.map((column) => ( - - {column.items.map((item: any, index: number) => ( - <> - - - - onChange(e.target.checked, item.text, item)} - checked={item.checked} - /> - - - { - console.log("保存的新文本:", newText); - onChange(item.checked, newText, item); - }} - /> - - - - - ))} - - ))} - + { + setTab(key); + }, + }} + /> ); };