Skip to content
Snippets Groups Projects
Select Git revision
  • 9fcbd33329c9db2bcc73bb79cd79ba9f65d23f30
  • main default protected
  • bottleneck
  • logout
  • secure
  • jwtreal
  • jwt
  • master
8 results

MyFavoritesList.js

Blame
  • MyFavoritesList.js 3.89 KiB
    import React, { useState, useEffect } from 'react';
    import axios from 'axios';
    import { toast } from 'react-toastify';
    import { FaStar } from 'react-icons/fa';
    import '../styles/MyPage.css';
    
    const API_URL = process.env.REACT_APP_SERVER_URL;
    
    const MyFavoritesList = ({ userId, username }) => {
        const [favorites, setFavorites] = useState([]);
        const [loading, setLoading] = useState(true);
        const [error, setError] = useState(null);
    
        useEffect(() => {
            const fetchFavorites = async () => {
                try {
                    const response = await axios.get(
                        `${API_URL}/favorites?userId=${userId}`,
                        { withCredentials: true }
                    );
                    console.log('받은 즐겨찾기 데이터:', response.data);
                    const favoritesData = Array.isArray(response.data.data) ? response.data.data : [];
                    setFavorites(favoritesData);
                    setLoading(false);
                } catch (error) {
                    console.error('즐겨찾기 조회 에러:', error);
                    if (error.response) {
                        console.error('에러 응답:', error.response.data);
                        console.error('에러 상태:', error.response.status);
                    }
                    setError('즐겨찾기를 불러오는데 실패했습니다.');
                    toast.error('즐겨찾기를 불러오는데 실패했습니다.');
                    setLoading(false);
                }
            };
    
            if (userId) {
                fetchFavorites();
            }
        }, [userId]);
    
        const handleDeleteFavorite = async (placeId) => {
            try {
                await axios.delete(
                    `${API_URL}/favorites/${placeId}`,
                    { 
                        data: { userId },
                        withCredentials: true 
                    }
                );
                setFavorites(favorites.filter(favorite => favorite.placeId !== placeId));
                toast.success('즐겨찾기가 삭제되었습니다.');
            } catch (error) {
                console.error('즐겨찾기 삭제 에러:', error);
                toast.error('즐겨찾기 삭제에 실패했습니다.');
            }
        };
    
        if (loading) {
            return <div className="loading">로딩 중...</div>;
        }
    
        if (error) {
            return <div className="error">{error}</div>;
        }
    
        return (
            <div className="my-favorites-container">
                <h2>{username}</h2>
                <div className="favorites-list">
                    {favorites.length === 0 ? (
                        <p className="no-favorites">즐겨찾기한 장소가 없습니다.</p>
                    ) : (
                        favorites.map((favorite) => (
                            <div key={favorite.placeId} className="favorite-item">
                                <div className="favorite-header">
                                    <h3>{favorite.placeName}</h3>
                                    <button 
                                        onClick={() => handleDeleteFavorite(favorite.placeId)}
                                        className="delete-favorite-btn"
                                    >
                                        삭제
                                    </button>
                                </div>
                                <div className="favorite-content">
                                    <div className="favorite-info">
                                        <FaStar color="#ffd700" size={16} />
                                        <span className="favorite-type">
                                            {favorite.typeId === 12 ? '관광지' : '축제'}
                                        </span>
                                    </div>
                                    <p className="favorite-address">{favorite.placeAddress}</p>
                                </div>
                            </div>
                        ))
                    )}
                </div>
            </div>
        );
    };
    
    export default MyFavoritesList;