import SwiftUI struct CreatorChannelView: View { let creatorId: Int @StateObject private var viewModel = CreatorChannelViewModel() @Environment(\.dismiss) private var dismiss var body: some View { ZStack { Color.black.ignoresSafeArea() VStack(spacing: 0) { titleBar tabBar selectedTabContent } if viewModel.isLoading { LoadingView() } } .navigationBarBackButtonHidden(true) .onAppear { if viewModel.hasLoaded == false { viewModel.fetchHome(creatorId: creatorId) } } .sodaToast(isPresented: $viewModel.isShowPopup, message: viewModel.errorMessage, autohideIn: 1) } private var titleBar: some View { CreatorChannelTitleBar( isFollow: viewModel.response?.creator.isFollow ?? false, isNotify: viewModel.response?.creator.isNotify ?? false, backgroundProgress: 1, onTapBack: { dismiss() }, onTapFollow: { viewModel.creatorFollow(follow: true, notify: true) }, onTapUnfollow: { viewModel.creatorFollow(follow: false, notify: false) }, onTapNotify: { viewModel.creatorFollow(follow: true, notify: true) }, onTapUnnotify: { viewModel.creatorFollow(follow: true, notify: false) }, onTapMore: {} ) } private var tabBar: some View { ScrollView(.horizontal, showsIndicators: false) { HStack(spacing: 20) { ForEach(CreatorChannelTab.allCases, id: \.self) { tab in Button { viewModel.selectedTab = tab } label: { VStack(spacing: 8) { Text(tab.title) .font(.system(size: 15, weight: viewModel.selectedTab == tab ? .semibold : .regular)) .foregroundColor(viewModel.selectedTab == tab ? .white : Color.gray500) Rectangle() .fill(viewModel.selectedTab == tab ? Color.soda400 : Color.clear) .frame(height: 2) } } } } .padding(.horizontal, 20) } .frame(height: 48) .background(Color.black) } @ViewBuilder private var selectedTabContent: some View { if viewModel.selectedTab != .home || viewModel.isApiFailedPlaceholderVisible { CreatorChannelPlaceholderTabView(title: viewModel.selectedTab.title) } else if let response = viewModel.response { CreatorChannelHomeView(response: response) { tab in viewModel.selectedTab = tab } } else { CreatorChannelPlaceholderTabView(title: CreatorChannelTab.home.title) } } }