Skip to content

[REFACTOR] 현상소 보기 4차 QA 반영#250

Merged
MlNTYS merged 5 commits intodevelopfrom
refactor/photo-lab-QA-04(#249)
Feb 12, 2026
Merged

[REFACTOR] 현상소 보기 4차 QA 반영#250
MlNTYS merged 5 commits intodevelopfrom
refactor/photo-lab-QA-04(#249)

Conversation

@MlNTYS
Copy link
Contributor

@MlNTYS MlNTYS commented Feb 12, 2026

🔀 Pull Request Title

현상소 보기 4차 QA 반영

📌 PR 설명

  • TC-PL-015 (Calendar에서 지난 시간 선택 불가하도록 수정)
  • TC-PL-039 (토스트 메시지 위아래 패딩 확인)

📷 스크린샷

Screenshot 2026-02-12 190828 Screenshot 2026-02-12 190755
image

@MlNTYS MlNTYS self-assigned this Feb 12, 2026
@MlNTYS MlNTYS added bug 버그 수정 refactor 내부 구조 개선(가독성,확장성,유지보수성) labels Feb 12, 2026
@MlNTYS MlNTYS linked an issue Feb 12, 2026 that may be closed by this pull request
2 tasks
@vercel
Copy link

vercel bot commented Feb 12, 2026

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

Project Deployment Actions Updated (UTC)
finders Ready Ready Preview, Comment Feb 12, 2026 10:45am

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @MlNTYS, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 PR은 현상소 보기 기능에 대한 4차 QA 피드백을 반영하여 사용자 경험을 개선합니다. 캘린더에서 현재 시간 이전의 시간 슬롯을 선택할 수 없도록 수정하고, 토스트 메시지 컴포넌트의 레이아웃을 조정하여 패딩 문제를 해결했습니다. 이를 통해 사용자가 보다 직관적이고 정확하게 필터를 설정할 수 있도록 합니다.

Highlights

  • 캘린더 시간 선택 로직 개선: 캘린더에서 현재 시간 이전의 시간 슬롯을 선택할 수 없도록 수정하여 사용자 경험을 향상시켰습니다.
  • 토스트 메시지 UI 조정: 토스트 메시지 컴포넌트의 최소 높이 속성을 제거하여 레이아웃 및 패딩 문제를 해결했습니다.
  • 필터 적용 로직 업데이트: 필터 바텀 시트에서 선택된 시간 중 현재 유효한 슬롯만 필터에 반영되도록 로직을 개선했습니다.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • src/components/common/ToastMessage.tsx
    • 토스트 메시지 컨테이너의 최소 높이 스타일(min-h-[3.75rem])을 제거하여 레이아웃을 조정했습니다.
  • src/components/photoLab/FilterBottomSheet.tsx
    • useCallback 훅을 사용하여 isDateDisabled 함수를 추가, 특정 조건(오늘의 모든 시간 슬롯이 지난 경우)에서 날짜 선택을 비활성화했습니다.
    • useMemo 훅을 사용하여 filteredSlots를 구현, 선택된 날짜가 오늘인 경우 현재 시간 이후의 시간 슬롯만 표시하도록 필터링했습니다.
    • 시간 슬롯 문자열("오전 9:00")을 숫자 시간(9, 14)으로 변환하는 parseHour 헬퍼 함수를 추가했습니다.
    • Calendar 컴포넌트에 isDateDisabled prop을 전달하여 지난 날짜 선택을 방지했습니다.
    • TimeSlotList 컴포넌트에 filteredSlots를 전달하여 표시되는 시간 슬롯을 동적으로 변경했습니다.
    • 필터 적용 시 선택된 시간 중 현재 보이는 filteredSlots에 포함된 시간만 반영하도록 로직을 수정했습니다.
Activity
  • 이 PR은 MlNTYS님에 의해 생성되었습니다.
  • PR 설명에 따르면, [REFACTOR] 현상소 보기 4차 QA 반영 #249 이슈를 해결합니다.
  • 캘린더에서 지난 시간 선택 불가 (TC-PL-015) 및 토스트 메시지 패딩 확인 (TC-PL-039) QA 항목을 반영했습니다.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

현상소 보기 4차 QA 반영에 대한 코드 리뷰입니다. 토스트 메시지의 min-height 제거와 날짜/시간 필터 로직 추가가 주요 변경점이네요. 전반적으로 QA 항목들을 잘 반영하셨습니다. FilterBottomSheet.tsx에 추가된 로직에 대해 몇 가지 개선 제안 사항을 남겼습니다. 코드를 더 견고하고 유지보수하기 쉽게 만드는 데 도움이 될 것입니다. 확인 부탁드립니다.

// "오전 9:00" → 9, "오후 2:00" → 14 변환
const parseHour = (slot: string): number => {
const [period, hm] = slot.split(" ");
const h = parseInt(hm);
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

parseInt 함수 사용 시 두 번째 인자로 기수(radix)를 10으로 명시해주는 것이 좋습니다. 이는 예기치 않은 결과(예: 문자열이 '0'으로 시작할 때 8진수로 해석)를 방지하는 좋은 습관입니다. 추가적으로, parseHour 함수는 컴포넌트의 상태나 props에 의존하지 않으므로 컴포넌트 외부로 옮겨 성능을 최적화하는 것을 고려해볼 수 있습니다.

Suggested change
const h = parseInt(hm);
const h = parseInt(hm, 10);

Copy link
Contributor Author

Choose a reason for hiding this comment

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

적용 완

Comment on lines 99 to 102
const isToday =
date.getFullYear() === now.getFullYear() &&
date.getMonth() === now.getMonth() &&
date.getDate() === now.getDate();
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

이 날짜 비교 로직은 filteredSlots 내부(110-113행)에서도 반복됩니다. isSameDay와 같은 헬퍼 함수로 추출하여 중복을 제거하고 코드 가독성을 높이는 것을 추천합니다. utils/date.ts 같은 파일에 만들어두고 재사용하면 더 좋습니다.

// 예시
const isSameDay = (d1: Date, d2: Date) =>
  d1.getFullYear() === d2.getFullYear() &&
  d1.getMonth() === d2.getMonth() &&
  d1.getDate() === d2.getDate();

Copy link
Contributor Author

Choose a reason for hiding this comment

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

반영 완

Comment on lines 107 to 117
const filteredSlots = useMemo(() => {
if (!selectedDate) return TIME_SLOTS;
const now = new Date();
const isToday =
selectedDate.getFullYear() === now.getFullYear() &&
selectedDate.getMonth() === now.getMonth() &&
selectedDate.getDate() === now.getDate();
if (!isToday) return TIME_SLOTS;
const currentHour = now.getHours();
return TIME_SLOTS.filter((slot) => parseHour(slot) > currentHour);
}, [selectedDate]);
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

filteredSlotsselectedDate에만 의존하고 있어, 시간이 지나도 필터링된 시간 목록이 실시간으로 업데이트되지 않는 잠재적인 문제가 있습니다. 예를 들어, 사용자가 오늘 날짜를 선택한 상태로 필터 창을 9:59에 열어두면, 10:01이 되어도 '오전 10:00' 슬롯이 사라지지 않습니다.

이 문제를 해결하기 위해 useEffectuseState를 사용하여 1분마다 현재 시간을 업데이트하고, 이 시간 값을 useMemo의 의존성 배열에 추가하는 것을 고려해볼 수 있습니다.

// 컴포넌트 상단에 추가
const [currentTime, setCurrentTime] = useState(new Date());

useEffect(() => {
  const timerId = setInterval(() => setCurrentTime(new Date()), 60000); // 1분마다 업데이트
  return () => clearInterval(timerId);
}, []);

// useMemo 수정
const filteredSlots = useMemo(() => {
  if (!selectedDate) return TIME_SLOTS;
  const now = currentTime; // new Date() 대신 상태 사용
  // ...
}, [selectedDate, currentTime]); // 의존성 배열에 currentTime 추가

Copy link
Contributor Author

Choose a reason for hiding this comment

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

큰 문제는 아니고, 시간 빼는 것도 UX를 위해 추가한거라 굳이

Copy link
Contributor

@hyunseo-han hyunseo-han left a comment

Choose a reason for hiding this comment

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

어푸 드립니다~!

Copy link
Contributor

@jeonbinggu jeonbinggu left a comment

Choose a reason for hiding this comment

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

PRAISE: 고생하셨습니다! 코멘트 가볍게 한번만 읽어주시면 될 것 같아요

if (period === "오전") return h;
return h === 12 ? 12 : h + 12;
}

Copy link
Contributor

Choose a reason for hiding this comment

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

QUESTION : 이 부분은 유틸 함수로 안 빼신 이유가 있으실까요??

@MlNTYS MlNTYS merged commit 9687860 into develop Feb 12, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug 버그 수정 refactor 내부 구조 개선(가독성,확장성,유지보수성)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[REFACTOR] 현상소 보기 4차 QA 반영

3 participants