Skip to content
Snippets Groups Projects
ChatFeature.swift 1.2 KiB
Newer Older
import ComposableArchitecture
import Foundation
import XCTestDynamicOverlay

public struct ChatState: Equatable, Identifiable {
  public enum ID: Equatable, Hashable {
    case contact(Data)
  }

  public struct Message: Equatable, Identifiable {
    public init(
      id: Data,
      date: Date,
      senderId: Data,
      text: String
    ) {
      self.id = id
      self.date = date
      self.senderId = senderId
      self.text = text
    }

    public var id: Data
    public var date: Date
    public var senderId: Data
    public var text: String
  }

  public init(
    id: ID,
    myContactId: Data? = nil,
    messages: IdentifiedArrayOf<Message> = []
  ) {
    self.id = id
    self.myContactId = myContactId
    self.messages = messages
  }

  public var id: ID
  public var myContactId: Data?
  public var messages: IdentifiedArrayOf<Message>
}

public enum ChatAction: Equatable {
  case start
}

public struct ChatEnvironment {
  public init() {}
}

#if DEBUG
extension ChatEnvironment {
  public static let unimplemented = ChatEnvironment()
}
#endif

public let chatReducer = Reducer<ChatState, ChatAction, ChatEnvironment>
{ state, action, env in
  switch action {
  case .start:
    return .none
  }
}