// // WatchMatchupFeature.swift // FantasyWatch Watch App // // Created by Claude Code // import ComposableArchitecture import Foundation @Reducer struct WatchMatchupFeature { @ObservableState struct State: Equatable { var matchup: Matchup? var roster: RosterStatus? var lastUpdate: Date? var isRefreshing = false } enum Action { case onAppear case receivedMatchupData(Matchup, RosterStatus, Date) case refreshTapped case refreshComplete } @Dependency(\.watchConnectivityClient) var watchConnectivityClient var body: some ReducerOf { Reduce { state, action in switch action { case .onAppear: return .run { send in for await (matchup, roster, timestamp) in watchConnectivityClient.matchupUpdates() { await send(.receivedMatchupData(matchup, roster, timestamp)) } } case let .receivedMatchupData(matchup, roster, timestamp): state.matchup = matchup state.roster = roster state.lastUpdate = timestamp state.isRefreshing = false return .none case .refreshTapped: state.isRefreshing = true return .run { send in try await watchConnectivityClient.requestRefresh() try await Task.sleep(for: .seconds(2)) await send(.refreshComplete) } catch: { error, send in await send(.refreshComplete) } case .refreshComplete: state.isRefreshing = false return .none } } } }