Skip to content

Commit

Permalink
fix: service toggle issue after switch focus (tisfeng#424)
Browse files Browse the repository at this point in the history
* fix: service toggle issue after switch focus

* fix: onChange modifier issue

---------

Co-authored-by: Tisfeng <[email protected]>
  • Loading branch information
phlpsong and tisfeng committed Feb 25, 2024
1 parent 74389fd commit 2888379
Showing 1 changed file with 23 additions and 13 deletions.
36 changes: 23 additions & 13 deletions Easydict/NewApp/View/SettingView/Tabs/ServiceTab.swift
Original file line number Diff line number Diff line change
Expand Up @@ -121,28 +121,29 @@ private struct ServiceItems: View {
}
}

private class ServiceItemViewModel: ObservableObject {
@Published var isEnable = false

init(isEnable: Bool) {
self.isEnable = isEnable
}
}

@available(macOS 13.0, *)
private struct ServiceItemView: View {
let service: QueryService

@EnvironmentObject private var viewModel: ServiceTabViewModel

private var enabled: Binding<Bool> {
.init {
service.enabled
} set: { newValue in
guard service.enabled != newValue else { return }
service.enabled = newValue
if newValue {
service.enabledQuery = newValue
}
EZLocalStorage.shared().setService(service, windowType: viewModel.windowType)
viewModel.postUpdateServiceNotification()
}
@ObservedObject private var serviceItemViewModel: ServiceItemViewModel

init(service: QueryService) {
self.service = service
serviceItemViewModel = ServiceItemViewModel(isEnable: service.enabled)
}

var body: some View {
Toggle(isOn: enabled) {
Toggle(isOn: $serviceItemViewModel.isEnable) {
HStack {
Image(service.serviceType().rawValue)
.resizable()
Expand All @@ -153,6 +154,15 @@ private struct ServiceItemView: View {
.fixedSize()
}
}
.onReceive(serviceItemViewModel.$isEnable) { newValue in
guard service.enabled != newValue else { return }
service.enabled = newValue
if newValue {
service.enabledQuery = newValue
}
EZLocalStorage.shared().setService(service, windowType: viewModel.windowType)
viewModel.postUpdateServiceNotification()
}
.padding(4.0)
.toggleStyle(.switch)
.controlSize(.small)
Expand Down

0 comments on commit 2888379

Please sign in to comment.