| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import SwiftUI
- struct FrontPageView: View {
- @State private var viewModel = FrontPageViewModel()
- @State private var postGeneratorViewModel = PostGeneratorViewModel()
- @State private var titleOptimizerViewModel = TitleOptimizerViewModel()
- var body: some View {
- HStack(spacing: 0) {
- SidebarView(viewModel: viewModel)
- mainContent
- .frame(maxWidth: .infinity, maxHeight: .infinity)
- }
- .frame(minWidth: AppWindow.minWidth, minHeight: AppWindow.minHeight)
- .background(AppTheme.background)
- }
- @ViewBuilder
- private var mainContent: some View {
- ZStack {
- RedditWebView(
- url: viewModel.redditLoadURL,
- reloadTrigger: viewModel.redditReloadTrigger
- )
- .id("reddit-webview")
- .frame(maxWidth: .infinity, maxHeight: .infinity)
- .allowsHitTesting(viewModel.isRedditActive)
- .accessibilityHidden(!viewModel.isRedditActive)
- if !viewModel.isRedditActive, let item = viewModel.selectedNavItem {
- toolContent(for: item)
- }
- }
- .background(AppTheme.background)
- }
- @ViewBuilder
- private func toolContent(for item: SidebarNavItem) -> some View {
- switch item.iconKind {
- case .postGenerator:
- PostGeneratorView(viewModel: postGeneratorViewModel) { url in
- viewModel.openReddit(at: url)
- }
- case .titleOptimizer:
- TitleOptimizerView(viewModel: titleOptimizerViewModel)
- default:
- ToolPlaceholderView(item: item)
- }
- }
- }
- private struct ToolPlaceholderView: View {
- let item: SidebarNavItem
- var body: some View {
- VStack(spacing: 12) {
- ModernSidebarIconView(kind: item.iconKind, size: 56)
- Text(item.title)
- .font(.system(size: 20, weight: .semibold))
- .foregroundStyle(AppTheme.textPrimary)
- Text(item.subtitle)
- .font(.system(size: 13))
- .foregroundStyle(AppTheme.textSecondary)
- }
- .frame(maxWidth: .infinity, maxHeight: .infinity)
- .background(AppTheme.background)
- }
- }
- #Preview {
- FrontPageView()
- .frame(width: AppWindow.width, height: AppWindow.height)
- }
|