| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- //
- // RaiseHandApplicationListViewModel.swift
- // TUIRoomKit
- //
- // Created by janejntang on 2023/1/13.
- // Copyright © 2023 Tencent. All rights reserved.
- //
- import Foundation
- import RTCRoomEngine
- protocol RaiseHandApplicationListViewResponder: NSObject {
- func reloadApplyListView()
- func makeToast(text: String)
- func updatePlaceholderViewState(isShown: Bool)
- func updateApplyButtonState(isEnabled: Bool)
- }
- class RaiseHandApplicationListViewModel: NSObject {
- weak var viewResponder: RaiseHandApplicationListViewResponder? = nil
- var engineManager: EngineManager {
- EngineManager.shared
- }
- var roomInfo: TUIRoomInfo {
- engineManager.store.roomInfo
- }
- var inviteSeatList: [RequestEntity] = []
-
- var isPlaceholderViewShown: Bool {
- return inviteSeatList.isEmpty
- }
-
- var isApplyButtonEnabled: Bool {
- return !inviteSeatList.isEmpty
- }
-
- override init() {
- super.init()
- inviteSeatList = engineManager.store.inviteSeatList
- EngineEventCenter.shared.subscribeUIEvent(key: .TUIRoomKitService_RenewSeatList, responder: self)
- }
-
- func respondAllRequest(isAgree: Bool) {
- var isShownStageFullToast = false
- for requestEntity in engineManager.store.inviteSeatList {
- engineManager.responseRemoteRequest(requestEntity.requestId, agree: isAgree) { [weak self] in
- guard let self = self else { return }
- self.engineManager.store.deleteTakeSeatRequest(requestId: requestEntity.requestId)
- } onError: { [weak self] code, message in
- guard let self = self else { return }
- guard code == .allSeatOccupied, !isShownStageFullToast else { return }
- self.viewResponder?.makeToast(text: .onStageNumberReachedLimitText)
- isShownStageFullToast = true
- }
- }
- }
-
- func respondRequest(isAgree: Bool, request: RequestEntity) {
- engineManager.responseRemoteRequest(request.requestId, agree: isAgree) { [weak self] in
- guard let self = self else { return }
- self.engineManager.store.deleteTakeSeatRequest(requestId: request.requestId)
- self.reloadApplyListView()
- } onError: { [weak self] code, message in
- guard let self = self else { return }
- guard code == .allSeatOccupied else { return }
- self.viewResponder?.makeToast(text: .onStageNumberReachedLimitText)
- }
- }
-
- func reloadApplyListView() {
- inviteSeatList = engineManager.store.inviteSeatList
- viewResponder?.updatePlaceholderViewState(isShown: isPlaceholderViewShown)
- viewResponder?.updateApplyButtonState(isEnabled: isApplyButtonEnabled)
- viewResponder?.reloadApplyListView()
- }
-
- deinit {
- EngineEventCenter.shared.unsubscribeUIEvent(key: .TUIRoomKitService_RenewSeatList, responder: self)
- debugPrint("deinit \(self)")
- }
- }
- extension RaiseHandApplicationListViewModel: RoomKitUIEventResponder {
- func onNotifyUIEvent(key: EngineEventCenter.RoomUIEvent, Object: Any?, info: [AnyHashable : Any]?) {
- if key == .TUIRoomKitService_RenewSeatList {
- self.reloadApplyListView()
- }
- }
- }
- private extension String {
- static var onStageNumberReachedLimitText: String {
- localized("The stage is full")
- }
- }
|