Skip to content

feat(calendar): 여행 날짜 선택 달력 적용 - #240

Merged
minbros merged 9 commits into
devfrom
feature/calendar-design
Oct 17, 2026
Merged

minbros merged 9 commits into
devfrom
feature/calendar-design

Conversation

@KangShinGyu98

@KangShinGyu98 KangShinGyu98 commented Oct 15, 2026 •

Copy link
Copy Markdown
Collaborator

⚠️ #239 위에 쌓은 PR입니다. 대상 브랜치가 chore/git-workflow-automation이라 이 PR에는 캘린더 변경만 보입니다. #239를 먼저 병합한 뒤, 이 PR의 대상을 dev로 바꾸고 최신 dev를 반영한 다음 병합해 주세요.

노션

변경 내용

  • 브라우저 기본 날짜 input(TripDateField)을 디자인 시스템 Date Picker로 교체: 시작·종료 칸(Text Field Emphasis)과 기간 달력, 년·월 휠
  • PC 새 여행 만들기는 입력 칸 아래에 붙여서, 모바일과 여행 정보 수정 모달은 팝업으로 표시
  • 달력에서 최초 시작일 이전 날짜를 막고, 종료 칸에서 시작일보다 이른 날짜를 고르면 새 시작일이 되어 기간이 뒤집히지 않게 함(기존 endDateMin 계산 제거)
  • 달력은 고른 쪽만 반영: 시작일만 고르면 종료일은 그대로, 아무것도 고르지 않고 닫으면 바뀌지 않음
  • 여행 정보 수정 폼은 모달을 연 순간 값을 유지: 열어 둔 사이 다른 멤버가 바꿔도 입력 칸은 그대로이고, 바꾼 게 없으면 적용하기 비활성. 헤더에는 새 값이 보이고 다시 열면 최신 값으로 시작. 저장은 화면 값 그대로, 기간 축소 확인은 서버 최신 기간 기준
  • 모바일 달력 팝업은 가로 최소 300px, 화면보다 높으면 안에서 세로 스크롤
  • 새 여행 만들기에서 날짜 칸을 감싸던 박스 제거
  • 여행 정보 수정·달력 테스트를 위 동작에 맞게 갱신·추가

변경 이유

  • Figma Date Picker 디자인(09 Date Picker · Usage)을 적용합니다.

테스트

  • npm run lint (에러 0, 기존 경고 4)
  • npm test (187개 파일, 1491개 테스트 통과)
  • npm run build
  • Claude 자동 확인(npm run screens)
  • PC 크롬 (리뷰 반영 전)
  • adb 실기기 안드로이드 크롬 (리뷰 반영 전)

🤖 Generated with Claude Code

“KangShinGyu” and others added 5 commits October 15, 2026 17:42
- CONTRIBUTING에 브랜치 종류 표(fix·refactor·chore·docs 추가), PR 전 검증, 작업 공유 기준 정리
- PR 템플릿에 노션 링크 칸 추가
- Claude Code 스킬 start-work, open-pr 추가
- vitest에 테스트용 NEXT_PUBLIC 환경 변수를 넣어 36개 파일 로드 실패 수정
- .claude/settings.local.json을 gitignore에 추가

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- npm run screens: Playwright로 PC 크롬·사파리(WebKit)·안드로이드(Galaxy S24 에뮬레이션), simctl로 아이폰 시뮬레이터 스크린샷
- 전용 크롬 프로필에서 로그인해 localhost 인증 쿠키만 저장
- 3000번 dev 서버가 현재 폴더 코드인지 검사
- open-pr 검증에 화면 확인 단계, PR 템플릿에 화면 확인 항목 추가
- CONTRIBUTING에 화면 확인 기준 표 추가

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 날짜 input 대신 날짜 칸 클릭 → 날짜 선택 → 확인 순서로 변경
- 날짜 칸 접근성 이름을 "시작 날짜·종료 날짜 + 날짜"로 확인
- showPicker 키보드 테스트를 달력 열기·취소 테스트로 교체

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
frontend-server Ready Ready Preview Oct 16, 2026 8:35am UTC

