Skip to content

Todo를 LongPressGesture 시 호버로 해당 뷰를 뜨게 한다 #375

Description

@opficdev

목적

  • Todo 상세 화면으로 이동할 수 있는 행을 길게 누르면 현재 화면 위에 읽기 전용 상세 미리보기를 표시한다.
  • 기존 짧은 탭 내비게이션은 그대로 유지한다.
  • 미리보기에서는 추가 내비게이션이나 변경 동작을 제공하지 않는다.

적용 범위

  • TodoListView의 일반 목록 행
  • TodoListView의 검색 결과 행
  • Home SearchView의 Todo 검색 결과 행
  • HomeView의 최근 Todo 행
  • TodayViewTodayTodoRow

제외 범위

  • PushNotificationListView의 푸시 알림 행
  • Todo 상세·편집 화면 본문 안의 Todo 참조 링크
  • 미리보기 안의 정보, 편집, 완료, 삭제, 재시도, Alert
  • 미리보기에서 다른 화면으로 이동하는 동작
  • 상황별 메뉴 항목

사용자 동작

  • Todo 행을 짧게 탭하면 기존 방식으로 Todo 상세 화면에 내비게이션한다.
  • Todo 행을 길게 누르면 Todo 상세 미리보기만 표시한다.
  • 미리보기에는 메뉴와 조작 요소를 표시하지 않는다.
  • 바깥 영역을 탭하면 시스템 동작에 따라 미리보기를 닫는다.
  • 기존 Todo 행의 스와이프 동작은 유지한다.

미리보기 내용과 상태

  • 제목, Todo 번호, Markdown 본문만 표시한다.
  • TodoDetailContentView의 표시 구성을 재사용한다.
  • 기기 크기에 맞춰 미리보기 크기를 제한한다.
  • 긴 본문은 미리보기 내부에서 스크롤할 수 있어야 한다.
  • Dynamic Type과 밝은 화면·어두운 화면을 지원한다.
  • Todo 조회 중에는 LoadingView를 표시한다.
  • 조회에 실패하면 Alert이나 재시도 버튼 없이 미리보기 내부에 오류 문구를 표시한다.

구현 방향

  • PresentationShared에 재사용 가능한 UIContextMenuInteraction 연결 요소와 View modifier를 둔다.
  • previewProvider는 읽기 전용 TodoDetailPreviewView를 제공한다.
  • actionProvidernil로 설정해 메뉴를 표시하지 않는다.
  • Todo 조회와 참조 해석은 기존 TodoDetailFeature 흐름을 재사용하고 showEditButtonfalse로 설정한다.
  • TodoDetailPreviewView는 Todo 참조 정보를 렌더링하되 참조 열기 동작을 전달하지 않는다.
  • 각 적용 화면은 Todo ID만 공통 View modifier에 전달한다.
  • 새 모듈 의존성은 추가하지 않는다.

데이터 흐름과 생명주기

  1. Todo 행을 길게 누르면 해당 Todo ID로 미리보기용 Store를 생성한다.
  2. FetchTodoByIdUseCase로 전체 Todo를 조회한다.
  3. Todo 본문에 포함된 참조 정보를 기존 흐름으로 해석한다.
  4. 조회 결과로 제목, 번호, Markdown 본문을 표시한다.
  5. 미리보기를 닫으면 미리보기용 Store를 해제한다.
  6. 다시 길게 누르면 새 Store를 생성하고 최신 Todo를 조회한다.

완료 조건

  • 적용 범위의 다섯 행 그룹에서 길게 누르기 미리보기 제공
  • PushNotificationListView에는 미리보기 미적용
  • 미리보기에 메뉴, 내비게이션, 변경 동작 미제공
  • 짧은 탭 내비게이션과 기존 스와이프 동작 유지
  • 제목, 번호, Markdown 본문 표시
  • 긴 본문 내부 스크롤 지원
  • 로딩과 조회 실패 상태를 미리보기 내부에서 처리

검증

  • UIContextMenuConfiguration이 사용자 지정 미리보기를 제공하고 actionProvider를 사용하지 않는지 검증
  • 전달한 Todo ID로 전체 Todo를 조회하는지 검증
  • 기존 TodoDetailFeatureTests의 조회, 참조 해석, 로딩, 실패 흐름 확인
  • 변경 Swift 파일 SwiftLint
  • 관련 PresentationShared, HomeTab, TodayTab 테스트
  • 관련 scheme 빌드만 확인
  • 실제 길게 누르기 동작은 앱 실행이 별도로 승인된 경우 확인

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions