Skip to content

Commit 2d8c084

Browse files
mtm-git1018ahk0413EunbinJung
authored
[chore] 배포용 머지 (#126)
* Feat/recommend list#96 (#102) * [feat] 추천칵테일기능 * [fix]머지전 수정 * [chore] stash머지 * [feat]칵테일 추천리스트 기능 * [fix]알코올도수 props변경 * [chore]포매팅 * [fix] 챗봇 추천 페이지 단계별 일 시 자동 scroll 이슈 (#103) * [feat] 로딩 , fetch 관리 함수 * [style] 레이아웃 수정 * [refactor] scroll 관련 chatlist로 이동 * [feat] input 백그라운드 수정 * [fix] cancelanimation 추가 * Feat/공유하기, 킵 기능#2 (#105) * [feat]공유하기 * [feat]share * [feat]keep추가/해제 * [fix]meta데이터 타입오류수정 * [chore]파일 정리 * [fix]cocktailId 타입변경 * [refactor] 타입 빠진거 추가 * [refactor]타입 추가수정 * [refactor]파라미터id타입수정 * [style]일부 스타일 수정 * [chore]스테이징 빠진 파일 추가 * [docs]keep폴더이동 * [feat] 챗봇 추천페이지 로직 수정 (#107) * [fix] 로딩중일때도 스크롤되도록 수정 * [fix] 말풍선안에서 로딩 -> 원래 data 변화되도록 수정 * [fix] 로딩 수정, botmessage 로직 수정 * [feat] input disabled 로직 추가 * [fix] input disabled 로직 수정 * [fix] 오류 시에도 중복 키값 안받게 * [refactor] 채팅기록 불러오기 hook 분리 * [refactor] selectedOptions hook 분리 * [feat] keep 저장 연결 * Feat/마이페이지 개인화#106 (#109) * [feat] 탭별개인화 * [feat]알림 설정기능 * [feat]알콜도수기능 * [feat]마이페이지 개인화 * [chore]미개발 부분 주석처리 * [chore]미개발 컴포넌트 주석처리 * [feat] 로그인/로그아웃 로직 추가 및 header 수정 (#110) * [refactor] useAuthHooks -> useLogout, useLoginRedirect로 분리 * [feat] 마이페이지에서 로그아웃 시 메인으로 이동 * [feat] 추천페이지 비로그인 유저시 preview 컴포넌트 추가 * [fix] 헤더, 드롭다운 메뉴 알림 버튼 수정(router 연결) * [style] header pc 일때 nav 가운데로, footer에 작은 shadow 추가 * [style] 칵테일 리스트 grid 수정 * [style] 마이페이지 my bar 리스트 정렬 수정 * [style] 알림 위치 변경 * Feat/칵테일 페이지 검색 및 정렬기능#22 (#111) * [feat]칵테일 검색기능 * [feat]칵테일 필터링기능 * [feat]아코디언 박스 * [feat]뒤로가기 필터링 유지 * [feat]뒤로가기 로직 * [chore]merge전 변경사항 커밋 * [chore]머지 후 변경사항 커밋 * [fix]킵컴포넌트 401에러삭제 * [chore]커밋 변경버그 * refactor/마이페이지 알림설정과 닉네임 변경 수정 (#112) * [feat] 탭별개인화 * [feat]알림 설정기능 * [feat]알콜도수기능 * [feat]마이페이지 개인화 * [chore]미개발 부분 주석처리 * [chore]미개발 컴포넌트 주석처리 * [refactor]알림 컨펌기능 * [refactor] 알콜도수 도수 색 변화 * [fix] 칵테일 드롭다운 수정사항 반영 * [style] 알콜도수와 %표시띄움 * Feat/communityscroll#23 (#114) * [feat] 스크롤링구현 * [feat] 주소, api설정 * [feat] 커뮤니티 탭, 필터 패치로직 * [feat] lastLikeCount, lastCommentCount, 추가 * [fix] 코멘트 삭제수정 마이페이지에선 뗄수있게 myPage props 추가 * 옵셔널로 수정 * 오류 수정 * [feat] 자동 로그아웃 처리(4시간) (#115) * [feat] 챗봇 history API 제거 및 새로고침, 창닫기 경고 창 적용 (#117) * [feat] 페이지 벗어날 시 confirm 창 추가 및 noti text 추가, 추천리스트 상세링크 걸기 * [refactor] 필요없는 코드 제거 * [feat] 404페이지 구현 (#119) * [feat] 404페이지 작업 완료 * [fix] 버튼 색 및 router 메인으로 변경 * Feat/칵테일 댓글기능#97 (#120) * [feat]칵테일 댓글 ui * [chore] merge전 커밋 * [chore] 확인용 커밋 * 댓글에러 * 포맷 * 커뮤니티 댓글 수정 * [chore]풀 전용 커밋 * [feat] 칵테일 댓글등록 * [feat]로그인 유저 킵 버튼 * [feat] 나만의 바 라벨링 * [feat]로그인 한 유저 킵버튼 * [feaet] 상세페이지 킵 * [feat]레시피페이지정렬 * [feat] 댓글 클릭시 해당 글로 보내주는 기능 * [feat]댓글 작성 토스트 * [feat]댓글 validation * [feat]댓글 validation * [fix] 댓글, 킵 아이템 비로그인 경고 * [fix] mypage 401에러 대응 --------- Co-authored-by: EunbinJung <[email protected]> * Feat/ 마이페이지 닉네임 수정시 myProfile컴포넌트와 동기화 (#121) * [feat]칵테일 댓글 ui * [chore] merge전 커밋 * [chore] 확인용 커밋 * 댓글에러 * 포맷 * 커뮤니티 댓글 수정 * [chore]풀 전용 커밋 * [feat] 칵테일 댓글등록 * [feat]로그인 유저 킵 버튼 * [feat] 나만의 바 라벨링 * [feat]로그인 한 유저 킵버튼 * [feaet] 상세페이지 킵 * [feat]레시피페이지정렬 * [feat] 댓글 클릭시 해당 글로 보내주는 기능 * [feat]댓글 작성 토스트 * [feat]댓글 validation * [feat]댓글 validation * [fix] 댓글, 킵 아이템 비로그인 경고 * [fix] mypage 401에러 대응 * [feat] 마이페이지 프로필 수정 동기화 * [chore]포매팅 --------- Co-authored-by: EunbinJung <[email protected]> * [feat] 401 응답처리 로직 기능 (#124) * [feat] fetch interceptor 훅 * [fix] format 오류 해결 * Feat/write#19 (#125) * [feat] 글쓰기 기능 * [feat] 포스트 작성 기능 * Feat/communityscroll#23 (#114) * [feat] 스크롤링구현 * [feat] 주소, api설정 * [feat] 커뮤니티 탭, 필터 패치로직 * [feat] lastLikeCount, lastCommentCount, 추가 * [fix] 코멘트 삭제수정 마이페이지에선 뗄수있게 myPage props 추가 * 옵셔널로 수정 * 오류 수정 * [feat] 글쓰기 기능 * 카테고리필수 * [feat] 포스트 무한스크롤 + 글쓰기기능 이미지추가 * [feat] 이미지 스와이퍼 * [feat] 프로필 쑤리 이미지 * [feat] 댓글 누르면 댓글 섹션으로 가기 * [feat] 좋아요기능(아직 좋아요받아오는건 못함 api필요) * [feat] 게시물 수정 * [feat] 글 수정 * [refactor] 코드 조금정리 * [feat] 작성자본인만 글수정삭제 * [feat]글 삭제기능 * [feat] 칵테일태그 * [fix]칵테일, 쉐어 기능 * 수 라우터, 비로그인처리 * 타입 수정 * 타입 수정 * 타입수정 * 타입수정 * 타입수정 * 오류수정 * 오류수정 * 오류수정 * 오류수정 * 오류수정 * 충돌해결 * 오류 수정 * 오류 수정 * 오류 수정 * Feat/write#19 (#127) * [feat] 글쓰기 기능 * [feat] 포스트 작성 기능 * Feat/communityscroll#23 (#114) * [feat] 스크롤링구현 * [feat] 주소, api설정 * [feat] 커뮤니티 탭, 필터 패치로직 * [feat] lastLikeCount, lastCommentCount, 추가 * [fix] 코멘트 삭제수정 마이페이지에선 뗄수있게 myPage props 추가 * 옵셔널로 수정 * 오류 수정 * [feat] 글쓰기 기능 * 카테고리필수 * [feat] 포스트 무한스크롤 + 글쓰기기능 이미지추가 * [feat] 이미지 스와이퍼 * [feat] 프로필 쑤리 이미지 * [feat] 댓글 누르면 댓글 섹션으로 가기 * [feat] 좋아요기능(아직 좋아요받아오는건 못함 api필요) * [feat] 게시물 수정 * [feat] 글 수정 * [refactor] 코드 조금정리 * [feat] 작성자본인만 글수정삭제 * [feat]글 삭제기능 * [feat] 칵테일태그 * [fix]칵테일, 쉐어 기능 * 수 라우터, 비로그인처리 * 타입 수정 * 타입 수정 * 타입수정 * 타입수정 * 타입수정 * 오류수정 * 오류수정 * 오류수정 * 오류수정 * 오류수정 * 충돌해결 * 오류 수정 * 오류 수정 * 오류 수정 * [fix] 이미지 카운트, 10개 제한 * [fix] 글쓰기 placeholder * [fix] 공유 url 수정 * [fix] 프로필배경 지우기 * [fix] 플로팅탭 미디어쿼리 수정 * [fix] 수정 모달 * 댓글실시간반영 시도 * 수정 * [fix] 수정모달 로직 수정 * 수정로직 수정 --------- Co-authored-by: ahk0413 <[email protected]> Co-authored-by: EunbinJ <[email protected]>
1 parent a75d485 commit 2d8c084

File tree

151 files changed

+4616
-1279
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

151 files changed

+4616
-1279
lines changed

next.config.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
import type { NextConfig } from 'next';
22

33
const nextConfig: NextConfig = {
4+
45
images: {
5-
domains: ['www.thecocktaildb.com'],
6+
domains: ['team2-app-s3-bucket.s3.ap-northeast-2.amazonaws.com'],
7+
remotePatterns: [
8+
{
9+
protocol: 'https',
10+
hostname: 'www.thecocktaildb.com',
11+
},
12+
],
613
},
714
env: {
815
NPUBLIC_API_URL: process.env.NEXT_PUBLIC_API_URL,

package-lock.json

Lines changed: 64 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
]
1919
},
2020
"dependencies": {
21+
"@tanstack/react-query": "^5.90.2",
2122
"@tanstack/react-virtual": "^3.13.12",
2223
"class-variance-authority": "^0.7.1",
2324
"gsap": "^3.13.0",
@@ -26,7 +27,9 @@
2627
"react": "19.1.0",
2728
"react-dom": "19.1.0",
2829
"react-hot-toast": "^2.6.0",
29-
"react-use": "^17.6.0"
30+
"react-use": "^17.6.0",
31+
"swiper": "^12.0.2",
32+
"react-intersection-observer": "^9.16.0"
3033
},
3134
"devDependencies": {
3235
"@eslint/eslintrc": "^3",
@@ -61,4 +64,4 @@
6164
},
6265
"homepage": "https://github.com/prgrms-web-devcourse-final-project/WEB5_6_HaeDokCoding_FE#readme",
6366
"description": ""
64-
}
67+
}

