Merge pull request #62 from kkk669/issues/61

Fix #61
This commit is contained in:
Kenta Kubo 2023-04-24 00:47:18 +09:00 committed by GitHub
commit 3901506dd0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -11,8 +11,8 @@ struct DetailView {
@Binding var server: Resolver
@Binding var isOn: Bool
private func binding(for rule: OnDemandRule) -> Binding<OnDemandRule> {
guard let index = self.server.onDemandRules.firstIndex(of: rule) else {
private func binding(for id: UUID) -> Binding<OnDemandRule> {
guard let index = self.server.onDemandRules.map(\.id).firstIndex(of: id) else {
preconditionFailure("Can't find rule in array")
}
return self.$server.onDemandRules[index]
@ -45,7 +45,7 @@ extension DetailView: View {
self.serverConfigurationSections
Section {
ForEach(self.server.onDemandRules) { rule in
NavigationLink(rule.name, value: rule)
NavigationLink(rule.name, value: rule.id)
}
.onDelete { self.server.onDemandRules.remove(atOffsets: $0) }
.onMove { self.server.onDemandRules.move(fromOffsets: $0, toOffset: $1) }
@ -61,10 +61,10 @@ extension DetailView: View {
}
}
}
.navigationDestination(for: OnDemandRule.self) { rule in
.navigationDestination(for: UUID.self) { id in
// When RuleView is opened and tap another server on the sidebar, the previous server's rule comes here.
if self.server.onDemandRules.contains(rule) {
RuleView(rule: self.binding(for: rule))
if self.server.onDemandRules.map(\.id).contains(id) {
RuleView(rule: self.binding(for: id))
}
}
}
@ -87,7 +87,7 @@ extension DetailView: View {
Section {
ForEach(self.server.onDemandRules) { rule in
NavigationLink(rule.name) {
RuleView(rule: self.binding(for: rule))
RuleView(rule: self.binding(for: rule.id))
}
}
.onDelete { self.server.onDemandRules.remove(atOffsets: $0) }