// // ConferenceMainViewStore.swift // TUIRoomKit // // Created by janejntang on 2024/9/3. // import Foundation import Combine protocol ConferenceMainViewStore { var isInternalCreation: Bool { get } func updateInternalCreation(isInternalCreation: Bool) func dispatch(action: Action) func select(_ selector: Selector) -> AnyPublisher func selectCurrent(_ selector: Selector) -> Value } class ConferenceMainViewStoreProvider { static let updateInternalCreation = ActionTemplate(id: "updateInternalCreation", payloadType: Bool.self) private(set) lazy var store: Store = Store(initialState: ConferenceMainViewState()) private let conferenceMainViewReducer = Reducer( ReduceOn(updateInternalCreation) { state,action in state.isInternalCreation = action.payload } ) init() { initStore() } deinit { store.unregister(reducer: conferenceMainViewReducer) } private func initStore() { store.register(reducer: conferenceMainViewReducer) } } extension ConferenceMainViewStoreProvider: ConferenceMainViewStore { var isInternalCreation: Bool { return store.state.isInternalCreation } func updateInternalCreation(isInternalCreation: Bool) { store.dispatch(action: ConferenceMainViewStoreProvider.updateInternalCreation(payload: isInternalCreation)) } func dispatch(action: Action) { store.dispatch(action: action) } func select(_ selector: Selector) -> AnyPublisher where Value : Equatable { return store.select(selector) .removeDuplicates() .eraseToAnyPublisher() } func selectCurrent(_ selector: Selector) -> Value { return store.selectCurrent(selector) } }