Просмотр исходного кода

Show full-screen loading state during journal search.

Make Journal Finder present a dedicated loading screen while requests are in progress so users get clear on-screen feedback instead of only a button label change.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 1 месяц назад
Родитель
Сommit
1fee424030
1 измененных файлов с 31 добавлено и 1 удалено
  1. 31 1
      gramora/Views/JournalFinderView.swift

+ 31 - 1
gramora/Views/JournalFinderView.swift

@@ -19,7 +19,13 @@ struct JournalFinderView: View {
             let dynamicBottomPadding = min(max(proxy.size.height * 0.04, 20), 40)
             let dynamicBottomPadding = min(max(proxy.size.height * 0.04, 20), 40)
 
 
             Group {
             Group {
-                if viewModel.hasResults, let result = viewModel.result {
+                if viewModel.isSearching {
+                    loadingLayout(
+                        horizontalPadding: dynamicHorizontalPadding,
+                        topPadding: AppTheme.brandLabelTopInset,
+                        bottomPadding: dynamicBottomPadding
+                    )
+                } else if viewModel.hasResults, let result = viewModel.result {
                     resultsLayout(
                     resultsLayout(
                         result: result,
                         result: result,
                         horizontalPadding: dynamicHorizontalPadding,
                         horizontalPadding: dynamicHorizontalPadding,
@@ -102,6 +108,30 @@ struct JournalFinderView: View {
         .padding(.bottom, bottomPadding)
         .padding(.bottom, bottomPadding)
     }
     }
 
 
+    private func loadingLayout(
+        horizontalPadding: CGFloat,
+        topPadding: CGFloat,
+        bottomPadding: CGFloat
+    ) -> some View {
+        VStack(spacing: 14) {
+            ProgressView()
+                .controlSize(.regular)
+
+            Text("Loading...")
+                .font(.system(size: 16, weight: .semibold))
+                .foregroundStyle(AppTheme.textPrimary)
+
+            Text("Searching journals for the best matches")
+                .font(.system(size: 14))
+                .foregroundStyle(AppTheme.textSecondary)
+        }
+        .frame(maxWidth: 1200, maxHeight: .infinity, alignment: .center)
+        .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center)
+        .padding(.horizontal, horizontalPadding)
+        .padding(.top, topPadding)
+        .padding(.bottom, bottomPadding)
+    }
+
     // MARK: - Results Layout
     // MARK: - Results Layout
 
 
     private func resultsLayout(
     private func resultsLayout(