RelayToggle.swift (1435B)
1 // 2 // RelayToggle.swift 3 // damus 4 // 5 // Created by William Casarin on 2023-02-10. 6 // 7 8 import SwiftUI 9 10 struct RelayToggle: View { 11 let state: DamusState 12 let timeline: Timeline 13 let relay_id: RelayURL 14 15 func toggle_binding(relay_id: RelayURL) -> Binding<Bool> { 16 return Binding(get: { 17 !state.relay_filters.is_filtered(timeline: timeline, relay_id: relay_id) 18 }, set: { on in 19 if !on { 20 state.relay_filters.insert(timeline: timeline, relay_id: relay_id) 21 } else { 22 state.relay_filters.remove(timeline: timeline, relay_id: relay_id) 23 } 24 }) 25 } 26 27 var body: some View { 28 HStack { 29 if let relay_connection { 30 RelayStatusView(connection: relay_connection) 31 } 32 RelayType(is_paid: state.relay_model_cache.model(with_relay_id: relay_id)?.metadata.is_paid ?? false) 33 Toggle(relay_id.absoluteString, isOn: toggle_binding(relay_id: relay_id)) 34 .toggleStyle(SwitchToggleStyle(tint: .accentColor)) 35 } 36 } 37 38 private var relay_connection: RelayConnection? { 39 state.pool.get_relay(relay_id)?.connection 40 } 41 } 42 43 struct RelayToggle_Previews: PreviewProvider { 44 static var previews: some View { 45 RelayToggle(state: test_damus_state, timeline: .search, relay_id: RelayURL("wss://jb55.com")!) 46 .padding() 47 } 48 }