/
lizardking
/
react_project
Обзор
Документация
Войти
/
lizardking
/
react_project
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/features/taskList/model/useTasks.ts
44 строки
1 KB
LizardKing
Task 4 - RHF
14 окт 2025, 02:23
14 окт 2025, 02:23
163e5e3
Код
Авторство
О чём код?
import type { Task } from 'entities/task' import { useMemo, useState, useEffect, useCallback } from 'react' import { useGetTasksQuery } from '../api/tasksApi' export type Filter = 'all' | 'completed' | 'incomplete' export function useTasks() { const { data: remoteTasks = [], isLoading, isError } = useGetTasksQuery() const [items, setItems] = useState<Task[]>([]) const [filter, setFilter] = useState<Filter>('all') useEffect(() => { if (items.length === 0 && remoteTasks.length > 0) { setItems(remoteTasks) } // eslint-disable-next-line react-hooks/exhaustive-deps }, [remoteTasks]) const tasks = useMemo(() => { if (filter === 'completed') return items.filter((task) => task.completed) if (filter === 'incomplete') return items.filter((task) => !task.completed) return items }, [items, filter]) const handleSetFilter = useCallback( (filterValue: Filter) => () => { setFilter(filterValue) }, [setFilter] ) const removeTask = useCallback((id: string) => { setItems(previous => previous.filter(task => task.id !== id)) }, []) return { tasks, filter, handleSetFilter, isLoading, isError, removeTask } as const }