// src/hooks/useFavorites.js import { useState, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { API_URL } from '../config/authConstants'; import { apiFetch } from '../api/apiClient'; /** * Хук для работы с лайками (избранное). * Использует backend API для добавления/удаления лайков. */ export function useFavorites() { const { t } = useTranslation(); const [error, setError] = useState(""); /** * Переключает лайк на посте через API. * @param {number} postId - ID поста * @returns {Promise<{success: boolean, error: string|null}>} */ const toggleFavorite = useCallback(async (postId) => { setError(""); try { const response = await apiFetch(`${API_URL}/api/v1/favorites/${postId}/toggle`, { method: 'POST', }); if (!response.ok) { throw new Error(t('favorites.toggleError')); } return { success: true, error: null }; } catch (err) { console.error('Error toggling favorite:', err); const message = err.message || t('favorites.toggleError'); setError(message); return { success: false, error: message }; } }, [t]); /** * Загружает список лайкнутых постов текущего пользователя. * @returns {Promise} - массив ID лайкнутых постов */ const loadFavorites = useCallback(async () => { setError(""); try { const response = await apiFetch(`${API_URL}/api/v1/favorites`); if (!response.ok) { throw new Error(t('favorites.loadError')); } const data = await response.json(); return Array.isArray(data) ? data.map(post => post.id) : []; } catch (err) { console.error('Error loading favorites:', err); setError(err.message || t('favorites.loadError')); return []; } }, [t]); return { toggleFavorite, loadFavorites, error, }; }