feat(main): 콘텐츠 탭 타이틀바를 정리한다
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
- 문서 정책: `docs/agent-guides/documentation-policy.md`
|
||||
- Figma 전체 화면: `https://www.figma.com/design/HmN1yNdJ3EIpqknFL0Hkab/-%EA%B3%B5%EC%9C%A0%EC%9A%A9-%EB%B3%B4%EC%9D%B4%EC%8A%A4%EC%98%A8-UI-UX-%EA%B8%B0%ED%9A%8D%EB%AC%B8%EC%84%9C?node-id=24-6737&m=dev`
|
||||
- Figma 전체 화면 node: `24:6737`
|
||||
- Figma title bar: `24:6738`
|
||||
- Figma 배너: `24:6741`
|
||||
- Figma 새로 올라온 오디오: `24:6751`
|
||||
- Figma New&Hot: `24:6758`
|
||||
@@ -24,6 +25,7 @@
|
||||
- 메인 하단 `콘텐츠` 탭 안에 내부 `추천` 탭 화면을 구현한다.
|
||||
- API endpoint는 `GET /api/v2/audio/recommendations`를 사용한다.
|
||||
- title bar와 내부 tab bar는 고정하고, 배너부터 하위 콘텐츠만 세로 스크롤한다.
|
||||
- title bar는 Figma `24:6738` 기준으로 좌측에 메인 탭명 `콘텐츠`, 우측에 `cash`/`search`/`storage` 액션을 표시한다.
|
||||
- Figma에 보이는 섹션별로 Phase를 분리한다.
|
||||
- 이번 범위에서 `추천 시리즈`, `키워드의 오디오`는 구현하지 않는다.
|
||||
- `V2` 패키지 하위에 구현된 재사용 가능한 위젯 후보를 먼저 확인하고 필요한 경우 최소 보완한다.
|
||||
@@ -62,6 +64,7 @@
|
||||
- 여러 화면에서 재사용 근거가 있는 UI만 `SodaLive/Sources/V2/Component/**`로 승격한다.
|
||||
- `MainView`는 `.content` 탭에서 신규 콘텐츠 탭 root를 보여주고, 상세 진입 guard callback만 전달한다.
|
||||
- 콘텐츠 탭 root는 title bar와 내부 tab bar를 고정 영역으로 두고, 추천 탭 body 내부에서만 `ScrollView`를 사용한다.
|
||||
- 콘텐츠 탭 root의 title bar는 `DefaultTitleBar(title: MainTab.content.title)`를 사용하고, 홈 탭은 기존 `HomeTitleBar`를 유지한다.
|
||||
- 섹션 배열이 비어 있으면 해당 섹션을 숨긴다.
|
||||
- 전체 응답이 비어 있거나 API 실패/디코딩 실패 시 최소 empty 또는 error 상태를 표시한다.
|
||||
- 오디오 상세 진입은 기존 `handleRecommendationContentTap(contentId:)`의 로그인/성인 콘텐츠 guard 흐름을 재사용한다.
|
||||
@@ -93,8 +96,10 @@
|
||||
|
||||
## 재사용 가능한 V2 위젯 후보
|
||||
|
||||
- `SodaLive/Sources/V2/Component/DefaultTitleBar.swift`
|
||||
- 콘텐츠 탭 title bar의 좌측 고정 title과 우측 액션 영역 기준 후보.
|
||||
- `SodaLive/Sources/V2/Component/HomeTitleBar.swift`
|
||||
- 콘텐츠 탭 title bar와 우측 액션 영역의 기준 후보.
|
||||
- 홈 탭 title bar 기준 후보이며, 콘텐츠 탭에는 사용하지 않는다.
|
||||
- `SodaLive/Sources/V2/Component/TextTabBar.swift`
|
||||
- 내부 `추천` 탭 bar 구성 후보.
|
||||
- `SodaLive/Sources/V2/Component/Banner/BannerCarousel.swift`
|
||||
@@ -635,3 +640,14 @@
|
||||
- 새로 올라온 오디오, 무료 오디오, 포인트 오디오, 추천 오디오 섹션이 `AudioContentThumbnailCard`를 사용하도록 정리했다.
|
||||
- 기존 `MainContentAudioTagOverlay.swift`를 삭제하고 신규 공용 card 파일을 Xcode project에 추가했다.
|
||||
- `plutil`은 `OK`, `xcodebuild`는 `BUILD SUCCEEDED`로 통과했다.
|
||||
- 2026-07-08 콘텐츠 탭 title bar Figma 반영:
|
||||
- 실행/확인:
|
||||
- Figma node `24:6738`
|
||||
- `SodaLive/Sources/V2/Main/Content/MainContentView.swift`
|
||||
- `SodaLive/Sources/V2/Main/MainView.swift`
|
||||
- `SodaLive/Sources/V2/Component/DefaultTitleBar.swift`
|
||||
- `SodaLive/Sources/V2/Component/HomeTitleBar.swift`
|
||||
- 결과:
|
||||
- 콘텐츠 탭 title bar를 `DefaultTitleBar(title: MainTab.content.title)`로 변경해 좌측에 메인 탭명 `콘텐츠`를 고정 표시하도록 반영했다.
|
||||
- 우측 액션은 `ic_bar_cash`, `ic_bar_search`, `ic_bar_storage` 순서로 정리하고, `ic_bar_storage`는 `MainContentView.onTapStorage`와 `MainView.handleContentStorageTap`을 통해 `.myBox(currentTab: .orderlist)`로 이동하도록 연결했다.
|
||||
- 홈 탭은 기존 `HomeTitleBar`와 `ic_bar_bell` 동작을 유지한다.
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
Figma 참조:
|
||||
- 전체 화면: `24:6737`, `https://www.figma.com/design/HmN1yNdJ3EIpqknFL0Hkab/-%EA%B3%B5%EC%9C%A0%EC%9A%A9-%EB%B3%B4%EC%9D%B4%EC%8A%A4%EC%98%A8-UI-UX-%EA%B8%B0%ED%9A%8D%EB%AC%B8%EC%84%9C?node-id=24-6737&m=dev`
|
||||
- title bar: `24:6738`
|
||||
- 배너: `24:6741`
|
||||
- 새로 올라온 오디오: `24:6751`
|
||||
- New&Hot: `24:6758`
|
||||
@@ -85,6 +86,8 @@ Swift 모델은 기존 V2 관례에 맞춰 `Decodable` 구조체로 선언한다
|
||||
|
||||
### 7.3 Fixed shell and scrolling
|
||||
- 콘텐츠 탭 title bar는 화면 상단 고정 영역이다.
|
||||
- 콘텐츠 탭 title bar 좌측은 홈 로고나 내부 탭명이 아니라 메인 탭명 `콘텐츠`를 고정 표시한다.
|
||||
- 콘텐츠 탭 title bar 우측은 Figma `24:6738` 기준 `cash`, `search`, `storage` 액션 아이콘을 표시하고 알림 bell 아이콘은 사용하지 않는다.
|
||||
- 내부 tab bar도 title bar 아래 고정 영역이다.
|
||||
- Figma `24:6741` 배너부터 하위 콘텐츠만 세로 `ScrollView` 안에 둔다.
|
||||
- 하단 main tab bar와 mini player 영역은 기존 `MainView` 구조를 유지한다.
|
||||
@@ -119,6 +122,7 @@ Swift 모델은 기존 V2 관례에 맞춰 `Decodable` 구조체로 선언한다
|
||||
- `오직 보이스온에서만!`의 `ONLY` 표시는 `ic_series_original` + `img_new_only` asset 조합을 사용한다.
|
||||
|
||||
### 7.8 Navigation
|
||||
- title bar의 storage 아이콘 탭은 기존 보관함 진입 경로인 `AppState.shared.setAppStep(step: .myBox(currentTab: .orderlist))`를 사용한다.
|
||||
- 오디오 item 탭은 `audioContentId`로 기존 content detail 진입 흐름을 사용한다.
|
||||
- 배너 탭은 `eventItem`, `creatorId`, `seriesId`, `link`를 명시적으로 분기한다.
|
||||
- `eventItem`은 기존 event detail 흐름이 있으면 재사용한다.
|
||||
@@ -152,6 +156,7 @@ Swift 모델은 기존 V2 관례에 맞춰 `Decodable` 구조체로 선언한다
|
||||
## 10. Success Criteria
|
||||
- `.content` 탭에서 placeholder 대신 콘텐츠 탭 root가 표시된다.
|
||||
- 콘텐츠 탭 내부 `추천` 탭 진입 시 `GET /api/v2/audio/recommendations` 호출이 발생한다.
|
||||
- 콘텐츠 탭 title bar는 좌측 고정 title `콘텐츠`와 우측 `cash`/`search`/`storage` 액션을 표시하고, storage 탭 시 보관함으로 이동한다.
|
||||
- title bar와 내부 tab bar는 고정되고, 배너부터 하위 섹션만 세로 스크롤된다.
|
||||
- API 응답의 구현 대상 배열이 각 Figma 섹션에 매핑된다.
|
||||
- `추천 시리즈`, `#키워드의 오디오` 섹션은 구현되지 않는다.
|
||||
@@ -170,3 +175,4 @@ Swift 모델은 기존 V2 관례에 맞춰 `Decodable` 구조체로 선언한다
|
||||
- 2026-07-05: `MainView`, `MainHomeView`, `AudioContentCard`, `BannerCarousel`, `CreatorChannelAudioContentListItem`, `CreatorChannelSeriesListItem`을 확인해 재사용 후보를 정리했다.
|
||||
- 2026-07-05: 최초 문서 작성 시 `plan-task.md`만 작성되어 신규 기능 문서 정책과 맞지 않았다. 본 PRD를 추가해 정책 누락을 보완한다.
|
||||
- 2026-07-05: 사용자 확인으로 댓글 preview bubble에는 nickname을 표시하지 않고, 배너 `link`는 deep link 우선 후 외부 브라우저로 열며, `seriesId`는 `seriesDetail` route로 이동하도록 확정했다.
|
||||
- 2026-07-08: Figma `24:6738` 기준으로 콘텐츠 탭 title bar가 홈 탭 로고/bell 구성이 아니라 좌측 고정 title `콘텐츠`와 우측 `ic_bar_cash`/`ic_bar_search`/`ic_bar_storage` 구성을 사용하도록 요구사항을 보완했다.
|
||||
|
||||
Reference in New Issue
Block a user