src.zip

-997 KB
Binary file not shown.

src/app/api/kakao/KaKaoScript.tsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
'use client';
2+
3+
import Script from 'next/script';
4+
5+
declare global {
6+
interface Window {
7+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
8+
Kakao: any;
9+
}
10+
}
11+
function KaKaoScript() {
12+
const onLoad = () => {
13+
window.Kakao.init(process.env.NEXT_PUBLIC_KAKAO_JAVASCRIPT_KEY);
14+
};
15+
return <Script src="https://developers.kakao.com/sdk/js/kakao.js" async onLoad={onLoad} />;
16+
}
17+
export default KaKaoScript;

src/app/community/[id]/page.tsx

Lines changed: 43 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,48 @@
1-
'use client';
2-
3-
import { fetchPostById } from '@/domains/community/api/fetchPost';
4-
import DetailContent from '@/domains/community/detail/DetailContent';
5-
import DetailHeader from '@/domains/community/detail/DetailHeader';
6-
import DetailTitle from '@/domains/community/detail/DetailTitle';
7-
import DetailTabDesktop from '@/domains/community/detail/tab/DetailTabDesktop';
8-
import { Post } from '@/domains/community/types/post';
9-
import Comment from '@/domains/community/detail/Comment';
10-
import StarBg from '@/domains/shared/components/star-bg/StarBg';
11-
import { useParams } from 'next/navigation';
12-
import { useEffect, useState } from 'react';
13-
import DetailSkeleton from '@/domains/community/detail/DetailSkeleton';
1+
import { Metadata } from 'next';
2+
import { getApi } from '@/app/api/config/appConfig';
3+
import DetailPage from '@/domains/community/detail/DetailPage';
4+
5+
type RouteParams = { id: number };
6+
7+
export async function generateMetadata({
8+
params,
9+
}: {
10+
params: Promise<RouteParams>;
11+
}): Promise<Metadata> {
12+
const { id } = await params;
13+
const res = await fetch(`${getApi}/posts/${id}`, {
14+
cache: 'no-store',
15+
});
16+
const post = await res.json();
17+
console.log(post);
18+
return {
19+
title: post.title,
20+
description: post.content?.slice(0, 80),
21+
openGraph: {
22+
title: post.title,
23+
description: post.content?.slice(0, 80),
24+
url: `https://your-domain.com/community/${id}`,
25+
images: [
26+
{
27+
url: post.imageUrls?.[0],
28+
width: 800,
29+
height: 600,
30+
alt: post.title,
31+
},
32+
],
33+
type: 'article',
34+
},
35+
twitter: {
36+
card: 'summary_large_image',
37+
title: post.title,
38+
description: post.content?.slice(0, 80),
39+
images: [post.imageUrls?.[0]],
40+
},
41+
};
42+
}
1443

