ConferenceInvitationReducer.swift 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. //
  2. // ConferenceInvitationReducer.swift
  3. // TUIRoomKit
  4. //
  5. // Created by jeremiawang on 2024/8/19.
  6. //
  7. import Foundation
  8. import RTCRoomEngine
  9. let ConferenceInvitationReducer = Reducer<ConferenceInvitationState>(
  10. ReduceOn(ConferenceInvitationActions.updateInvitationList, reduce: { state, action in
  11. let newInvitations: [TUIInvitation] = action.payload
  12. let previousInvitations = state.invitationList
  13. var existingIds = Set(previousInvitations.map { $0.invitee.userId })
  14. var combinedInvitations = previousInvitations
  15. for invitation in newInvitations {
  16. if !existingIds.contains(invitation.invitee.userId) {
  17. combinedInvitations.append(invitation)
  18. existingIds.insert(invitation.invitee.userId)
  19. }
  20. }
  21. state.invitationList = combinedInvitations
  22. }),
  23. ReduceOn(ConferenceInvitationActions.addInvitation, reduce: { state, action in
  24. let userIdToAdd = action.payload.invitee.userId
  25. if let index = state.invitationList.firstIndex(where: { $0.invitee.userId == userIdToAdd }) {
  26. state.invitationList[index] = action.payload
  27. } else {
  28. state.invitationList.insert(action.payload, at: 0)
  29. }
  30. }),
  31. ReduceOn(ConferenceInvitationActions.removeInvitation, reduce: { state, action in
  32. let userIdToRemove = action.payload
  33. if let index = state.invitationList.firstIndex(where: { $0.invitee.userId == userIdToRemove }) {
  34. state.invitationList.remove(at: index)
  35. }
  36. }),
  37. ReduceOn(ConferenceInvitationActions.changeInvitationStatus, reduce: { state, action in
  38. let userIdToChange = action.payload.invitee.userId
  39. if let index = state.invitationList.firstIndex(where: { $0.invitee.userId == userIdToChange }) {
  40. state.invitationList[index] = action.payload
  41. }
  42. }),
  43. ReduceOn(ConferenceInvitationActions.clearInvitationList, reduce: { state, action in
  44. state.invitationList.removeAll()
  45. })
  46. )