Tusker/Tusker/Screens/Report/ReportAddStatusView.swift

59 lines
1.9 KiB
Swift

//
// ReportAddStatusView.swift
// Tusker
//
// Created by Shadowfacts on 1/14/23.
// Copyright © 2023 Shadowfacts. All rights reserved.
//
import SwiftUI
import Pachyderm
struct ReportAddStatusView: View {
@ObservedObject var report: EditedReport
let mastodonController: MastodonController
@Environment(\.dismiss) private var dismiss
@State private var statuses: [StatusMO]?
@State private var error: Error?
var body: some View {
statusesListIfLoaded
.navigationTitle("Add Posts")
}
@ViewBuilder
private var statusesListIfLoaded: some View {
if let statuses {
List {
ForEach(statuses, id: \.id) { status in
Button {
report.statusIDs.append(status.id)
dismiss()
} label: {
ReportStatusView(status: status, mastodonController: mastodonController)
}
}
}
} else {
ProgressView()
.progressViewStyle(.circular)
.alertWithData("Error Loading Posts", data: $error, actions: { _ in
Button("OK") {}
}, message: { error in
Text(error.localizedDescription)
})
.task { @MainActor in
do {
let req = Account.getStatuses(report.accountID, excludeReplies: false, excludeReblogs: true)
let (statuses, _) = try await mastodonController.run(req)
await mastodonController.persistentContainer.addAll(statuses: statuses)
self.statuses = statuses.compactMap { mastodonController.persistentContainer.status(for: $0.id) }
} catch {
self.error = error
}
}
}
}
}