diff --git a/package-lock.json b/package-lock.json index 757ea151..aa176174 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "frolog", "version": "1.0.0", "dependencies": { - "@frolog/frolog-api": "^1.3.1", + "@frolog/frolog-api": "^1.4.0-dev", "@sentry/nextjs": "^8.35.0", "@svgr/webpack": "^8.1.0", "@tanstack/react-query": "^5.40.1", @@ -2552,9 +2552,9 @@ "dev": true }, "node_modules/@frolog/frolog-api": { - "version": "1.3.1", - "resolved": "http://dev.frolog.kr/verdaccio/@frolog/frolog-api/-/frolog-api-1.3.1.tgz", - "integrity": "sha512-Mvo2LzvhBXtJJKxMSkpl1+Sm6gBqceGI4/3+zW4nThy5z16qe/a5WEsAbzhsSbJxVBm8d6djpyMByV8LPXJOYw==", + "version": "1.4.0-dev", + "resolved": "http://dev.frolog.kr/verdaccio/@frolog/frolog-api/-/frolog-api-1.4.0-dev.tgz", + "integrity": "sha512-uwmlrDPNyADic8zlxdsXBX88y5ZRuuUZtAl1ve3QOxmIlOUqf/g9YL6BbochIayNwhiql46fNrZaNV3qro0OJQ==", "dependencies": { "ajv": "^8.16.0" }, diff --git a/package.json b/package.json index 1e70d932..d95780f7 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "prepare": "husky" }, "dependencies": { - "@frolog/frolog-api": "^1.3.1", + "@frolog/frolog-api": "^1.4.0-dev", "@sentry/nextjs": "^8.35.0", "@svgr/webpack": "^8.1.0", "@tanstack/react-query": "^5.40.1", diff --git a/src/components/Header/ReviewMemoHeader.tsx b/src/components/Header/ReviewMemoHeader.tsx index 9c823fba..dcd9d2d3 100644 --- a/src/components/Header/ReviewMemoHeader.tsx +++ b/src/components/Header/ReviewMemoHeader.tsx @@ -8,6 +8,8 @@ import DeleteWellItem from '@/features/Well/components/DeleteWellItem'; import TabMenu from '@/components/Tab/TabMenu'; import { MEMO_REVIEW_TABS } from '@/constants/tabs'; import HeaderWrapper from '@/components/Wrapper/HeaderWrapper'; +import useNavigateStore from '@/store/navigateStore'; +import DeleteFeedItem from '@/features/Profile/components/Feed/DeleteFeedItem'; interface Props { userId: string; @@ -18,6 +20,8 @@ interface Props { function ReviewMemoHeader({ userId, wellId, bookId, category }: Props) { const rootUserId = useUserId(); + const navigateState = useNavigateStore((state) => state.navigateState); + const isFromProfile = navigateState?.from === 'profile' || false; useScroll({ categoryColor: CATEGORY[category].bg, @@ -30,9 +34,12 @@ function ReviewMemoHeader({ userId, wellId, bookId, category }: Props) {
- {userId === rootUserId && ( - - )} + {userId === rootUserId && + (isFromProfile ? ( + + ) : ( + + ))}
diff --git a/src/data/ui/bottomSheet.tsx b/src/data/ui/bottomSheet.tsx index 1b6edf3d..5ea513c4 100644 --- a/src/data/ui/bottomSheet.tsx +++ b/src/data/ui/bottomSheet.tsx @@ -222,4 +222,18 @@ export const sheetData: { extraButtonText: '취소', description: () => <>포인트가 충분하면 캐릭터가 보여요, }, + delete_profile_feed: { + getTitle: () => ( + <> + 이 책과 관련된 기록을 +
전부 삭제할까요? + + ), + type: 'error', + buttonText: '네, 전부 삭제할게요', + extraButtonText: '아니요, 유지할게요', + description: () => ( + <>이 책과 관련된 모든 기록이 우물과 프로필에서 지워져요. + ), + }, }; diff --git a/src/features/Join/hooks/useJoin.ts b/src/features/Join/hooks/useJoin.ts index 06a1361c..58434811 100644 --- a/src/features/Join/hooks/useJoin.ts +++ b/src/features/Join/hooks/useJoin.ts @@ -84,7 +84,8 @@ export const useJoin = (getValues: () => JoinForm) => { STORAGE_KEY.tempAccountKey, JSON.stringify({ email: formData.email, password: formData.password }) ); - handleLogin(formData.username!); + // todo: 회원 가입후 로그인 처리 + handleLogin('dev test'); }, }); diff --git a/src/features/Profile/api/feed.api.ts b/src/features/Profile/api/feed.api.ts index 1fa91c80..ac7bf3a2 100644 --- a/src/features/Profile/api/feed.api.ts +++ b/src/features/Profile/api/feed.api.ts @@ -1,6 +1,6 @@ import { baseOptions } from '@/api/options'; import { DEFAULT_LIMIT } from '@/constants/api'; -import { GetProfileFeed } from '@frolog/frolog-api'; +import { GetProfileFeed, DeleteUserBookContent } from '@frolog/frolog-api'; import * as Sentry from '@sentry/nextjs'; const getUserProfileFeed = new GetProfileFeed(baseOptions); @@ -24,3 +24,17 @@ export const getProfileFeed = async (id: string, page: number) => { }; } }; + +export const deleteProfileFeedItem = async (id: string, isbn: string) => { + try { + const response = await new DeleteUserBookContent(baseOptions).fetch({ + id, + isbn, + }); + + return response; + } catch (error) { + Sentry.captureException(error); + return null; + } +}; diff --git a/src/features/Profile/components/Feed/DeleteFeedItem.tsx b/src/features/Profile/components/Feed/DeleteFeedItem.tsx new file mode 100644 index 00000000..bc0c5b59 --- /dev/null +++ b/src/features/Profile/components/Feed/DeleteFeedItem.tsx @@ -0,0 +1,23 @@ +import { bottomSheet } from '@/modules/BottomSheet'; +import { MoreDotButton } from 'public/icons'; +import React from 'react'; +import { useDeleteProfileFeedItem } from '../../hooks/useDeleteProfileFeedItem'; + +function DeleteFeedItem() { + const { deleteProfileFeedItemMutate } = useDeleteProfileFeedItem(); + return ( + + ); +} + +export default DeleteFeedItem; diff --git a/src/features/Profile/components/Feed/FeedItemDetail.tsx b/src/features/Profile/components/Feed/FeedItemDetail.tsx index 7a769c12..66af705f 100644 --- a/src/features/Profile/components/Feed/FeedItemDetail.tsx +++ b/src/features/Profile/components/Feed/FeedItemDetail.tsx @@ -16,7 +16,7 @@ function FeedItemDetail({ title, count, category, path }: Props) {