mirror of
https://github.com/Dimillian/IceCubesApp.git
synced 2024-05-17 03:52:42 +00:00
51 lines
1.4 KiB
Swift
51 lines
1.4 KiB
Swift
import DesignSystem
|
|
import Env
|
|
import Models
|
|
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
|
|
|
|
@State private var viewModel: AccountStatusesListViewModel
|
|
@State private var isLoaded = false
|
|
|
|
public init(mode: AccountStatusesListViewModel.Mode) {
|
|
_viewModel = .init(initialValue: .init(mode: mode))
|
|
}
|
|
|
|
public var body: some View {
|
|
List {
|
|
StatusesListView(fetcher: viewModel, client: client, routerPath: routerPath)
|
|
}
|
|
.listStyle(.plain)
|
|
#if !os(visionOS)
|
|
.scrollContentBackground(.hidden)
|
|
.background(theme.primaryBackgroundColor)
|
|
#endif
|
|
.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
|
|
}
|
|
.onChange(of: client.id) { _, _ in
|
|
isLoaded = false
|
|
viewModel.client = client
|
|
Task {
|
|
await viewModel.fetchNewestStatuses(pullToRefresh: false)
|
|
isLoaded = true
|
|
}
|
|
}
|
|
}
|
|
}
|