Refactor views

This commit is contained in:
Arkadiusz Fal
2021-06-11 23:40:35 +02:00
parent 314c3b4968
commit 417ed0a8ee
8 changed files with 83 additions and 103 deletions

View File

@@ -7,26 +7,12 @@ struct ChannelView: View {
@Binding var tabSelection: TabSelection
var body: some View {
Group {
List {
ForEach(videos) { video in
VideoThumbnailView(video: video)
.contextMenu {
Button("Close \(video.author) channel", action: {
state.closeChannel()
tabSelection = .popular
})
}
.listRowInsets(listRowInsets)
VideosView(state: state, tabSelection: $tabSelection, videos: videos)
.task {
async {
provider.load()
}
}
.listStyle(GroupedListStyle())
}
.task {
async {
provider.load()
}
}
}
var listRowInsets: EdgeInsets {
@@ -43,10 +29,3 @@ struct ChannelView: View {
return provider.videos
}
}
//
// struct ChannelView_Previews: PreviewProvider {
// static var previews: some View {
// ChannelView()
// }
// }

View File

@@ -3,32 +3,19 @@ import SwiftUI
struct PopularVideosView: View {
@ObservedObject private var provider = PopularVideosProvider()
@ObservedObject var state: AppState
@Binding var tabSelection: TabSelection
var body: some View {
Group {
List {
ForEach(provider.videos) { video in
VideoThumbnailView(video: video)
.contextMenu {
Button("\(video.author) Channel", action: {
state.setChannel(from: video)
tabSelection = .channel
})
}
.listRowInsets(listRowInsets)
VideosView(state: state, tabSelection: $tabSelection, videos: videos)
.task {
async {
provider.load()
}
}
.listStyle(GroupedListStyle())
}
.task {
async {
provider.load()
}
}
}
var listRowInsets: EdgeInsets {
EdgeInsets(top: .zero, leading: .zero, bottom: .zero, trailing: 30)
var videos: [Video] {
return provider.videos
}
}

View File

@@ -2,17 +2,32 @@ import SwiftUI
struct SearchView: View {
@ObservedObject private var provider = SearchedVideosProvider()
@ObservedObject var state: AppState
@Binding var tabSelection: TabSelection
@State var query = ""
var body: some View {
SearchedVideosView(provider: provider, query: $query)
VideosView(state: state, tabSelection: $tabSelection, videos: videos)
.searchable(text: $query)
}
}
var videos: [Video] {
var newQuery = query
struct SearchView_Previews: PreviewProvider {
static var previews: some View {
SearchView()
if let url = URLComponents(string: query),
let queryItem = url.queryItems?.first(where: { item in item.name == "v" }),
let id = queryItem.value
{
newQuery = id
}
if newQuery != provider.query {
provider.query = newQuery
provider.load()
}
return provider.videos
}
}

View File

@@ -1,47 +0,0 @@
import SwiftUI
struct SearchedVideosView: View {
@ObservedObject var provider = SearchedVideosProvider()
@Binding var query: String
var body: some View {
Group {
List {
ForEach(videos) { video in
VideoThumbnailView(video: video)
.listRowInsets(listRowInsets)
}
}
.listStyle(GroupedListStyle())
}
}
var listRowInsets: EdgeInsets {
EdgeInsets(top: .zero, leading: .zero, bottom: .zero, trailing: 30)
}
var videos: [Video] {
var newQuery = query
if let url = URLComponents(string: query),
let queryItem = url.queryItems?.first(where: { item in item.name == "v" }),
let id = queryItem.value
{
newQuery = id
}
if newQuery != provider.query {
provider.query = newQuery
provider.load()
}
return provider.videos
}
}
// struct SearchedVideosView_Previews: PreviewProvider {
// static var previews: some View {
// SearchedVideosView()
// }
// }

46
Apple TV/VideosView.swift Normal file
View File

@@ -0,0 +1,46 @@
import SwiftUI
struct VideosView: View {
@ObservedObject var state: AppState
@Binding var tabSelection: TabSelection
var videos: [Video]
var body: some View {
Group {
List {
ForEach(videos) { video in
VideoThumbnailView(video: video)
.contextMenu {
if state.showingChannel {
closeChannelButton(name: video.author)
} else {
openChannelButton(from: video)
}
}
.listRowInsets(listRowInsets)
}
}
.listStyle(GroupedListStyle())
}
}
func closeChannelButton(name: String) -> some View {
Button("Close \(name) Channel", action: {
state.closeChannel()
tabSelection = .popular
})
}
func openChannelButton(from video: Video) -> some View {
Button("\(video.author) Channel", action: {
state.openChannel(from: video)
tabSelection = .channel
})
}
var listRowInsets: EdgeInsets {
EdgeInsets(top: .zero, leading: .zero, bottom: .zero, trailing: 30)
}
}