FrontPageView.swift 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import SwiftUI
  2. struct FrontPageView: View {
  3. @State private var viewModel = FrontPageViewModel()
  4. var body: some View {
  5. HStack(spacing: 0) {
  6. SidebarView(viewModel: viewModel)
  7. mainContent
  8. .frame(maxWidth: .infinity, maxHeight: .infinity)
  9. }
  10. .frame(minWidth: 900, minHeight: 700)
  11. .background(AppTheme.background)
  12. }
  13. @ViewBuilder
  14. private var mainContent: some View {
  15. ZStack {
  16. RedditWebView(
  17. url: viewModel.redditURL,
  18. reloadTrigger: viewModel.redditReloadTrigger
  19. )
  20. .id("reddit-webview")
  21. .frame(maxWidth: .infinity, maxHeight: .infinity)
  22. .allowsHitTesting(viewModel.isRedditActive)
  23. .accessibilityHidden(!viewModel.isRedditActive)
  24. if !viewModel.isRedditActive, let item = viewModel.selectedNavItem {
  25. ToolPlaceholderView(item: item)
  26. }
  27. }
  28. .background(AppTheme.background)
  29. }
  30. }
  31. private struct ToolPlaceholderView: View {
  32. let item: SidebarNavItem
  33. var body: some View {
  34. VStack(spacing: 12) {
  35. ModernSidebarIconView(kind: item.iconKind, size: 56)
  36. Text(item.title)
  37. .font(.system(size: 20, weight: .semibold))
  38. .foregroundStyle(AppTheme.textPrimary)
  39. Text(item.subtitle)
  40. .font(.system(size: 13))
  41. .foregroundStyle(AppTheme.textSecondary)
  42. }
  43. .frame(maxWidth: .infinity, maxHeight: .infinity)
  44. .background(AppTheme.background)
  45. }
  46. }
  47. #Preview {
  48. FrontPageView()
  49. .frame(width: 1200, height: 900)
  50. }