Tusker/Tusker/Screens/Report/ReportSelectRulesView.swift

76 lines
2.0 KiB
Swift

//
// ReportSelectRulesView.swift
// Tusker
//
// Created by Shadowfacts on 1/13/23.
// Copyright © 2023 Shadowfacts. All rights reserved.
//
import SwiftUI
struct ReportSelectRulesView: View {
@ObservedObject var mastodonController: MastodonController
@ObservedObject var report: EditedReport
var selectedRuleIDs: [String] {
get {
if case .rules(let ids) = report.reason {
return ids
} else {
return []
}
}
nonmutating set {
report.reason = .rules(newValue)
}
}
init(mastodonController: MastodonController, report: EditedReport) {
self.mastodonController = mastodonController
self.report = report
}
var body: some View {
List(mastodonController.instance!.rules!) { rule in
Button {
if selectedRuleIDs.contains(rule.id) {
selectedRuleIDs.removeAll(where: { $0 == rule.id })
} else {
selectedRuleIDs.append(rule.id)
}
} label: {
HStack {
Text(rule.text)
.foregroundColor(.primary)
Spacer()
Image(systemName: "checkmark")
.foregroundColor(selectedRuleIDs.contains(rule.id) ? .accentColor : .clear)
}
}
.appGroupedListRowBackground()
}
.withAppBackgroundIfAvailable()
.navigationTitle("Rules")
}
}
private extension View {
@available(iOS, obsoleted: 16.0)
@ViewBuilder
func withAppBackgroundIfAvailable() -> some View {
if #available(iOS 16.0, *) {
self
.scrollContentBackground(.hidden)
.background(Color.appGroupedBackground)
} else {
self
}
}
}
//struct ReportSelectRulesView_Previews: PreviewProvider {
// static var previews: some View {
// ReportSelectRulesView()
// }
//}