Request Review

@coderabbitai

coderabbitai Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 59 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 2c7f6dc4-e8d6-427d-9a80-e68bd5ba95bd
📥 Commits

Reviewing files that changed from the base of the PR and between 4931068 and 74ba756.

⛔ Files ignored due to path filters: 3
  • package-lock.json is excluded by !**/package-lock.json
  • src/assets/icons/calendar.svg is excluded by !**/*.svg
  • src/assets/icons/chevron-right.svg is excluded by !**/*.svg
📒 Files selected for processing: 26
  • .claude/skills/check-screens/SKILL.md
  • .claude/skills/open-pr/SKILL.md
  • .claude/skills/start-work/SKILL.md
  • .github/pull_request_template.md
  • .gitignore
  • CONTRIBUTING.md
  • package.json
  • scripts/check-screens.mjs
  • src/app/home/new/page.tsx
  • src/assets/icons/index.tsx
  • src/components/date-picker/DatePicker.tsx
  • src/components/date-picker/DatePickerLayer.tsx
  • src/components/date-picker/DateRangeField.tsx
  • src/components/date-picker/MonthYearWheel.tsx
  • src/components/date-picker/calendar.test.ts
  • src/components/date-picker/calendar.ts
  • src/components/date-picker/useDateRangeDraft.ts
  • src/components/rooms/RoomTripEditDialog.test.tsx
  • src/components/rooms/RoomTripEditFields.tsx
  • src/components/rooms/RoomTripEditForm.test.tsx
  • src/components/rooms/RoomTripEditForm.tsx
  • src/components/rooms/TripDateField.tsx
  • src/components/rooms/TripFormFields.tsx
  • src/lib/plan/tripRange.ts
  • src/lib/rooms/trip-form.ts
  • vitest.config.ts
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@minbros minbros left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

외부 갱신 후 이전 날짜 재적용과, 낮은 화면에서 달력 조작 영역에 접근할 수 없는 문제를 수정해 주세요.

