77 lines
2.1 KiB
Swift
77 lines
2.1 KiB
Swift
import DesignSystem
|
|
import Env
|
|
import Models
|
|
import Network
|
|
import Status
|
|
import SwiftUI
|
|
|
|
public struct ReportView: View {
|
|
@Environment(\.dismiss) private var dismiss
|
|
|
|
@EnvironmentObject private var theme: Theme
|
|
@EnvironmentObject private var client: Client
|
|
|
|
let status: Status
|
|
@State private var commentText: String = ""
|
|
@State private var isSendingReport: Bool = false
|
|
|
|
struct ReportSent: Decodable {
|
|
let id: String
|
|
}
|
|
|
|
public var body: some View {
|
|
NavigationStack {
|
|
Form {
|
|
Section {
|
|
TextField("report.comment.placeholder",
|
|
text: $commentText,
|
|
axis: .vertical)
|
|
}
|
|
.listRowBackground(theme.primaryBackgroundColor)
|
|
|
|
StatusEmbeddedView(status: status, client: .init(server: ""), routerPath: RouterPath())
|
|
.allowsHitTesting(false)
|
|
.listRowBackground(theme.primaryBackgroundColor)
|
|
}
|
|
.navigationTitle("report.title")
|
|
.navigationBarTitleDisplayMode(.inline)
|
|
.scrollContentBackground(.hidden)
|
|
.background(theme.secondaryBackgroundColor)
|
|
.scrollDismissesKeyboard(.immediately)
|
|
.toolbar {
|
|
ToolbarItem(placement: .navigationBarTrailing) {
|
|
Button {
|
|
isSendingReport = true
|
|
Task {
|
|
do {
|
|
let _: ReportSent =
|
|
try await client.post(endpoint: Statuses.report(accountId: status.account.id,
|
|
statusId: status.id,
|
|
comment: commentText))
|
|
dismiss()
|
|
isSendingReport = false
|
|
} catch {
|
|
isSendingReport = false
|
|
}
|
|
}
|
|
} label: {
|
|
if isSendingReport {
|
|
ProgressView()
|
|
} else {
|
|
Text("report.action.send")
|
|
}
|
|
}
|
|
}
|
|
|
|
ToolbarItem(placement: .navigationBarLeading) {
|
|
Button {
|
|
dismiss()
|
|
} label: {
|
|
Text("action.cancel")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|