1544
function Page() {
16-
const params = useParams();
17-
const [postDetail, setPostDetail] = useState<Post | null>(null);
18-
const [isLoading, setIsLoading] = useState(false);
19-
20-
useEffect(() => {
21-
const postId = params.id;
22-
const fetchData = async () => {
23-
setIsLoading(true);
24-
const data = await fetchPostById(postId);
25-
if (!data) return;
26-
27-
setPostDetail(data);
28-
setIsLoading(false);
29-
};
30-
fetchData();
31-
}, [params.id, setPostDetail]);
32-
33-
if (isLoading) return <DetailSkeleton />;
34-
if (!postDetail) return null;
35-
36-
const {
37-
categoryName,
38-
title,
39-
userNickName,
40-
createdAt,
41-
viewCount,
42-
postId,
43-
tags,
44-
content,
45-
likeCount,
46-
commentCount,
47-
} = postDetail;
48-
49-
return (
50-
<div className="w-full relative">
51-
<StarBg className="w-full h-32 absolute"></StarBg>
52-
<article className="page-layout max-w-824 z-5">
53-
<DetailHeader categoryName={categoryName} />
54-
<DetailTitle title={title} userNickname={userNickName} />
55-
<DetailContent
56-
content={content}
57-
createdAt={createdAt}
58-
viewCount={viewCount}
59-
postId={postId}
60-
tags={tags}
61-
likeCount={likeCount}
62-
commentCount={commentCount}
63-
/>
64-
<section className="mb-10">
65-
<Comment postId={postId} />
66-
</section>
67-
</article>
68-
<div className="hidden md:block">
69-
<DetailTabDesktop likeCount={likeCount} commentCount={commentCount} />
70-
</div>
71-
</div>
72-
);
45+
return <DetailPage />;
7346
}
7447

