[Feature] 공유 일정 UI 구현#97
Merged
Merged
Conversation
Closed
5 tasks
There was a problem hiding this comment.
Pull request overview
한 줄 요약
공유 일정 선택 UI와 isShared 상태 흐름을 에디터→캘린더 이벤트까지 연결하고 표시를 people 아이콘으로 통일했지만, TS 빌드 오류(React 타입 네임스페이스) 및 접근성/alias import 규칙 위반이 있어 수정이 필요합니다.
목적 요약
Issue #95 범위에 맞춰 “일정 공유”를 UI에서 선택/표시할 수 있도록 하고, 해당 공유 상태가 캘린더 이벤트 렌더링(월/주/일)에도 반영되도록 코드 구조를 정리합니다.
Changes:
- 공유 일정 선택 UI(
ShareSchedulePanel/SearchFriend) 추가 및isShared를 이벤트 상태에 반영하는 업데이트 함수/콜백 흐름 추가 - 월/주/일 캘린더에서 공유 일정 표시를 기존 dot 대신
people.svg(currentColor)아이콘으로 변경 - 장소 검색/반복/색상 선택/에디터 모달 로직을 재배치·분리(훅 추출, 타입/유틸 분리, 공용 컴포넌트 경로 정리)
발견된 위반 항목
src/shared/ui/calendar/CustomTimePicker/CustomTimePicker.tsx: 모듈에서React.ChangeEvent사용 시React네임스페이스 미-import로 TypeScript 컴파일 에러 가능src/shared/ui/scheduleTodo/SearchPlace/SearchPlace.tsx,src/shared/utils/useSearchPlacePanelModel.ts:@/alias를 쓰는 코드베이스 흐름과 달리 상대경로 import 혼재src/shared/ui/calendar/CustomDatePicker/CustomDatePicker.tsx: SVG에 직접 클릭 이벤트를 달아 키보드 조작/포커스 불가(접근성 이슈)src/shared/ui/scheduleTodo/SelectColor/SelectColor.tsx:div기반 클릭 UI로 ARIA/키보드 접근성 부족
추천 구조
src/shared/ui/scheduleTodo/SearchPlace/SearchPlace.tsx
- useSearchPlace import를 "@/shared/utils/useSearchPlace"로 통일
src/shared/utils/useSearchPlacePanelModel.ts
- types import를 "@/shared/types/schedule/types"로 통일
src/shared/ui/calendar/CustomDatePicker/CustomDatePicker.tsx
- 월 이동 컨트롤: <button> 기반(aria-label 포함)으로 래핑/교체
src/shared/ui/scheduleTodo/SelectColor/*
- 트리거/옵션: button 또는 listbox 패턴(aria-expanded 등)으로 전환
최소 리팩토링 단계
CustomTimePicker에서React.ChangeEvent타입 import 방식 수정(빌드 차단 이슈 우선)SearchPlace,useSearchPlacePanelModel의 상대경로 import를@/alias로 통일CustomDatePicker의 화살표 컨트롤을 버튼 시맨틱으로 변경 +aria-label추가SelectColor드롭다운을 키보드/스크린리더 대응 구조로 개선(button/listbox 등)- (선택) 접근성 변경 후 클릭/포커스/닫힘 동작(ESC/밖 클릭) 회귀 확인
Reviewed changes
Copilot reviewed 60 out of 74 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| src/shared/utils/useSearchPlacePanelModel.ts | 장소 검색 패널 상태(타이틀/캡션/메시지) 모델링 훅 추가 |
| src/shared/utils/useSearchPlace.ts | 카카오 장소 검색 전체 훅(최근검색/패널모델/검색상태) 구성 |
| src/shared/utils/useRecentPlaceSearches.ts | 최근 검색어 저장/삭제 훅 분리 |
| src/shared/utils/usePlaceSearch.ts | 카카오 검색 요청/취소/상태를 reducer로 캡슐화 |
| src/shared/utils/useEditorTypeSync.ts | ItemEditor의 타입/시간 동기화 로직을 훅으로 분리(+공유 상태 보조) |
| src/shared/utils/useEditorRegistry.ts | footer/delete/close-guard 레지스트리 로직 훅 분리 |
| src/shared/utils/useEditorDraft.ts | draft 외부/내부 상태 동기화 훅 분리 |
| src/shared/utils/titleSuggestionInput.ts | 제목 자동완성 하이라이트 유틸 분리 |
| src/shared/utils/searchPlace.ts | SearchPlace 타입 import 경로를 shared types로 통합 |
| src/shared/utils/scheduleShareFriend.ts | 공유 친구 필터링 유틸 추가 |
| src/shared/utils/domVisibility.ts | 포탈 UI 위치 계산을 위한 요소 가시성 유틸 추가 |
| src/shared/ui/scheduleTodo/TitleSuggestionInput/TitleSuggestionInput.tsx | 타입/유틸 분리 및 공유 시 input 색상 지원 추가 |
| src/shared/ui/scheduleTodo/TitleSuggestionInput/TitleSuggestionInput.style.ts | 입력 색상 prop 지원 추가 |
| src/shared/ui/scheduleTodo/TerminationPanel/TerminationPanel.tsx | DatePicker 경로 이동 및 반복 횟수 입력 상한 추가 |
| src/shared/ui/scheduleTodo/TerminationPanel/TerminationPanel.style.ts | 입력 width 조정 |
| src/shared/ui/scheduleTodo/SelectColor/SelectColor.tsx | 컬러 드롭다운 컴포넌트 신규 추가(에디터 footer에서 사용) |
| src/shared/ui/scheduleTodo/SelectColor/SelectColor.style.ts | SelectColor 스타일 추가 |
| src/shared/ui/scheduleTodo/SearchPlace/SearchPlacePanel.tsx | SearchPlacePanel 타입/유틸/RecentSearch 경로 정리 |
| src/shared/ui/scheduleTodo/SearchPlace/SearchPlace.tsx | SearchPlace를 scheduleTodo 영역으로 이동 및 훅 사용 방식 변경 |
| src/shared/ui/scheduleTodo/SearchPlace/SearchPlace.style.ts | SearchPlace 신규 스타일 구성 |
| src/shared/ui/scheduleTodo/SearchFriend/SearchFriend.tsx | 공유 친구 검색/선택 포탈 UI 신규 추가 |
| src/shared/ui/scheduleTodo/SearchFriend/SearchFriend.style.ts | SearchFriend 스타일 추가 |
| src/shared/ui/scheduleTodo/RepeatTypeGroup/RepeatTypeGroup.tsx | 반복 상세 토글 버튼/상태 props 추가 |
| src/shared/ui/scheduleTodo/RepeatTypeGroup/RepeatTypeGroup.style.ts | 토글 버튼 스타일/반응형 동작 수정 |
| src/shared/ui/scheduleTodo/RepeatPanel/YearlyRepeatPanel.tsx | yearly 커스텀 반복 패널 신규 |
| src/shared/ui/scheduleTodo/RepeatPanel/WeeklyRepeatPanel.tsx | 주간 반복 UI 문구(요일 지정) 추가 |
| src/shared/ui/scheduleTodo/RepeatPanel/RepeatPanel.style.ts | 반복 패널 입력/칩 UI 스타일 조정 |
| src/shared/ui/scheduleTodo/RepeatPanel/MonthlyRepeatPanel.tsx | monthly 커스텀 반복 패널 신규 |
| src/shared/ui/scheduleTodo/RepeatPanel/index.ts | RepeatPanel 배럴 export 추가 |
| src/shared/ui/scheduleTodo/RepeatPanel/DailyRepeatPanel.tsx | daily 커스텀 반복 패널 신규 |
| src/shared/ui/scheduleTodo/RecentSearch/RecentSearch.tsx | 최근검색 item 컴포넌트 신규(삭제 버튼 포함) |
| src/shared/ui/scheduleTodo/RecentSearch/RecentSearch.style.ts | RecentSearch 스타일 추가 |
| src/shared/ui/Modals/TodoEditor/TodoTitleField.tsx | TitleSuggestionInput 경로를 scheduleTodo로 변경 |
| src/shared/ui/Modals/TodoEditor/TodoRepeatSection.tsx | 반복 상세 패널 토글 UX로 변경 및 컴포넌트 경로 정리 |
| src/shared/ui/Modals/TodoEditor/TodoDateTimeSection.tsx | Date/TimePicker 경로를 calendar로 이동 |
| src/shared/ui/Modals/TodoEditor/index.style.ts | 섹션 레이아웃 마진 조정 |
| src/shared/ui/Modals/ScheduleEditor/ShareSchedulePanel.tsx | 공유 일정 섹션(UI+선택 친구 목록) 신규 추가 |
| src/shared/ui/Modals/ScheduleEditor/ScheduleTitleField.tsx | 공유 일정일 때 제목 색상 변경 지원 |
| src/shared/ui/Modals/ScheduleEditor/ScheduleRepeatSection.tsx | 반복 상세 패널 토글 UX로 변경 및 컴포넌트 경로 정리 |
| src/shared/ui/Modals/ScheduleEditor/ScheduleEditorFields.tsx | 공유 일정 패널 삽입 및 isShared/onSharedChange 전달 |
| src/shared/ui/Modals/ScheduleEditor/ScheduleEditorContent.tsx | isShared/onSharedChange 플로우 연결 |
| src/shared/ui/Modals/ScheduleEditor/ScheduleDetailsSection.tsx | SearchPlace 경로를 scheduleTodo로 변경 |
| src/shared/ui/Modals/ScheduleEditor/ScheduleDateTimeSection.tsx | Date/TimePicker 경로를 calendar로 이동 |
| src/shared/ui/Modals/ScheduleEditor/index.style.ts | 공유 섹션 스타일 추가 및 기존 섹션 padding/gap 조정 |
| src/shared/ui/Modals/ItemEditorModal/index.tsx | draft/registry/typeSync 책임을 훅으로 분리 + 공유 상태/라벨 반영 |
| src/shared/ui/Modals/ItemEditorModal/EditorModalLayout.tsx | submit 버튼 라벨 표시 prop 추가 |
| src/shared/ui/Modals/ItemEditorModal/EditorModalLayout.style.ts | 모달 스크롤/푸터/버튼 레이아웃 조정 |
| src/shared/ui/common/SearchPlace/useSearchPlace.ts | 기존 SearchPlace 훅 제거(새 shared/utils 훅으로 대체) |
| src/shared/ui/common/SearchPlace/SearchPlace.types.ts | 기존 SearchPlace 타입 제거(shared types로 이동) |
| src/shared/ui/common/Checkbox/Checkbox.style.tsx | 체크박스 미체크 상태 UI(테두리/배경) 수정 |
| src/shared/ui/calendar/CustomTimePicker/CustomTimePicker.tsx | 직접 입력형 TimePicker 신규 추가 |
| src/shared/ui/calendar/CustomTimePicker/CustomTimePicker.style.ts | CustomTimePicker 스타일 추가 |
| src/shared/ui/calendar/CustomDatePicker/CustomDatePicker.tsx | 커스텀 캘린더 DatePicker 신규 추가 |
| src/shared/ui/calendar/CustomDatePicker/CustomDatePicker.style.ts | CustomDatePicker 스타일 추가 |
| src/shared/ui/calendar/CustomBasisPanel/CustomBasisPanel.tsx | RepeatPanel import 경로를 scheduleTodo로 변경 |
| src/shared/types/scheduleTodo/titleSuggestionInput.ts | TitleSuggestionInput props/타입을 shared types로 분리 |
| src/shared/types/schedule/types.ts | SearchPlace 관련 타입을 shared types로 승격 |
| src/shared/types/schedule/shareFriend.ts | 공유 친구 타입 추가 |
| src/shared/types/modal/scheduleEditor.ts | ScheduleEditorFormProps에 isShared/onSharedChange 추가 |
| src/shared/types/modal/itemEditor.ts | ItemType 타입을 shared/types로 이동(재사용) |
| src/shared/types/calendar/types.ts | Calendar Event에 isShared(optional) 필드 추가 |
| src/shared/styles/theme.ts | 공유 일정 색상(theme.colors.share) 추가 |
| src/shared/hooks/addTodo/useTodoFooter.tsx | SelectColor 경로를 scheduleTodo로 변경 |
| src/shared/hooks/addSchedule/useScheduleFooter.tsx | SelectColor 경로를 scheduleTodo로 변경 |
| src/shared/constants/scheduleShareFriend.ts | 공유 친구 목 데이터 상수 추가 |
| src/features/Calendar/hooks/useCalendarEvents.ts | 이벤트 isShared 업데이트 함수 추가 |
| src/features/Calendar/components/CustomView/dayView/renderers.tsx | 공유 일정 표시를 people 아이콘으로 렌더링 |
| src/features/Calendar/components/CustomView/CustomWeekView.tsx | 공유 일정 표시를 people 아이콘으로 렌더링 |
| src/features/Calendar/components/CustomEvent/CustomWeekEvent.tsx | 공유 일정 표시를 people 아이콘으로 렌더링 |
| src/features/Calendar/components/CustomEvent/CustomMonthEvent.tsx | 공유 일정 표시를 people 아이콘으로 렌더링 |
| src/features/Calendar/components/CustomEvent/CustomEvent.style.ts | 주간 이벤트 타이틀 width 확장 |
| src/features/Calendar/components/CustomCalendar/CustomCalendar.tsx | eventActions에 shared 업데이트 콜백 연결 |
| src/features/Calendar/components/CustomCalendar/CalendarModals.tsx | ItemEditorModal에 onEventSharedChange 전달 |
| src/assets/icons/people.svg | 공유 일정 표시용 아이콘 추가(currentColor 적용) |
Comments suppressed due to low confidence (1)
src/shared/ui/scheduleTodo/SearchPlace/SearchPlace.tsx:9
useSearchPlace를../../../utils/useSearchPlace로 상대경로 import 하고 있는데, 이 레포는@/경로 별칭을 광범위하게 사용하고 있어(예: 같은 파일의 다른 import들) 경로 일관성이 깨지고 이동/리팩토링에 취약해집니다.@/shared/utils/useSearchPlace형태로 alias 기반 import로 통일해주세요.
yujin5959
approved these changes
May 6, 2026
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
🔗 관련 이슈
🧩 작업 요약 (TL;DR)
🔄 변경 유형
📌 주요 변경 사항
isShared필드 및 상태 업데이트 흐름 추가people.svg아이콘으로 표시people.svg가 기존 일정 포인트 컬러를 그대로 따르도록currentColor기반으로 수정🖼️ 스크린샷 / 영상 (선택)
🧠 리뷰 요청 포인트
🚧 미완 / 후속 작업
isShared연결 로직을 서버 응답 기준으로 교체 필요💬 기타 참고 사항
@copilot 이 PR을 아래 기준으로 검토해주세요:
.github/instructions/capstone.instructions.md파일을 지침으로 삼으세요.shared → features역방향 없음)index.ts) 사용이 현 패턴을 따르는지응답은 한국어로, 발견된 위반 항목과 추천 구조를 포함해주세요.