iMovies/iMovies/iMoviesMVVM-SwiftUI/Scenes/Home/HomeView.swift

88 lines
1.9 KiB
Swift

//
// ContentView.swift
// iMoviesMVVM-SwiftUI
//
// Created by Eyüp Yasuntimur on 6.01.2023.
//
import SwiftUI
import Kingfisher
import iMoviesAPI
struct HomeView: View {
@State var title: String = "Movies"
@ObservedObject internal var viewModel: HomeViewModel
var body: some View {
NavigationView {
HomeTableView(movies: viewModel.movies)
.navigationBarTitle(Text(title), displayMode: .inline)
}
}
}
// MARK: - HomeTableView
struct HomeTableView: View {
@State var isSelected: Bool = false
var movies: [MoviePresentation] = []
var body: some View {
List(movies, id: \.self) { movie in
NavigationLink(destination: DetailView(movie: movie)) {
HomeCellView(movie: movie)
.padding([.top, .bottom], 10)
}
}
.listStyle(PlainListStyle())
}
}
// MARK: - HomeCellView
struct HomeCellView: View {
@State var movie: MoviePresentation?
var body: some View {
HStack (spacing: 15) {
KFImage(movie?.imageUrl?.getURL())
.resizable()
.scaledToFill()
.frame(width: 100, height: 85, alignment: .center)
.cornerRadius(12)
VStack (alignment: .leading, spacing: 3) {
Text(movie?.title ?? "")
.font(AppFont.Medium.font(size: .mediumlarge))
.lineLimit(1)
Text(movie?.summary ?? "")
.font(AppFont.Medium.font(size: .smallmedium))
.lineLimit(3)
}
}
}
}
struct HomeView_Previews: PreviewProvider {
static var previews: some View {
HomeView(viewModel: HomeViewModel(service: app.service))
}
}
extension String {
func getURL() -> URL? {
return URL(string: self)
}
}