feat: provider tab

This commit is contained in:
mrFq1
2023-05-18 14:39:36 +08:00
parent 8e9bf8c6cc
commit 7fb4694f23
14 changed files with 639 additions and 260 deletions
@@ -1,38 +0,0 @@
//
// RuleProviderView.swift
// ClashX Dashboard
//
//
import SwiftUI
struct RuleProviderView: View {
@State var ruleProvider: ClashRuleProvider
var body: some View {
VStack(alignment: .leading) {
HStack {
Text(ruleProvider.name)
.font(.title)
.fontWeight(.medium)
Text(ruleProvider.type)
Text(ruleProvider.behavior)
}
HStack {
Text("\(ruleProvider.ruleCount) rules")
if let date = ruleProvider.updatedAt {
Text("Updated \(RelativeDateTimeFormatter().localizedString(for: date, relativeTo: .now))")
}
}
}
}
}
//struct RuleProviderView_Previews: PreviewProvider {
// static var previews: some View {
// RuleProviderView()
// }
//}
@@ -8,21 +8,11 @@ import SwiftUI
struct RulesView: View {
@State var ruleProviders = [ClashRuleProvider]()
@State var ruleItems = [ClashRule]()
@State private var searchString: String = ""
var providers: [ClashRuleProvider] {
if searchString.isEmpty {
return ruleProviders
} else {
return ruleProviders.filtered(searchString, for: ["name", "behavior", "type"])
}
}
var rules: [EnumeratedSequence<[ClashRule]>.Element] {
if searchString.isEmpty {
return Array(ruleItems.enumerated())
@@ -34,10 +24,6 @@ struct RulesView: View {
var body: some View {
List {
ForEach(providers, id: \.self) {
RuleProviderView(ruleProvider: $0)
}
ForEach(rules, id: \.element.id) {
RuleItemView(index: $0.offset, rule: $0.element)
}
@@ -48,14 +34,6 @@ struct RulesView: View {
ApiRequest.getRules {
ruleItems = $0
}
ApiRequest.requestRuleProviderList {
ruleProviders = $0.allProviders.map {
$0.value
}.sorted {
$0.name < $1.name
}
}
}
}
}