98 lines
3.4 KiB
Swift
98 lines
3.4 KiB
Swift
import SwiftUI
|
||
|
||
struct PostDetailView: View {
|
||
let postID: UUID
|
||
@State private var post: Post?
|
||
|
||
var body: some View {
|
||
VStack(alignment: .leading, spacing: 0) {
|
||
if let post = post {
|
||
// Шапка поста
|
||
HStack {
|
||
Image(systemName: "person.crop.circle.fill")
|
||
.resizable()
|
||
.frame(width: 36, height: 36)
|
||
.foregroundColor(.gray)
|
||
Text(post.authorUsername)
|
||
.font(.headline)
|
||
Spacer()
|
||
Button(action: {}) {
|
||
Image(systemName: "ellipsis")
|
||
.foregroundColor(.primary)
|
||
}
|
||
}
|
||
.padding(.horizontal)
|
||
.padding(.vertical, 8)
|
||
|
||
// Изображение поста
|
||
Rectangle()
|
||
.fill(Color.gray.opacity(0.3))
|
||
.aspectRatio(1, contentMode: .fit)
|
||
.frame(maxWidth: .infinity)
|
||
|
||
// Панель действий
|
||
HStack(spacing: 16) {
|
||
Button(action: {}) {
|
||
Image(systemName: "heart")
|
||
.font(.system(size: 24))
|
||
}
|
||
Button(action: {}) {
|
||
Image(systemName: "message")
|
||
.font(.system(size: 24))
|
||
}
|
||
Button(action: {}) {
|
||
Image(systemName: "paperplane")
|
||
.font(.system(size: 24))
|
||
}
|
||
Spacer()
|
||
Button(action: {}) {
|
||
Image(systemName: "bookmark")
|
||
.font(.system(size: 24))
|
||
}
|
||
}
|
||
.foregroundColor(.primary)
|
||
.padding(.horizontal)
|
||
.padding(.top, 8)
|
||
|
||
// Лайки и описание
|
||
VStack(alignment: .leading, spacing: 4) {
|
||
Text("\(post.likes) likes")
|
||
.font(.headline)
|
||
|
||
Text(post.description ?? "")
|
||
.font(.subheadline)
|
||
}
|
||
.padding(.horizontal)
|
||
.padding(.top, 8)
|
||
|
||
// Комментарии
|
||
VStack(alignment: .leading, spacing: 4) {
|
||
Text("View all \(post.commentsCount) comments")
|
||
.font(.caption)
|
||
.foregroundColor(.secondary)
|
||
.padding(.top, 4)
|
||
|
||
Text("2 hours ago")
|
||
.font(.caption2)
|
||
.foregroundColor(.secondary)
|
||
.padding(.top, 4)
|
||
}
|
||
.padding(.horizontal)
|
||
|
||
Spacer()
|
||
|
||
} else {
|
||
ProgressView("Загрузка...")
|
||
.onAppear {
|
||
// Симуляция загрузки поста
|
||
PostService.shared.fetchPost(by: postID) { fetchedPost in
|
||
self.post = fetchedPost
|
||
}
|
||
}
|
||
}
|
||
}
|
||
.navigationBarTitleDisplayMode(.inline)
|
||
.navigationTitle("Post")
|
||
}
|
||
}
|