IceCubesApp/Packages/Account/Sources/Account/StatusesLists/AccountStatusesListView.swift

51 lines
1.4 KiB
Swift
Raw Normal View History

2024-02-14 11:48:14 +00:00
import DesignSystem
import Env
import Models
2024-02-14 11:48:14 +00:00
import Network
import StatusKit
import SwiftUI
@MainActor
public struct AccountStatusesListView: View {
@Environment(Theme.self) private var theme
@Environment(Client.self) private var client
@Environment(RouterPath.self) private var routerPath
2024-02-14 11:48:14 +00:00
@State private var viewModel: AccountStatusesListViewModel
@State private var isLoaded = false
2024-02-14 11:48:14 +00:00
public init(mode: AccountStatusesListViewModel.Mode) {
_viewModel = .init(initialValue: .init(mode: mode))
}
2024-02-14 11:48:14 +00:00
public var body: some View {
List {
StatusesListView(fetcher: viewModel, client: client, routerPath: routerPath)
}
.listStyle(.plain)
#if !os(visionOS)
2024-02-14 11:48:14 +00:00
.scrollContentBackground(.hidden)
.background(theme.primaryBackgroundColor)
#endif
2024-02-14 11:48:14 +00:00
.navigationTitle(viewModel.mode.title)
.navigationBarTitleDisplayMode(.inline)
.refreshable {
await viewModel.fetchNewestStatuses(pullToRefresh: true)
}
.task {
guard !isLoaded else { return }
viewModel.client = client
await viewModel.fetchNewestStatuses(pullToRefresh: false)
isLoaded = true
}
2024-02-14 11:48:14 +00:00
.onChange(of: client.id) { _, _ in
isLoaded = false
viewModel.client = client
Task {
await viewModel.fetchNewestStatuses(pullToRefresh: false)
isLoaded = true
}
}
}
}