feat(live): 라이브 상세를 전역 바텀시트로 표시한다
This commit is contained in:
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user