This repository has been archived on 2025-07-07. You can view files and clone it, but cannot push or open issues or pull requests.
Files
eternos/frontend/style/contexts/favorites-context.tsx

60 lines
1.6 KiB
TypeScript

"use client"
import React, { createContext, useContext, useState, useCallback } from 'react'
type FavoriteItem = {
id: number
title: string
price: number
}
type FavoritesContextType = {
items: FavoriteItem[]
addToFavorites: (item: FavoriteItem) => void
removeFromFavorites: (id: number) => void
isFavorite: (id: number) => boolean
getTotalFavorites: () => number
}
const FavoritesContext = createContext<FavoritesContextType | undefined>(undefined)
export const useFavorites = () => {
const context = useContext(FavoritesContext)
if (!context) {
throw new Error('useFavorites must be used within a FavoritesProvider')
}
return context
}
export const FavoritesProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
const [items, setItems] = useState<FavoriteItem[]>([])
const addToFavorites = useCallback((newItem: FavoriteItem) => {
setItems(currentItems => {
if (!currentItems.some(item => item.id === newItem.id)) {
return [...currentItems, newItem]
}
return currentItems
})
}, [])
const removeFromFavorites = useCallback((id: number) => {
setItems(currentItems => currentItems.filter(item => item.id !== id))
}, [])
const isFavorite = useCallback((id: number) => {
return items.some(item => item.id === id)
}, [items])
const getTotalFavorites = useCallback(() => {
return items.length
}, [items])
return (
<FavoritesContext.Provider value={{ items, addToFavorites, removeFromFavorites, isFavorite, getTotalFavorites }}>
{children}
</FavoritesContext.Provider>
)
}