7548
export default Page;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
'use client';
2+
3+
import WriteSection from '@/domains/community/write/WriteSection';
4+
import StarBg from '@/domains/shared/components/star-bg/StarBg';
5+
import { useParams } from 'next/navigation';
6+
7+
function Page() {
8+
const params = useParams();
9+
console.log(params);
10+
11+
return (
12+
<div className="w-full mb-20 flex relative">
13+
<StarBg className="w-full h-32 absolute"></StarBg>
14+
<div className="page-layout max-w-824 flex-1 z-5">
15+
<WriteSection mode="edit" postId={params.postId} />
16+
</div>
17+
</div>
18+
);
19+
}
20+
21+
export default Page;

src/app/community/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import PageHeader from '@/domains/shared/components/page-header/PageHeader';
33
import { Metadata } from 'next';
44

55
export const metadata: Metadata = {
6-
title: 'SSOUL | 커뮤니티',
6+
title: '커뮤니티',
77
description: '칵테일에 관한 모든 이야기',
88
};
99

@@ -12,7 +12,7 @@ function Page() {
1212
<div className="w-full">
1313
<PageHeader title="Community" description="칵테일에 관한 모든 이야기" />
1414
<div className="page-layout max-w-1024">
15-
<div className="mt-3 mb-10 flex flex-col gap-8 ">
15+
<div className="mt-3 mb-40 flex flex-col gap-8 ">
1616
<section aria-labelledby="community-heading">
1717
<h1 id="community-heading" className="sr-only">
1818
커뮤니티 페이지

src/app/community/write/page.tsx

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,15 @@
11
'use client';
22

3-
import Tag from '@/domains/community/components/tag/Tag';
4-
import Category from '@/domains/community/write/Category';
5-
import TagModal from '@/domains/community/write/cocktail-tag/TagModal';
6-
import CompleteBtn from '@/domains/community/write/CompleteBtn';
7-
import FormTitle from '@/domains/community/write/FormTitle';
8-
import ImageSection from '@/domains/community/write/image-upload/ImageSection';
9-
import WriteForm from '@/domains/community/write/WriteForm';
3+
import WriteSection from '@/domains/community/write/WriteSection';
104
import StarBg from '@/domains/shared/components/star-bg/StarBg';
11-
import { useState } from 'react';
125

136
function Page() {
14-
const [isOpen, setIsOpen] = useState(false);
15-
167
return (
178
<div className="w-full mb-20 flex relative">
189
<StarBg className="w-full h-32 absolute"></StarBg>
1910
<div className="page-layout max-w-824 flex-1 z-5">
20-
<CompleteBtn />
21-
<section>
22-
<FormTitle />
23-
<Category />
24-
<WriteForm />
25-
</section>
26-
<ImageSection />
27-
<section className="mt-8">
28-
<Tag use="write" onClick={() => setIsOpen(true)} />
29-
</section>
11+
<WriteSection mode="create" />
3012
</div>
31-
{isOpen && <TagModal isOpen={isOpen} setIsOpen={setIsOpen} />}
3213
</div>
3314
);
3415
}

0 commit comments

Comments
 (0)