Skip to content

Commit

Permalink
리뷰 관리 기능 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
aha-rin committed Feb 3, 2025
1 parent 9a23430 commit 75f1734
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 28 deletions.
27 changes: 22 additions & 5 deletions src/components/common/ReviewForm.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,16 @@ import StarRating from "./StarRating";
import { useReviewInfo } from "../../contexts/useReviewInfo";

const ReviewForm = ({ onClose, initialData }) => {
const isEditing=initialData;
const [reviewId,setReviewId]=useState(Date.now());
const [starPoint, setStarPoint] = useState(0);
const [content, setContent] = useState("");
const [reviewCount,setReviewCount]=useState(1);
const [reviewDate,setReviewDate]=useState(new Date());
const [selectedStore, setSelectedStore] = useState("");
const [selectedAlba, setSelectedAlba] = useState("");
const [selectedTag, setSelectedTag] = useState([]);
const reviewTag = useState([
const [reviewTag] = useState([
"일을 잘해요",
"시간 엄수를 잘해요",
"일이 서툴러요",
Expand All @@ -33,6 +35,7 @@ const ReviewForm = ({ onClose, initialData }) => {

useEffect(() => {
if (initialData) {
setReviewId(initialData.id||Date.now());
setStarPoint(initialData.starPoint || 0);
setContent(initialData.content || "");
setReviewCount(initialData.reviewCount||1);
Expand All @@ -45,7 +48,7 @@ const ReviewForm = ({ onClose, initialData }) => {

const handleSubmit = () => {
const newReview = {
id: Date.now(),
id: reviewId,
storeID: selectedStore,
albaID: selectedAlba,
starPoint: starPoint,
Expand All @@ -55,8 +58,20 @@ const ReviewForm = ({ onClose, initialData }) => {
tags: selectedTag,
};

if (!selectedStore || !selectedAlba || !starPoint || !content) {
let missingFields = [];

if (!selectedStore) missingFields.push("가게");
if (!selectedAlba) missingFields.push("알바생");
if (!starPoint) missingFields.push("평점");
if (!content) missingFields.push("한줄평");

alert(`${missingFields.join(", ")}을(를) 입력해 주세요.`);
return; // 입력 받지 않은 항목에 대해 alert 메시지
}

if (initialData) {
editReview(newReview); // 수정 시 editReview 사용(아직 수정 기능 미구현)
editReview(newReview);
} else {
addReview(newReview);
}
Expand Down Expand Up @@ -88,7 +103,9 @@ const ReviewForm = ({ onClose, initialData }) => {
<FieldContainer>
<Field>
<Label>가게</Label>
<Select value={selectedStore} onChange={handleStoreChange}>
<Select value={selectedStore}
onChange={handleStoreChange}
disabled={isEditing}>
<option value="" disabled>
선택하세요
</option>
Expand All @@ -105,7 +122,7 @@ const ReviewForm = ({ onClose, initialData }) => {
<Select
value={selectedAlba}
onChange={(e) => setSelectedAlba(e.target.value)}
disabled={!selectedStore}
disabled={!selectedStore||isEditing}
>
<option value="" disabled>
선택하세요
Expand Down
60 changes: 42 additions & 18 deletions src/contexts/ReviewInfoContext.jsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
/*eslint-disable*/
import React, { createContext, useState } from "react";

const ReviewInfoContext = createContext();
Expand Down Expand Up @@ -169,6 +168,7 @@ export const ReviewProvider = ({ children }) => {
];



const [reviews, setReviews] = useState(dummyReviews); // 리뷰 데이터 상태
const [sortOption, setSortOption] = useState("latest"); // 정렬 옵션
const [searchQuery, setSearchQuery] = useState(""); // 검색어
Expand All @@ -180,17 +180,51 @@ export const ReviewProvider = ({ children }) => {

// 리뷰 추가
const addReview = (newReview) => {
setReviews((prevReviews) => [newReview, ...prevReviews]);
updateReviewCount(newReview.albaID);
};

setReviews((prevReviews) => {
// 알바 ID가 이미 존재하는지 확인
const albaExists = prevReviews.some((review) => review.albaID === newReview.albaID);

if (albaExists) {
// 기존 알바ID가 있으면 그 알바ID의 reviewCount만 +1 증가
const updatedReviews = prevReviews.map((review) => {
if (review.albaID === newReview.albaID) {
// 해당 albaID의 reviewCount만 증가
return {
...review,
reviewCount: review.reviewCount + 1,
};
}
return review;
});

// 새 리뷰 추가
updatedReviews.push({
...newReview,
reviewCount: updatedReviews.find((review) => review.albaID === newReview.albaID).reviewCount, // 해당 albaID의 reviewCount 계승
});

return updatedReviews;
} else {
// 알바ID가 처음 작성되는 경우
return [
...prevReviews,
{
...newReview,
reviewCount: 1, // 처음 작성되는 리뷰는 reviewCount 1로 설정
},
];
}
});
};

// 리뷰 수정
const editReview = (updatedReview) => {
setReviews((prevReviews) =>
prevReviews.map((review) =>
setReviews(prevReviews =>
prevReviews.map(review =>
review.id === updatedReview.id ? updatedReview : review
)
);
return reviews;
};

// 리뷰 삭제
Expand All @@ -199,20 +233,10 @@ export const ReviewProvider = ({ children }) => {
};

// 리뷰 신고(서버 전송 로직 필요)
const reportReview=(reviewId,reportReason)=>{
const reportReview = (reviewId, reportReason) => {
alert(`${reviewId}${reportReason}의 사유로 신고 접수`);
};

// 리뷰 수 업데이트
const updateReviewCount = (albaID) => {
setReviewCounts((prevCounts) => {
return {
...prevCounts,
[albaID]: (prevCounts[albaID] || 0) + 1,
};
});
};

// 필터링 및 정렬된 리뷰 반환
const getFilteredReviews = () => {
return reviews
Expand Down
17 changes: 12 additions & 5 deletions src/pages/AlbaReviewPage.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ const AlbaReviewPage = () => {
const [currentPage, setCurrentPage] = useState(1); // 현재 페이지 번호

// Context에서 상태와 함수 가져오기
const { reviews, addReview, editReview, getFilteredReviews, sortOption, setSortOption, searchQuery, setSearchQuery } = useReviewInfo();

const { reviews, getFilteredReviews, sortOption, setSortOption, searchQuery, setSearchQuery } = useReviewInfo();
const filteredReviews = getFilteredReviews(); // 필터링된 리뷰 데이터
const reviewsPerPage = 15; // 한 페이지에 보여줄 리뷰 수
const totalPages = Math.ceil(filteredReviews.length / reviewsPerPage);
Expand Down Expand Up @@ -107,8 +107,6 @@ const AlbaReviewPage = () => {
<ReviewForm
onClose={closeModal}
initialData={editingReview} // 부모 페이지에서 받은 데이터
addReview={addReview} // 새 리뷰 작성 시 사용하는 함수
editReview={editReview} // 수정할 때 사용하는 함수
/>
</Modal>
)}
Expand Down Expand Up @@ -235,7 +233,11 @@ const PageNumber = styled.button`
border: 1px solid #ddd;
border-radius: 5px;
cursor: pointer;
`;
&:hover {
background-color: #F7B32B;
}
`;

const Modal = styled.div`
position: fixed;
Expand All @@ -259,4 +261,9 @@ const AddReviewButton = styled.button`
color: white;
border-radius: 5px;
margin-left:auto;
cursor:pointer;
&:hover {
background-color: #F7B32B;
}
`;

0 comments on commit 75f1734

Please sign in to comment.