feat(live): 라이브 상세를 전역 바텀시트로 표시한다

This commit is contained in:
Yu Sung
2026-03-06 17:46:26 +09:00
parent 42ce09d927
commit 298c02b83f
4 changed files with 79 additions and 1 deletions

View File

@@ -11,6 +11,14 @@ struct AppRoute: Hashable {
let id = UUID()
}
struct LiveDetailSheetState {
let roomId: Int
let onClickParticipant: () -> Void
let onClickReservation: () -> Void
let onClickStart: () -> Void
let onClickCancel: () -> Void
}
class AppState: ObservableObject {
static let shared = AppState()
@@ -62,6 +70,7 @@ class AppState: ObservableObject {
@Published var isShowErrorPopup = false
@Published var errorMessage = ""
@Published var liveDetailSheet: LiveDetailSheetState? = nil
private func syncStepWithNavigationPath() {
let validRoutes = Set(navigationPath)
@@ -83,10 +92,21 @@ class AppState: ObservableObject {
DispatchQueue.main.async {
switch step {
case .splash, .main:
self.liveDetailSheet = nil
self.rootStep = step
self.routeStepMap.removeAll()
self.navigationPath.removeAll()
self.appStep = step
case .liveDetail(let roomId, let onClickParticipant, let onClickReservation, let onClickStart, let onClickCancel):
self.liveDetailSheet = LiveDetailSheetState(
roomId: roomId,
onClickParticipant: onClickParticipant,
onClickReservation: onClickReservation,
onClickStart: onClickStart,
onClickCancel: onClickCancel
)
self.appStep = step
default:
let route = AppRoute()
@@ -99,6 +119,12 @@ class AppState: ObservableObject {
func back() {
DispatchQueue.main.async {
if self.liveDetailSheet != nil {
self.liveDetailSheet = nil
self.syncStepWithNavigationPath()
return
}
if self.navigationPath.isEmpty {
self.rootStep = .main
self.appStep = .main
@@ -108,6 +134,13 @@ class AppState: ObservableObject {
_ = self.navigationPath.popLast()
}
}
func hideLiveDetailSheet() {
DispatchQueue.main.async {
self.liveDetailSheet = nil
self.syncStepWithNavigationPath()
}
}
// ( -> ) UI
func softRestart() {