feat: 更新动态相关数据模型及视图组件
- 在DynamicsModels.swift中为动态响应结构和列表数据添加Sendable协议,提升并发安全性。 - 在FeedListFeature.swift中实现动态内容的加载逻辑,集成API请求以获取最新动态。 - 在FeedListView.swift中新增动态内容列表展示,优化用户交互体验。 - 在MeView.swift中添加设置按钮,支持弹出设置视图。 - 在SettingView.swift中新增COS上传测试功能,允许用户测试图片上传至腾讯云COS。 - 在OptimizedDynamicCardView.swift中实现优化的动态卡片组件,提升动态展示效果。
This commit is contained in:
@@ -1,12 +1,16 @@
|
||||
import Foundation
|
||||
import ComposableArchitecture
|
||||
|
||||
struct FeedListFeature: Reducer {
|
||||
@Reducer
|
||||
struct FeedListFeature {
|
||||
@Dependency(\.apiService) var apiService
|
||||
struct State: Equatable {
|
||||
var feeds: [Feed] = [] // 预留 feed 内容
|
||||
var isLoading: Bool = false
|
||||
var error: String? = nil
|
||||
var isEditFeedPresented: Bool = false // 新增:控制 EditFeedView 弹窗
|
||||
// 新增:动态内容
|
||||
var moments: [MomentsInfo] = []
|
||||
}
|
||||
|
||||
enum Action: Equatable {
|
||||
@@ -15,13 +19,41 @@ struct FeedListFeature: Reducer {
|
||||
case loadMore
|
||||
case editFeedButtonTapped // 新增:点击 add 按钮
|
||||
case editFeedDismissed // 新增:关闭编辑页
|
||||
// 新增:动态内容相关
|
||||
case fetchFeeds
|
||||
case fetchFeedsResponse(TaskResult<MomentsLatestResponse>)
|
||||
// 预留后续 Action
|
||||
}
|
||||
|
||||
func reduce(into state: inout State, action: Action) -> Effect<Action> {
|
||||
switch action {
|
||||
case .onAppear:
|
||||
// 预留数据加载逻辑
|
||||
// 页面展示时自动请求 feed 数据
|
||||
return .send(.fetchFeeds)
|
||||
case .fetchFeeds:
|
||||
state.isLoading = true
|
||||
state.error = nil
|
||||
// 发起 API 请求
|
||||
return .run { [apiService] send in
|
||||
await send(.fetchFeedsResponse(TaskResult {
|
||||
let request = LatestDynamicsRequest(dynamicId: "", pageSize: 20, types: [.text, .picture])
|
||||
return try await apiService.request(request)
|
||||
}))
|
||||
}
|
||||
case let .fetchFeedsResponse(.success(response)):
|
||||
state.isLoading = false
|
||||
if let list = response.data?.dynamicList {
|
||||
state.moments = list
|
||||
state.error = nil
|
||||
} else {
|
||||
state.moments = []
|
||||
state.error = response.message
|
||||
}
|
||||
return .none
|
||||
case let .fetchFeedsResponse(.failure(error)):
|
||||
state.isLoading = false
|
||||
state.moments = []
|
||||
state.error = error.localizedDescription
|
||||
return .none
|
||||
case .reload:
|
||||
// 预留刷新逻辑
|
||||
|
Reference in New Issue
Block a user