111 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
//
 | 
						|
//  DiscoveryViews.swift
 | 
						|
//  WatchRunner Watch App
 | 
						|
//
 | 
						|
//  Created by LittleSheep on 2025/10/29.
 | 
						|
//
 | 
						|
 | 
						|
import SwiftUI
 | 
						|
 | 
						|
struct DiscoveryView: View {
 | 
						|
    let discoveryData: DiscoveryData
 | 
						|
 | 
						|
    var body: some View {
 | 
						|
        NavigationLink(destination: DiscoveryDetailView(discoveryData: discoveryData)) {
 | 
						|
            VStack(alignment: .leading) {
 | 
						|
                Text("Discovery")
 | 
						|
                    .font(.headline)
 | 
						|
                Text("\(discoveryData.items.count) new items to discover")
 | 
						|
                    .font(.subheadline)
 | 
						|
                    .foregroundColor(.secondary)
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
struct DiscoveryDetailView: View {
 | 
						|
    let discoveryData: DiscoveryData
 | 
						|
 | 
						|
    var body: some View {
 | 
						|
        List(discoveryData.items) { item in
 | 
						|
            NavigationLink(destination: destinationView(for: item)) {
 | 
						|
                itemView(for: item)
 | 
						|
            }
 | 
						|
        }
 | 
						|
        .navigationTitle("Discovery")
 | 
						|
    }
 | 
						|
 | 
						|
    @ViewBuilder
 | 
						|
    private func itemView(for item: DiscoveryItem) -> some View {
 | 
						|
        VStack(alignment: .leading) {
 | 
						|
            switch item.data {
 | 
						|
            case .realm(let realm):
 | 
						|
                Text("Realm").font(.headline)
 | 
						|
                Text(realm.name).foregroundColor(.secondary)
 | 
						|
            case .publisher(let publisher):
 | 
						|
                Text("Publisher").font(.headline)
 | 
						|
                Text(publisher.name).foregroundColor(.secondary)
 | 
						|
            case .article(let article):
 | 
						|
                Text("Article").font(.headline)
 | 
						|
                Text(article.title).foregroundColor(.secondary)
 | 
						|
            case .unknown:
 | 
						|
                Text("Unknown item")
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
    
 | 
						|
    @ViewBuilder
 | 
						|
    private func destinationView(for item: DiscoveryItem) -> some View {
 | 
						|
        switch item.data {
 | 
						|
        case .realm(let realm):
 | 
						|
            RealmDetailView(realm: realm)
 | 
						|
        case .publisher(let publisher):
 | 
						|
            PublisherDetailView(publisher: publisher)
 | 
						|
        case .article(let article):
 | 
						|
            ArticleDetailView(article: article)
 | 
						|
        case .unknown:
 | 
						|
            Text("Detail view not available")
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
struct RealmDetailView: View {
 | 
						|
    let realm: SnRealm
 | 
						|
    
 | 
						|
    var body: some View {
 | 
						|
        VStack(alignment: .leading, spacing: 8) {
 | 
						|
            Text(realm.name).font(.headline)
 | 
						|
            if let description = realm.description {
 | 
						|
                Text(description).font(.body)
 | 
						|
            }
 | 
						|
        }
 | 
						|
        .navigationTitle("Realm")
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
struct PublisherDetailView: View {
 | 
						|
    let publisher: SnPublisher
 | 
						|
    
 | 
						|
    var body: some View {
 | 
						|
        VStack(alignment: .leading, spacing: 8) {
 | 
						|
            Text(publisher.name).font(.headline)
 | 
						|
            if let description = publisher.description {
 | 
						|
                Text(description).font(.body)
 | 
						|
            }
 | 
						|
        }
 | 
						|
        .navigationTitle("Publisher")
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
struct ArticleDetailView: View {
 | 
						|
    let article: SnWebArticle
 | 
						|
    
 | 
						|
    var body: some View {
 | 
						|
        VStack(alignment: .leading, spacing: 8) {
 | 
						|
            Text(article.title).font(.headline)
 | 
						|
            Text(article.url).font(.caption).foregroundColor(.secondary)
 | 
						|
        }
 | 
						|
        .navigationTitle("Article")
 | 
						|
    }
 | 
						|
}
 |