111 lines
3.9 KiB
Swift
111 lines
3.9 KiB
Swift
//
|
|
// HomeView.swift
|
|
// SodaLive
|
|
//
|
|
// Created by klaus on 2023/08/09.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
import Firebase
|
|
import Kingfisher
|
|
|
|
struct HomeView: View {
|
|
|
|
@StateObject var viewModel = HomeViewModel()
|
|
@StateObject var appState = AppState.shared
|
|
|
|
private let liveView = LiveView()
|
|
private let explorer = ExplorerView()
|
|
private let messageView = MessageView()
|
|
private let contentView = ContentMainView()
|
|
|
|
var body: some View {
|
|
GeometryReader { proxy in
|
|
ZStack(alignment: .bottom) {
|
|
VStack(spacing: 0) {
|
|
ZStack {
|
|
contentView
|
|
.frame(width: viewModel.currentTab == .content ? proxy.size.width : 0)
|
|
.opacity(viewModel.currentTab == .content ? 1.0 : 0.01)
|
|
|
|
liveView
|
|
.frame(width: viewModel.currentTab == .live ? proxy.size.width : 0)
|
|
.opacity(viewModel.currentTab == .live ? 1.0 : 0.01)
|
|
|
|
explorer
|
|
.frame(width: viewModel.currentTab == .explorer ? proxy.size.width : 0)
|
|
.opacity(viewModel.currentTab == .explorer ? 1.0 : 0.01)
|
|
|
|
messageView
|
|
.frame(width: viewModel.currentTab == .message ? proxy.size.width : 0)
|
|
.opacity(viewModel.currentTab == .message ? 1.0 : 0.01)
|
|
|
|
if viewModel.currentTab == .mypage {
|
|
MyPageView()
|
|
}
|
|
}
|
|
.padding(.bottom, appState.isShowPlayer ? 72 : 0)
|
|
|
|
Spacer()
|
|
|
|
BottomTabView(width: proxy.size.width, currentTab: $viewModel.currentTab)
|
|
|
|
if proxy.safeAreaInsets.bottom > 0 {
|
|
Rectangle()
|
|
.foregroundColor(Color(hex: "111111"))
|
|
.frame(width: proxy.size.width, height: 15.3)
|
|
}
|
|
}
|
|
.onAppear {
|
|
pushTokenUpdate()
|
|
viewModel.getMemberInfo()
|
|
viewModel.getEventPopup()
|
|
}
|
|
|
|
if appState.isShowNotificationSettingsDialog {
|
|
NotificationSettingsDialog()
|
|
}
|
|
|
|
if let eventItem = appState.eventPopup {
|
|
VStack(spacing: 0) {
|
|
Spacer()
|
|
|
|
EventPopupDialogView(eventPopup: eventItem)
|
|
|
|
if proxy.safeAreaInsets.bottom > 0 {
|
|
Rectangle()
|
|
.foregroundColor(Color(hex: "222222"))
|
|
.frame(width: proxy.size.width, height: 15.3)
|
|
}
|
|
}
|
|
.background(Color(hex: "222222").opacity(0.7))
|
|
.onTapGesture {
|
|
AppState.shared.eventPopup = nil
|
|
}
|
|
}
|
|
}
|
|
.edgesIgnoringSafeArea(.bottom)
|
|
}
|
|
}
|
|
|
|
private func pushTokenUpdate() {
|
|
Messaging.messaging().token { token, error in
|
|
if let error = error {
|
|
DEBUG_LOG(error.localizedDescription)
|
|
} else {
|
|
if let token = token {
|
|
UserDefaults.set(token, forKey: .pushToken)
|
|
self.viewModel.pushTokenUpdate(pushToken: token)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
struct HomeView_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
HomeView()
|
|
}
|
|
}
|