Conversation
- outsideClick을 제거하여 버블링 문제 해결 - name에서 errorMessage가 표시되지 않던 문제 해결
…IN-148 Fix: 팀 페이지 할 일 카드 예정됨 버그 수정
…m4/frontend into feature/fin-142
…in-142 Fix: TaskModal 내부 수정
Test: 자유게시판 동작 검증 Playwright 기반 E2E 테스트
…in-153 Chore: docker-compose 파일 수정
Summary of ChangesHello, 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은 애플리케이션의 날짜 및 시간 처리 로직을 서울 시간대 기준으로 표준화하고, 할 일 관리 기능의 사용성을 개선하는 데 중점을 두었습니다. 또한, 사용자 경험을 높이기 위한 접근성 개선 작업과 주요 기능에 대한 E2E 테스트를 추가하여 서비스의 안정성을 확보했습니다. Highlights
New Features🧠 You can now enable Memory (public preview) 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. Using Gemini Code AssistThe 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
Customization To customize the 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 Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. 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. Footnotes
|
There was a problem hiding this comment.
Code Review
This pull request introduces environment configuration updates, timezone-aware date formatting for tasks, modal refactoring for task creation/editing, accessibility enhancements (such as aria-label and aria-hidden attributes), and new Playwright E2E tests. The review feedback suggests simplifying the date formatting utility using the en-CA locale, removing unused commented-out code, preferring Next.js Link over router-based navigation for better SEO/UX, and further improving accessibility with aria-pressed, dynamic labels, and menu state attributes.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
| const formatServiceDate = (date: Date) => { | ||
| const dateParts = new Intl.DateTimeFormat('en-US', { | ||
| timeZone: SERVICE_TIME_ZONE, | ||
| year: 'numeric', | ||
| month: '2-digit', | ||
| day: '2-digit', | ||
| }).formatToParts(date); | ||
| const getPart = (type: Intl.DateTimeFormatPartTypes) => | ||
| dateParts.find((part) => part.type === type)?.value; | ||
|
|
||
| return `${getPart('year')}-${getPart('month')}-${getPart('day')}`; | ||
| }; |
There was a problem hiding this comment.
formatServiceDate 함수에서 Intl.DateTimeFormat을 사용해 날짜의 각 부분을 추출하고 조합하는 방식은 다소 복잡하며, getPart가 undefined를 반환할 가능성이 있어 타입 안전성 측면에서 아쉬움이 있습니다.
en-CA 로케일을 사용하면 YYYY-MM-DD 형식의 문자열을 직접 얻을 수 있으므로, 코드를 훨씬 더 간결하고 안전하게 작성할 수 있습니다.
const formatServiceDate = (date: Date) => {
return new Intl.DateTimeFormat('en-CA', {
timeZone: SERVICE_TIME_ZONE,
year: 'numeric',
month: '2-digit',
day: '2-digit',
}).format(date);
};| // const { | ||
| // register, | ||
| // control, | ||
| // formState: { errors }, | ||
| // } = useFormContext<TaskFormValues>(); | ||
|
|
There was a problem hiding this comment.
사용하지 않는 주석 처리된 코드 블록이 남아있습니다. 저장소 스타일 가이드("사용하지 않는 코드, 주석, console.log는 제거해 주세요.")에 따라, 불필요한 주석 코드는 제거하여 코드의 가독성과 유지보수성을 높이는 것이 좋습니다.
References
- 사용하지 않는 코드, 주석,
console.log는 제거해 주세요. (link)
| <Button | ||
| className="shadow-brand-tertiary-30 fixed right-10 bottom-10 shadow-md md:right-20 md:bottom-20" | ||
| variant="icon-circle" | ||
| icon={<WriteIcon className="size-6" />} | ||
| icon={<WriteIcon className="size-6" aria-hidden="true" />} | ||
| aria-label="글쓰기" | ||
| onClick={() => router.push('/articles/write')} | ||
| ></Button> |
There was a problem hiding this comment.
현재 Button 컴포넌트를 사용하여 클릭 시 router.push('/articles/write')로 페이지를 이동시키고 있습니다.
저장소 스타일 가이드의 접근성 지침("- 페이지 이동 목적이면 Link 사용을 권장해 주세요.")에 따라, 단순 페이지 이동에는 Link 컴포넌트를 사용하는 것이 검색 엔진 최적화(SEO) 및 사용자의 브라우저 사용 경험(새 탭에서 열기 등) 측면에서 더 좋습니다.
Button 컴포넌트가 href 속성을 지원하는지 확인하시거나, Next.js의 Link 컴포넌트로 대체하는 것을 권장합니다.
References
- 페이지 이동 목적이면
Link사용을 권장해 주세요. (link)
| <button | ||
| type="button" | ||
| disabled={isPending} | ||
| aria-label="좋아요" | ||
| className={cn( |
There was a problem hiding this comment.
좋아요 버튼은 상태가 활성화(Liked)되거나 비활성화(Unliked)되는 토글 버튼입니다. 스크린 리더 사용자가 현재 버튼의 상태를 명확히 인지할 수 있도록 aria-pressed 속성을 추가하는 것이 좋습니다.
또한, aria-label을 고정된 "좋아요" 대신 현재 상태에 따라 "좋아요 취소" 또는 "좋아요"로 동적으로 변경하면 접근성이 더욱 향상됩니다.
| <button | |
| type="button" | |
| disabled={isPending} | |
| aria-label="좋아요" | |
| className={cn( | |
| <button | |
| type="button" | |
| disabled={isPending} | |
| aria-label={isLiked ? '좋아요 취소' : '좋아요'} | |
| aria-pressed={isLiked} | |
| className={cn( |
| <button type="button" aria-label="프로필 메뉴" onClick={toggleOpen}> | ||
| <SettingsIcon className="h-6 w-6" aria-hidden="true" /> | ||
| </button> |
There was a problem hiding this comment.
설정 아이콘 버튼은 클릭 시 프로필 메뉴(드롭다운)를 열고 닫는 역할을 합니다. 스크린 리더 사용자가 이 버튼이 메뉴를 제어하고 있으며 현재 메뉴가 열려 있는지 여부를 알 수 있도록 aria-haspopup="menu"와 aria-expanded={isOpen} 속성을 추가하는 것이 좋습니다.
<button
type="button"
aria-label="프로필 메뉴"
aria-haspopup="menu"
aria-expanded={isOpen}
onClick={toggleOpen}
>
<SettingsIcon className="h-6 w-6" aria-hidden="true" />
</button>
#️⃣연관된 이슈
📝작업 내용
스크린샷 (선택)
💬리뷰 요구사항(선택)