feat(creator): 라이브 탭 빈 상태를 추가한다

This commit is contained in:
Yu Sung
2026-07-04 03:39:41 +09:00
parent b6580e201f
commit 6600cd43c1
4 changed files with 69 additions and 25 deletions

View File

@@ -133,7 +133,9 @@ enum ContentSort: String, Decodable, CaseIterable {
- 동일 화면 생명주기에서 같은 `creatorId`, `sort`, 첫 페이지 데이터가 이미 있으면 불필요한 중복 호출을 피한다.
- 정렬 변경 시 첫 페이지부터 다시 조회하고, 조회 성공 시에만 기존 `liveReplayContents`를 새 정렬 결과로 교체한다.
- API 실패 시 크리에이터 채널 공통 shell은 유지하고, 이미 표시 중인 `liveReplayContents`는 유지한 채 기존 V2 패턴의 오류/빈 상태를 표시한다.
- `liveReplayContentCount == 0`이고 `currentLive == nil`이면 목록 empty state를 표시한다.
- `liveReplayContentCount == 0`이고 `currentLive == nil`이면 Empty 상태를 표시한다.
- Empty 상태에서는 sort-bar와 다시듣기 list를 모두 숨기고 `크리에이터가 라이브를 준비중입니다.\n기대해 주세요!` 문구만 표시한다.
- Empty 문구 영역은 vertical padding `48pt`를 적용한다.
### 7.3 Sort-bar
- 생성 위치: `SodaLive/Sources/V2/CreatorChannel/Components/**`
@@ -208,6 +210,7 @@ enum ContentSort: String, Decodable, CaseIterable {
- 라이브 탭 선택 시 tab-bar indicator는 기존 `CreatorChannelTabBar`의 선택 상태를 따른다.
- 라이브 탭 콘텐츠 배경은 기존 크리에이터 채널 dark theme와 맞춘다.
- sort-bar는 tab-bar 아래에 붙어 보이고, 목록 콘텐츠와 겹치지 않아야 한다.
- Empty 상태에서는 sort-bar와 list가 보이지 않아야 한다.
- 다시듣기 item의 썸네일, 제목, 가격/상태 영역은 긴 제목과 다국어 문구에서도 겹치지 않아야 한다.
- BottomSheet는 dim 또는 drag/dismiss 동작이 기존 앱 sheet 패턴과 일관되어야 한다.
- 로딩 중에는 기존 목록을 과도하게 흔들지 않고, 첫 페이지 로딩과 추가 페이지 로딩 상태를 구분한다. 목록 교체와 append는 조회 성공 시에만 수행한다.
@@ -229,6 +232,7 @@ enum ContentSort: String, Decodable, CaseIterable {
- sort-bar 터치 시 BottomSheet가 표시되고 `LATEST`, `POPULAR`, `PRICE_HIGH`, `PRICE_LOW` 4개 옵션만 보인다.
- 정렬 변경 시 첫 페이지부터 다시 조회되고, 조회 성공 시에만 목록이 새 정렬 결과로 교체된다.
- `currentLive != nil`이면 홈 탭과 동일한 현재 라이브 UI가 라이브 탭에 표시된다.
- `currentLive == nil`이고 `liveReplayContentCount == 0`이면 sort-bar/list 없이 `크리에이터가 라이브를 준비중입니다.\n기대해 주세요!` Empty 문구만 표시된다.
- 라이브 다시듣기 item에 가격, 포인트 사용 가능, 19금, 소장중, 대여중 상태가 조건에 맞게 표시된다.
- `hasNext == true` 상태에서 하단 스크롤 시 `page + 1` 페이지가 호출되고, 조회 성공 시에만 기존 목록 뒤에 append된다.
- `hasNext == false`이면 추가 페이지 호출을 하지 않는다.