-
Notifications
You must be signed in to change notification settings - Fork 1
[FEAT] 맛집 상세 페이지 UI 구현 #53
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
243 commits
Select commit
Hold shift + click to select a range
8de2d6d
WIP: 임시 커밋
theSnackOverflow f778fd1
feat:맛집-상세 골격 완성 #37
theSnackOverflow d048ac8
design:맛집-상세 CSS 수정 #37
theSnackOverflow 0d3f89c
feat:맛집 리뷰 Card 컴포넌트 구현 #37
theSnackOverflow 32f7407
맛집-상세 wip 90% #37
theSnackOverflow 9d94478
feat:신고하기 모달창 구현 #37
theSnackOverflow 0723976
design:리뷰신고 모달 CSS 조정 #37
theSnackOverflow 77aee8a
Design:상단 헤더 이름 오타 전면 수정 #37
theSnackOverflow 60d7a56
wip
theSnackOverflow c2bae96
refactor:라우팅-절대 경로로 수정 #37
theSnackOverflow 7481129
feat:Review 컴포넌트 좋아요 및 좋아요취소 기능 추가 #37
theSnackOverflow bcf555c
refactor:sampleReviews 상수 파일 분리 #37
theSnackOverflow 3dc8de6
refactor:mockData 상수 파일 분리 #37
theSnackOverflow cb31443
feat:후기 필터(추천순|최신순) 기능 구현#37
theSnackOverflow d1c06fc
docs:변수 및 함수 주석 설명 추가#37
theSnackOverflow d04d743
feat:맛집-지도 화면 구현(api 연동 시 수정 필요) #37
theSnackOverflow 8feb337
fix:맛집상세-주소 표시 오타 및 css 개선 #37
theSnackOverflow db0e7c4
fix:맛집-지도 뒤로가기 경로 수정#37
theSnackOverflow 84ec704
feat:next-setup #1
theSnackOverflow 1e998fa
chore:package.json turbopack 제거 #2
theSnackOverflow 37b9043
chore:eslintrc.json 설정 추가 #3
theSnackOverflow d36a21b
chore:.prettierrc.js 설정 추가 #4
theSnackOverflow b66493d
chore:.vscode/setting.json 파일 추가 및 자동 포멧팅 설정 #5
theSnackOverflow 07c5730
Update README.md
theSnackOverflow e7322aa
chore: tailwind.config.js screen-mobile 화면크기 설정 #8
theSnackOverflow 1b73071
style: layout.tsx에 mobile-screen view 적용 #9
theSnackOverflow 4d88bcb
feat:src/app/head.tsx 작성 및 적용 #10
theSnackOverflow be65de1
design: favicon 및 metaData 수정 #11
theSnackOverflow c27d82c
feat: 공용컴포넌트 BottomNav 화면 구현 #12
theSnackOverflow 789edd0
design: bottomNav h 조정 및 layout pb 조정 #13
theSnackOverflow 305ce62
feat:BottomNav router 추가 #14
theSnackOverflow 7598445
feat:공용 컴포넌트-Header 화면 구현
theSnackOverflow db44458
design: Header 스타일 조정 #15
theSnackOverflow 60c071a
fix: layout 구조 개선 및 BottomNav 위치 문제 트러블슈팅
theSnackOverflow 25eb817
feat/mypage 화면 구현 #16
theSnackOverflow 9878987
design: layout.tsx 전체 화면 paddingBottom 조정
theSnackOverflow a4eca93
design: header safe area(아이폰 상단 노치) 관련 클래스 제거
theSnackOverflow be45704
design: header className props 추가 #16
theSnackOverflow 5d3cb79
feat:mypage Header Border-b 제거 및 route 추가
theSnackOverflow 56679ee
design:Header hover:bg 제거
theSnackOverflow 05ed9ec
feat:profileEdit 화면 구현
theSnackOverflow 5fe3c16
feat:마이페이지-기본상태입력화면 구현 #17
theSnackOverflow 0448f6d
rename: userInfoSetup -> userInfoEdit으로 이름 변경
theSnackOverflow fe1fd58
feat:기본정보입력 화면 구현 #18
theSnackOverflow b308459
rename:mypage 관련 디렉토리 camelCase -> kebab-case로 수정 및 router 경로 변경
theSnackOverflow 19eb890
wip feat/user-info-setup/gender 임시 저장
theSnackOverflow 2fae87d
refactor:ClienteLayout.tsx 생성 및 layout.tsx 리팩토링 #18
theSnackOverflow bde97c3
feat:기본상태입력-성별 화면 구현 9
theSnackOverflow 3689b06
design:마이페이지/기본상태입력 하단 Nav 제거
theSnackOverflow 6aca229
design:기본상태입력-성별 버튼 hover 및 active 효과 추가
theSnackOverflow b931b09
feat: 기본상태입력-운동상태 화면 구현
theSnackOverflow 430eb4c
/mypage/user-info-setup/exercise -> /mypage/user-info-setup/state 로 변경
theSnackOverflow 1d646c8
feat:기본상태입력-선호음식 화면 구현
theSnackOverflow bb21a82
기본정보입력-체질 화면 구현
theSnackOverflow afdfdcd
design:기본정보입력-알러지 하단 Nav 제거
theSnackOverflow 11ef84b
feat:ProgressBar 공용 컴포넌트 UI 구현 #20
theSnackOverflow 3fd4d70
refactor:ProgressBar 재사용을 위한 Props 추가 및 로직 개선 #21
theSnackOverflow a2fb381
feat:AlertModal 공용컴포넌트 구현 및 Progressbar 기능 구현 완료 #22
theSnackOverflow fb871a2
refactor:AlertModal 재사용 위한 구조 리팩토링 완료 #23
theSnackOverflow 953519d
fix:router.back() -> router.push(경로)로 모두 변경
theSnackOverflow e3c9175
feat: 인증(auth) 관련 페이지, 온보딩(onboarding) 관련 라우팅 구조 생성
IISweetHeartII bed8ccd
feat: 로그인 및 서비스 이용을 위한 모달 컴포넌트(LoginPromptModal, TermsOfServiceModal) 추가
IISweetHeartII 9874936
feat: Button 및 Input 컴포넌트 추가
IISweetHeartII d33c283
feat: Zod를 사용한 로그인 및 회원가입 폼 검증 스키마 추가
IISweetHeartII 3e7f30c
feat: 새로운 이미지 파일 추가
IISweetHeartII a6c80e1
feat: kakao.png 이미지 파일 추가
IISweetHeartII a9166fd
feat: 버튼의 색상 변경 및 leftIcon 기능 추가
IISweetHeartII 7350184
feat: 로그인 스키마에 rememberMe 필드 추가
IISweetHeartII 6cbead9
feat: 로그인 폼 기능 구현 및 유효성 검사 적용
IISweetHeartII 6c6a419
feat: 로그인 기능, 디자인 구현 완료
IISweetHeartII 47317bf
refactor:AlertModal과 ProgressBar 컴포넌트 의존 관계 분리 및 ModalWrapper 추가 구현 #24
theSnackOverflow 3abb00a
refactor: /mypage 화면 리팩토링 #25
theSnackOverflow 7e23134
design: /mypage menuList hover 효과 개선
theSnackOverflow 79c0c33
design: BottomNav Home Icon 변경
theSnackOverflow b86c47a
refactor: ClientLayout noBottomNav에 추가 경로 작성
jeonbinggu 66d46d5
Add to logo at MainPage
theSnackOverflow af1f8b1
design:AlertModal
theSnackOverflow 1fb395b
designAlertModal에 버튼 1개일때 동작 추가
theSnackOverflow 2a0d3b7
design:AlertModal 수정 완료
theSnackOverflow 2fe0b03
design:state-illustration 추가
theSnackOverflow c229fe6
refactor/프로필 관리-button dark 모드 적용
theSnackOverflow cc05381
refactor:BottomNav 구조 개선
theSnackOverflow dd48270
desgin:BottomNav 다크모드 구현-추후 dark:Icons 이미지 필요
theSnackOverflow 3f5e41b
design/mypage 다크 모드 구현
theSnackOverflow 3e32da4
design/mypage 다크 모드 구현 마무리
theSnackOverflow 1d93857
design:프로필 관리 다크모드 구현
theSnackOverflow b904c22
wip
theSnackOverflow d48b8f6
refactor:기본상태입력
theSnackOverflow 8b02984
design:기본상태입력 항목들 여백 조정
theSnackOverflow a50555d
design:기본정보입력 하단 버튼 다크 모드 적용
theSnackOverflow 48c684a
design:AlertModal 다크모드 구현
theSnackOverflow c69a71e
design:기본정보입력하기창 다크모드 구현
theSnackOverflow 3d6777f
design:progressBar 다크 모드 구현
theSnackOverflow ff2884a
design:유저정보입력-성별 다크모드 구현
theSnackOverflow 2f5a4bc
design:유저정보입력-운동상태 다크모드 구현
theSnackOverflow b91c1e6
design:유저정보입력-음식 다크모드 구현
theSnackOverflow 55d4bb5
design:유저정보입력-체질 다크모드 구현
theSnackOverflow 73c5482
design:유저정보입력-알레르기 다크모드 구현
theSnackOverflow 35b48ee
feat: 전체 메뉴 페이지 구현 #15
Head-ddy be7012a
feat: /fullmenu 라우팅 추가 #15
Head-ddy 2bad95b
chore: add image asset 'customselect.png' #15
Head-ddy 83f0433
feat: SearchBar component 추가 #15
Head-ddy fc098a4
design:기본상태입력-운동상태 배경 일러스트 삭제
theSnackOverflow bef54b9
feat/mypage/FoodBox 컴포넌트 구햔
theSnackOverflow 09f07df
rename:branch feat/RecoList{null => #17}
theSnackOverflow b61d99a
feat/FoodBox 공용 컴포넌트 제작
theSnackOverflow 39a758d
feat/추천목록관리 UI 및 기능 구현 (추후 최적화 필요)
theSnackOverflow f7eb7cc
FoodBox에 imgUrl(fallback) Props 추가
theSnackOverflow d1ef64e
FoodBox imgUrl 개선
theSnackOverflow 09bc20a
FoodBox imgUrl 개선
theSnackOverflow b5e2c7c
feat:FoodBox isToggled props 추가
theSnackOverflow 13c7df5
refactor:추천목록리스트 상수 배열.ts 분리
theSnackOverflow 0f7d3f2
feat:FBA 기능 구현
theSnackOverflow de8d872
refactor:추천목록맛집 상수배열 분리
theSnackOverflow 866c335
feat: 식사 시간 질문 페이지 구현
jeonbinggu 167715f
feat: 현재 상태 질문 페이지 구현
jeonbinggu 014457e
feat: 식사 목적 질문 페이지 구현
jeonbinggu 35af78a
feat: 식사 인원 질문 페이지 구현
jeonbinggu 92ea9f9
feat: 식사 예산 질문 페이지 구현
jeonbinggu df775c5
feat: 중간 응답 페이지 구현
jeonbinggu c5f130a
refactor: nobottomnav 경로 추가
jeonbinggu ba6e6af
feat: mainpage/BottomNav 컴포넌트 구현
jeonbinggu f402ab3
refactor: 음식 응답 페이지 경로 이동 추가
jeonbinggu dcd22ff
refactor: BottomNav 컴포넌트 적용
jeonbinggu e4df4c6
refactor: BottomNav 컴포넌트 적용
jeonbinggu d64eed1
refactor: BottomNav 컴포넌트 적용
jeonbinggu 1c78ba5
refactor: BottomNav 컴포넌트 적용
jeonbinggu 7c908d4
refactor: BottomNav 컴포넌트 적용
jeonbinggu 7c76dc0
design: 로그인 페이지 로고 이미지(오메추) 크기 조정 (width: 139, height: 92)
IISweetHeartII 5ff1b0e
feat: 비밀번호 재설정 메일 발송 후 확인 페이지 추가
IISweetHeartII 67a4a11
remove: FindPassword.tsx 폴더, 파일 제거
IISweetHeartII 7e4c2fb
feat: 비밀번호 찾기 페이지 추가 및 관련 button, input 컴포넌트 수정정
IISweetHeartII 90cf105
Fix: resolve merge conflict in SearchBar
theSnackOverflow 69f618b
refactor:SearchBar.tsx 컴포넌트 분리
theSnackOverflow 545212d
feat: Tag 공용 컴포넌트로 분리 #15
Head-ddy ac7243c
feat: 메뉴 필터 모달창 전체화면으로 생성 #15
Head-ddy 46a27b2
feat: 전체 메뉴 검색기능 추가 및 태그 필터 기능 추가 #15
Head-ddy fe862a8
refactor: Tag 파일 공용 컴포넌트 폴더로 이동 #15
Head-ddy 08b613e
feat: food-sprite 및 loading-bg 이미지 추가
IISweetHeartII 77570f8
feat: MainLoading 컴포넌트 추가 및 페이지 로딩 구현
IISweetHeartII a55f77a
chore: Add Vercel deployment workflow
IISweetHeartII 07b447b
fix: AlertModal 컴포넌트 수정에 따른 코드 정리 및 일관성 있는 스타일 적용
IISweetHeartII 6f8c732
feat: FoodBox에 onClick props 추가 및 cursor-pointer 추가 #16
Head-ddy 4fdf707
feat: FoodBox 클릭 시 메뉴 상세 페이지로 이동 기능 추가 #16
Head-ddy 3eb0d97
design: 헤더 최소 높이 49px로 추가 #16
Head-ddy 9926f05
feat: 메뉴 상세 정보 페이지 UI 구현 #16
Head-ddy 3189d20
feat: 뒤로가기 경로 수정 및 레시피 보러가기 클릭 시 경로 파라미터 값 전달 #16
Head-ddy b614356
feat: 이미지 alt 속성에 음식 이름 동적으로 적용 #16
Head-ddy 95da7a9
style: 코드 들여쓰기 및 공백 정리 #16
Head-ddy 4437755
chore: 뒤로가기 버튼의 alt 텍스트 수정 #16
Head-ddy 4e4667d
feat: 레시피 상세 페이지 UI 구현 #16
Head-ddy ed91146
feat: 검색 결과 없음 메시지에 isSearched 상태 적용 #16
Head-ddy 9ef625e
chore: Noto Sans KR 폰트 추가 및 Tailwind 설정 업데이트
IISweetHeartII 99301db
fix: Noto Sans KR 폰트 preload 설정을 false로 변경
IISweetHeartII a912873
WIP: 임시 커밋
theSnackOverflow 6c42cd0
feat:searchbar 기능 완성
theSnackOverflow 9ffbaa1
fix:검색바 중복 실행 버그 수정
theSnackOverflow a60d282
feat:검색바 진짜 거의 다 완성...
theSnackOverflow 1af6ce8
feat:검색바 96% 완성 ㅠㅠ
theSnackOverflow b4db2c2
new branch feat/Terms#31
theSnackOverflow 95cfa48
feat:서비스 이용약관 구현 시작
theSnackOverflow 44ac961
feat:서비스 이용약관 구현 화면 완성
theSnackOverflow b22b588
feat:service.ts 샘플파일 작성
theSnackOverflow fbf752e
design:Layout.tsx 배경 및 텍스트 다크모드 속성 제거
theSnackOverflow 0438024
feat:서비스 이용약관 완료
theSnackOverflow 541ce4b
feat:약관/개인정보처리방안 화면 구현
theSnackOverflow c21c0a6
feat:약관/위치정보서비스 화면 구현
theSnackOverflow 884b8e2
feat:terms/위치정보서비스 샘플파일 구현
theSnackOverflow 2d4be69
feat:약관/위치기반서비스 구현 완료
theSnackOverflow 9d9a3d5
design:공용 Header 요소 간격 조정
theSnackOverflow 279325e
feat:약관/하단 fab 버튼 추가
theSnackOverflow 70257c4
docs:서비스이용약관 작성 완료 #31
theSnackOverflow 8e52823
refactor:서비스이용약관 로직 개선 #31
theSnackOverflow bb928cc
docs:개인정보처리방침 문서 작성 완료 #31
theSnackOverflow 2504a89
docs:위치기반서비스이용약관 문서 작성 완료 #31
theSnackOverflow 85cfdfa
chore:scrollbar-hide 클래스 추가를 위한 tailwindcss.config.js 수정#31
theSnackOverflow 4875cc2
refactor:FBA 버튼 로직 변경 및 위치 조정#31
theSnackOverflow 282ffb9
refactor:FBA 버튼 로직 변경 및 scrollbar-hide 적용#31
theSnackOverflow 56686c2
refactor:개인정보처리방침 FBA 버튼 로직 변경 및 scrollbar-hide 적용#31
theSnackOverflow 8c7919c
feat:이용약관 UI rI 구현#31
theSnackOverflow 8f9c5f7
feat:설정 화면 구현 #35
theSnackOverflow b54a1eb
design:list margin, padding 속성 변경 #35
theSnackOverflow 3e56c39
Feat:계정 관리 UI 구현 #35
theSnackOverflow 8e3a203
feat:설정/계정관리/비밀번호변경 UI 구현 #35
theSnackOverflow 3726f7b
docs:비밀번호 변경 페이지 주석 추가
theSnackOverflow a7aaaa2
feat:Toast-공용컴포넌트 구현 #35
theSnackOverflow 152366d
design:Toast-공용 CSS 수정 및 주석 설명 추가 #35
theSnackOverflow 065aca7
design:이용약관 FBA 위치 중앙으로 수정 #35
theSnackOverflow cae41a0
design:비밀번호 변경 input 눈 아이콘 임시 등록#35
theSnackOverflow 4031ee4
design:하단메뉴바 이미지 크기 조정 #46
theSnackOverflow d5fc79f
design:오타 수정 {기본상태관리 -> 기본상태입력}#47
theSnackOverflow 94d7a97
fix:/mypage 오류 해결#47
theSnackOverflow 5011252
design:상단Header left_arrow img 변경 및 통일 #47
theSnackOverflow 95b245a
design:맛집-상세 CSS 수정 #37
theSnackOverflow 7b4e729
feat:맛집 리뷰 Card 컴포넌트 구현 #37
theSnackOverflow 9f4f484
Merge branch 'develop' into feature/Restaurant-info-ui-#37
theSnackOverflow 1fa9c42
맛집-상세 wip 90% #37
theSnackOverflow a96a7a9
feat:신고하기 모달창 구현 #37
theSnackOverflow ce9fd19
design:리뷰신고 모달 CSS 조정 #37
theSnackOverflow 0ce0aa1
Design:상단 헤더 이름 오타 전면 수정 #37
theSnackOverflow d9c4722
wip
theSnackOverflow ade1317
refactor:라우팅-절대 경로로 수정 #37
theSnackOverflow b9c1acb
feat:Review 컴포넌트 좋아요 및 좋아요취소 기능 추가 #37
theSnackOverflow 4c6f5cf
refactor:sampleReviews 상수 파일 분리 #37
theSnackOverflow 19d30bf
refactor:mockData 상수 파일 분리 #37
theSnackOverflow 877e05e
feat:후기 필터(추천순|최신순) 기능 구현#37
theSnackOverflow 541d2ca
docs:변수 및 함수 주석 설명 추가#37
theSnackOverflow acb36bf
feat:맛집-지도 화면 구현(api 연동 시 수정 필요) #37
theSnackOverflow a6ee3e6
fix:맛집상세-주소 표시 오타 및 css 개선 #37
theSnackOverflow b94a213
fix:맛집-지도 뒤로가기 경로 수정#37
theSnackOverflow fabeb7f
Merge branch 'feature/Restaurant-info-ui-#37' of https://github.com/T…
theSnackOverflow 27422a7
chore: update yarn.lock after install
theSnackOverflow 4e6ba8e
Merge branch 'develop' of https://github.com/Team-Omechu/Omechu-web i…
theSnackOverflow 6d36cf9
fix:build-error 수정 #37
theSnackOverflow 71278bd
fix: map 페이지 prerender 오류 해결을 위한 클라이언트 컴포넌트 분리 #37
theSnackOverflow 993114d
fix: map 페이지 prerender 오류 해결을 위한 클라이언트 컴포넌트 분리 #37
theSnackOverflow a73317b
fix: restaurant-detail 페이지 prerender 오류 해결을 위한 클라이언트 컴포넌트 분리 #37
theSnackOverflow 25f6b52
refactor: RestaurantDetail 페이지 클라이언트 컴포넌트로 분리하여 빌드 오류 해결#37
theSnackOverflow 0696640
fix:빌드 오류 해결ing#37
theSnackOverflow 9f16d7b
fix:빌드 오류 해결을 위한 수정#37
theSnackOverflow 44477ed
fix:wip#37
theSnackOverflow d59be75
Merge remote-tracking branch 'origin/develop' into feature/Restaurant…
theSnackOverflow 2f39185
fix:wip2 #37
theSnackOverflow 19e92a6
fix:빌드 오류 해결을 위해 루트디렉토리에 middleware.ts 추가 #37
theSnackOverflow 894e7d6
fix:빌드 오류 해결을 위해 restaurnt-detail 수정 #37
theSnackOverflow e10806a
fix:빌드 오류 해결을 위해 restaurnt-detail/map 수정 #37
theSnackOverflow f307a2d
fix:빌드 오류 해결을 위해 restaurnt-detail/map 수정 #37
theSnackOverflow 15403af
fix:빌드 오류 해결을 위해 restaurnt-detail/map 수정 #37
theSnackOverflow a147ccf
fix:빌드 오류 해결을 위해 restaurnt-detail/map 수정 #37
theSnackOverflow 85fcf66
fix:빌드 오류 해결을 위해 restaurnt-detail/map 수정 #37
theSnackOverflow ae81ef2
fix:빌드 오류 해결을 위해 restaurnt-detail/map 수정 #37
theSnackOverflow 4b8c5ba
fix:빌드 오류 해결을 위해 restaurnt-detail 주석 처리 #37
theSnackOverflow 1a7c61d
fix:빌드 오류 해결을 위해 restaurnt-detail 주석 처리 #37
theSnackOverflow 3c591de
fix:빌드 오류 해결을 위해 restaurnt-detail 주석 처리 #37
theSnackOverflow 8a5ff90
fix:빌드 오류 해결을 위해 restaurnt-detail/map 수정 #37
theSnackOverflow 27fd5c6
fix:빌드 오류 해결을 위해 restaurnt-detail/map 수정 #37
theSnackOverflow 5a8d146
fix:빌드 오류 해결ing#37
theSnackOverflow 7e851ff
fix:빌드 오류 해결ing#37
theSnackOverflow 297320c
fix:빌드 오류 해결ing#37
theSnackOverflow 503fd66
fix:빌드 오류 해결ing#37
theSnackOverflow 5b031ff
fix:빌드 오류 해결ing#37
theSnackOverflow d494dd1
fix:빌드 오류 해결 완료! #37[A
theSnackOverflow f827ccc
fix: wip #37
theSnackOverflow File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Binary file not shown.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| { | ||
| "git.ignoreLimitWarning": true | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| import { NextResponse } from "next/server"; | ||
| import type { NextRequest } from "next/server"; | ||
|
|
||
| // NOTE: middleware 함수는 모든 요청에 대해 실행되어 라우팅 또는 리디렉션 등을 처리할 수 있음 | ||
| export function middleware(request: NextRequest) { | ||
| const { pathname, searchParams } = request.nextUrl; | ||
|
|
||
| // CASE 1: /restaurant-detail?id=123 형식으로 접근 시 → /restaurant-detail/123 으로 리디렉션 | ||
| if (pathname === "/restaurant-detail" && searchParams.has("id")) { | ||
| const id = searchParams.get("id"); | ||
| const url = request.nextUrl.clone(); | ||
| url.pathname = `/restaurant-detail/${id}`; // 동적 세그먼트 경로로 변경 | ||
| url.search = ""; // 기존 쿼리스트링 제거 | ||
| return NextResponse.redirect(url); | ||
| } | ||
|
|
||
| // CASE 2: /restaurant-detail/map?id=123 형식으로 접근 시 → /restaurant-detail/map/123 으로 리디렉션 | ||
| if (pathname === "/restaurant-detail/map" && searchParams.has("id")) { | ||
| const id = searchParams.get("id"); | ||
| const url = request.nextUrl.clone(); | ||
| url.pathname = `/restaurant-detail/map/${id}`; // 동적 세그먼트 경로로 변경 | ||
| url.search = ""; // 기존 쿼리스트링 제거 | ||
| return NextResponse.redirect(url); | ||
| } | ||
|
|
||
| // 기본적으로는 요청을 그대로 통과시킴 | ||
| return NextResponse.next(); | ||
| } | ||
|
|
||
| // NOTE: matcher를 설정하면 특정 경로에만 middleware를 적용 가능 (선택사항) | ||
| export const config = { | ||
| matcher: ["/restaurant-detail", "/restaurant-detail/map"], | ||
| }; |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
38 changes: 38 additions & 0 deletions
38
omechu-app/src/app/components/auth/TermsOfServiceModal.tsx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,38 @@ | ||
| import React from "react"; | ||
| import Image from "next/image"; | ||
| import Button from "./Button"; | ||
|
|
||
| type TermsOfServiceModalProps = { | ||
| title: string; | ||
| content: React.ReactNode; | ||
| onConfirm: () => void; | ||
| onClose: () => void; | ||
| }; | ||
|
|
||
| const TermsOfServiceModal = ({ | ||
| title, | ||
| content, | ||
| onConfirm, | ||
| onClose, | ||
| }: TermsOfServiceModalProps) => { | ||
| return ( | ||
| <div className="fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-40"> | ||
| <div className="bg-white w-[335px] rounded-2xl p-5 flex flex-col gap-4 shadow-lg"> | ||
| <div className="flex items-center justify-between"> | ||
| <h2 className="text-lg font-bold">{title}</h2> | ||
| <button onClick={onClose}> | ||
| <Image src="/x_icon.png" alt="close" width={20} height={20} /> | ||
| </button> | ||
| </div> | ||
| <div className="h-64 p-3 overflow-y-auto text-sm text-gray-600 border rounded-md bg-gray-50"> | ||
| {content} | ||
| </div> | ||
| <Button onClick={onConfirm} variant="red" size="medium"> | ||
| 확인 | ||
| </Button> | ||
| </div> | ||
| </div> | ||
| ); | ||
| }; | ||
|
|
||
| export default TermsOfServiceModal; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,79 @@ | ||
| import Image from "next/image"; | ||
| import { useState } from "react"; | ||
|
|
||
| type ReportModalProps = { | ||
| onClick: () => void; | ||
| onReport: () => void; | ||
| }; | ||
|
|
||
| export default function ReportModal({ onClick, onReport }: ReportModalProps) { | ||
| const [selectedReason, setSelectedReason] = useState(""); | ||
|
|
||
| const reasons = [ | ||
| { id: "abuse", label: "욕설, 비방" }, | ||
| { id: "ad", label: "광고, 홍보성 글" }, | ||
| { id: "false", label: "허위 사실" }, | ||
| { id: "offensive", label: "선정적 / 불쾌한 내용" }, | ||
| { id: "other", label: "기타" }, | ||
| ]; | ||
|
|
||
| return ( | ||
| <section className="relative px-7 py-10 flex flex-col items-center gap-5 w-80 h-fit bg-white border border-[#393939] rounded-2xl"> | ||
| {/* 나가기 버튼 */} | ||
| <div className="absolute top-4 right-4"> | ||
| <button onClick={onClick}> | ||
| <Image | ||
| src="/close_button.png" | ||
| alt="나가기 버튼" | ||
| width={20} | ||
| height={20} | ||
| /> | ||
| </button> | ||
| </div> | ||
|
|
||
| {/* 모달 제목 */} | ||
| <div className="mt-5 mb-2 text-2xl text-[#393939] font-semibold"> | ||
| 후기 신고하기 | ||
| </div> | ||
|
|
||
| {/* 신고 사유 */} | ||
| <div className="w-full "> | ||
| <h1 className="mb-2">신고 사유를 선택해 주세요</h1> | ||
| <div className="flex flex-col items-start w-full gap-2 px-1"> | ||
| {reasons.map(({ id, label }) => ( | ||
| <label | ||
| key={id} | ||
| htmlFor={id} | ||
| className="flex items-center gap-2 text-sm text-[#626262]" | ||
| > | ||
| <input | ||
| id={id} | ||
| type="radio" | ||
| name="reportReason" | ||
| value={label} | ||
| checked={selectedReason === label} | ||
| onChange={() => setSelectedReason(label)} | ||
| className="accent-[#1F9BDA]" | ||
| /> | ||
| {label} | ||
| </label> | ||
| ))} | ||
| </div> | ||
| </div> | ||
|
|
||
| {/* 신고 내용 */} | ||
| <textarea | ||
| className="w-full h-24 px-2.5 py-2 border border-[#ccc] rounded resize-none text-sm text-[#393939] focus:outline-none" | ||
| placeholder="신고 사유를 자세하게 설명해주세요. (선택)" | ||
| /> | ||
|
|
||
| {/* 신고 버튼 */} | ||
| <button | ||
| onClick={onReport} | ||
| className="w-36 h-10 rounded-3xl text-white bg-[#FB4746] hover:bg-[#e2403f] active:bg-[#c93938]" | ||
| > | ||
| <span>신고하기</span> | ||
| </button> | ||
| </section> | ||
| ); | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,125 @@ | ||
| import Image from "next/image"; | ||
|
|
||
| type ReviewProps = { | ||
| id: number; | ||
| profileImgUrl: string; | ||
| userId: string; | ||
| createdDate: string; | ||
| votes: number; | ||
| rating: number; | ||
| content: string; | ||
| tags?: string[]; | ||
| images?: string[]; | ||
| onClick?: () => void; | ||
| onReport?: () => void; | ||
| onVote?: () => void; | ||
| isVoted: boolean; | ||
| isOptionOpen?: boolean; | ||
| }; | ||
|
|
||
| export default function Review({ | ||
| id, | ||
| profileImgUrl, | ||
| userId, | ||
| createdDate, | ||
| votes = 0, | ||
| rating, | ||
| content, | ||
| tags, | ||
| images, | ||
| onClick, | ||
| onReport, | ||
| onVote, | ||
| isVoted, | ||
| isOptionOpen = false, | ||
| }: ReviewProps) { | ||
| return ( | ||
| <section | ||
| className="w-full h-fit p-4 flex flex-col gap-2 bg-white | ||
| border-[1px] border-[#393939] rounded-xl " | ||
| > | ||
| {/* 프로필사진, 닉네임, 작성일 | 추천 버튼, 설정버튼 */} | ||
| <div className="relative flex justify-between"> | ||
| <div className="flex items-center gap-3"> | ||
| <Image | ||
| src={profileImgUrl} | ||
| alt={profileImgUrl} | ||
| width={30} | ||
| height={30} | ||
| /> | ||
| <span className="text-base text-[#393939] font-semibold"> | ||
| {userId} | ||
| </span> | ||
| <span className="mt-[1.2px] text-sm text-[#828282] font-normal"> | ||
| {createdDate} | ||
| </span> | ||
| </div> | ||
| <div className="absolute flex items-center gap-1 mb-2 -top-1 -right-1"> | ||
| <span className="mt-1 text-sm ">{votes}</span> | ||
| <button onClick={onVote} className="mb-1"> | ||
| <Image | ||
| src={isVoted ? "/thumbs-up-fill.png" : "/thumbs-up.png"} | ||
| alt="리뷰 추천 버튼" | ||
| width={22} | ||
| height={22} | ||
| /> | ||
| </button> | ||
| <button onClick={onClick}> | ||
| <Image | ||
| src="/menu_dots_vertical.png" | ||
| alt="메뉴" | ||
| width={18} | ||
| height={18} | ||
| /> | ||
| </button> | ||
| </div> | ||
| {isOptionOpen && ( | ||
| <div className="absolute p-2 bg-white border rounded shadow -right-1 top-6"> | ||
| <button | ||
| onClick={onReport} | ||
| className="flex items-center justify-center w-full gap-2 text-left" | ||
| > | ||
| <Image | ||
| src="/report.png" | ||
| alt={"신고하기"} | ||
| width={13} | ||
| height={18} | ||
| /> | ||
| <span className="mt-1">신고하기</span> | ||
| </button> | ||
| </div> | ||
| )} | ||
| </div> | ||
| {/* 평점, 후기 */} | ||
| <div className="flex flex-col gap-1 mt-1 ml-2"> | ||
| <span className="text-xl font-normal text-[#1F9BDA]"> | ||
| {"★".repeat(rating) + "☆".repeat(5 - rating)} | ||
| </span> | ||
| <span className="text-xl font-normal text-[#828282]">{content}</span> | ||
| <div className="flex flex-shrink-0 gap-2 mt-1 overflow-x-scroll scrollbar-hide scroll-smooth max-h-52"> | ||
| {images?.map((item, index) => ( | ||
| <Image | ||
| key={`review-img-${index}`} | ||
| src={item} | ||
| alt={`후기 이미지 ${index + 1}`} | ||
| width={200} | ||
| height={200} | ||
| className="rounded-md shrink-0" | ||
| /> | ||
| ))} | ||
| </div> | ||
| </div> | ||
| {/* 후기 관련 태그 */} | ||
| <div className="flex flex-wrap justify-start gap-1 px-1"> | ||
| {tags?.map((item, tagIdx) => ( | ||
| <div | ||
| key={`tag-${id}-${tagIdx}`} | ||
| className="px-3 pt-1 pb-0.5 bg-white border-[1px] w-fit rounded-3xl border-[#393939] text-sm font-nomal hover:scale-105 duration-300" | ||
| > | ||
| {item} | ||
| </div> | ||
| ))} | ||
| </div> | ||
| </section> | ||
| ); | ||
| } |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.