Minor UI improvements, state saving

This commit is contained in:
Arkadiusz Fal
2021-06-28 17:02:13 +02:00
parent b840974f08
commit f7d0e2131c
10 changed files with 52 additions and 60 deletions

View File

@@ -1,22 +1,28 @@
import Defaults
import Siesta
import SwiftUI
struct SearchView: View {
@State private var query = ""
@Default(.searchQuery) var query
@ObservedObject private var store = Store<[Video]>()
var body: some View {
VideosView(videos: store.collection)
.searchable(text: $query)
.onAppear {
queryChanged(new: query)
}
.onChange(of: query) { newQuery in
queryChanged(query, newQuery)
queryChanged(old: query, new: newQuery)
}
}
func queryChanged(_ old: String, _ new: String) {
let oldResource = resource(old)
oldResource.removeObservers(ownedBy: store)
func queryChanged(old: String? = nil, new: String) {
if old != nil {
let oldResource = resource(old!)
oldResource.removeObservers(ownedBy: store)
}
let resource = resource(new)
resource.addObserver(store)

View File

@@ -2,8 +2,6 @@ import Siesta
import SwiftUI
struct TrendingView: View {
@EnvironmentObject private var state: AppState
@State private var category: TrendingCategory = .default
@State private var country: Country = .pl
@State private var selectingCountry = false

View File

@@ -2,7 +2,7 @@ import SwiftUI
import URLImage
import URLImageStore
struct VideoListRow: View {
struct VideoListRowView: View {
@Environment(\.isFocused) private var focused: Bool
var video: Video

View File

@@ -1,8 +1,6 @@
import SwiftUI
struct VideosCellsView: View {
@EnvironmentObject private var state: AppState
@State private var columns: Int
init(videos: [Video], columns: Int = 3) {

View File

@@ -2,8 +2,6 @@ import Defaults
import SwiftUI
struct VideosListView: View {
@EnvironmentObject private var state: AppState
@Default(.tabSelection) var tabSelection
var videos: [Video]
@@ -12,7 +10,7 @@ struct VideosListView: View {
Section {
List {
ForEach(videos) { video in
VideoListRow(video: video)
VideoListRowView(video: video)
.contextMenu {
if tabSelection == .channel {
closeChannelButton(name: video.author)
@@ -29,15 +27,14 @@ struct VideosListView: View {
func openChannelButton(from video: Video) -> some View {
Button("\(video.author) Channel") {
state.openChannel(from: video)
Defaults[.openChannel] = Channel.from(video: video)
tabSelection = .channel
}
}
func closeChannelButton(name: String) -> some View {
Button("Close \(name) Channel") {
tabSelection = .popular
state.closeChannel()
Defaults.reset(.openChannel)
}
}