@@ -14,10 +14,12 @@ class ChannelDetailsViewModel: ObservableObject {
1414 @Published var error : Error ? = nil
1515
1616 private let coreService : CoreService
17+ private let transferStorage : TransferStorage
1718
1819 /// Private initializer for the singleton instance
19- private init ( coreService: CoreService = . shared) {
20+ private init ( coreService: CoreService = . shared, transferStorage : TransferStorage = . shared ) {
2021 self . coreService = coreService
22+ self . transferStorage = transferStorage
2123 }
2224
2325 /// Find a channel by ID, checking open channels, pending channels, pending orders, then closed channels
@@ -124,15 +126,31 @@ class ChannelDetailsViewModel: ObservableObject {
124126 connections. append ( contentsOf: channels. filter { !$0. isChannelReady } )
125127 }
126128
129+ // Only show pending orders that have been paid (aligns with Android/RN behavior)
130+ let paidOrderIds : Set < String > = {
131+ guard let activeTransfers = try ? transferStorage. getActiveTransfers ( ) else {
132+ return [ ]
133+ }
134+ return Set (
135+ activeTransfers
136+ . filter { $0. type. isToSpending ( ) }
137+ . compactMap ( \. lspOrderId)
138+ )
139+ } ( )
140+
141+ if paidOrderIds. isEmpty {
142+ return connections
143+ }
144+
127145 // Create fake channels from pending orders
128146 guard let orders = try ? await coreService. blocktank. orders ( refresh: false ) else {
129147 return connections
130148 }
131149
132- let pendingOrders = orders . filter { order in
133- // Include orders that are created or paid but not yet opened
134- order . state2 == . created || order . state2 == . paid
135- }
150+ let pendingOrders = Self . pendingOrders (
151+ orders: orders ,
152+ paidOrderIds : paidOrderIds
153+ )
136154
137155 for order in pendingOrders {
138156 let fakeChannel = createFakeChannel ( from: order)
@@ -142,6 +160,12 @@ class ChannelDetailsViewModel: ObservableObject {
142160 return connections
143161 }
144162
163+ static func pendingOrders( orders: [ IBtOrder ] , paidOrderIds: Set < String > ) -> [ IBtOrder ] {
164+ orders. filter { order in
165+ paidOrderIds. contains ( order. id) && ( order. state2 == . created || order. state2 == . paid)
166+ }
167+ }
168+
145169 /// Creates a fake channel from a Blocktank order for UI display purposes
146170 private func createFakeChannel( from order: IBtOrder ) -> ChannelDetails {
147171 return ChannelDetails (
0 commit comments