83 lines
2.8 KiB
Swift
83 lines
2.8 KiB
Swift
import SwiftUI
|
||
|
||
struct ContentView: View {
|
||
@StateObject private var viewModel = MainViewModel()
|
||
@Environment(\.scenePhase) private var scenePhase
|
||
|
||
var body: some View {
|
||
NavigationStack {
|
||
Form {
|
||
Section("Paylaşılan Link") {
|
||
TextField("https://www.netflix.com/tr/title/...", text: $viewModel.sharedURL)
|
||
.textInputAutocapitalization(.never)
|
||
.autocorrectionDisabled(true)
|
||
.keyboardType(.URL)
|
||
|
||
Button("Backend'den Getir") {
|
||
Task { await viewModel.fetch() }
|
||
}
|
||
.disabled(viewModel.isLoading)
|
||
}
|
||
|
||
if viewModel.isLoading {
|
||
Section {
|
||
HStack {
|
||
ProgressView()
|
||
Text("Veri alınıyor...")
|
||
}
|
||
}
|
||
}
|
||
|
||
if let error = viewModel.errorMessage {
|
||
Section("Hata") {
|
||
Text(error)
|
||
.foregroundStyle(.red)
|
||
}
|
||
}
|
||
|
||
if let result = viewModel.result {
|
||
Section("Sonuç") {
|
||
KeyValueRow(key: "Provider", value: result.provider)
|
||
KeyValueRow(key: "Title", value: result.title)
|
||
KeyValueRow(key: "Year", value: result.year.map(String.init) ?? "-")
|
||
KeyValueRow(key: "Type", value: result.type)
|
||
KeyValueRow(key: "Age Rating", value: result.ageRating ?? "-")
|
||
KeyValueRow(key: "Current Season", value: result.currentSeason.map(String.init) ?? "-")
|
||
KeyValueRow(key: "Genres", value: result.genres.joined(separator: ", "))
|
||
KeyValueRow(key: "Cast", value: result.cast.joined(separator: ", "))
|
||
KeyValueRow(key: "Plot", value: result.plot ?? "-")
|
||
}
|
||
}
|
||
}
|
||
.navigationTitle("Ratebubble")
|
||
}
|
||
.onAppear {
|
||
viewModel.consumeSharedURLIfAny()
|
||
}
|
||
.onOpenURL { _ in
|
||
viewModel.consumeSharedURLIfAny()
|
||
}
|
||
.onChange(of: scenePhase) { phase in
|
||
if phase == .active {
|
||
viewModel.consumeSharedURLIfAny()
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
private struct KeyValueRow: View {
|
||
let key: String
|
||
let value: String
|
||
|
||
var body: some View {
|
||
VStack(alignment: .leading, spacing: 4) {
|
||
Text(key)
|
||
.font(.caption)
|
||
.foregroundStyle(.secondary)
|
||
Text(value.isEmpty ? "-" : value)
|
||
.font(.body)
|
||
}
|
||
.padding(.vertical, 2)
|
||
}
|
||
}
|