Comment on lines +42 to +45
confirm() {
if (session?.range.start) {
const { start, end } = session.range;
onConfirm({ start, end: end || start });

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P2] 변경하지 않은 달력을 닫을 때 최신 날짜를 되돌리지 않도록 해주세요

달력을 열어 둔 사이 다른 멤버의 날짜 변경이 도착하면, RoomTripEditForm은 새 날짜를 반영하지만 이 훅의 session.range는 열 때 복사한 값을 유지합니다. 이후 날짜를 고르지 않고 확인하거나 배경을 눌러 닫아도 onConfirm({ start, end: end || start })가 이전 날짜를 부모 폼에 다시 넣습니다.

예를 들어 종료일이 다른 멤버에 의해 22일에서 24일로 연장되었는데, 열린 달력을 닫으면 폼은 다시 22일이 됩니다. 닫기 자체가 서버에 저장하는 것은 아니지만, 이후 ‘적용하기’를 누르면 다른 멤버의 변경을 되돌릴 수 있습니다. 외부 날짜 갱신과 열린 임시 값을 조정하고, 사용자가 수정하지 않은 사본으로 최신 폼 값을 덮어쓰지 않도록 해주세요.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

반영했습니다 (eed90b4)

  • 달력은 열 때 날짜를 복사해 두지 않고, 이번에 고른 날짜만 기억합니다. 닫을 때(확인·바깥 클릭) 고른 쪽만 폼에 반영하고, 아무것도 고르지 않았으면 바꾸지 않습니다.
  • 근본 원인은 폼이 서버 값이 바뀌면 모든 칸을 다시 채우던 동작(savedSignature)이었습니다. 그래서 여행 정보 수정 폼이 모달을 연 순간 값을 유지하도록 바꿨습니다.
    • 열어 둔 사이 다른 멤버가 바꿔도 입력 칸은 그대로입니다. 바꾼 게 없으면 적용하기는 꺼져 있습니다.
    • 헤더에는 새 값이 보이고, 다시 열면 최신 값으로 시작합니다.
  • 저장은 화면 값 그대로 보냅니다(마지막에 저장한 사람의 화면 값이 남는 것으로 정했습니다). 기간 축소 확인은 서버 최신 기간을 기준으로 계산합니다.
    • 예: 다른 멤버가 종료일을 22일→24일로 늘린 뒤 A가 22일 화면 그대로 다른 칸을 고쳐 저장하면, 24→22 축소를 먼저 확인받습니다.

return (
<div
role="presentation"
className="fixed inset-0 z-[220] flex items-center justify-center bg-black/40 px-4"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P2] 낮은 화면에서도 달력 전체를 조작할 수 있도록 해주세요

이 팝업은 달력을 화면 중앙에 고정하지만, 팝업과 내부 dialog에 높이 제한이나 스크롤 처리가 없습니다. DatePicker는 날짜 행에 h-11을 사용하므로 6주가 표시되는 달은 여백과 헤더·푸터를 합쳐 약 460px 높이가 됩니다. 모바일 가로 화면처럼 가용 높이가 320px이면 상단 월 이동과 하단 취소·확인 영역이 화면 밖으로 나갑니다.

배경 페이지를 스크롤해도 고정된 팝업의 가려진 영역에는 접근할 수 없습니다. 가용 화면 높이에 맞춰 팝업 높이를 제한하고 필요한 영역을 스크롤할 수 있게 해, 날짜 선택과 월 이동·취소·확인을 모두 사용할 수 있도록 해주세요.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

반영했습니다 (eed90b4)

  • 팝업 카드 높이를 화면 높이(위아래 여백 16px 제외)로 제한하고, 넘치면 카드 안에서 세로로 스크롤합니다(max-h-full overflow-y-auto overscroll-contain).
  • 가로는 최소 300px입니다. 화면이 그보다 좁으면 가운데 정렬이 양옆을 자르지 않게 왼쪽부터 놓고 가로로 스크롤합니다(justify-center-safe).
  • 6주짜리 달(2027년 1월)로 확인했습니다.
    • 780×360 가로 화면: 카드 높이가 328px로 줄고, 안을 스크롤하면 취소·확인까지 닿습니다.
    • 360×780: 스크롤 없이 다 보입니다.
    • 280×653: 폭 300px이 유지됩니다.

KangShinGyu98 and others added 4 commits October 16, 2026 16:04
- --label은 .screens 바로 아래 폴더 이름만, --base는 로컬 http 주소만, --path는 앱 안 경로만 허용
- login이 고정 포트 대신 빈 포트로 띄운 전용 프로필 크롬에만 연결·저장·종료
- 외부 명령(lsof·git·open·xcrun·xcode-select)을 절대 경로로 호출
- open-pr: 기존 PR 갱신도 push 전에 커밋 목록을 보여 주고 확인

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- --base는 허용한 호스트 이름과 숫자 포트로 주소를 다시 만들어 크롬 인자로 넘김
- 결과 파일은 쓰기 직전에 .screens 안인지 확인하고, 사용법 오류는 ✖ 메시지로 출력

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 모달을 연 뒤 서버 값이 바뀌어도 입력 칸을 다시 채우지 않고, 바꾼 게 없으면 적용하기 비활성
- 저장은 화면 값 그대로, 기간 축소 확인은 서버 최신 기간 기준
- 달력은 고른 쪽만 바뀌고 아무것도 고르지 않고 닫으면 그대로
- 모바일 달력 팝업 가로 최소 300px, 화면보다 높으면 안에서 세로 스크롤

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sonarqubecloud

Copy link
Copy Markdown

Base automatically changed from chore/git-workflow-automation to dev October 17, 2026 08:54
@minbros
minbros merged commit 6bca055 into dev Oct 17, 2026
4 checks passed
@minbros
minbros deleted the feature/calendar-design branch October 17, 2026 08:54
minbros added a commit that referenced this pull request Oct 22, 2026
* chore(workflow): github 자동화·화면 테스트 자동화 (#239)

* chore(workflow): 브랜치 종류 정리와 작업 시작·PR 스킬 추가

- CONTRIBUTING에 브랜치 종류 표(fix·refactor·chore·docs 추가), PR 전 검증, 작업 공유 기준 정리
- PR 템플릿에 노션 링크 칸 추가
- Claude Code 스킬 start-work, open-pr 추가
- vitest에 테스트용 NEXT_PUBLIC 환경 변수를 넣어 36개 파일 로드 실패 수정
- .claude/settings.local.json을 gitignore에 추가

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(workflow): 화면 확인 스크립트와 check-screens 스킬 추가

- npm run screens: Playwright로 PC 크롬·사파리(WebKit)·안드로이드(Galaxy S24 에뮬레이션), simctl로 아이폰 시뮬레이터 스크린샷
- 전용 크롬 프로필에서 로그인해 localhost 인증 쿠키만 저장
- 3000번 dev 서버가 현재 폴더 코드인지 검사
- open-pr 검증에 화면 확인 단계, PR 템플릿에 화면 확인 항목 추가
- CONTRIBUTING에 화면 확인 기준 표 추가

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(workflow): 화면 확인 스크립트 입력 검증과 PR 스킬 확인 단계 보완

- --label은 .screens 바로 아래 폴더 이름만, --base는 로컬 http 주소만, --path는 앱 안 경로만 허용
- login이 고정 포트 대신 빈 포트로 띄운 전용 프로필 크롬에만 연결·저장·종료
- 외부 명령(lsof·git·open·xcrun·xcode-select)을 절대 경로로 호출
- open-pr: 기존 PR 갱신도 push 전에 커밋 목록을 보여 주고 확인

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(workflow): 화면 확인 스크립트 경로·인자 검증을 사용 지점에서 확인

- --base는 허용한 호스트 이름과 숫자 포트로 주소를 다시 만들어 크롬 인자로 넘김
- 결과 파일은 쓰기 직전에 .screens 안인지 확인하고, 사용법 오류는 ✖ 메시지로 출력

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: “KangShinGyu” <“rkdtlseb@naver.com”>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat(calendar): 여행 날짜 선택 달력 적용 (#240)

* chore(workflow): 브랜치 종류 정리와 작업 시작·PR 스킬 추가

- CONTRIBUTING에 브랜치 종류 표(fix·refactor·chore·docs 추가), PR 전 검증, 작업 공유 기준 정리
- PR 템플릿에 노션 링크 칸 추가
- Claude Code 스킬 start-work, open-pr 추가
- vitest에 테스트용 NEXT_PUBLIC 환경 변수를 넣어 36개 파일 로드 실패 수정
- .claude/settings.local.json을 gitignore에 추가

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(workflow): 화면 확인 스크립트와 check-screens 스킬 추가

- npm run screens: Playwright로 PC 크롬·사파리(WebKit)·안드로이드(Galaxy S24 에뮬레이션), simctl로 아이폰 시뮬레이터 스크린샷
- 전용 크롬 프로필에서 로그인해 localhost 인증 쿠키만 저장
- 3000번 dev 서버가 현재 폴더 코드인지 검사
- open-pr 검증에 화면 확인 단계, PR 템플릿에 화면 확인 항목 추가
- CONTRIBUTING에 화면 확인 기준 표 추가

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(calendar): 날짜 선택 디자인 작업 중 (WIP)

* feat(calendar): 캘린더 주변 박스 제거

* test(calendar): 날짜 선택 달력에 맞춰 여행 정보 수정 테스트 갱신

- 날짜 input 대신 날짜 칸 클릭 → 날짜 선택 → 확인 순서로 변경
- 날짜 칸 접근성 이름을 "시작 날짜·종료 날짜 + 날짜"로 확인
- showPicker 키보드 테스트를 달력 열기·취소 테스트로 교체

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(workflow): 화면 확인 스크립트 입력 검증과 PR 스킬 확인 단계 보완

- --label은 .screens 바로 아래 폴더 이름만, --base는 로컬 http 주소만, --path는 앱 안 경로만 허용
- login이 고정 포트 대신 빈 포트로 띄운 전용 프로필 크롬에만 연결·저장·종료
- 외부 명령(lsof·git·open·xcrun·xcode-select)을 절대 경로로 호출
- open-pr: 기존 PR 갱신도 push 전에 커밋 목록을 보여 주고 확인

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(workflow): 화면 확인 스크립트 경로·인자 검증을 사용 지점에서 확인

- --base는 허용한 호스트 이름과 숫자 포트로 주소를 다시 만들어 크롬 인자로 넘김
- 결과 파일은 쓰기 직전에 .screens 안인지 확인하고, 사용법 오류는 ✖ 메시지로 출력

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(calendar): 여행 정보 수정 폼을 연 순간 값으로 유지하고 달력은 고른 날짜만 반영

- 모달을 연 뒤 서버 값이 바뀌어도 입력 칸을 다시 채우지 않고, 바꾼 게 없으면 적용하기 비활성
- 저장은 화면 값 그대로, 기간 축소 확인은 서버 최신 기간 기준
- 달력은 고른 쪽만 바뀌고 아무것도 고르지 않고 닫으면 그대로
- 모바일 달력 팝업 가로 최소 300px, 화면보다 높으면 안에서 세로 스크롤

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: “KangShinGyu” <“rkdtlseb@naver.com”>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* docs(AX): AI 코드 품질 지침 추가와 개인 작업 스킬 분리 (#242)

- AI 프론트엔드 코드 품질 지침과 문서 연결 추가
- 개인 개발 스킬과 화면 확인 도구를 저장소에서 분리

* feat(route): 웹 동선보기 장소 이동 네비게이션 추가 (#241)

- 웹 동선보기의 이전·다음 장소 탐색과 지도·일정 카드 연동 추가

* feat(map): 장소 검색 UI를 피그마 디자인에 맞게 개편 (#243)

* feat(map): 장소 검색 UI를 피그마 디자인에 맞게 개편

- 검색 칩과 가로 스크롤 툴바, 검색 상태 및 장소 미리보기 정리
- 선택 핀 이름 우선순위와 경로 복귀 상태 유지
- 로그인 페이지 내부 헬퍼의 잘못된 export와 관련 테스트 수정

* fix(map): 검색창 포커스 중 지우기 버튼 숨김

* fix(map): 장소 말풍선을 선택 핀 상단에 연결

* fix(map): 장소 말풍선과 핀 사이 여백 조정

* fix(map): 검색 모드 충돌과 검색 UI 상호작용 개선

- 카테고리 검색과 텍스트 검색을 상호 배타적으로 전환
- 빈 검색창과 지우기 동작에서 검색 아이콘으로 복귀
- 툴바 높이 고정 및 자동완성 강조 상태 통합
- 닫기 버튼 영역 정렬과 말풍선 자동 포커스 제거

* fix(map): 검색어 삭제 시 피그마 기본 검색창 상태 유지

- Filled 상태에서 지우면 펼쳐진 빈 검색창으로 복귀
- 포커스가 없는 빈 검색창도 바깥 클릭 시 접기

* fix(map): 자동완성 선택 시 상세정보 바로 표시

* fix(place): 사진 한 장 조회 시 단건 API 사용

- 단건 사진 훅의 batch 선행 호출 제거
- 공유 캐시와 사진 없음 만료 및 재시도 동작 검증

* fix(map): 현 위치 검색 후 필터 변경 시 Places 중복 검색 제거 (#245)

* docs(workflow): 화면 확인 지침 삭제

---------

Co-authored-by: KangShingyu <103213494+KangShinGyu98@users.noreply.github.com>
Co-authored-by: “KangShinGyu” <“rkdtlseb@naver.com”>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

This branch was successfully deployed

1 active deployment
Preview — 74ba7561 Deployed Oct 16, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants