diff --git a/README.md b/README.md index 1bbc731..dc9605e 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ - [x] validate cron string - [x] clone task - [x] delete task -- [ ] list option: sort +- [x] list option: sort - [x] list option: show last completion - [x] list option: show next refresh - [x] list option: move completed below diff --git a/resources/ts/components/TaskList.vue b/resources/ts/components/TaskList.vue index c3f5fa6..48f8c66 100644 --- a/resources/ts/components/TaskList.vue +++ b/resources/ts/components/TaskList.vue @@ -4,11 +4,14 @@ import type { Task } from "@/types"; import { getTasks, createTask, deleteTask } from "@/api/tasks"; import { CirclePlus } from "@lucide/vue"; import TaskItem from "@/components/TaskItem.vue"; -import { taskCompleted } from "@/lib/tasks"; +import { taskCompleted, sortTasks } from "@/lib/tasks"; +import { SortType } from "@/enums"; const taskInput = ref(""); const tasks = ref([]); const list = ref("test"); +const sortType = ref(SortType.RESET_DATE); +const sortReverse = ref(false); const showLastChecked = ref(false); const showNextReset = ref(false); const separateCompleted = ref(false); @@ -19,10 +22,15 @@ function fetchTasks() { void getTasks(list.value) .then((data: Task[]) => { tasks.value = data; + reSortTasks(); setTimeout(fetchTasks, 10000); }); } +function reSortTasks() { + tasks.value = sortTasks(tasks.value, sortType.value, sortReverse.value); +} + function onNewTask() { if (taskInput.value.trim()) { void createTask(list.value, { @@ -31,6 +39,7 @@ function onNewTask() { }) .then((data: Task) => { tasks.value.push(data); + reSortTasks(); }) .finally(() => { taskInput.value = ""; @@ -53,6 +62,14 @@ function onDeleteTask(task: Task) { tasks.value.splice(tasks.value.indexOf(task), 1); } +function onChangeSortType() { + reSortTasks(); +} + +function onChangeSortReverse() { + reSortTasks(); +} + onBeforeMount(fetchTasks); @@ -114,6 +131,20 @@ onBeforeMount(fetchTasks);
Options
+ +