Added sidebar
This commit is contained in:
53
app/contexts/FavoritesContext.js
Normal file
53
app/contexts/FavoritesContext.js
Normal file
@ -0,0 +1,53 @@
|
||||
'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>
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user