Compare commits

..

No commits in common. "9ad744f3f1046746f1e7eed00f92971fd730aba0" and "32dd59e635e3b6688dc33761b194d91a57455877" have entirely different histories.

7 changed files with 48 additions and 72 deletions

View File

@ -14,7 +14,6 @@ struct RefreshableScrollView<Content: View>: UIViewRepresentable {
func makeUIView(context: Context) -> UIScrollView { func makeUIView(context: Context) -> UIScrollView {
let scrollView = UIScrollView() let scrollView = UIScrollView()
scrollView.delaysContentTouches = false
let refreshControl = UIRefreshControl() let refreshControl = UIRefreshControl()
refreshControl.addTarget(context.coordinator, action: #selector(Coordinator.handleRefresh), for: .valueChanged) refreshControl.addTarget(context.coordinator, action: #selector(Coordinator.handleRefresh), for: .valueChanged)

View File

@ -4,7 +4,6 @@
// //
// Created by cheykrym on 09/06/2025. // Created by cheykrym on 09/06/2025.
// //
// НЕ ИСПОЛЬЗУЕТСЯ
import SwiftUI import SwiftUI

View File

@ -22,10 +22,7 @@ struct HomeTab: View {
} }
} }
} }
.navigationBarTitleDisplayMode(.inline) .navigationTitle("Лента")
.toolbar {
ToolbarItem(placement: .principal) {}
}
.onAppear { .onAppear {
if posts.isEmpty { if posts.isEmpty {
fetchData(isInitialLoad: true) fetchData(isInitialLoad: true)
@ -38,8 +35,6 @@ struct HomeTab: View {
private func fetchData(isInitialLoad: Bool = false) { private func fetchData(isInitialLoad: Bool = false) {
if isInitialLoad { if isInitialLoad {
isLoading = true isLoading = true
} else {
isRefreshing = true
} }
PostService.shared.fetchAllPosts { fetchedPosts in PostService.shared.fetchAllPosts { fetchedPosts in

View File

@ -43,7 +43,15 @@ struct ProfileContentTabbedGrid: View {
.cornerRadius(8) .cornerRadius(8)
.font(.subheadline) .font(.subheadline)
Button {
// Создать пост
} label: {
Label("Создать", systemImage: "plus")
.font(.subheadline)
.padding(8)
.background(Color.blue.opacity(0.2))
.cornerRadius(8)
}
} else { } else {
TextField("Поиск", text: $searchQuery) TextField("Поиск", text: $searchQuery)
.padding(.horizontal, 10) .padding(.horizontal, 10)

View File

@ -22,72 +22,50 @@ struct ProfileTab: View {
@State private var selectedPostData: (Post, [Post])? @State private var selectedPostData: (Post, [Post])?
@State private var isShowingFollowers = false
@State private var isShowingFollowing = false
var body: some View { var body: some View {
NavigationView { NavigationView {
if !isContentLoaded { if !isContentLoaded {
SplashScreenView() SplashScreenView()
} else { } else {
ZStack(alignment: .bottomTrailing) { VStack(spacing: 0) {
VStack(spacing: 0) { // Скрытый NavigationLink для программного перехода
// Скрытые NavigationLink для программного перехода if let (post, posts) = selectedPostData {
NavigationLink(destination: FollowersView(followers: followers), isActive: $isShowingFollowers) { EmptyView() } NavigationLink(
NavigationLink(destination: FollowingView(following: following), isActive: $isShowingFollowing) { EmptyView() } destination: PostFeedView(posts: posts, selectedPostID: post.id),
isActive: Binding(
get: { selectedPostData != nil },
set: { if !$0 { selectedPostData = nil } }
),
label: { EmptyView() }
)
}
if let (post, posts) = selectedPostData { RefreshableScrollView(isRefreshing: $isRefreshing, onRefresh: {
NavigationLink( fetchData()
destination: PostFeedView(posts: posts, selectedPostID: post.id), }) {
isActive: Binding( VStack(spacing: 0) {
get: { selectedPostData != nil }, header
set: { if !$0 { selectedPostData = nil } } .frame(minHeight: 300)
), .frame(maxWidth: .infinity)
label: { EmptyView() } .background(Color(.systemBackground))
ProfileContentTabbedGrid(
isContentLoaded: isContentLoaded,
allPosts: $allPosts,
isLoading: $isLoading,
onPostTapped: { post, posts in
self.selectedPostData = (post, posts)
}
) )
} }
RefreshableScrollView(isRefreshing: $isRefreshing, onRefresh: {
fetchData()
}) {
VStack(spacing: 12) {
header
// .frame(minHeight: 300)
.frame(maxWidth: .infinity)
.background(Color(.systemBackground))
ProfileContentTabbedGrid(
isContentLoaded: isContentLoaded,
allPosts: $allPosts,
isLoading: $isLoading,
onPostTapped: { post, posts in
self.selectedPostData = (post, posts)
}
)
}
}
} }
// FAB
Button(action: {
// TODO: Действие для создания поста
}) {
Image(systemName: "plus")
.font(.system(size: 24, weight: .bold))
.foregroundColor(.white)
.padding()
.background(Color.blue)
.clipShape(Circle())
.shadow(radius: 5)
}
.padding()
} }
.navigationBarTitleDisplayMode(.inline) .navigationBarTitleDisplayMode(.inline)
.toolbar { .toolbar {
ToolbarItem(placement: .principal) { ToolbarItem(placement: .principal) {
Button(action: { sheetType = .accountShare }) { Button(action: { sheetType = .accountShare }) {
HStack(spacing: 4) { HStack(spacing: 4) {
Text(selectedAccount) Text("custom_user_name")
.font(.headline) .font(.headline)
.foregroundColor(.primary) .foregroundColor(.primary)
Image(systemName: "chevron.down") Image(systemName: "chevron.down")
@ -153,7 +131,7 @@ struct ProfileTab: View {
.frame(width: 72, height: 72) .frame(width: 72, height: 72)
.foregroundColor(.gray) .foregroundColor(.gray)
Text("custom_user_name") Text(selectedAccount)
.font(.headline) .font(.headline)
} }
.padding(.top, 16) .padding(.top, 16)
@ -167,10 +145,10 @@ struct ProfileTab: View {
// Статистика // Статистика
HStack(spacing: 32) { HStack(spacing: 32) {
statView("24", "Посты") statView("24", "Посты")
Button(action: { isShowingFollowers = true }) { NavigationLink(destination: FollowersView(followers: followers)) {
statView("1.2k", "Подписчики") statView("1.2k", "Подписчики")
} }
Button(action: { isShowingFollowing = true }) { NavigationLink(destination: FollowingView(following: following)) {
statView("156", "Подписки") statView("156", "Подписки")
} }
} }
@ -186,6 +164,5 @@ struct ProfileTab: View {
Text(label) Text(label)
.font(.caption) .font(.caption)
} }
.foregroundColor(.primary)
} }
} }

View File

@ -1,5 +1,3 @@
// НЕ ИСПОЛЬЗУЕТСЯ
import SwiftUI import SwiftUI
struct PublicsTab: View { struct PublicsTab: View {

View File

@ -250,14 +250,13 @@
1AEE5EA92E21A4FC00A3DCA3 /* Tab */ = { 1AEE5EA92E21A4FC00A3DCA3 /* Tab */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
1A7940B52DF77F21002569DA /* MainView.swift */,
1AEE5EAA2E21A83200A3DCA3 /* HomeTab.swift */,
1AEE5EB22E21A85800A3DCA3 /* SearchTab.swift */,
1A7940C92DF7A99B002569DA /* ChatsTab.swift */,
1A7940CD2DF7A9AA002569DA /* ProfileTab.swift */,
1AEE5ECC2E21C9D100A3DCA3 /* Profile */, 1AEE5ECC2E21C9D100A3DCA3 /* Profile */,
1A7940C52DF7A98E002569DA /* ContactsTab.swift */, 1A7940C52DF7A98E002569DA /* ContactsTab.swift */,
1A7940C92DF7A99B002569DA /* ChatsTab.swift */,
1A7940B52DF77F21002569DA /* MainView.swift */,
1AEE5EAA2E21A83200A3DCA3 /* HomeTab.swift */,
1AEE5EAE2E21A84500A3DCA3 /* PublicsTab.swift */, 1AEE5EAE2E21A84500A3DCA3 /* PublicsTab.swift */,
1AEE5EB22E21A85800A3DCA3 /* SearchTab.swift */,
); );
path = Tab; path = Tab;
sourceTree = "<group>"; sourceTree = "<group>";
@ -267,6 +266,7 @@
children = ( children = (
1AD757CC2E27608C0069C1FD /* PostFeedView.swift */, 1AD757CC2E27608C0069C1FD /* PostFeedView.swift */,
1ACE60FF2E22F54700B37AC5 /* Settings */, 1ACE60FF2E22F54700B37AC5 /* Settings */,
1A7940CD2DF7A9AA002569DA /* ProfileTab.swift */,
1AB4F8CC2E22E341002B6E40 /* AccountShareSheet.swift */, 1AB4F8CC2E22E341002B6E40 /* AccountShareSheet.swift */,
1AE587242E23337000254F06 /* ProfileContentGrid.swift */, 1AE587242E23337000254F06 /* ProfileContentGrid.swift */,
1ACE61202E22FFD000B37AC5 /* ProfileContentTabbedGrid.swift */, 1ACE61202E22FFD000B37AC5 /* ProfileContentTabbedGrid.swift */,