增加换肤功能
This commit is contained in:
16
TUIKit/TUIRoomKit/Source/Store/User/UserActions.swift
Normal file
16
TUIKit/TUIRoomKit/Source/Store/User/UserActions.swift
Normal file
@@ -0,0 +1,16 @@
|
||||
//
|
||||
// UserActions.swift
|
||||
// TUIRoomKit
|
||||
//
|
||||
// Created by CY zhao on 2024/6/5.
|
||||
//
|
||||
|
||||
import RTCRoomEngine
|
||||
|
||||
enum UserActions {
|
||||
static let key = "action.user"
|
||||
static let getSelfInfo = ActionTemplate(id: key.appending(".getSelfInfo"))
|
||||
static let updateSelfInfo = ActionTemplate(id: key.appending(".updateSelfInfo"), payloadType: UserInfo.self)
|
||||
static let fetchUserInfo = ActionTemplate(id: key.appending(".fetchUserInfo"), payloadType: String.self)
|
||||
static let updateAllUsers = ActionTemplate(id: key.appending(".updateAllUsers"), payloadType: [UserInfo].self)
|
||||
}
|
||||
32
TUIKit/TUIRoomKit/Source/Store/User/UserEffects.swift
Normal file
32
TUIKit/TUIRoomKit/Source/Store/User/UserEffects.swift
Normal file
@@ -0,0 +1,32 @@
|
||||
//
|
||||
// UserEffects.swift
|
||||
// TUIRoomKit
|
||||
//
|
||||
// Created by CY zhao on 2024/6/5.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import Combine
|
||||
import ImSDK_Plus
|
||||
import RTCRoomEngine
|
||||
|
||||
class UserEffects: Effects {
|
||||
typealias Environment = ServiceCenter
|
||||
|
||||
let getSelfInfo = Effect<Environment>.dispatchingOne { actions, environment in
|
||||
actions
|
||||
.wasCreated(from: UserActions.getSelfInfo)
|
||||
.flatMap { action -> AnyPublisher<Action, Never> in
|
||||
let selfId = environment.store?.selectCurrent(UserSelectors.getSelfId) ?? ""
|
||||
return environment.userService.fetchUserInfo(selfId)
|
||||
.map { userInfo in
|
||||
return UserActions.updateSelfInfo(payload: userInfo)
|
||||
}
|
||||
.catch { error -> Just<Action> in
|
||||
return Just(ErrorActions.throwError(payload: error))
|
||||
}
|
||||
.eraseToAnyPublisher()
|
||||
}
|
||||
.eraseToAnyPublisher()
|
||||
}
|
||||
}
|
||||
25
TUIKit/TUIRoomKit/Source/Store/User/UserReducer.swift
Normal file
25
TUIKit/TUIRoomKit/Source/Store/User/UserReducer.swift
Normal file
@@ -0,0 +1,25 @@
|
||||
//
|
||||
// UserReducer.swift
|
||||
// TUIRoomKit
|
||||
//
|
||||
// Created by CY zhao on 2024/6/5.
|
||||
//
|
||||
|
||||
import RTCRoomEngine
|
||||
import TUICore
|
||||
|
||||
let userReducer = Reducer<UserState>(
|
||||
ReduceOn(UserActions.getSelfInfo, reduce: { state, action in
|
||||
var selfInfo = UserInfo()
|
||||
selfInfo.userId = TUILogin.getUserID() ?? ""
|
||||
selfInfo.userName = TUILogin.getNickName() ?? ""
|
||||
selfInfo.avatarUrl = TUILogin.getFaceUrl() ?? ""
|
||||
state.selfInfo = selfInfo
|
||||
}),
|
||||
ReduceOn(UserActions.updateSelfInfo, reduce: { state, action in
|
||||
state.selfInfo = action.payload
|
||||
}),
|
||||
ReduceOn(UserActions.updateAllUsers, reduce: { state, action in
|
||||
state.allUsers = action.payload
|
||||
})
|
||||
)
|
||||
19
TUIKit/TUIRoomKit/Source/Store/User/UserSelectors.swift
Normal file
19
TUIKit/TUIRoomKit/Source/Store/User/UserSelectors.swift
Normal file
@@ -0,0 +1,19 @@
|
||||
//
|
||||
// UserSelectors.swift
|
||||
// TUIRoomKit
|
||||
//
|
||||
// Created by CY zhao on 2024/6/5.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
enum UserSelectors {
|
||||
static let getUserState = Selector(keyPath: \OperationState.userState)
|
||||
|
||||
static let getSelfInfo = Selector.with(getUserState, keyPath:\UserState.selfInfo)
|
||||
static let getSelfId = Selector.with(getSelfInfo, keyPath:\UserInfo.userId)
|
||||
static let getSelfAvatarURL = Selector.with(getSelfInfo, keyPath: \UserInfo.avatarUrl)
|
||||
static let getSelfUserName = Selector.with(getSelfInfo, keyPath: \UserInfo.userName)
|
||||
static let getAllUsers = Selector.with(getUserState, keyPath: \UserState.allUsers)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user