Files
SwiftUI/Examples/WWDCPlayer/WWDCPlayer/VideoRow.swift
Ivan Vorobei 5b758db8cd Add projects
2019-06-07 08:56:26 +03:00

87 lines
2.1 KiB
Swift
Executable File

//
// VideoRow.swift
// WWDCPlayer
//
// Created by sohee on 2019/06/06.
// Copyright © 2019 daybreak. All rights reserved.
//
import SwiftUI
struct VideoRow : View {
@EnvironmentObject var userData: UserData
var video: Video
var body: some View {
HStack {
VStack(alignment: .leading) {
TitleText(text: video.title)
HStack {
DescriptionText(text: "Session \(video.id)")
DescriptionText(text: "·")
DescriptionText(text: video.platformString)
}
}
Spacer()
HStack(spacing: 15) {
if userData.currentVideo == video {
Image(systemName: "music.mic")
}
Image(systemName: video.isFavorite ? "star.fill" : "star")
.foregroundColor(video.isFavorite ? Color.yellow : Color.gray)
.tapAction {
self.setFavorite(video: self.video)
}
}
}
.padding([.top, .bottom], 10)
.tapAction {
self.setCurrentVideo(video: self.video)
}
}
func setCurrentVideo(video: Video) {
guard self.userData.currentVideo != self.video else {
return
}
self.userData.currentVideo = self.video
}
func setFavorite(video: Video) {
guard let index = userData.videos.firstIndex (where: { $0 == video }) else {
return
}
self.userData.videos[index].isFavorite.toggle()
}
}
#if DEBUG
struct VideoRow_Previews : PreviewProvider {
static var previews: some View {
VideoRow(video: videoList[0])
.environmentObject(UserData())
}
}
#endif
struct TitleText: View {
let text: String
var body: some View {
return Text(text)
.color(.primary)
.bold()
}
}
struct DescriptionText : View {
let text: String
var body: some View {
return Text(text)
.font(.footnote).fontWeight(.semibold)
.color(.secondary)
}
}