53 lines
1.3 KiB
JavaScript
53 lines
1.3 KiB
JavaScript
'use client';
|
|
|
|
import { createContext, useContext, useState, useEffect } from 'react';
|
|
|
|
const FavoritesContext = createContext();
|
|
|
|
export const useFavorites = () => {
|
|
const context = useContext(FavoritesContext);
|
|
if (!context) {
|
|
throw new Error('useFavorites must be used within FavoritesProvider');
|
|
}
|
|
return context;
|
|
};
|
|
|
|
export const FavoritesProvider = ({ children }) => {
|
|
const [favorites, setFavorites] = useState([]);
|
|
|
|
useEffect(() => {
|
|
const stored = localStorage.getItem('favorites');
|
|
if (stored) {
|
|
try {
|
|
setFavorites(JSON.parse(stored));
|
|
} catch (e) {
|
|
console.error('Failed to parse favorites', e);
|
|
}
|
|
}
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
localStorage.setItem('favorites', JSON.stringify(favorites));
|
|
}, [favorites]);
|
|
|
|
const addFavorite = (property) => {
|
|
setFavorites(prev => {
|
|
if (prev.some(p => p.id === property.id)) return prev;
|
|
return [...prev, property];
|
|
});
|
|
};
|
|
|
|
const removeFavorite = (propertyId) => {
|
|
setFavorites(prev => prev.filter(p => p.id !== propertyId));
|
|
};
|
|
|
|
const isFavorite = (propertyId) => {
|
|
return favorites.some(p => p.id === propertyId);
|
|
};
|
|
|
|
return (
|
|
<FavoritesContext.Provider value={{ favorites, addFavorite, removeFavorite, isFavorite }}>
|
|
{children}
|
|
</FavoritesContext.Provider>
|
|
);
|
|
}; |