/
dbataeva
/
tasksApp
Обзор
Документация
Войти
/
dbataeva
/
tasksApp
Код
Запросы
2
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
appProject/src/features/taskList/model/useTasks.ts
70 строк
1 KB
Daria Bataeva
refactor(task7): move code into appProject folder
26 окт 2025, 14:56
26 окт 2025, 14:56
489b5b2
Код
Авторство
О чём код?
import { Task } from 'entities/task'; import { useGetTasksQuery } from 'entities/task'; import { useCallback, useEffect, useMemo, useState } from 'react'; export type Filter = 'all' | 'completed' | 'incomplete'; export const useTasks = () => { const { data } = useGetTasksQuery(); const [tasks, setTasks] = useState<Task[]>([]); const [filter, setFilter] = useState<Filter>('all'); useEffect(() => { if (data) { setTasks(data); } }, [data, setTasks]); const addTask = (todo: string) => { setTasks((prev) => [ ...prev, { id: Date.now(), userId: Math.random(), todo, completed: false, }, ]); }; const removeTask = useCallback( (id: Task['id']) => { setTasks((prev) => prev.filter((task) => task.id !== id)); }, [setTasks] ); const setTaskCompleted = useCallback( (id: Task['id']) => { setTasks((prev) => prev.map((item) => item.id === id ? { ...item, completed: !item.completed } : item ) ); }, [setTasks] ); const filteredTasks = useMemo( () => filter === 'all' ? tasks : tasks.filter((task) => { if (filter === 'completed') { return task.completed; } return !task.completed; }), [filter, tasks] ); return { filter, addTask, setFilter, removeTask, setTaskCompleted, tasks: filteredTasks, }; };