From b14c518e37f8b1d2e16bfaa0e954768c2a6f6811 Mon Sep 17 00:00:00 2001 From: llmojoll Date: Thu, 24 Jul 2025 14:43:53 +0900 Subject: [PATCH 01/14] =?UTF-8?q?Feat=20:=20=EB=AA=A8=EB=8B=AC=EC=B0=BD?= =?UTF-8?q?=EB=A7=8C=EB=9D=84=EC=9B=8C=EB=91=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Modal/DeleteModal.tsx | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/components/Modal/DeleteModal.tsx diff --git a/src/components/Modal/DeleteModal.tsx b/src/components/Modal/DeleteModal.tsx new file mode 100644 index 0000000..69b9491 --- /dev/null +++ b/src/components/Modal/DeleteModal.tsx @@ -0,0 +1,9 @@ +import BasicModal from '../common/Modal/BasicModal'; + +export default function DeleteModal() { + return ( +
+ +
+ ); +} From 42632fb0c67b8d715ca36a973dfce641a470376a Mon Sep 17 00:00:00 2001 From: llmojoll Date: Mon, 28 Jul 2025 17:40:42 +0900 Subject: [PATCH 02/14] Chore --- src/components/Modal/DeleteModal/DeleteModal.tsx | 9 +++++++++ src/pages/index.tsx | 2 ++ 2 files changed, 11 insertions(+) create mode 100644 src/components/Modal/DeleteModal/DeleteModal.tsx diff --git a/src/components/Modal/DeleteModal/DeleteModal.tsx b/src/components/Modal/DeleteModal/DeleteModal.tsx new file mode 100644 index 0000000..b1cbfbd --- /dev/null +++ b/src/components/Modal/DeleteModal/DeleteModal.tsx @@ -0,0 +1,9 @@ +import BasicModal from '@/components/common/Modal/BasicModal'; + +export default function DeleteModal() { + return ( +
+ +
+ ); +} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 40e083f..bc0fce8 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -2,11 +2,13 @@ import Link from 'next/link'; import { ContentSection } from '@/components/home/ContentSection'; import { HeroSection } from '@/components/home/HeroSection'; +import DeleteModal from '@/components/Modal/DeleteModal/DeleteModal'; import { Button } from '@/components/ui/button'; export default function Home() { return (
+
From d98837bb6d8bdacdce1067f7b77c0f4b8e556f25 Mon Sep 17 00:00:00 2001 From: llmojoll Date: Mon, 28 Jul 2025 18:38:11 +0900 Subject: [PATCH 03/14] =?UTF-8?q?Feat=20:=20=EC=99=80=EC=9D=B8=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=ED=95=98=EA=B8=B0=20=EB=AA=A8=EB=8B=AC=20api=EC=97=B0?= =?UTF-8?q?=EA=B2=B0=20=EB=B0=8F=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=99=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/delete.ts | 9 +++ src/components/Modal/DeleteModal.tsx | 9 --- .../Modal/DeleteModal/DeleteModal.tsx | 57 ++++++++++++++++++- src/pages/index.tsx | 2 +- 4 files changed, 64 insertions(+), 13 deletions(-) create mode 100644 src/api/delete.ts delete mode 100644 src/components/Modal/DeleteModal.tsx diff --git a/src/api/delete.ts b/src/api/delete.ts new file mode 100644 index 0000000..6f40693 --- /dev/null +++ b/src/api/delete.ts @@ -0,0 +1,9 @@ +import apiClient from '@/api/apiClient'; + +export const deleteWine = async (wineId: number) => { + return apiClient.delete(`/${process.env.NEXT_PUBLIC_TEAM}/wines/${wineId}`); +}; + +export const deletereview = async (reviewId: number) => { + return apiClient.delete(`/${process.env.NEXT_PUBLIC_TEAM}/reviews/${reviewId}`); +}; diff --git a/src/components/Modal/DeleteModal.tsx b/src/components/Modal/DeleteModal.tsx deleted file mode 100644 index 69b9491..0000000 --- a/src/components/Modal/DeleteModal.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import BasicModal from '../common/Modal/BasicModal'; - -export default function DeleteModal() { - return ( -
- -
- ); -} diff --git a/src/components/Modal/DeleteModal/DeleteModal.tsx b/src/components/Modal/DeleteModal/DeleteModal.tsx index b1cbfbd..04fbc7b 100644 --- a/src/components/Modal/DeleteModal/DeleteModal.tsx +++ b/src/components/Modal/DeleteModal/DeleteModal.tsx @@ -1,9 +1,60 @@ +import { useState } from 'react'; + +import { deleteWine } from '@/api/delete'; import BasicModal from '@/components/common/Modal/BasicModal'; +import { Button } from '@/components/ui/button'; + +const DeleteModal = ({ wineId }: { wineId: number }) => { + const [showDeleteModal, setShowDeleteModal] = useState(false); + + const onSubmit = async (wineId: number) => { + try { + await deleteWine(wineId); + setShowDeleteModal(false); + } catch (error) { + console.log('삭제실패 : ', error); + } + }; -export default function DeleteModal() { return (
- + + setShowDeleteModal(isOpen)} + showCloseButton={false} + buttons={ +
+ + +
+ } + > + + 정말로 삭제하시겠습니까? + +
); -} +}; +export default DeleteModal; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index bc0fce8..0b01502 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -8,7 +8,7 @@ import { Button } from '@/components/ui/button'; export default function Home() { return (
- +
From 83983fa5213554e1debf96f7b722f91031c27d69 Mon Sep 17 00:00:00 2001 From: llmojoll Date: Mon, 28 Jul 2025 21:14:14 +0900 Subject: [PATCH 04/14] =?UTF-8?q?Feat=20:=20Delete=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EC=9E=AC=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EA=B2=8C=EB=81=94=20=EA=B5=AC=ED=98=84=20,=20=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=EC=82=AD=EC=A0=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/delete.ts | 2 +- .../Modal/DeleteModal/DeleteModal.tsx | 25 ++++++++++++++----- src/pages/index.tsx | 3 ++- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/api/delete.ts b/src/api/delete.ts index 6f40693..f6d3574 100644 --- a/src/api/delete.ts +++ b/src/api/delete.ts @@ -4,6 +4,6 @@ export const deleteWine = async (wineId: number) => { return apiClient.delete(`/${process.env.NEXT_PUBLIC_TEAM}/wines/${wineId}`); }; -export const deletereview = async (reviewId: number) => { +export const deleteReview = async (reviewId: number) => { return apiClient.delete(`/${process.env.NEXT_PUBLIC_TEAM}/reviews/${reviewId}`); }; diff --git a/src/components/Modal/DeleteModal/DeleteModal.tsx b/src/components/Modal/DeleteModal/DeleteModal.tsx index 04fbc7b..085be1d 100644 --- a/src/components/Modal/DeleteModal/DeleteModal.tsx +++ b/src/components/Modal/DeleteModal/DeleteModal.tsx @@ -1,15 +1,28 @@ -import { useState } from 'react'; +import React, { useState } from 'react'; import { deleteWine } from '@/api/delete'; +import { deleteReview } from '@/api/delete'; import BasicModal from '@/components/common/Modal/BasicModal'; import { Button } from '@/components/ui/button'; -const DeleteModal = ({ wineId }: { wineId: number }) => { +interface DeleteModalProps { + type: 'wine' | 'review'; + id: number; + trigger: React.ReactNode; +} + +const DeleteModal = ({ type, id, trigger }: DeleteModalProps) => { const [showDeleteModal, setShowDeleteModal] = useState(false); - const onSubmit = async (wineId: number) => { + const handleDelete = async () => { try { - await deleteWine(wineId); + if (type === 'wine') { + await deleteWine(id); + console.log('와인 삭제 성공'); + } else if (type === 'review') { + await deleteReview(id); + console.log('리뷰 삭제 성공'); + } setShowDeleteModal(false); } catch (error) { console.log('삭제실패 : ', error); @@ -18,7 +31,7 @@ const DeleteModal = ({ wineId }: { wineId: number }) => { return (
- + setShowDeleteModal(true)}>{trigger} { 취소 } /> + 리뷰삭제} />
From 68ff87043003b75fb6b1cffeaab8a11ee97b5b01 Mon Sep 17 00:00:00 2001 From: llmojoll Date: Mon, 28 Jul 2025 21:16:32 +0900 Subject: [PATCH 05/14] =?UTF-8?q?Refactor=20:=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EC=BD=94=EB=93=9C=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/index.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 288f008..40e083f 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -2,14 +2,11 @@ import Link from 'next/link'; import { ContentSection } from '@/components/home/ContentSection'; import { HeroSection } from '@/components/home/HeroSection'; -import DeleteModal from '@/components/Modal/DeleteModal/DeleteModal'; import { Button } from '@/components/ui/button'; export default function Home() { return (
- 와인삭제} /> - 리뷰삭제} />
From 481b9bda4218e3edad37a5d3b9426413e15aec81 Mon Sep 17 00:00:00 2001 From: llmojoll Date: Tue, 29 Jul 2025 15:41:43 +0900 Subject: [PATCH 06/14] =?UTF-8?q?Refactor=20:=20react-query=20Mutation=20?= =?UTF-8?q?=EB=B0=A9=EC=8B=9D=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/delete.ts | 19 ++++-- .../Modal/DeleteModal/DeleteModal.tsx | 64 +++++++++++++++---- 2 files changed, 65 insertions(+), 18 deletions(-) diff --git a/src/api/delete.ts b/src/api/delete.ts index f6d3574..63512ee 100644 --- a/src/api/delete.ts +++ b/src/api/delete.ts @@ -1,9 +1,20 @@ import apiClient from '@/api/apiClient'; -export const deleteWine = async (wineId: number) => { - return apiClient.delete(`/${process.env.NEXT_PUBLIC_TEAM}/wines/${wineId}`); +export interface DeleteResponse { + success: boolean; + message?: string; +} + +export const deleteWine: (wineId: number) => Promise = async (wineId) => { + const response = await apiClient.delete( + `/${process.env.NEXT_PUBLIC_TEAM}/wines/${wineId}`, + ); + return response.data; }; -export const deleteReview = async (reviewId: number) => { - return apiClient.delete(`/${process.env.NEXT_PUBLIC_TEAM}/reviews/${reviewId}`); +export const deleteReview = async (reviewId: number): Promise => { + const response = await apiClient.delete( + `/${process.env.NEXT_PUBLIC_TEAM}/reviews/${reviewId}`, + ); + return response.data; }; diff --git a/src/components/Modal/DeleteModal/DeleteModal.tsx b/src/components/Modal/DeleteModal/DeleteModal.tsx index 085be1d..cedce65 100644 --- a/src/components/Modal/DeleteModal/DeleteModal.tsx +++ b/src/components/Modal/DeleteModal/DeleteModal.tsx @@ -1,7 +1,9 @@ import React, { useState } from 'react'; -import { deleteWine } from '@/api/delete'; -import { deleteReview } from '@/api/delete'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { AxiosError } from 'axios'; + +import { deleteReview, deleteWine, DeleteResponse } from '@/api/delete'; import BasicModal from '@/components/common/Modal/BasicModal'; import { Button } from '@/components/ui/button'; @@ -13,22 +15,56 @@ interface DeleteModalProps { const DeleteModal = ({ type, id, trigger }: DeleteModalProps) => { const [showDeleteModal, setShowDeleteModal] = useState(false); + const queryClient = useQueryClient(); + + const deleteWineMutation = useMutation({ + mutationFn: (id) => deleteWine(id), + }); + const deleteReviewMutation = useMutation({ + mutationFn: (id) => deleteReview(id), + }); - const handleDelete = async () => { - try { - if (type === 'wine') { - await deleteWine(id); - console.log('와인 삭제 성공'); - } else if (type === 'review') { - await deleteReview(id); - console.log('리뷰 삭제 성공'); - } - setShowDeleteModal(false); - } catch (error) { - console.log('삭제실패 : ', error); + const handleDelete = () => { + if (type === 'wine') { + deleteWineMutation.mutate(id, { + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['wines'] }); //삭제후 관련데이터 바로 갱신 + console.log('와인 삭제 성공'); + setShowDeleteModal(false); + }, + onError: (error) => { + console.error('와인 삭제 실패', error); + }, + }); + } else if (type === 'review') { + deleteReviewMutation.mutate(id, { + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['reviews'] }); + console.log('리뷰 삭제 성공'); + setShowDeleteModal(false); + }, + onError: (error) => { + console.error('리뷰 삭제 실패', error); + }, + }); } }; + // const handleDelete = async () => { + // try { + // if (type === 'wine') { + // await deleteWine(id); + // console.log('와인 삭제 성공'); + // } else if (type === 'review') { + // await deleteReview(id); + // console.log('리뷰 삭제 성공'); + // } + // setShowDeleteModal(false); + // } catch (error) { + // console.log('삭제실패 : ', error); + // } + // }; + return (
setShowDeleteModal(true)}>{trigger} From 1e00e68600434744d956bd50f897a5fb529b2f65 Mon Sep 17 00:00:00 2001 From: llmojoll Date: Tue, 29 Jul 2025 19:31:22 +0900 Subject: [PATCH 07/14] =?UTF-8?q?Fix=20:=20Star.svg=20=EC=95=84=EC=9D=B4?= =?UTF-8?q?=EC=BD=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/icons/Star.svg | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 src/assets/icons/Star.svg diff --git a/src/assets/icons/Star.svg b/src/assets/icons/Star.svg deleted file mode 100644 index a109d75..0000000 --- a/src/assets/icons/Star.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - From db50d1fd93b373a738d60d5d8fdc882ea99b63ca Mon Sep 17 00:00:00 2001 From: llmojoll Date: Tue, 29 Jul 2025 20:37:32 +0900 Subject: [PATCH 08/14] Chore : star.svg >> Star.svg --- src/assets/icons/{star.svg => Star.svg} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/assets/icons/{star.svg => Star.svg} (100%) diff --git a/src/assets/icons/star.svg b/src/assets/icons/Star.svg similarity index 100% rename from src/assets/icons/star.svg rename to src/assets/icons/Star.svg From fca2ebb72587f8dc01db6ba73d7e95991fe0dfcb Mon Sep 17 00:00:00 2001 From: llmojoll Date: Tue, 29 Jul 2025 20:46:50 +0900 Subject: [PATCH 09/14] Chore : Star >> star --- src/assets/icons/{Star.svg => star.svg} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/assets/icons/{Star.svg => star.svg} (100%) diff --git a/src/assets/icons/Star.svg b/src/assets/icons/star.svg similarity index 100% rename from src/assets/icons/Star.svg rename to src/assets/icons/star.svg From ada694e7b5e66a260d151fba7479e603e3e24769 Mon Sep 17 00:00:00 2001 From: llmojoll Date: Tue, 29 Jul 2025 21:08:45 +0900 Subject: [PATCH 10/14] Chore --- .../Modal/DeleteModal/DeleteModal.tsx | 189 ++++++++---------- 1 file changed, 87 insertions(+), 102 deletions(-) diff --git a/src/components/Modal/DeleteModal/DeleteModal.tsx b/src/components/Modal/DeleteModal/DeleteModal.tsx index cedce65..1ce8830 100644 --- a/src/components/Modal/DeleteModal/DeleteModal.tsx +++ b/src/components/Modal/DeleteModal/DeleteModal.tsx @@ -1,109 +1,94 @@ -import React, { useState } from 'react'; +// import React, { useState } from 'react'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { AxiosError } from 'axios'; +// import { useMutation, useQueryClient } from '@tanstack/react-query'; +// import { AxiosError } from 'axios'; -import { deleteReview, deleteWine, DeleteResponse } from '@/api/delete'; -import BasicModal from '@/components/common/Modal/BasicModal'; -import { Button } from '@/components/ui/button'; +// import { deleteReview, deleteWine, DeleteResponse } from '@/api/delete'; +// import BasicModal from '@/components/common/Modal/BasicModal'; +// import { Button } from '@/components/ui/button'; -interface DeleteModalProps { - type: 'wine' | 'review'; - id: number; - trigger: React.ReactNode; -} +// interface DeleteModalProps { +// type: 'wine' | 'review'; +// id: number; +// showDeleteModal: boolean; +// setShowDeleteModal: (state: boolean) => void; +// } -const DeleteModal = ({ type, id, trigger }: DeleteModalProps) => { - const [showDeleteModal, setShowDeleteModal] = useState(false); - const queryClient = useQueryClient(); +// const DeleteModal = ({ type, id, showDeleteModal, setShowDeleteModal }: DeleteModalProps) => { +// // const [showDeleteModal, setShowDeleteModal] = useState(false); +// const queryClient = useQueryClient(); - const deleteWineMutation = useMutation({ - mutationFn: (id) => deleteWine(id), - }); - const deleteReviewMutation = useMutation({ - mutationFn: (id) => deleteReview(id), - }); +// const deleteWineMutation = useMutation({ +// mutationFn: (id) => deleteWine(id), +// }); +// const deleteReviewMutation = useMutation({ +// mutationFn: (id) => deleteReview(id), +// }); - const handleDelete = () => { - if (type === 'wine') { - deleteWineMutation.mutate(id, { - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ['wines'] }); //삭제후 관련데이터 바로 갱신 - console.log('와인 삭제 성공'); - setShowDeleteModal(false); - }, - onError: (error) => { - console.error('와인 삭제 실패', error); - }, - }); - } else if (type === 'review') { - deleteReviewMutation.mutate(id, { - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ['reviews'] }); - console.log('리뷰 삭제 성공'); - setShowDeleteModal(false); - }, - onError: (error) => { - console.error('리뷰 삭제 실패', error); - }, - }); - } - }; +// const handleDelete = () => { +// if (type === 'wine') { +// deleteWineMutation.mutate(id, { +// onSuccess: () => { +// queryClient.invalidateQueries({ queryKey: ['wines'] }); //삭제후 관련데이터 바로 갱신 +// console.log('와인 삭제 성공'); +// setShowDeleteModal(false); +// }, +// onError: (error) => { +// console.error('와인 삭제 실패', error); +// }, +// }); +// } else if (type === 'review') { +// deleteReviewMutation.mutate(id, { +// onSuccess: () => { +// queryClient.invalidateQueries({ queryKey: ['reviews'] }); +// console.log('리뷰 삭제 성공'); +// setShowDeleteModal(false); +// }, +// onError: (error) => { +// console.error('리뷰 삭제 실패', error); +// }, +// }); +// } +// }; - // const handleDelete = async () => { - // try { - // if (type === 'wine') { - // await deleteWine(id); - // console.log('와인 삭제 성공'); - // } else if (type === 'review') { - // await deleteReview(id); - // console.log('리뷰 삭제 성공'); - // } - // setShowDeleteModal(false); - // } catch (error) { - // console.log('삭제실패 : ', error); - // } - // }; - - return ( -
- setShowDeleteModal(true)}>{trigger} - setShowDeleteModal(isOpen)} - showCloseButton={false} - buttons={ -
- - -
- } - > - - 정말로 삭제하시겠습니까? - -
-
- ); -}; -export default DeleteModal; +// return ( +//
+// setShowDeleteModal(isOpen)} +// showCloseButton={false} +// buttons={ +//
+// +// +//
+// } +// > +// +// 정말로 삭제하시겠습니까? +// +//
+//
+// ); +// }; +// export default DeleteModal; From f6ff42c8efa739fb5ec075493f2b241fd7ba95cf Mon Sep 17 00:00:00 2001 From: llmojoll Date: Tue, 29 Jul 2025 23:33:36 +0900 Subject: [PATCH 11/14] Chore : Star >> star --- src/components/common/winelist/WineCard.tsx | 2 +- src/components/common/winelist/WineListCard.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/common/winelist/WineCard.tsx b/src/components/common/winelist/WineCard.tsx index 962dc6b..01b28ac 100644 --- a/src/components/common/winelist/WineCard.tsx +++ b/src/components/common/winelist/WineCard.tsx @@ -2,7 +2,7 @@ import React from 'react'; import Link from 'next/link'; -import StarIcon from '@/assets/icons/Star.svg'; +import StarIcon from '@/assets/icons/star.svg'; import { ImageCard } from '@/components/common/card/ImageCard'; import { cn } from '@/lib/utils'; diff --git a/src/components/common/winelist/WineListCard.tsx b/src/components/common/winelist/WineListCard.tsx index 1885618..6d3fa36 100644 --- a/src/components/common/winelist/WineListCard.tsx +++ b/src/components/common/winelist/WineListCard.tsx @@ -1,7 +1,7 @@ import Link from 'next/link'; import NextIcon from '@/assets/icons/Next.svg'; -import StarIcon from '@/assets/icons/Star.svg'; +import StarIcon from '@/assets/icons/star.svg'; import { ImageCard } from '@/components/common/card/ImageCard'; import { Button } from '@/components/ui/button'; import { cn } from '@/lib/utils'; From 4ac769b9c9a7c0eb7f13163c59e55df45e11e5c9 Mon Sep 17 00:00:00 2001 From: llmojoll Date: Tue, 29 Jul 2025 23:49:11 +0900 Subject: [PATCH 12/14] =?UTF-8?q?Chore=20:=20star=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/icons/star.svg | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 src/assets/icons/star.svg diff --git a/src/assets/icons/star.svg b/src/assets/icons/star.svg deleted file mode 100644 index 81950d8..0000000 --- a/src/assets/icons/star.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - From 5ee380e1b99bf6d078fd1cae79aa9fc3fa611050 Mon Sep 17 00:00:00 2001 From: llmojoll Date: Tue, 29 Jul 2025 23:50:03 +0900 Subject: [PATCH 13/14] =?UTF-8?q?Chore=20:=20star=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/icons/star.svg | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/assets/icons/star.svg diff --git a/src/assets/icons/star.svg b/src/assets/icons/star.svg new file mode 100644 index 0000000..81950d8 --- /dev/null +++ b/src/assets/icons/star.svg @@ -0,0 +1,3 @@ + + + From cfe761d46e1656cd240e91bff4f168e28921c27d Mon Sep 17 00:00:00 2001 From: llmojoll Date: Wed, 30 Jul 2025 00:06:59 +0900 Subject: [PATCH 14/14] =?UTF-8?q?Refactor=20:=20=EB=AA=A8=EB=8B=AC=20of=20?= =?UTF-8?q?off=20=EC=83=81=ED=83=9C=EA=B0=92=20props=EB=A1=9C=20=EB=B0=9B?= =?UTF-8?q?=EB=8F=84=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Modal/DeleteModal/DeleteModal.tsx | 173 +++++++++--------- 1 file changed, 85 insertions(+), 88 deletions(-) diff --git a/src/components/Modal/DeleteModal/DeleteModal.tsx b/src/components/Modal/DeleteModal/DeleteModal.tsx index 1ce8830..ea6ff8b 100644 --- a/src/components/Modal/DeleteModal/DeleteModal.tsx +++ b/src/components/Modal/DeleteModal/DeleteModal.tsx @@ -1,94 +1,91 @@ -// import React, { useState } from 'react'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { AxiosError } from 'axios'; -// import { useMutation, useQueryClient } from '@tanstack/react-query'; -// import { AxiosError } from 'axios'; +import { deleteReview, deleteWine, DeleteResponse } from '@/api/delete'; +import BasicModal from '@/components/common/Modal/BasicModal'; +import { Button } from '@/components/ui/button'; -// import { deleteReview, deleteWine, DeleteResponse } from '@/api/delete'; -// import BasicModal from '@/components/common/Modal/BasicModal'; -// import { Button } from '@/components/ui/button'; +interface DeleteModalProps { + type: 'wine' | 'review'; + id: number; + showDeleteModal: boolean; + setShowDeleteModal: (state: boolean) => void; +} -// interface DeleteModalProps { -// type: 'wine' | 'review'; -// id: number; -// showDeleteModal: boolean; -// setShowDeleteModal: (state: boolean) => void; -// } +const DeleteModal = ({ type, id, showDeleteModal, setShowDeleteModal }: DeleteModalProps) => { + const queryClient = useQueryClient(); -// const DeleteModal = ({ type, id, showDeleteModal, setShowDeleteModal }: DeleteModalProps) => { -// // const [showDeleteModal, setShowDeleteModal] = useState(false); -// const queryClient = useQueryClient(); + const deleteWineMutation = useMutation({ + mutationFn: (id) => deleteWine(id), + }); + const deleteReviewMutation = useMutation({ + mutationFn: (id) => deleteReview(id), + }); -// const deleteWineMutation = useMutation({ -// mutationFn: (id) => deleteWine(id), -// }); -// const deleteReviewMutation = useMutation({ -// mutationFn: (id) => deleteReview(id), -// }); + const handleDelete = () => { + if (type === 'wine') { + deleteWineMutation.mutate(id, { + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['wines'] }); //삭제후 관련데이터 바로 갱신 + console.log('와인 삭제 성공'); + setShowDeleteModal(false); + }, + onError: (error) => { + console.error('와인 삭제 실패', error); + }, + }); + } else if (type === 'review') { + deleteReviewMutation.mutate(id, { + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['reviews'] }); + console.log('리뷰 삭제 성공'); + setShowDeleteModal(false); + }, + onError: (error) => { + console.error('리뷰 삭제 실패', error); + }, + }); + } + }; -// const handleDelete = () => { -// if (type === 'wine') { -// deleteWineMutation.mutate(id, { -// onSuccess: () => { -// queryClient.invalidateQueries({ queryKey: ['wines'] }); //삭제후 관련데이터 바로 갱신 -// console.log('와인 삭제 성공'); -// setShowDeleteModal(false); -// }, -// onError: (error) => { -// console.error('와인 삭제 실패', error); -// }, -// }); -// } else if (type === 'review') { -// deleteReviewMutation.mutate(id, { -// onSuccess: () => { -// queryClient.invalidateQueries({ queryKey: ['reviews'] }); -// console.log('리뷰 삭제 성공'); -// setShowDeleteModal(false); -// }, -// onError: (error) => { -// console.error('리뷰 삭제 실패', error); -// }, -// }); -// } -// }; - -// return ( -//
-// setShowDeleteModal(isOpen)} -// showCloseButton={false} -// buttons={ -//
-// -// -//
-// } -// > -// -// 정말로 삭제하시겠습니까? -// -//
-//
-// ); -// }; -// export default DeleteModal; + return ( +
+ setShowDeleteModal(isOpen)} + showCloseButton={false} + buttons={ +
+ + +
+ } + > + + 정말로 삭제하시겠습니까? + +
+
+ ); +}; +export default DeleteModal;