ios_app/Shared/Views/Tab/Profile/ProfileTab.swift
2025-07-16 06:40:07 +03:00

148 lines
5.2 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import SwiftUI
struct ProfileTab: View {
@ObservedObject var viewModel: LoginViewModel
// @State private var selectedTabIndex = 0
// @State private var selectedSort = "По дате"
// @State private var selectedCategory = "#все"
// @State private var searchQuery = ""
// @State private var searchQueryArchive = ""
// @State private var searchQuerySaved = ""
// @State private var searchQueryLiked = ""
@State private var isContentLoaded = true
@State private var accounts = ["@user1", "@user2", "@user3"]
@State private var selectedAccount = "@user1"
let followers = ["@alice", "@bob", "@charlie"]
let following = ["@dev", "@design", "@ios"]
@State private var sheetType: SheetType? = nil
enum SheetType: Identifiable {
case accountShare
var id: Int {
switch self {
case .accountShare: return 1
}
}
}
var body: some View {
NavigationView {
if !isContentLoaded{
SplashScreenView()
} else {
GeometryReader { geometry in
VStack(spacing: 0) {
ScrollView {
// Шапка профиля (занимает ~50% экрана)
header
.frame(minHeight: geometry.size.height * 0.5)
.frame(maxWidth: .infinity)
.background(Color(.systemBackground))
// Скролл с контентом
ProfileContentTabbedGrid(isContentLoaded: isContentLoaded)
}
.frame(maxWidth: .infinity)
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .principal) {
Button(action: {
sheetType = .accountShare
}) {
HStack(spacing: 4) {
Text("custom_user_name")
.font(.headline)
.foregroundColor(.primary)
Image(systemName: "chevron.down")
.font(.subheadline)
.foregroundColor(.gray)
}
}
}
ToolbarItem(placement: .navigationBarTrailing) {
NavigationLink(destination: SettingsView(viewModel: viewModel)) {
Image(systemName: "wrench")
.imageScale(.large)
}
}
}
.sheet(item: $sheetType) { type in
switch type {
case .accountShare:
AccountShareSheet(
isPresented: Binding(
get: { sheetType != nil },
set: { if !$0 { sheetType = nil } }
),
selectedAccount: $selectedAccount,
accounts: accounts
)
}
}
}
}
.navigationViewStyle(StackNavigationViewStyle())
// .onAppear {
// if !isContentLoaded {
// DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
// isContentLoaded = true
// }
// }
// }
}
// MARK: - Шапка профиля
private var header: some View {
VStack(spacing: 12) {
// Аватар и имя
VStack(spacing: 6) {
Image(systemName: "person.crop.circle.fill")
.resizable()
.frame(width: 72, height: 72)
.foregroundColor(.gray)
Text(selectedAccount)
.font(.headline)
}
.padding(.top, 16)
Text("iOS разработчик, делаю интерфейсы, иногда снимаю блоги и делюсь кодом. Всегда рад новым подписчикам и интересным проектам.")
.font(.subheadline)
.foregroundColor(.secondary)
.multilineTextAlignment(.center)
.padding(.horizontal)
// Статистика
HStack(spacing: 32) {
statView("24", "Посты")
NavigationLink(destination: FollowersView(followers: followers)) {
statView("1.2k", "Подписчики")
}
NavigationLink(destination: FollowingView(following: following)) {
statView("156", "Подписки")
}
}
}
.padding(.horizontal)
}
// MARK: - Статистика
func statView(_ value: String, _ label: String) -> some View {
VStack {
Text(value)
.font(.headline)
Text(label)
.font(.caption)
}
}
}