import Combine final class ChatsMiddleware { static let shared = ChatsMiddleware() func middleware(state: AppState, action: AppAction) -> AnyPublisher { switch action { case .databaseAction(.storedChatsLoaded(let chats)): return Just(.chatsAction(.chatsListUpdated(chats: chats))) .eraseToAnyPublisher() case .chatsAction(.startChat(accountJid: let accountJid, participantJid: let participantJid)): return Future { promise in // find existing chat let exist = state.chatsState.chats.first { $0.account == accountJid && $0.participant == participantJid } promise(.success(.empty)) } .eraseToAnyPublisher() default: return Empty().eraseToAnyPublisher() } } }